@stackline/angular-multiselect-dropdown 21.0.0 → 21.0.2

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,14 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, HostListener, Output, Directive, Input, Pipe, TemplateRef, ContentChild, Component, forwardRef, ViewChild, NgModule } from '@angular/core';
3
- import * as i2 from '@angular/forms';
2
+ import { EventEmitter, HostListener, Output, Directive, Input, Injectable, Pipe, TemplateRef, ContentChild, Component, ViewEncapsulation, PLATFORM_ID, ElementRef, ViewChild, Inject, Optional, NgModule, forwardRef } from '@angular/core';
3
+ import * as i3 from '@angular/forms';
4
4
  import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule } from '@angular/forms';
5
- import * as i1 from '@angular/common';
6
- import { CommonModule } from '@angular/common';
5
+ import * as i2 from '@angular/common';
6
+ import { isPlatformServer, CommonModule } from '@angular/common';
7
+ import { Subject } from 'rxjs';
8
+ import * as tween from '@tweenjs/tween.js';
9
+ import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';
7
10
 
8
- class ListItem {
9
- id;
10
- itemName;
11
- }
12
11
  class MyException {
13
12
  status;
14
13
  body;
@@ -33,20 +32,20 @@ class ClickOutsideDirective {
33
32
  this.clickOutside.emit(event);
34
33
  }
35
34
  }
36
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ClickOutsideDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
37
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: ClickOutsideDirective, isStandalone: false, selector: "[clickOutside]", outputs: { clickOutside: "clickOutside" }, host: { listeners: { "document:click": "onClick($event,$event.target)", "document:touchstart": "onClick($event,$event.target)" } }, ngImport: i0 });
35
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ClickOutsideDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
36
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: ClickOutsideDirective, isStandalone: false, selector: "[clickOutside]", outputs: { clickOutside: "clickOutside" }, host: { listeners: { "document:pointerdown": "onClick($event,$event.target)", "document:touchstart": "onClick($event,$event.target)" } }, ngImport: i0 });
38
37
  }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ClickOutsideDirective, decorators: [{
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ClickOutsideDirective, decorators: [{
40
39
  type: Directive,
41
40
  args: [{
42
- standalone: false,
43
- selector: '[clickOutside]'
41
+ selector: '[clickOutside]',
42
+ standalone: false
44
43
  }]
45
44
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { clickOutside: [{
46
45
  type: Output
47
46
  }], onClick: [{
48
47
  type: HostListener,
49
- args: ['document:click', ['$event', '$event.target']]
48
+ args: ['document:pointerdown', ['$event', '$event.target']]
50
49
  }, {
51
50
  type: HostListener,
52
51
  args: ['document:touchstart', ['$event', '$event.target']]
@@ -60,14 +59,14 @@ class ScrollDirective {
60
59
  onClick(event) {
61
60
  this.scroll.emit(event);
62
61
  }
63
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ScrollDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
64
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: ScrollDirective, isStandalone: false, selector: "[scroll]", outputs: { scroll: "scroll" }, host: { listeners: { "scroll": "onClick($event)" } }, ngImport: i0 });
62
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ScrollDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
63
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: ScrollDirective, isStandalone: false, selector: "[scroll]", outputs: { scroll: "scroll" }, host: { listeners: { "scroll": "onClick($event)" } }, ngImport: i0 });
65
64
  }
66
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ScrollDirective, decorators: [{
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ScrollDirective, decorators: [{
67
66
  type: Directive,
68
67
  args: [{
69
- standalone: false,
70
- selector: '[scroll]'
68
+ selector: '[scroll]',
69
+ standalone: false
71
70
  }]
72
71
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { scroll: [{
73
72
  type: Output
@@ -87,87 +86,184 @@ class styleDirective {
87
86
  ngOnChanges() {
88
87
  this.el.nativeElement.style.top = this.styleVal;
89
88
  }
90
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: styleDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
91
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: styleDirective, isStandalone: false, selector: "[styleProp]", inputs: { styleVal: ["styleProp", "styleVal"] }, usesOnChanges: true, ngImport: i0 });
89
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: styleDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
90
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: styleDirective, isStandalone: false, selector: "[styleProp]", inputs: { styleVal: ["styleProp", "styleVal"] }, usesOnChanges: true, ngImport: i0 });
92
91
  }
93
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: styleDirective, decorators: [{
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: styleDirective, decorators: [{
94
93
  type: Directive,
95
94
  args: [{
96
- standalone: false,
97
- selector: '[styleProp]'
95
+ selector: '[styleProp]',
96
+ standalone: false
98
97
  }]
99
98
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { styleVal: [{
100
99
  type: Input,
101
100
  args: ['styleProp']
102
101
  }] } });
102
+ class setPosition {
103
+ el;
104
+ height;
105
+ constructor(el) {
106
+ this.el = el;
107
+ }
108
+ ngOnInit() {
109
+ if (this.height) {
110
+ this.el.nativeElement.style.bottom = parseInt(this.height + 15 + "") + 'px';
111
+ }
112
+ }
113
+ ngOnChanges() {
114
+ if (this.height) {
115
+ this.el.nativeElement.style.bottom = parseInt(this.height + 15 + "") + 'px';
116
+ }
117
+ }
118
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: setPosition, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
119
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: setPosition, isStandalone: false, selector: "[setPosition]", inputs: { height: ["setPosition", "height"] }, usesOnChanges: true, ngImport: i0 });
120
+ }
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: setPosition, decorators: [{
122
+ type: Directive,
123
+ args: [{
124
+ selector: '[setPosition]',
125
+ standalone: false
126
+ }]
127
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { height: [{
128
+ type: Input,
129
+ args: ['setPosition']
130
+ }] } });
131
+
132
+ class DataService {
133
+ filteredData = [];
134
+ subject = new Subject();
135
+ setData(data) {
136
+ this.filteredData = data;
137
+ this.subject.next(data);
138
+ }
139
+ getData() {
140
+ return this.subject.asObservable();
141
+ }
142
+ getFilteredData() {
143
+ if (this.filteredData && this.filteredData.length > 0) {
144
+ return this.filteredData;
145
+ }
146
+ else {
147
+ return [];
148
+ }
149
+ }
150
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: DataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
151
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: DataService });
152
+ }
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: DataService, decorators: [{
154
+ type: Injectable
155
+ }] });
103
156
 
104
157
  class ListFilterPipe {
105
- transform(items, filter) {
106
- if (!items || !filter) {
158
+ ds;
159
+ filteredList = [];
160
+ constructor(ds) {
161
+ this.ds = ds;
162
+ }
163
+ transform(items, filter, searchBy) {
164
+ if (!items || !filter || filter == "") {
107
165
  return items;
108
166
  }
109
- return items.filter((item) => this.applyFilter(item, filter));
167
+ this.filteredList = items.filter((item) => this.applyFilter(item, filter, searchBy));
168
+ return this.filteredList;
110
169
  }
111
- applyFilter(item, filter) {
170
+ applyFilter(item, filter, searchBy) {
112
171
  let found = false;
113
- for (var prop in item) {
114
- if (filter) {
115
- if (item[prop].toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0) {
116
- found = true;
172
+ if (searchBy.length > 0) {
173
+ if (item.grpTitle) {
174
+ found = true;
175
+ }
176
+ else {
177
+ for (var t = 0; t < searchBy.length; t++) {
178
+ if (filter && item[searchBy[t]] && item[searchBy[t]] != "") {
179
+ if (item[searchBy[t]].toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0) {
180
+ found = true;
181
+ }
182
+ }
117
183
  }
118
184
  }
119
- else
185
+ }
186
+ else {
187
+ if (item.grpTitle) {
120
188
  found = true;
189
+ }
190
+ else {
191
+ for (var prop in item) {
192
+ if (filter && item[prop]) {
193
+ if (item[prop].toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0) {
194
+ found = true;
195
+ }
196
+ }
197
+ }
198
+ }
121
199
  }
122
200
  return found;
123
201
  }
124
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ListFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
125
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.14", ngImport: i0, type: ListFilterPipe, isStandalone: false, name: "listFilter", pure: false });
202
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ListFilterPipe, deps: [{ token: DataService }], target: i0.ɵɵFactoryTarget.Pipe });
203
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: ListFilterPipe, isStandalone: false, name: "listFilter" });
126
204
  }
127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ListFilterPipe, decorators: [{
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: ListFilterPipe, decorators: [{
128
206
  type: Pipe,
129
207
  args: [{
130
- standalone: false,
131
208
  name: 'listFilter',
132
- pure: false
209
+ pure: true,
210
+ standalone: false
133
211
  }]
134
- }] });
212
+ }], ctorParameters: () => [{ type: DataService }] });
135
213
 
136
214
  class Item {
137
215
  template;
138
216
  constructor() {
139
217
  }
140
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: Item, deps: [], target: i0.ɵɵFactoryTarget.Component });
141
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.14", type: Item, isStandalone: false, selector: "c-item", queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: ``, isInline: true });
218
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: Item, deps: [], target: i0.ɵɵFactoryTarget.Component });
219
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: Item, isStandalone: false, selector: "c-item", queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true, static: true }], ngImport: i0, template: ``, isInline: true });
142
220
  }
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: Item, decorators: [{
221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: Item, decorators: [{
144
222
  type: Component,
145
223
  args: [{
146
- standalone: false,
147
224
  selector: 'c-item',
148
- template: ``
225
+ template: ``,
226
+ standalone: false
149
227
  }]
150
228
  }], ctorParameters: () => [], propDecorators: { template: [{
151
229
  type: ContentChild,
152
- args: [TemplateRef, { static: false }]
230
+ args: [TemplateRef, { static: true }]
153
231
  }] } });
154
232
  class Badge {
155
233
  template;
156
234
  constructor() {
157
235
  }
158
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: Badge, deps: [], target: i0.ɵɵFactoryTarget.Component });
159
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.14", type: Badge, isStandalone: false, selector: "c-badge", queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: ``, isInline: true });
236
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: Badge, deps: [], target: i0.ɵɵFactoryTarget.Component });
237
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: Badge, isStandalone: false, selector: "c-badge", queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true, static: true }], ngImport: i0, template: ``, isInline: true });
160
238
  }
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: Badge, decorators: [{
239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: Badge, decorators: [{
162
240
  type: Component,
163
241
  args: [{
164
- standalone: false,
165
242
  selector: 'c-badge',
166
- template: ``
243
+ template: ``,
244
+ standalone: false
245
+ }]
246
+ }], ctorParameters: () => [], propDecorators: { template: [{
247
+ type: ContentChild,
248
+ args: [TemplateRef, { static: true }]
249
+ }] } });
250
+ class Search {
251
+ template;
252
+ constructor() {
253
+ }
254
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: Search, deps: [], target: i0.ɵɵFactoryTarget.Component });
255
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: Search, isStandalone: false, selector: "c-search", queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true, static: true }], ngImport: i0, template: ``, isInline: true });
256
+ }
257
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: Search, decorators: [{
258
+ type: Component,
259
+ args: [{
260
+ selector: 'c-search',
261
+ template: ``,
262
+ standalone: false
167
263
  }]
168
264
  }], ctorParameters: () => [], propDecorators: { template: [{
169
265
  type: ContentChild,
170
- args: [TemplateRef, { static: false }]
266
+ args: [TemplateRef, { static: true }]
171
267
  }] } });
172
268
  class TemplateRenderer {
173
269
  viewContainer;
@@ -186,21 +282,1240 @@ class TemplateRenderer {
186
282
  ngOnDestroy() {
187
283
  this.view.destroy();
188
284
  }
189
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TemplateRenderer, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
190
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.14", type: TemplateRenderer, isStandalone: false, selector: "c-templateRenderer", inputs: { data: "data", item: "item" }, ngImport: i0, template: ``, isInline: true });
285
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: TemplateRenderer, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
286
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: TemplateRenderer, isStandalone: false, selector: "c-templateRenderer", inputs: { data: "data", item: "item" }, ngImport: i0, template: ``, isInline: true });
287
+ }
288
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: TemplateRenderer, decorators: [{
289
+ type: Component,
290
+ args: [{
291
+ selector: 'c-templateRenderer',
292
+ template: ``,
293
+ standalone: false
294
+ }]
295
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { data: [{
296
+ type: Input
297
+ }], item: [{
298
+ type: Input
299
+ }] } });
300
+ class CIcon {
301
+ name;
302
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CIcon, deps: [], target: i0.ɵɵFactoryTarget.Component });
303
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: CIcon, isStandalone: false, selector: "c-icon", inputs: { name: "name" }, ngImport: i0, template: `<svg *ngIf="name == 'remove'" width="100%" height="100%" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
304
+ viewBox="0 0 47.971 47.971" style="enable-background:new 0 0 47.971 47.971;" xml:space="preserve">
305
+ <g>
306
+ <path d="M28.228,23.986L47.092,5.122c1.172-1.171,1.172-3.071,0-4.242c-1.172-1.172-3.07-1.172-4.242,0L23.986,19.744L5.121,0.88
307
+ c-1.172-1.172-3.07-1.172-4.242,0c-1.172,1.171-1.172,3.071,0,4.242l18.865,18.864L0.879,42.85c-1.172,1.171-1.172,3.071,0,4.242
308
+ C1.465,47.677,2.233,47.97,3,47.97s1.535-0.293,2.121-0.879l18.865-18.864L42.85,47.091c0.586,0.586,1.354,0.879,2.121,0.879
309
+ s1.535-0.293,2.121-0.879c1.172-1.171,1.172-3.071,0-4.242L28.228,23.986z"/>
310
+ </g>
311
+ </svg>
312
+ <svg *ngIf="name == 'angle-down'" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
313
+ width="100%" height="100%" viewBox="0 0 612 612" style="enable-background:new 0 0 612 612;" xml:space="preserve">
314
+ <g>
315
+ <g id="_x31_0_34_">
316
+ <g>
317
+ <path d="M604.501,134.782c-9.999-10.05-26.222-10.05-36.221,0L306.014,422.558L43.721,134.782
318
+ c-9.999-10.05-26.223-10.05-36.222,0s-9.999,26.35,0,36.399l279.103,306.241c5.331,5.357,12.422,7.652,19.386,7.296
319
+ c6.988,0.356,14.055-1.939,19.386-7.296l279.128-306.268C614.5,161.106,614.5,144.832,604.501,134.782z"/>
320
+ </g>
321
+ </g>
322
+ </g>
323
+ </svg>
324
+ <svg *ngIf="name == 'angle-up'" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
325
+ width="100%" height="100%" viewBox="0 0 612 612" style="enable-background:new 0 0 612 612;" xml:space="preserve">
326
+ <g>
327
+ <g id="_x39__30_">
328
+ <g>
329
+ <path d="M604.501,440.509L325.398,134.956c-5.331-5.357-12.423-7.627-19.386-7.27c-6.989-0.357-14.056,1.913-19.387,7.27
330
+ L7.499,440.509c-9.999,10.024-9.999,26.298,0,36.323s26.223,10.024,36.222,0l262.293-287.164L568.28,476.832
331
+ c9.999,10.024,26.222,10.024,36.221,0C614.5,466.809,614.5,450.534,604.501,440.509z"/>
332
+ </g>
333
+ </g>
334
+ </g>
335
+
336
+ </svg>
337
+ <svg *ngIf="name == 'search'" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
338
+ width="100%" height="100%" viewBox="0 0 615.52 615.52" style="enable-background:new 0 0 615.52 615.52;"
339
+ xml:space="preserve">
340
+ <g>
341
+ <g>
342
+ <g id="Search__x28_and_thou_shall_find_x29_">
343
+ <g>
344
+ <path d="M602.531,549.736l-184.31-185.368c26.679-37.72,42.528-83.729,42.528-133.548C460.75,103.35,357.997,0,231.258,0
345
+ C104.518,0,1.765,103.35,1.765,230.82c0,127.47,102.753,230.82,229.493,230.82c49.53,0,95.271-15.944,132.78-42.777
346
+ l184.31,185.366c7.482,7.521,17.292,11.291,27.102,11.291c9.812,0,19.62-3.77,27.083-11.291
347
+ C617.496,589.188,617.496,564.777,602.531,549.736z M355.9,319.763l-15.042,21.273L319.7,356.174
348
+ c-26.083,18.658-56.667,28.526-88.442,28.526c-84.365,0-152.995-69.035-152.995-153.88c0-84.846,68.63-153.88,152.995-153.88
349
+ s152.996,69.034,152.996,153.88C384.271,262.769,374.462,293.526,355.9,319.763z"/>
350
+ </g>
351
+ </g>
352
+ </g>
353
+ </g>
354
+
355
+ </svg>
356
+ <svg *ngIf="name == 'clear'" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
357
+ viewBox="0 0 51.976 51.976" style="enable-background:new 0 0 51.976 51.976;" xml:space="preserve">
358
+ <g>
359
+ <path d="M44.373,7.603c-10.137-10.137-26.632-10.138-36.77,0c-10.138,10.138-10.137,26.632,0,36.77s26.632,10.138,36.77,0
360
+ C54.51,34.235,54.51,17.74,44.373,7.603z M36.241,36.241c-0.781,0.781-2.047,0.781-2.828,0l-7.425-7.425l-7.778,7.778
361
+ c-0.781,0.781-2.047,0.781-2.828,0c-0.781-0.781-0.781-2.047,0-2.828l7.778-7.778l-7.425-7.425c-0.781-0.781-0.781-2.048,0-2.828
362
+ c0.781-0.781,2.047-0.781,2.828,0l7.425,7.425l7.071-7.071c0.781-0.781,2.047-0.781,2.828,0c0.781,0.781,0.781,2.047,0,2.828
363
+ l-7.071,7.071l7.425,7.425C37.022,34.194,37.022,35.46,36.241,36.241z"/>
364
+ </g>
365
+ </svg>`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
366
+ }
367
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: CIcon, decorators: [{
368
+ type: Component,
369
+ args: [{
370
+ selector: 'c-icon',
371
+ standalone: false,
372
+ template: `<svg *ngIf="name == 'remove'" width="100%" height="100%" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
373
+ viewBox="0 0 47.971 47.971" style="enable-background:new 0 0 47.971 47.971;" xml:space="preserve">
374
+ <g>
375
+ <path d="M28.228,23.986L47.092,5.122c1.172-1.171,1.172-3.071,0-4.242c-1.172-1.172-3.07-1.172-4.242,0L23.986,19.744L5.121,0.88
376
+ c-1.172-1.172-3.07-1.172-4.242,0c-1.172,1.171-1.172,3.071,0,4.242l18.865,18.864L0.879,42.85c-1.172,1.171-1.172,3.071,0,4.242
377
+ C1.465,47.677,2.233,47.97,3,47.97s1.535-0.293,2.121-0.879l18.865-18.864L42.85,47.091c0.586,0.586,1.354,0.879,2.121,0.879
378
+ s1.535-0.293,2.121-0.879c1.172-1.171,1.172-3.071,0-4.242L28.228,23.986z"/>
379
+ </g>
380
+ </svg>
381
+ <svg *ngIf="name == 'angle-down'" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
382
+ width="100%" height="100%" viewBox="0 0 612 612" style="enable-background:new 0 0 612 612;" xml:space="preserve">
383
+ <g>
384
+ <g id="_x31_0_34_">
385
+ <g>
386
+ <path d="M604.501,134.782c-9.999-10.05-26.222-10.05-36.221,0L306.014,422.558L43.721,134.782
387
+ c-9.999-10.05-26.223-10.05-36.222,0s-9.999,26.35,0,36.399l279.103,306.241c5.331,5.357,12.422,7.652,19.386,7.296
388
+ c6.988,0.356,14.055-1.939,19.386-7.296l279.128-306.268C614.5,161.106,614.5,144.832,604.501,134.782z"/>
389
+ </g>
390
+ </g>
391
+ </g>
392
+ </svg>
393
+ <svg *ngIf="name == 'angle-up'" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
394
+ width="100%" height="100%" viewBox="0 0 612 612" style="enable-background:new 0 0 612 612;" xml:space="preserve">
395
+ <g>
396
+ <g id="_x39__30_">
397
+ <g>
398
+ <path d="M604.501,440.509L325.398,134.956c-5.331-5.357-12.423-7.627-19.386-7.27c-6.989-0.357-14.056,1.913-19.387,7.27
399
+ L7.499,440.509c-9.999,10.024-9.999,26.298,0,36.323s26.223,10.024,36.222,0l262.293-287.164L568.28,476.832
400
+ c9.999,10.024,26.222,10.024,36.221,0C614.5,466.809,614.5,450.534,604.501,440.509z"/>
401
+ </g>
402
+ </g>
403
+ </g>
404
+
405
+ </svg>
406
+ <svg *ngIf="name == 'search'" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
407
+ width="100%" height="100%" viewBox="0 0 615.52 615.52" style="enable-background:new 0 0 615.52 615.52;"
408
+ xml:space="preserve">
409
+ <g>
410
+ <g>
411
+ <g id="Search__x28_and_thou_shall_find_x29_">
412
+ <g>
413
+ <path d="M602.531,549.736l-184.31-185.368c26.679-37.72,42.528-83.729,42.528-133.548C460.75,103.35,357.997,0,231.258,0
414
+ C104.518,0,1.765,103.35,1.765,230.82c0,127.47,102.753,230.82,229.493,230.82c49.53,0,95.271-15.944,132.78-42.777
415
+ l184.31,185.366c7.482,7.521,17.292,11.291,27.102,11.291c9.812,0,19.62-3.77,27.083-11.291
416
+ C617.496,589.188,617.496,564.777,602.531,549.736z M355.9,319.763l-15.042,21.273L319.7,356.174
417
+ c-26.083,18.658-56.667,28.526-88.442,28.526c-84.365,0-152.995-69.035-152.995-153.88c0-84.846,68.63-153.88,152.995-153.88
418
+ s152.996,69.034,152.996,153.88C384.271,262.769,374.462,293.526,355.9,319.763z"/>
419
+ </g>
420
+ </g>
421
+ </g>
422
+ </g>
423
+
424
+ </svg>
425
+ <svg *ngIf="name == 'clear'" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
426
+ viewBox="0 0 51.976 51.976" style="enable-background:new 0 0 51.976 51.976;" xml:space="preserve">
427
+ <g>
428
+ <path d="M44.373,7.603c-10.137-10.137-26.632-10.138-36.77,0c-10.138,10.138-10.137,26.632,0,36.77s26.632,10.138,36.77,0
429
+ C54.51,34.235,54.51,17.74,44.373,7.603z M36.241,36.241c-0.781,0.781-2.047,0.781-2.828,0l-7.425-7.425l-7.778,7.778
430
+ c-0.781,0.781-2.047,0.781-2.828,0c-0.781-0.781-0.781-2.047,0-2.828l7.778-7.778l-7.425-7.425c-0.781-0.781-0.781-2.048,0-2.828
431
+ c0.781-0.781,2.047-0.781,2.828,0l7.425,7.425l7.071-7.071c0.781-0.781,2.047-0.781,2.828,0c0.781,0.781,0.781,2.047,0,2.828
432
+ l-7.071,7.071l7.425,7.425C37.022,34.194,37.022,35.46,36.241,36.241z"/>
433
+ </g>
434
+ </svg>`,
435
+ encapsulation: ViewEncapsulation.None,
436
+ }]
437
+ }], propDecorators: { name: [{
438
+ type: Input
439
+ }] } });
440
+
441
+ function VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY() {
442
+ return {
443
+ scrollThrottlingTime: 0,
444
+ scrollDebounceTime: 0,
445
+ scrollAnimationTime: 750,
446
+ checkResizeInterval: 1000,
447
+ resizeBypassRefreshThreshold: 5,
448
+ modifyOverflowStyleOfParentScroll: true,
449
+ stripedTable: false
450
+ };
451
+ }
452
+ class VirtualScrollerComponent {
453
+ element;
454
+ renderer;
455
+ zone;
456
+ changeDetectorRef;
457
+ viewPortItems;
458
+ window = window;
459
+ get viewPortInfo() {
460
+ let pageInfo = this.previousViewPort || {};
461
+ return {
462
+ startIndex: pageInfo.startIndex || 0,
463
+ endIndex: pageInfo.endIndex || 0,
464
+ scrollStartPosition: pageInfo.scrollStartPosition || 0,
465
+ scrollEndPosition: pageInfo.scrollEndPosition || 0,
466
+ maxScrollPosition: pageInfo.maxScrollPosition || 0,
467
+ startIndexWithBuffer: pageInfo.startIndexWithBuffer || 0,
468
+ endIndexWithBuffer: pageInfo.endIndexWithBuffer || 0
469
+ };
470
+ }
471
+ executeRefreshOutsideAngularZone = false;
472
+ _enableUnequalChildrenSizes = false;
473
+ get enableUnequalChildrenSizes() {
474
+ return this._enableUnequalChildrenSizes;
475
+ }
476
+ set enableUnequalChildrenSizes(value) {
477
+ if (this._enableUnequalChildrenSizes === value) {
478
+ return;
479
+ }
480
+ this._enableUnequalChildrenSizes = value;
481
+ this.minMeasuredChildWidth = undefined;
482
+ this.minMeasuredChildHeight = undefined;
483
+ }
484
+ useMarginInsteadOfTranslate = false;
485
+ modifyOverflowStyleOfParentScroll;
486
+ stripedTable;
487
+ scrollbarWidth;
488
+ scrollbarHeight;
489
+ childWidth;
490
+ childHeight;
491
+ ssrChildWidth;
492
+ ssrChildHeight;
493
+ ssrViewportWidth = 1920;
494
+ ssrViewportHeight = 1080;
495
+ _bufferAmount = 0;
496
+ get bufferAmount() {
497
+ if (typeof (this._bufferAmount) === 'number' && this._bufferAmount >= 0) {
498
+ return this._bufferAmount;
499
+ }
500
+ else {
501
+ return this.enableUnequalChildrenSizes ? 5 : 0;
502
+ }
503
+ }
504
+ set bufferAmount(value) {
505
+ this._bufferAmount = value;
506
+ }
507
+ scrollAnimationTime;
508
+ resizeBypassRefreshThreshold;
509
+ _scrollThrottlingTime;
510
+ get scrollThrottlingTime() {
511
+ return this._scrollThrottlingTime;
512
+ }
513
+ set scrollThrottlingTime(value) {
514
+ this._scrollThrottlingTime = value;
515
+ this.updateOnScrollFunction();
516
+ }
517
+ _scrollDebounceTime;
518
+ get scrollDebounceTime() {
519
+ return this._scrollDebounceTime;
520
+ }
521
+ set scrollDebounceTime(value) {
522
+ this._scrollDebounceTime = value;
523
+ this.updateOnScrollFunction();
524
+ }
525
+ onScroll;
526
+ updateOnScrollFunction() {
527
+ if (this.scrollDebounceTime) {
528
+ this.onScroll = this.debounce(() => {
529
+ this.refresh_internal(false);
530
+ }, this.scrollDebounceTime);
531
+ }
532
+ else if (this.scrollThrottlingTime) {
533
+ this.onScroll = this.throttleTrailing(() => {
534
+ this.refresh_internal(false);
535
+ }, this.scrollThrottlingTime);
536
+ }
537
+ else {
538
+ this.onScroll = () => {
539
+ this.refresh_internal(false);
540
+ };
541
+ }
542
+ }
543
+ checkScrollElementResizedTimer;
544
+ _checkResizeInterval;
545
+ get checkResizeInterval() {
546
+ return this._checkResizeInterval;
547
+ }
548
+ set checkResizeInterval(value) {
549
+ if (this._checkResizeInterval === value) {
550
+ return;
551
+ }
552
+ this._checkResizeInterval = value;
553
+ this.addScrollEventHandlers();
554
+ }
555
+ _items = [];
556
+ get items() {
557
+ return this._items;
558
+ }
559
+ set items(value) {
560
+ if (value === this._items) {
561
+ return;
562
+ }
563
+ this._items = value || [];
564
+ this.refresh_internal(true);
565
+ }
566
+ compareItems = (item1, item2) => item1 === item2;
567
+ _horizontal;
568
+ get horizontal() {
569
+ return this._horizontal;
570
+ }
571
+ set horizontal(value) {
572
+ this._horizontal = value;
573
+ this.updateDirection();
574
+ }
575
+ revertParentOverscroll() {
576
+ const scrollElement = this.getScrollElement();
577
+ if (scrollElement && this.oldParentScrollOverflow) {
578
+ scrollElement.style['overflow-y'] = this.oldParentScrollOverflow.y;
579
+ scrollElement.style['overflow-x'] = this.oldParentScrollOverflow.x;
580
+ }
581
+ this.oldParentScrollOverflow = undefined;
582
+ }
583
+ oldParentScrollOverflow;
584
+ _parentScroll;
585
+ get parentScroll() {
586
+ return this._parentScroll;
587
+ }
588
+ set parentScroll(value) {
589
+ if (this._parentScroll === value) {
590
+ return;
591
+ }
592
+ this.revertParentOverscroll();
593
+ this._parentScroll = value;
594
+ this.addScrollEventHandlers();
595
+ const scrollElement = this.getScrollElement();
596
+ if (this.modifyOverflowStyleOfParentScroll && scrollElement !== this.element.nativeElement) {
597
+ this.oldParentScrollOverflow = { x: scrollElement.style['overflow-x'], y: scrollElement.style['overflow-y'] };
598
+ scrollElement.style['overflow-y'] = this.horizontal ? 'visible' : 'auto';
599
+ scrollElement.style['overflow-x'] = this.horizontal ? 'auto' : 'visible';
600
+ }
601
+ }
602
+ vsUpdate = new EventEmitter();
603
+ vsChange = new EventEmitter();
604
+ vsStart = new EventEmitter();
605
+ vsEnd = new EventEmitter();
606
+ contentElementRef;
607
+ invisiblePaddingElementRef;
608
+ headerElementRef;
609
+ containerElementRef;
610
+ ngOnInit() {
611
+ this.addScrollEventHandlers();
612
+ }
613
+ ngOnDestroy() {
614
+ this.removeScrollEventHandlers();
615
+ this.revertParentOverscroll();
616
+ }
617
+ ngOnChanges(changes) {
618
+ let indexLengthChanged = this.cachedItemsLength !== this.items.length;
619
+ this.cachedItemsLength = this.items.length;
620
+ const firstRun = !changes.items || !changes.items.previousValue || changes.items.previousValue.length === 0;
621
+ this.refresh_internal(indexLengthChanged || firstRun);
622
+ }
623
+ ngDoCheck() {
624
+ if (this.cachedItemsLength !== this.items.length) {
625
+ this.cachedItemsLength = this.items.length;
626
+ this.refresh_internal(true);
627
+ return;
628
+ }
629
+ if (this.previousViewPort && this.viewPortItems && this.viewPortItems.length > 0) {
630
+ let itemsArrayChanged = false;
631
+ for (let i = 0; i < this.viewPortItems.length; ++i) {
632
+ if (!this.compareItems(this.items[this.previousViewPort.startIndexWithBuffer + i], this.viewPortItems[i])) {
633
+ itemsArrayChanged = true;
634
+ break;
635
+ }
636
+ }
637
+ if (itemsArrayChanged) {
638
+ this.refresh_internal(true);
639
+ }
640
+ }
641
+ }
642
+ refresh() {
643
+ this.refresh_internal(true);
644
+ }
645
+ invalidateAllCachedMeasurements() {
646
+ this.wrapGroupDimensions = {
647
+ maxChildSizePerWrapGroup: [],
648
+ numberOfKnownWrapGroupChildSizes: 0,
649
+ sumOfKnownWrapGroupChildWidths: 0,
650
+ sumOfKnownWrapGroupChildHeights: 0
651
+ };
652
+ this.minMeasuredChildWidth = undefined;
653
+ this.minMeasuredChildHeight = undefined;
654
+ this.refresh_internal(false);
655
+ }
656
+ invalidateCachedMeasurementForItem(item) {
657
+ if (this.enableUnequalChildrenSizes) {
658
+ let index = this.items && this.items.indexOf(item);
659
+ if (index >= 0) {
660
+ this.invalidateCachedMeasurementAtIndex(index);
661
+ }
662
+ }
663
+ else {
664
+ this.minMeasuredChildWidth = undefined;
665
+ this.minMeasuredChildHeight = undefined;
666
+ }
667
+ this.refresh_internal(false);
668
+ }
669
+ invalidateCachedMeasurementAtIndex(index) {
670
+ if (this.enableUnequalChildrenSizes) {
671
+ let cachedMeasurement = this.wrapGroupDimensions.maxChildSizePerWrapGroup[index];
672
+ if (cachedMeasurement) {
673
+ this.wrapGroupDimensions.maxChildSizePerWrapGroup[index] = undefined;
674
+ --this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
675
+ this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= cachedMeasurement.childWidth || 0;
676
+ this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= cachedMeasurement.childHeight || 0;
677
+ }
678
+ }
679
+ else {
680
+ this.minMeasuredChildWidth = undefined;
681
+ this.minMeasuredChildHeight = undefined;
682
+ }
683
+ this.refresh_internal(false);
684
+ }
685
+ scrollInto(item, alignToBeginning = true, additionalOffset = 0, animationMilliseconds = undefined, animationCompletedCallback = undefined) {
686
+ let index = this.items.indexOf(item);
687
+ if (index === -1) {
688
+ return;
689
+ }
690
+ this.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);
691
+ }
692
+ scrollToIndex(index, alignToBeginning = true, additionalOffset = 0, animationMilliseconds = undefined, animationCompletedCallback = undefined) {
693
+ let maxRetries = 5;
694
+ let retryIfNeeded = () => {
695
+ --maxRetries;
696
+ if (maxRetries <= 0) {
697
+ if (animationCompletedCallback) {
698
+ animationCompletedCallback();
699
+ }
700
+ return;
701
+ }
702
+ let dimensions = this.calculateDimensions();
703
+ let desiredStartIndex = Math.min(Math.max(index, 0), dimensions.itemCount - 1);
704
+ if (this.previousViewPort.startIndex === desiredStartIndex) {
705
+ if (animationCompletedCallback) {
706
+ animationCompletedCallback();
707
+ }
708
+ return;
709
+ }
710
+ this.scrollToIndex_internal(index, alignToBeginning, additionalOffset, 0, retryIfNeeded);
711
+ };
712
+ this.scrollToIndex_internal(index, alignToBeginning, additionalOffset, animationMilliseconds, retryIfNeeded);
713
+ }
714
+ scrollToIndex_internal(index, alignToBeginning = true, additionalOffset = 0, animationMilliseconds = undefined, animationCompletedCallback = undefined) {
715
+ animationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;
716
+ let dimensions = this.calculateDimensions();
717
+ let scroll = this.calculatePadding(index, dimensions) + additionalOffset;
718
+ if (!alignToBeginning) {
719
+ scroll -= dimensions.wrapGroupsPerPage * dimensions[this._childScrollDim];
720
+ }
721
+ this.scrollToPosition(scroll, animationMilliseconds, animationCompletedCallback);
722
+ }
723
+ scrollToPosition(scrollPosition, animationMilliseconds = undefined, animationCompletedCallback = undefined) {
724
+ scrollPosition += this.getElementsOffset();
725
+ animationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;
726
+ let scrollElement = this.getScrollElement();
727
+ let animationRequest;
728
+ if (this.currentTween) {
729
+ this.currentTween.stop();
730
+ this.currentTween = undefined;
731
+ }
732
+ if (!animationMilliseconds) {
733
+ this.renderer.setProperty(scrollElement, this._scrollType, scrollPosition);
734
+ this.refresh_internal(false, animationCompletedCallback);
735
+ return;
736
+ }
737
+ const tweenConfigObj = { scrollPosition: scrollElement[this._scrollType] };
738
+ let newTween = new tween.Tween(tweenConfigObj)
739
+ .to({ scrollPosition }, animationMilliseconds)
740
+ .easing(tween.Easing.Quadratic.Out)
741
+ .onUpdate((data) => {
742
+ if (isNaN(data.scrollPosition)) {
743
+ return;
744
+ }
745
+ this.renderer.setProperty(scrollElement, this._scrollType, data.scrollPosition);
746
+ this.refresh_internal(false);
747
+ })
748
+ .onStop(() => {
749
+ cancelAnimationFrame(animationRequest);
750
+ })
751
+ .start();
752
+ const animate = (time) => {
753
+ if (!newTween["isPlaying"]()) {
754
+ return;
755
+ }
756
+ newTween.update(time);
757
+ if (tweenConfigObj.scrollPosition === scrollPosition) {
758
+ this.refresh_internal(false, animationCompletedCallback);
759
+ return;
760
+ }
761
+ this.zone.runOutsideAngular(() => {
762
+ animationRequest = requestAnimationFrame(animate);
763
+ });
764
+ };
765
+ animate();
766
+ this.currentTween = newTween;
767
+ }
768
+ isAngularUniversalSSR;
769
+ constructor(element, renderer, zone, changeDetectorRef, platformId, options) {
770
+ this.element = element;
771
+ this.renderer = renderer;
772
+ this.zone = zone;
773
+ this.changeDetectorRef = changeDetectorRef;
774
+ this.isAngularUniversalSSR = isPlatformServer(platformId);
775
+ this.scrollThrottlingTime = options.scrollThrottlingTime;
776
+ this.scrollDebounceTime = options.scrollDebounceTime;
777
+ this.scrollAnimationTime = options.scrollAnimationTime;
778
+ this.scrollbarWidth = options.scrollbarWidth;
779
+ this.scrollbarHeight = options.scrollbarHeight;
780
+ this.checkResizeInterval = options.checkResizeInterval;
781
+ this.resizeBypassRefreshThreshold = options.resizeBypassRefreshThreshold;
782
+ this.modifyOverflowStyleOfParentScroll = options.modifyOverflowStyleOfParentScroll;
783
+ this.stripedTable = options.stripedTable;
784
+ this.horizontal = false;
785
+ this.resetWrapGroupDimensions();
786
+ }
787
+ getElementSize(element) {
788
+ let result = element.getBoundingClientRect();
789
+ let styles = getComputedStyle(element);
790
+ let marginTop = parseInt(styles['margin-top'], 10) || 0;
791
+ let marginBottom = parseInt(styles['margin-bottom'], 10) || 0;
792
+ let marginLeft = parseInt(styles['margin-left'], 10) || 0;
793
+ let marginRight = parseInt(styles['margin-right'], 10) || 0;
794
+ return {
795
+ top: result.top + marginTop,
796
+ bottom: result.bottom + marginBottom,
797
+ left: result.left + marginLeft,
798
+ right: result.right + marginRight,
799
+ width: result.width + marginLeft + marginRight,
800
+ height: result.height + marginTop + marginBottom,
801
+ y: result.top + marginTop,
802
+ x: result.left + marginLeft,
803
+ toJSON() {
804
+ result.toJSON();
805
+ }
806
+ };
807
+ }
808
+ previousScrollBoundingRect;
809
+ checkScrollElementResized() {
810
+ let boundingRect = this.getElementSize(this.getScrollElement());
811
+ let sizeChanged;
812
+ if (!this.previousScrollBoundingRect) {
813
+ sizeChanged = true;
814
+ }
815
+ else {
816
+ let widthChange = Math.abs(boundingRect.width - this.previousScrollBoundingRect.width);
817
+ let heightChange = Math.abs(boundingRect.height - this.previousScrollBoundingRect.height);
818
+ sizeChanged = widthChange > this.resizeBypassRefreshThreshold || heightChange > this.resizeBypassRefreshThreshold;
819
+ }
820
+ if (sizeChanged) {
821
+ this.previousScrollBoundingRect = boundingRect;
822
+ if (boundingRect.width > 0 && boundingRect.height > 0) {
823
+ this.refresh_internal(false);
824
+ }
825
+ }
826
+ }
827
+ _invisiblePaddingProperty;
828
+ _offsetType;
829
+ _scrollType;
830
+ _pageOffsetType;
831
+ _childScrollDim;
832
+ _translateDir;
833
+ _marginDir;
834
+ updateDirection() {
835
+ if (this.horizontal) {
836
+ this._invisiblePaddingProperty = 'width';
837
+ this._offsetType = 'offsetLeft';
838
+ this._pageOffsetType = 'pageXOffset';
839
+ this._childScrollDim = 'childWidth';
840
+ this._marginDir = 'margin-left';
841
+ this._translateDir = 'translateX';
842
+ this._scrollType = 'scrollLeft';
843
+ }
844
+ else {
845
+ this._invisiblePaddingProperty = 'height';
846
+ this._offsetType = 'offsetTop';
847
+ this._pageOffsetType = 'pageYOffset';
848
+ this._childScrollDim = 'childHeight';
849
+ this._marginDir = 'margin-top';
850
+ this._translateDir = 'translateY';
851
+ this._scrollType = 'scrollTop';
852
+ }
853
+ }
854
+ debounce(func, wait) {
855
+ const throttled = this.throttleTrailing(func, wait);
856
+ const result = function () {
857
+ throttled['cancel']();
858
+ throttled.apply(this, arguments);
859
+ };
860
+ result['cancel'] = function () {
861
+ throttled['cancel']();
862
+ };
863
+ return result;
864
+ }
865
+ throttleTrailing(func, wait) {
866
+ let timeout = undefined;
867
+ let _arguments = arguments;
868
+ const result = function () {
869
+ const _this = this;
870
+ _arguments = arguments;
871
+ if (timeout) {
872
+ return;
873
+ }
874
+ if (wait <= 0) {
875
+ func.apply(_this, _arguments);
876
+ }
877
+ else {
878
+ timeout = setTimeout(function () {
879
+ timeout = undefined;
880
+ func.apply(_this, _arguments);
881
+ }, wait);
882
+ }
883
+ };
884
+ result['cancel'] = function () {
885
+ if (timeout) {
886
+ clearTimeout(timeout);
887
+ timeout = undefined;
888
+ }
889
+ };
890
+ return result;
891
+ }
892
+ calculatedScrollbarWidth = 0;
893
+ calculatedScrollbarHeight = 0;
894
+ padding = 0;
895
+ previousViewPort = {};
896
+ currentTween;
897
+ cachedItemsLength;
898
+ disposeScrollHandler;
899
+ disposeResizeHandler;
900
+ refresh_internal(itemsArrayModified, refreshCompletedCallback = undefined, maxRunTimes = 2) {
901
+ //note: maxRunTimes is to force it to keep recalculating if the previous iteration caused a re-render (different sliced items in viewport or scrollPosition changed).
902
+ //The default of 2x max will probably be accurate enough without causing too large a performance bottleneck
903
+ //The code would typically quit out on the 2nd iteration anyways. The main time it'd think more than 2 runs would be necessary would be for vastly different sized child items or if this is the 1st time the items array was initialized.
904
+ //Without maxRunTimes, If the user is actively scrolling this code would become an infinite loop until they stopped scrolling. This would be okay, except each scroll event would start an additional infinte loop. We want to short-circuit it to prevent this.
905
+ if (itemsArrayModified && this.previousViewPort && this.previousViewPort.scrollStartPosition > 0) {
906
+ //if items were prepended, scroll forward to keep same items visible
907
+ let oldViewPort = this.previousViewPort;
908
+ let oldViewPortItems = this.viewPortItems;
909
+ let oldRefreshCompletedCallback = refreshCompletedCallback;
910
+ refreshCompletedCallback = () => {
911
+ let scrollLengthDelta = this.previousViewPort.scrollLength - oldViewPort.scrollLength;
912
+ if (scrollLengthDelta > 0 && this.viewPortItems) {
913
+ let oldStartItem = oldViewPortItems[0];
914
+ let oldStartItemIndex = this.items.findIndex(x => this.compareItems(oldStartItem, x));
915
+ if (oldStartItemIndex > this.previousViewPort.startIndexWithBuffer) {
916
+ let itemOrderChanged = false;
917
+ for (let i = 1; i < this.viewPortItems.length; ++i) {
918
+ if (!this.compareItems(this.items[oldStartItemIndex + i], oldViewPortItems[i])) {
919
+ itemOrderChanged = true;
920
+ break;
921
+ }
922
+ }
923
+ if (!itemOrderChanged) {
924
+ this.scrollToPosition(this.previousViewPort.scrollStartPosition + scrollLengthDelta, 0, oldRefreshCompletedCallback);
925
+ return;
926
+ }
927
+ }
928
+ }
929
+ if (oldRefreshCompletedCallback) {
930
+ oldRefreshCompletedCallback();
931
+ }
932
+ };
933
+ }
934
+ this.zone.runOutsideAngular(() => {
935
+ requestAnimationFrame(() => {
936
+ if (itemsArrayModified) {
937
+ this.resetWrapGroupDimensions();
938
+ }
939
+ let viewport = this.calculateViewport();
940
+ let startChanged = itemsArrayModified || viewport.startIndex !== this.previousViewPort.startIndex;
941
+ let endChanged = itemsArrayModified || viewport.endIndex !== this.previousViewPort.endIndex;
942
+ let scrollLengthChanged = viewport.scrollLength !== this.previousViewPort.scrollLength;
943
+ let paddingChanged = viewport.padding !== this.previousViewPort.padding;
944
+ let scrollPositionChanged = viewport.scrollStartPosition !== this.previousViewPort.scrollStartPosition || viewport.scrollEndPosition !== this.previousViewPort.scrollEndPosition || viewport.maxScrollPosition !== this.previousViewPort.maxScrollPosition;
945
+ this.previousViewPort = viewport;
946
+ if (scrollLengthChanged) {
947
+ this.renderer.setStyle(this.invisiblePaddingElementRef.nativeElement, this._invisiblePaddingProperty, `${viewport.scrollLength}px`);
948
+ }
949
+ if (paddingChanged) {
950
+ if (this.useMarginInsteadOfTranslate) {
951
+ this.renderer.setStyle(this.contentElementRef.nativeElement, this._marginDir, `${viewport.padding}px`);
952
+ }
953
+ else {
954
+ this.renderer.setStyle(this.contentElementRef.nativeElement, 'transform', `${this._translateDir}(${viewport.padding}px)`);
955
+ this.renderer.setStyle(this.contentElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${viewport.padding}px)`);
956
+ }
957
+ }
958
+ if (this.headerElementRef) {
959
+ let scrollPosition = this.getScrollElement()[this._scrollType];
960
+ let containerOffset = this.getElementsOffset();
961
+ let offset = Math.max(scrollPosition - viewport.padding - containerOffset + this.headerElementRef.nativeElement.clientHeight, 0);
962
+ this.renderer.setStyle(this.headerElementRef.nativeElement, 'transform', `${this._translateDir}(${offset}px)`);
963
+ this.renderer.setStyle(this.headerElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${offset}px)`);
964
+ }
965
+ const changeEventArg = (startChanged || endChanged) ? {
966
+ startIndex: viewport.startIndex,
967
+ endIndex: viewport.endIndex,
968
+ scrollStartPosition: viewport.scrollStartPosition,
969
+ scrollEndPosition: viewport.scrollEndPosition,
970
+ startIndexWithBuffer: viewport.startIndexWithBuffer,
971
+ endIndexWithBuffer: viewport.endIndexWithBuffer,
972
+ maxScrollPosition: viewport.maxScrollPosition
973
+ } : undefined;
974
+ if (startChanged || endChanged || scrollPositionChanged) {
975
+ const handleChanged = () => {
976
+ // update the scroll list to trigger re-render of components in viewport
977
+ this.viewPortItems = viewport.startIndexWithBuffer >= 0 && viewport.endIndexWithBuffer >= 0 ? this.items.slice(viewport.startIndexWithBuffer, viewport.endIndexWithBuffer + 1) : [];
978
+ this.vsUpdate.emit(this.viewPortItems);
979
+ if (startChanged) {
980
+ this.vsStart.emit(changeEventArg);
981
+ }
982
+ if (endChanged) {
983
+ this.vsEnd.emit(changeEventArg);
984
+ }
985
+ if (startChanged || endChanged) {
986
+ this.changeDetectorRef.markForCheck();
987
+ this.vsChange.emit(changeEventArg);
988
+ }
989
+ if (maxRunTimes > 0) {
990
+ this.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);
991
+ return;
992
+ }
993
+ if (refreshCompletedCallback) {
994
+ refreshCompletedCallback();
995
+ }
996
+ };
997
+ if (this.executeRefreshOutsideAngularZone) {
998
+ handleChanged();
999
+ }
1000
+ else {
1001
+ this.zone.run(handleChanged);
1002
+ }
1003
+ }
1004
+ else {
1005
+ if (maxRunTimes > 0 && (scrollLengthChanged || paddingChanged)) {
1006
+ this.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);
1007
+ return;
1008
+ }
1009
+ if (refreshCompletedCallback) {
1010
+ refreshCompletedCallback();
1011
+ }
1012
+ }
1013
+ });
1014
+ });
1015
+ }
1016
+ getScrollElement() {
1017
+ return this.parentScroll instanceof Window ? document.scrollingElement || document.documentElement || document.body : this.parentScroll || this.element.nativeElement;
1018
+ }
1019
+ addScrollEventHandlers() {
1020
+ if (this.isAngularUniversalSSR) {
1021
+ return;
1022
+ }
1023
+ let scrollElement = this.getScrollElement();
1024
+ this.removeScrollEventHandlers();
1025
+ this.zone.runOutsideAngular(() => {
1026
+ if (this.parentScroll instanceof Window) {
1027
+ this.disposeScrollHandler = this.renderer.listen('window', 'scroll', this.onScroll);
1028
+ this.disposeResizeHandler = this.renderer.listen('window', 'resize', this.onScroll);
1029
+ }
1030
+ else {
1031
+ this.disposeScrollHandler = this.renderer.listen(scrollElement, 'scroll', this.onScroll);
1032
+ if (this._checkResizeInterval > 0) {
1033
+ this.checkScrollElementResizedTimer = setInterval(() => { this.checkScrollElementResized(); }, this._checkResizeInterval);
1034
+ }
1035
+ }
1036
+ });
1037
+ }
1038
+ removeScrollEventHandlers() {
1039
+ if (this.checkScrollElementResizedTimer) {
1040
+ clearInterval(this.checkScrollElementResizedTimer);
1041
+ }
1042
+ if (this.disposeScrollHandler) {
1043
+ this.disposeScrollHandler();
1044
+ this.disposeScrollHandler = undefined;
1045
+ }
1046
+ if (this.disposeResizeHandler) {
1047
+ this.disposeResizeHandler();
1048
+ this.disposeResizeHandler = undefined;
1049
+ }
1050
+ }
1051
+ getElementsOffset() {
1052
+ if (this.isAngularUniversalSSR) {
1053
+ return 0;
1054
+ }
1055
+ let offset = 0;
1056
+ if (this.containerElementRef && this.containerElementRef.nativeElement) {
1057
+ offset += this.containerElementRef.nativeElement[this._offsetType];
1058
+ }
1059
+ if (this.parentScroll) {
1060
+ let scrollElement = this.getScrollElement();
1061
+ let elementClientRect = this.getElementSize(this.element.nativeElement);
1062
+ let scrollClientRect = this.getElementSize(scrollElement);
1063
+ if (this.horizontal) {
1064
+ offset += elementClientRect.left - scrollClientRect.left;
1065
+ }
1066
+ else {
1067
+ offset += elementClientRect.top - scrollClientRect.top;
1068
+ }
1069
+ if (!(this.parentScroll instanceof Window)) {
1070
+ offset += scrollElement[this._scrollType];
1071
+ }
1072
+ }
1073
+ return offset;
1074
+ }
1075
+ countItemsPerWrapGroup() {
1076
+ if (this.isAngularUniversalSSR) {
1077
+ return Math.round(this.horizontal ? this.ssrViewportHeight / this.ssrChildHeight : this.ssrViewportWidth / this.ssrChildWidth);
1078
+ }
1079
+ let propertyName = this.horizontal ? 'offsetLeft' : 'offsetTop';
1080
+ let children = ((this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement).children;
1081
+ let childrenLength = children ? children.length : 0;
1082
+ if (childrenLength === 0) {
1083
+ return 1;
1084
+ }
1085
+ let firstOffset = children[0][propertyName];
1086
+ let result = 1;
1087
+ while (result < childrenLength && firstOffset === children[result][propertyName]) {
1088
+ ++result;
1089
+ }
1090
+ return result;
1091
+ }
1092
+ getScrollStartPosition() {
1093
+ let windowScrollValue = undefined;
1094
+ if (this.parentScroll instanceof Window) {
1095
+ windowScrollValue = window[this._pageOffsetType];
1096
+ }
1097
+ return windowScrollValue || this.getScrollElement()[this._scrollType] || 0;
1098
+ }
1099
+ minMeasuredChildWidth;
1100
+ minMeasuredChildHeight;
1101
+ wrapGroupDimensions;
1102
+ resetWrapGroupDimensions() {
1103
+ const oldWrapGroupDimensions = this.wrapGroupDimensions;
1104
+ this.invalidateAllCachedMeasurements();
1105
+ if (!this.enableUnequalChildrenSizes || !oldWrapGroupDimensions || oldWrapGroupDimensions.numberOfKnownWrapGroupChildSizes === 0) {
1106
+ return;
1107
+ }
1108
+ const itemsPerWrapGroup = this.countItemsPerWrapGroup();
1109
+ for (let wrapGroupIndex = 0; wrapGroupIndex < oldWrapGroupDimensions.maxChildSizePerWrapGroup.length; ++wrapGroupIndex) {
1110
+ const oldWrapGroupDimension = oldWrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];
1111
+ if (!oldWrapGroupDimension || !oldWrapGroupDimension.items || !oldWrapGroupDimension.items.length) {
1112
+ continue;
1113
+ }
1114
+ if (oldWrapGroupDimension.items.length !== itemsPerWrapGroup) {
1115
+ return;
1116
+ }
1117
+ let itemsChanged = false;
1118
+ let arrayStartIndex = itemsPerWrapGroup * wrapGroupIndex;
1119
+ for (let i = 0; i < itemsPerWrapGroup; ++i) {
1120
+ if (!this.compareItems(oldWrapGroupDimension.items[i], this.items[arrayStartIndex + i])) {
1121
+ itemsChanged = true;
1122
+ break;
1123
+ }
1124
+ }
1125
+ if (!itemsChanged) {
1126
+ ++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
1127
+ this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += oldWrapGroupDimension.childWidth || 0;
1128
+ this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += oldWrapGroupDimension.childHeight || 0;
1129
+ this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = oldWrapGroupDimension;
1130
+ }
1131
+ }
1132
+ }
1133
+ calculateDimensions() {
1134
+ let scrollElement = this.getScrollElement();
1135
+ const maxCalculatedScrollBarSize = 25; // Note: Formula to auto-calculate doesn't work for ParentScroll, so we default to this if not set by consuming application
1136
+ this.calculatedScrollbarHeight = Math.max(Math.min(scrollElement.offsetHeight - scrollElement.clientHeight, maxCalculatedScrollBarSize), this.calculatedScrollbarHeight);
1137
+ this.calculatedScrollbarWidth = Math.max(Math.min(scrollElement.offsetWidth - scrollElement.clientWidth, maxCalculatedScrollBarSize), this.calculatedScrollbarWidth);
1138
+ let viewportWidth = scrollElement.offsetWidth - (this.scrollbarWidth || this.calculatedScrollbarWidth || (this.horizontal ? 0 : maxCalculatedScrollBarSize));
1139
+ let viewportHeight = scrollElement.offsetHeight - (this.scrollbarHeight || this.calculatedScrollbarHeight || (this.horizontal ? maxCalculatedScrollBarSize : 0));
1140
+ let content = (this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement;
1141
+ let itemsPerWrapGroup = this.countItemsPerWrapGroup();
1142
+ let wrapGroupsPerPage;
1143
+ let defaultChildWidth;
1144
+ let defaultChildHeight;
1145
+ if (this.isAngularUniversalSSR) {
1146
+ viewportWidth = this.ssrViewportWidth;
1147
+ viewportHeight = this.ssrViewportHeight;
1148
+ defaultChildWidth = this.ssrChildWidth;
1149
+ defaultChildHeight = this.ssrChildHeight;
1150
+ let itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);
1151
+ let itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);
1152
+ wrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;
1153
+ }
1154
+ else if (!this.enableUnequalChildrenSizes) {
1155
+ if (content.children.length > 0) {
1156
+ if (!this.childWidth || !this.childHeight) {
1157
+ if (!this.minMeasuredChildWidth && viewportWidth > 0) {
1158
+ this.minMeasuredChildWidth = viewportWidth;
1159
+ }
1160
+ if (!this.minMeasuredChildHeight && viewportHeight > 0) {
1161
+ this.minMeasuredChildHeight = viewportHeight;
1162
+ }
1163
+ }
1164
+ let child = content.children[0];
1165
+ let clientRect = this.getElementSize(child);
1166
+ this.minMeasuredChildWidth = Math.min(this.minMeasuredChildWidth, clientRect.width);
1167
+ this.minMeasuredChildHeight = Math.min(this.minMeasuredChildHeight, clientRect.height);
1168
+ }
1169
+ defaultChildWidth = this.childWidth || this.minMeasuredChildWidth || viewportWidth;
1170
+ defaultChildHeight = this.childHeight || this.minMeasuredChildHeight || viewportHeight;
1171
+ let itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);
1172
+ let itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);
1173
+ wrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;
1174
+ }
1175
+ else {
1176
+ let scrollOffset = scrollElement[this._scrollType] - (this.previousViewPort ? this.previousViewPort.padding : 0);
1177
+ let arrayStartIndex = this.previousViewPort.startIndexWithBuffer || 0;
1178
+ let wrapGroupIndex = Math.ceil(arrayStartIndex / itemsPerWrapGroup);
1179
+ let maxWidthForWrapGroup = 0;
1180
+ let maxHeightForWrapGroup = 0;
1181
+ let sumOfVisibleMaxWidths = 0;
1182
+ let sumOfVisibleMaxHeights = 0;
1183
+ wrapGroupsPerPage = 0;
1184
+ for (let i = 0; i < content.children.length; ++i) {
1185
+ ++arrayStartIndex;
1186
+ let child = content.children[i];
1187
+ let clientRect = this.getElementSize(child);
1188
+ maxWidthForWrapGroup = Math.max(maxWidthForWrapGroup, clientRect.width);
1189
+ maxHeightForWrapGroup = Math.max(maxHeightForWrapGroup, clientRect.height);
1190
+ if (arrayStartIndex % itemsPerWrapGroup === 0) {
1191
+ let oldValue = this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];
1192
+ if (oldValue) {
1193
+ --this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
1194
+ this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= oldValue.childWidth || 0;
1195
+ this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= oldValue.childHeight || 0;
1196
+ }
1197
+ ++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
1198
+ const items = this.items.slice(arrayStartIndex - itemsPerWrapGroup, arrayStartIndex);
1199
+ this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = {
1200
+ childWidth: maxWidthForWrapGroup,
1201
+ childHeight: maxHeightForWrapGroup,
1202
+ items: items
1203
+ };
1204
+ this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += maxWidthForWrapGroup;
1205
+ this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += maxHeightForWrapGroup;
1206
+ if (this.horizontal) {
1207
+ let maxVisibleWidthForWrapGroup = Math.min(maxWidthForWrapGroup, Math.max(viewportWidth - sumOfVisibleMaxWidths, 0));
1208
+ if (scrollOffset > 0) {
1209
+ let scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleWidthForWrapGroup);
1210
+ maxVisibleWidthForWrapGroup -= scrollOffsetToRemove;
1211
+ scrollOffset -= scrollOffsetToRemove;
1212
+ }
1213
+ sumOfVisibleMaxWidths += maxVisibleWidthForWrapGroup;
1214
+ if (maxVisibleWidthForWrapGroup > 0 && viewportWidth >= sumOfVisibleMaxWidths) {
1215
+ ++wrapGroupsPerPage;
1216
+ }
1217
+ }
1218
+ else {
1219
+ let maxVisibleHeightForWrapGroup = Math.min(maxHeightForWrapGroup, Math.max(viewportHeight - sumOfVisibleMaxHeights, 0));
1220
+ if (scrollOffset > 0) {
1221
+ let scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleHeightForWrapGroup);
1222
+ maxVisibleHeightForWrapGroup -= scrollOffsetToRemove;
1223
+ scrollOffset -= scrollOffsetToRemove;
1224
+ }
1225
+ sumOfVisibleMaxHeights += maxVisibleHeightForWrapGroup;
1226
+ if (maxVisibleHeightForWrapGroup > 0 && viewportHeight >= sumOfVisibleMaxHeights) {
1227
+ ++wrapGroupsPerPage;
1228
+ }
1229
+ }
1230
+ ++wrapGroupIndex;
1231
+ maxWidthForWrapGroup = 0;
1232
+ maxHeightForWrapGroup = 0;
1233
+ }
1234
+ }
1235
+ let averageChildWidth = this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
1236
+ let averageChildHeight = this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;
1237
+ defaultChildWidth = this.childWidth || averageChildWidth || viewportWidth;
1238
+ defaultChildHeight = this.childHeight || averageChildHeight || viewportHeight;
1239
+ if (this.horizontal) {
1240
+ if (viewportWidth > sumOfVisibleMaxWidths) {
1241
+ wrapGroupsPerPage += Math.ceil((viewportWidth - sumOfVisibleMaxWidths) / defaultChildWidth);
1242
+ }
1243
+ }
1244
+ else {
1245
+ if (viewportHeight > sumOfVisibleMaxHeights) {
1246
+ wrapGroupsPerPage += Math.ceil((viewportHeight - sumOfVisibleMaxHeights) / defaultChildHeight);
1247
+ }
1248
+ }
1249
+ }
1250
+ let itemCount = this.items.length;
1251
+ let itemsPerPage = itemsPerWrapGroup * wrapGroupsPerPage;
1252
+ let pageCount_fractional = itemCount / itemsPerPage;
1253
+ let numberOfWrapGroups = Math.ceil(itemCount / itemsPerWrapGroup);
1254
+ let scrollLength = 0;
1255
+ let defaultScrollLengthPerWrapGroup = this.horizontal ? defaultChildWidth : defaultChildHeight;
1256
+ if (this.enableUnequalChildrenSizes) {
1257
+ let numUnknownChildSizes = 0;
1258
+ for (let i = 0; i < numberOfWrapGroups; ++i) {
1259
+ let childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];
1260
+ if (childSize) {
1261
+ scrollLength += childSize;
1262
+ }
1263
+ else {
1264
+ ++numUnknownChildSizes;
1265
+ }
1266
+ }
1267
+ scrollLength += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);
1268
+ }
1269
+ else {
1270
+ scrollLength = numberOfWrapGroups * defaultScrollLengthPerWrapGroup;
1271
+ }
1272
+ if (this.headerElementRef) {
1273
+ scrollLength += this.headerElementRef.nativeElement.clientHeight;
1274
+ }
1275
+ let viewportLength = this.horizontal ? viewportWidth : viewportHeight;
1276
+ let maxScrollPosition = Math.max(scrollLength - viewportLength, 0);
1277
+ return {
1278
+ itemCount: itemCount,
1279
+ itemsPerWrapGroup: itemsPerWrapGroup,
1280
+ wrapGroupsPerPage: wrapGroupsPerPage,
1281
+ itemsPerPage: itemsPerPage,
1282
+ pageCount_fractional: pageCount_fractional,
1283
+ childWidth: defaultChildWidth,
1284
+ childHeight: defaultChildHeight,
1285
+ scrollLength: scrollLength,
1286
+ viewportLength: viewportLength,
1287
+ maxScrollPosition: maxScrollPosition
1288
+ };
1289
+ }
1290
+ cachedPageSize = 0;
1291
+ previousScrollNumberElements = 0;
1292
+ calculatePadding(arrayStartIndexWithBuffer, dimensions) {
1293
+ if (dimensions.itemCount === 0) {
1294
+ return 0;
1295
+ }
1296
+ let defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];
1297
+ let startingWrapGroupIndex = Math.floor(arrayStartIndexWithBuffer / dimensions.itemsPerWrapGroup) || 0;
1298
+ if (!this.enableUnequalChildrenSizes) {
1299
+ return defaultScrollLengthPerWrapGroup * startingWrapGroupIndex;
1300
+ }
1301
+ let numUnknownChildSizes = 0;
1302
+ let result = 0;
1303
+ for (let i = 0; i < startingWrapGroupIndex; ++i) {
1304
+ let childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];
1305
+ if (childSize) {
1306
+ result += childSize;
1307
+ }
1308
+ else {
1309
+ ++numUnknownChildSizes;
1310
+ }
1311
+ }
1312
+ result += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);
1313
+ return result;
1314
+ }
1315
+ calculatePageInfo(scrollPosition, dimensions) {
1316
+ let scrollPercentage = 0;
1317
+ if (this.enableUnequalChildrenSizes) {
1318
+ const numberOfWrapGroups = Math.ceil(dimensions.itemCount / dimensions.itemsPerWrapGroup);
1319
+ let totalScrolledLength = 0;
1320
+ let defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];
1321
+ for (let i = 0; i < numberOfWrapGroups; ++i) {
1322
+ let childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];
1323
+ if (childSize) {
1324
+ totalScrolledLength += childSize;
1325
+ }
1326
+ else {
1327
+ totalScrolledLength += defaultScrollLengthPerWrapGroup;
1328
+ }
1329
+ if (scrollPosition < totalScrolledLength) {
1330
+ scrollPercentage = i / numberOfWrapGroups;
1331
+ break;
1332
+ }
1333
+ }
1334
+ }
1335
+ else {
1336
+ scrollPercentage = scrollPosition / dimensions.scrollLength;
1337
+ }
1338
+ let startingArrayIndex_fractional = Math.min(Math.max(scrollPercentage * dimensions.pageCount_fractional, 0), dimensions.pageCount_fractional) * dimensions.itemsPerPage;
1339
+ let maxStart = dimensions.itemCount - dimensions.itemsPerPage - 1;
1340
+ let arrayStartIndex = Math.min(Math.floor(startingArrayIndex_fractional), maxStart);
1341
+ arrayStartIndex -= arrayStartIndex % dimensions.itemsPerWrapGroup; // round down to start of wrapGroup
1342
+ if (this.stripedTable) {
1343
+ let bufferBoundary = 2 * dimensions.itemsPerWrapGroup;
1344
+ if (arrayStartIndex % bufferBoundary !== 0) {
1345
+ arrayStartIndex = Math.max(arrayStartIndex - arrayStartIndex % bufferBoundary, 0);
1346
+ }
1347
+ }
1348
+ let arrayEndIndex = Math.ceil(startingArrayIndex_fractional) + dimensions.itemsPerPage - 1;
1349
+ let endIndexWithinWrapGroup = (arrayEndIndex + 1) % dimensions.itemsPerWrapGroup;
1350
+ if (endIndexWithinWrapGroup > 0) {
1351
+ arrayEndIndex += dimensions.itemsPerWrapGroup - endIndexWithinWrapGroup; // round up to end of wrapGroup
1352
+ }
1353
+ if (isNaN(arrayStartIndex)) {
1354
+ arrayStartIndex = 0;
1355
+ }
1356
+ if (isNaN(arrayEndIndex)) {
1357
+ arrayEndIndex = 0;
1358
+ }
1359
+ arrayStartIndex = Math.min(Math.max(arrayStartIndex, 0), dimensions.itemCount - 1);
1360
+ arrayEndIndex = Math.min(Math.max(arrayEndIndex, 0), dimensions.itemCount - 1);
1361
+ let bufferSize = this.bufferAmount * dimensions.itemsPerWrapGroup;
1362
+ let startIndexWithBuffer = Math.min(Math.max(arrayStartIndex - bufferSize, 0), dimensions.itemCount - 1);
1363
+ let endIndexWithBuffer = Math.min(Math.max(arrayEndIndex + bufferSize, 0), dimensions.itemCount - 1);
1364
+ return {
1365
+ startIndex: arrayStartIndex,
1366
+ endIndex: arrayEndIndex,
1367
+ startIndexWithBuffer: startIndexWithBuffer,
1368
+ endIndexWithBuffer: endIndexWithBuffer,
1369
+ scrollStartPosition: scrollPosition,
1370
+ scrollEndPosition: scrollPosition + dimensions.viewportLength,
1371
+ maxScrollPosition: dimensions.maxScrollPosition
1372
+ };
1373
+ }
1374
+ calculateViewport() {
1375
+ let dimensions = this.calculateDimensions();
1376
+ let offset = this.getElementsOffset();
1377
+ let scrollStartPosition = this.getScrollStartPosition();
1378
+ if (scrollStartPosition > (dimensions.scrollLength + offset) && !(this.parentScroll instanceof Window)) {
1379
+ scrollStartPosition = dimensions.scrollLength;
1380
+ }
1381
+ else {
1382
+ scrollStartPosition -= offset;
1383
+ }
1384
+ scrollStartPosition = Math.max(0, scrollStartPosition);
1385
+ let pageInfo = this.calculatePageInfo(scrollStartPosition, dimensions);
1386
+ let newPadding = this.calculatePadding(pageInfo.startIndexWithBuffer, dimensions);
1387
+ let newScrollLength = dimensions.scrollLength;
1388
+ return {
1389
+ startIndex: pageInfo.startIndex,
1390
+ endIndex: pageInfo.endIndex,
1391
+ startIndexWithBuffer: pageInfo.startIndexWithBuffer,
1392
+ endIndexWithBuffer: pageInfo.endIndexWithBuffer,
1393
+ padding: Math.round(newPadding),
1394
+ scrollLength: Math.round(newScrollLength),
1395
+ scrollStartPosition: pageInfo.scrollStartPosition,
1396
+ scrollEndPosition: pageInfo.scrollEndPosition,
1397
+ maxScrollPosition: pageInfo.maxScrollPosition
1398
+ };
1399
+ }
1400
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: VirtualScrollerComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }, { token: 'virtual-scroller-default-options', optional: true }], target: i0.ɵɵFactoryTarget.Component });
1401
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: VirtualScrollerComponent, isStandalone: false, selector: "virtual-scroller,[virtualScroller]", inputs: { executeRefreshOutsideAngularZone: "executeRefreshOutsideAngularZone", enableUnequalChildrenSizes: "enableUnequalChildrenSizes", useMarginInsteadOfTranslate: "useMarginInsteadOfTranslate", modifyOverflowStyleOfParentScroll: "modifyOverflowStyleOfParentScroll", stripedTable: "stripedTable", scrollbarWidth: "scrollbarWidth", scrollbarHeight: "scrollbarHeight", childWidth: "childWidth", childHeight: "childHeight", ssrChildWidth: "ssrChildWidth", ssrChildHeight: "ssrChildHeight", ssrViewportWidth: "ssrViewportWidth", ssrViewportHeight: "ssrViewportHeight", bufferAmount: "bufferAmount", scrollAnimationTime: "scrollAnimationTime", resizeBypassRefreshThreshold: "resizeBypassRefreshThreshold", scrollThrottlingTime: "scrollThrottlingTime", scrollDebounceTime: "scrollDebounceTime", checkResizeInterval: "checkResizeInterval", items: "items", compareItems: "compareItems", horizontal: "horizontal", parentScroll: "parentScroll" }, outputs: { vsUpdate: "vsUpdate", vsChange: "vsChange", vsStart: "vsStart", vsEnd: "vsEnd" }, host: { properties: { "class.horizontal": "horizontal", "class.vertical": "!horizontal", "class.selfScroll": "!parentScroll" } }, queries: [{ propertyName: "headerElementRef", first: true, predicate: ["header"], descendants: true, read: ElementRef }, { propertyName: "containerElementRef", first: true, predicate: ["container"], descendants: true, read: ElementRef }], viewQueries: [{ propertyName: "contentElementRef", first: true, predicate: ["content"], descendants: true, read: ElementRef }, { propertyName: "invisiblePaddingElementRef", first: true, predicate: ["invisiblePadding"], descendants: true, read: ElementRef }], exportAs: ["virtualScroller"], usesOnChanges: true, ngImport: i0, template: `
1402
+ <div class="total-padding" #invisiblePadding></div>
1403
+ <div class="scrollable-content" #content>
1404
+ <ng-content></ng-content>
1405
+ </div>
1406
+ `, isInline: true, styles: [":host{position:relative;display:block;-webkit-overflow-scrolling:touch}:host.horizontal.selfScroll{overflow-y:visible;overflow-x:auto}:host.vertical.selfScroll{overflow-y:auto;overflow-x:visible}.scrollable-content{top:0;left:0;width:100%;height:100%;max-width:100vw;max-height:100vh;position:absolute}.scrollable-content ::ng-deep>*{box-sizing:border-box}:host.horizontal{white-space:nowrap}:host.horizontal .scrollable-content{display:flex}:host.horizontal .scrollable-content ::ng-deep>*{flex-shrink:0;flex-grow:0;white-space:initial}.total-padding{width:1px;opacity:0}:host.horizontal .total-padding{height:100%}\n"] });
191
1407
  }
192
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TemplateRenderer, decorators: [{
1408
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: VirtualScrollerComponent, decorators: [{
193
1409
  type: Component,
194
- args: [{
195
- standalone: false,
196
- selector: 'c-templateRenderer',
197
- template: ``
198
- }]
199
- }], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { data: [{
1410
+ args: [{ selector: 'virtual-scroller,[virtualScroller]', exportAs: 'virtualScroller', standalone: false, template: `
1411
+ <div class="total-padding" #invisiblePadding></div>
1412
+ <div class="scrollable-content" #content>
1413
+ <ng-content></ng-content>
1414
+ </div>
1415
+ `, host: {
1416
+ '[class.horizontal]': "horizontal",
1417
+ '[class.vertical]': "!horizontal",
1418
+ '[class.selfScroll]': "!parentScroll"
1419
+ }, styles: [":host{position:relative;display:block;-webkit-overflow-scrolling:touch}:host.horizontal.selfScroll{overflow-y:visible;overflow-x:auto}:host.vertical.selfScroll{overflow-y:auto;overflow-x:visible}.scrollable-content{top:0;left:0;width:100%;height:100%;max-width:100vw;max-height:100vh;position:absolute}.scrollable-content ::ng-deep>*{box-sizing:border-box}:host.horizontal{white-space:nowrap}:host.horizontal .scrollable-content{display:flex}:host.horizontal .scrollable-content ::ng-deep>*{flex-shrink:0;flex-grow:0;white-space:initial}.total-padding{width:1px;opacity:0}:host.horizontal .total-padding{height:100%}\n"] }]
1420
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: Object, decorators: [{
1421
+ type: Inject,
1422
+ args: [PLATFORM_ID]
1423
+ }] }, { type: undefined, decorators: [{
1424
+ type: Optional
1425
+ }, {
1426
+ type: Inject,
1427
+ args: ['virtual-scroller-default-options']
1428
+ }] }], propDecorators: { executeRefreshOutsideAngularZone: [{
200
1429
  type: Input
201
- }], item: [{
1430
+ }], enableUnequalChildrenSizes: [{
1431
+ type: Input
1432
+ }], useMarginInsteadOfTranslate: [{
1433
+ type: Input
1434
+ }], modifyOverflowStyleOfParentScroll: [{
1435
+ type: Input
1436
+ }], stripedTable: [{
1437
+ type: Input
1438
+ }], scrollbarWidth: [{
1439
+ type: Input
1440
+ }], scrollbarHeight: [{
1441
+ type: Input
1442
+ }], childWidth: [{
1443
+ type: Input
1444
+ }], childHeight: [{
202
1445
  type: Input
1446
+ }], ssrChildWidth: [{
1447
+ type: Input
1448
+ }], ssrChildHeight: [{
1449
+ type: Input
1450
+ }], ssrViewportWidth: [{
1451
+ type: Input
1452
+ }], ssrViewportHeight: [{
1453
+ type: Input
1454
+ }], bufferAmount: [{
1455
+ type: Input
1456
+ }], scrollAnimationTime: [{
1457
+ type: Input
1458
+ }], resizeBypassRefreshThreshold: [{
1459
+ type: Input
1460
+ }], scrollThrottlingTime: [{
1461
+ type: Input
1462
+ }], scrollDebounceTime: [{
1463
+ type: Input
1464
+ }], checkResizeInterval: [{
1465
+ type: Input
1466
+ }], items: [{
1467
+ type: Input
1468
+ }], compareItems: [{
1469
+ type: Input
1470
+ }], horizontal: [{
1471
+ type: Input
1472
+ }], parentScroll: [{
1473
+ type: Input
1474
+ }], vsUpdate: [{
1475
+ type: Output
1476
+ }], vsChange: [{
1477
+ type: Output
1478
+ }], vsStart: [{
1479
+ type: Output
1480
+ }], vsEnd: [{
1481
+ type: Output
1482
+ }], contentElementRef: [{
1483
+ type: ViewChild,
1484
+ args: ['content', { read: ElementRef, static: false }]
1485
+ }], invisiblePaddingElementRef: [{
1486
+ type: ViewChild,
1487
+ args: ['invisiblePadding', { read: ElementRef, static: false }]
1488
+ }], headerElementRef: [{
1489
+ type: ContentChild,
1490
+ args: ['header', { read: ElementRef, static: false }]
1491
+ }], containerElementRef: [{
1492
+ type: ContentChild,
1493
+ args: ['container', { read: ElementRef, static: false }]
203
1494
  }] } });
1495
+ class VirtualScrollerModule {
1496
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: VirtualScrollerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1497
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: VirtualScrollerModule, declarations: [VirtualScrollerComponent], imports: [CommonModule], exports: [VirtualScrollerComponent] });
1498
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: VirtualScrollerModule, providers: [
1499
+ {
1500
+ provide: 'virtual-scroller-default-options',
1501
+ useFactory: VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY
1502
+ }
1503
+ ], imports: [CommonModule] });
1504
+ }
1505
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: VirtualScrollerModule, decorators: [{
1506
+ type: NgModule,
1507
+ args: [{
1508
+ exports: [VirtualScrollerComponent],
1509
+ declarations: [VirtualScrollerComponent],
1510
+ imports: [CommonModule],
1511
+ providers: [
1512
+ {
1513
+ provide: 'virtual-scroller-default-options',
1514
+ useFactory: VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY
1515
+ }
1516
+ ]
1517
+ }]
1518
+ }] });
204
1519
 
205
1520
  const DROPDOWN_CONTROL_VALUE_ACCESSOR = {
206
1521
  provide: NG_VALUE_ACCESSOR,
@@ -216,26 +1531,59 @@ const noop = () => {
216
1531
  };
217
1532
  class AngularMultiSelect {
218
1533
  _elementRef;
1534
+ cdr;
1535
+ filterPipe;
219
1536
  data;
220
1537
  settings;
1538
+ loading;
221
1539
  onSelect = new EventEmitter();
222
1540
  onDeSelect = new EventEmitter();
223
1541
  onSelectAll = new EventEmitter();
224
1542
  onDeSelectAll = new EventEmitter();
225
1543
  onOpen = new EventEmitter();
226
1544
  onClose = new EventEmitter();
1545
+ onScrollToEnd = new EventEmitter();
1546
+ onFilterSelectAll = new EventEmitter();
1547
+ onFilterDeSelectAll = new EventEmitter();
1548
+ onAddFilterNewItem = new EventEmitter();
1549
+ onGroupSelect = new EventEmitter();
1550
+ onGroupDeSelect = new EventEmitter();
227
1551
  itemTempl;
228
1552
  badgeTempl;
1553
+ searchTempl;
229
1554
  searchInput;
1555
+ selectedListElem;
1556
+ dropdownListElem;
1557
+ stacklineDropdown;
1558
+ onEscapeDown(event) {
1559
+ if (this.settings.escapeToClose) {
1560
+ this.closeDropdown();
1561
+ }
1562
+ }
1563
+ onScroll(event) {
1564
+ if (this.isActive && this.settings.tagToBody) {
1565
+ this.closeDropdown();
1566
+ /* const elem = this.stacklineDropdown.nativeElement;
1567
+ if(this.settings.autoPosition){
1568
+ this.dropDownTop = elem.getBoundingClientRect().y + elem.clientHeight + 1;
1569
+ }
1570
+ this.dropDownLeft = elem.getBoundingClientRect().x; */
1571
+ }
1572
+ }
1573
+ virtualdata = [];
1574
+ searchTerm$ = new Subject();
230
1575
  selectedItems;
231
1576
  isActive = false;
232
1577
  isSelectAll = false;
1578
+ isFilterSelectAll = false;
1579
+ isInfiniteFilterSelectAll = false;
233
1580
  groupedData;
234
1581
  filter;
235
1582
  chunkArray;
236
1583
  scrollTop;
237
1584
  chunkIndex = [];
238
1585
  cachedItems = [];
1586
+ groupCachedItems = [];
239
1587
  totalRows;
240
1588
  itemHeight = 41.6;
241
1589
  screenItemsLen;
@@ -245,13 +1593,28 @@ class AngularMultiSelect {
245
1593
  maxBuffer;
246
1594
  lastScrolled;
247
1595
  lastRepaintY;
1596
+ selectedListHeight;
1597
+ filterLength = 0;
1598
+ infiniteFilterLength = 0;
1599
+ viewPortItems;
1600
+ item;
1601
+ dropdownListYOffset = 0;
1602
+ subscription;
1603
+ dropDownWidth = 0;
1604
+ dropDownTop = null;
1605
+ dropDownBottom = null;
1606
+ dropDownLeft = 0;
1607
+ id = Math.random().toString(36).substring(2);
248
1608
  defaultSettings = {
249
1609
  singleSelection: false,
250
1610
  text: 'Select',
251
1611
  enableCheckAll: true,
252
1612
  selectAllText: 'Select All',
253
1613
  unSelectAllText: 'UnSelect All',
1614
+ filterSelectAllText: 'Select all filtered results',
1615
+ filterUnSelectAllText: 'UnSelect all filtered results',
254
1616
  enableSearchFilter: false,
1617
+ searchBy: [],
255
1618
  maxHeight: 300,
256
1619
  badgeShowLimit: 999999999999,
257
1620
  classes: '',
@@ -262,62 +1625,67 @@ class AngularMultiSelect {
262
1625
  searchAutofocus: true,
263
1626
  lazyLoading: false,
264
1627
  labelKey: 'itemName',
265
- theme: 'classic',
266
- skin: 'classic'
1628
+ primaryKey: 'id',
1629
+ position: 'bottom',
1630
+ autoPosition: true,
1631
+ enableFilterSelectAll: true,
1632
+ selectGroup: false,
1633
+ addNewItemOnFilter: false,
1634
+ addNewButtonText: "Add",
1635
+ escapeToClose: true,
1636
+ clearAll: true,
1637
+ tagToBody: false
267
1638
  };
1639
+ randomSize = true;
268
1640
  parseError;
269
- constructor(_elementRef) {
1641
+ filteredList = [];
1642
+ virtualScroollInit = false;
1643
+ virtualScroller;
1644
+ isDisabledItemPresent = false;
1645
+ constructor(_elementRef, cdr, filterPipe) {
270
1646
  this._elementRef = _elementRef;
271
- }
272
- getThemeName() {
273
- let rawTheme = 'classic';
274
- if (this.settings) {
275
- rawTheme = this.settings.skin || this.settings.theme || 'classic';
276
- }
277
- let theme = String(rawTheme).toLowerCase().replace(/[^a-z0-9_-]+/g, '-');
278
- theme = theme.replace(/^-+|-+$/g, '');
279
- return theme || 'classic';
280
- }
281
- getDropdownClasses() {
282
- let theme = this.getThemeName();
283
- let className = 'theme-' + theme;
284
- if (theme !== 'classic' && theme !== 'material' && theme !== 'dark' && theme !== 'custom') {
285
- className += ' theme-custom';
286
- }
287
- if (this.isActive) {
288
- className += ' is-open';
289
- }
290
- if (this.settings && this.settings.disabled) {
291
- className += ' is-disabled';
292
- }
293
- return className;
1647
+ this.cdr = cdr;
1648
+ this.filterPipe = filterPipe;
1649
+ this.searchTerm$.asObservable().pipe(debounceTime(1000), distinctUntilChanged(), tap(term => term)).subscribe(val => {
1650
+ this.filterInfiniteList(val);
1651
+ });
294
1652
  }
295
1653
  ngOnInit() {
296
1654
  this.settings = Object.assign(this.defaultSettings, this.settings);
297
- if (this.settings.groupBy) {
298
- this.groupedData = this.transformData(this.data, this.settings.groupBy);
1655
+ this.cachedItems = this.cloneArray(this.data);
1656
+ if (this.settings.position == 'top') {
1657
+ setTimeout(() => {
1658
+ this.selectedListHeight = { val: 0 };
1659
+ this.selectedListHeight.val = this.selectedListElem.nativeElement.clientHeight;
1660
+ });
299
1661
  }
300
- this.totalRows = (this.data && this.data.length);
301
- this.cachedItems = this.data;
302
- this.screenItemsLen = Math.ceil(this.settings.maxHeight / this.itemHeight);
303
- this.cachedItemsLen = this.screenItemsLen * 3;
304
- this.totalHeight = this.itemHeight * this.totalRows;
305
- this.maxBuffer = this.screenItemsLen * this.itemHeight;
306
- this.lastScrolled = 0;
307
- this.renderChunk(0, this.cachedItemsLen / 2);
1662
+ setTimeout(() => {
1663
+ this.calculateDropdownDirection();
1664
+ });
1665
+ this.virtualScroollInit = false;
1666
+ }
1667
+ onKeyUp(evt) {
1668
+ this.searchTerm$.next(evt.target.value);
308
1669
  }
309
1670
  ngOnChanges(changes) {
310
- if (changes.data && !changes.data.isFirstChange()) {
1671
+ if (changes.data && !changes.data.firstChange) {
311
1672
  if (this.settings.groupBy) {
312
1673
  this.groupedData = this.transformData(this.data, this.settings.groupBy);
313
1674
  if (this.data.length == 0) {
314
1675
  this.selectedItems = [];
315
1676
  }
1677
+ this.groupCachedItems = this.cloneArray(this.groupedData);
316
1678
  }
1679
+ this.cachedItems = this.cloneArray(this.data);
317
1680
  }
318
- if (changes.settings && !changes.settings.isFirstChange()) {
1681
+ if (changes.settings && !changes.settings.firstChange) {
319
1682
  this.settings = Object.assign(this.defaultSettings, this.settings);
320
1683
  }
1684
+ if (changes.loading) {
1685
+ }
1686
+ if (this.settings.lazyLoading && this.virtualScroollInit && changes.data) {
1687
+ this.virtualdata = changes.data.currentValue;
1688
+ }
321
1689
  }
322
1690
  ngDoCheck() {
323
1691
  if (this.selectedItems) {
@@ -328,12 +1696,22 @@ class AngularMultiSelect {
328
1696
  }
329
1697
  ngAfterViewInit() {
330
1698
  if (this.settings.lazyLoading) {
331
- this._elementRef.nativeElement.getElementsByClassName("lazyContainer")[0].addEventListener('scroll', this.onScroll.bind(this));
1699
+ // this._elementRef.nativeElement.getElementsByClassName("lazyContainer")[0].addEventListener('scroll', this.onScroll.bind(this));
1700
+ }
1701
+ }
1702
+ ngAfterViewChecked() {
1703
+ if (this.selectedListElem.nativeElement.clientHeight && this.settings.position == 'top' && this.selectedListHeight) {
1704
+ this.selectedListHeight.val = this.selectedListElem.nativeElement.clientHeight;
1705
+ this.cdr.detectChanges();
332
1706
  }
1707
+ //this.calculateDropdownDirection();
333
1708
  }
334
1709
  onItemClick(item, index, evt) {
1710
+ if (item.disabled) {
1711
+ return;
1712
+ }
335
1713
  if (this.settings.disabled) {
336
- return false;
1714
+ return;
337
1715
  }
338
1716
  let found = this.isSelected(item);
339
1717
  let limit = this.selectedItems.length < this.settings.limitSelection ? true : false;
@@ -359,6 +1737,9 @@ class AngularMultiSelect {
359
1737
  if (this.data.length == this.selectedItems.length) {
360
1738
  this.isSelectAll = true;
361
1739
  }
1740
+ if (this.settings.groupBy) {
1741
+ this.updateGroupInfo(item);
1742
+ }
362
1743
  }
363
1744
  validate(c) {
364
1745
  return null;
@@ -366,31 +1747,42 @@ class AngularMultiSelect {
366
1747
  onTouchedCallback = noop;
367
1748
  onChangeCallback = noop;
368
1749
  writeValue(value) {
369
- if (value !== undefined && value !== null) {
1750
+ if (value !== undefined && value !== null && value !== '') {
370
1751
  if (this.settings.singleSelection) {
371
- try {
372
- if (value.length > 1) {
373
- this.selectedItems = [value[0]];
374
- throw new MyException(404, { "msg": "Single Selection Mode, Selected Items cannot have more than one item." });
1752
+ if (this.settings.groupBy) {
1753
+ this.groupedData = this.transformData(this.data, this.settings.groupBy);
1754
+ this.groupCachedItems = this.cloneArray(this.groupedData);
1755
+ this.selectedItems = [value[0]];
1756
+ }
1757
+ else {
1758
+ try {
1759
+ if (value.length > 1) {
1760
+ this.selectedItems = [value[0]];
1761
+ throw new MyException(404, { "msg": "Single Selection Mode, Selected Items cannot have more than one item." });
1762
+ }
1763
+ else {
1764
+ this.selectedItems = value;
1765
+ }
375
1766
  }
376
- else {
377
- this.selectedItems = value;
1767
+ catch (e) {
1768
+ console.error(e.body.msg);
378
1769
  }
379
1770
  }
380
- catch (e) {
381
- console.error(e.body.msg);
382
- }
383
1771
  }
384
1772
  else {
385
1773
  if (this.settings.limitSelection) {
386
- this.selectedItems = value.splice(0, this.settings.limitSelection);
1774
+ this.selectedItems = value.slice(0, this.settings.limitSelection);
387
1775
  }
388
1776
  else {
389
1777
  this.selectedItems = value;
390
1778
  }
391
- if (this.selectedItems.length === this.data.length && this.data.length > 0) {
1779
+ if (this.selectedItems != null && this.selectedItems.length === this.data.length && this.data.length > 0) {
392
1780
  this.isSelectAll = true;
393
1781
  }
1782
+ if (this.settings.groupBy) {
1783
+ this.groupedData = this.transformData(this.data, this.settings.groupBy);
1784
+ this.groupCachedItems = this.cloneArray(this.groupedData);
1785
+ }
394
1786
  }
395
1787
  }
396
1788
  else {
@@ -406,31 +1798,37 @@ class AngularMultiSelect {
406
1798
  this.onTouchedCallback = fn;
407
1799
  }
408
1800
  trackByFn(index, item) {
409
- return item.id;
1801
+ return item[this.settings.primaryKey];
410
1802
  }
411
1803
  isSelected(clickedItem) {
1804
+ if (clickedItem.disabled) {
1805
+ return false;
1806
+ }
412
1807
  let found = false;
413
1808
  this.selectedItems && this.selectedItems.forEach(item => {
414
- if (clickedItem.id === item.id) {
1809
+ if (clickedItem[this.settings.primaryKey] === item[this.settings.primaryKey]) {
415
1810
  found = true;
416
1811
  }
417
1812
  });
418
1813
  return found;
419
1814
  }
420
1815
  addSelected(item) {
1816
+ if (item.disabled) {
1817
+ return;
1818
+ }
421
1819
  if (this.settings.singleSelection) {
422
1820
  this.selectedItems = [];
423
1821
  this.selectedItems.push(item);
424
1822
  this.closeDropdown();
425
1823
  }
426
1824
  else
427
- this.selectedItems.push(item);
1825
+ this.selectedItems = [...this.selectedItems, item];
428
1826
  this.onChangeCallback(this.selectedItems);
429
1827
  this.onTouchedCallback(this.selectedItems);
430
1828
  }
431
1829
  removeSelected(clickedItem) {
432
1830
  this.selectedItems && this.selectedItems.forEach(item => {
433
- if (clickedItem.id === item.id) {
1831
+ if (clickedItem[this.settings.primaryKey] === item[this.settings.primaryKey]) {
434
1832
  this.selectedItems.splice(this.selectedItems.indexOf(item), 1);
435
1833
  }
436
1834
  });
@@ -439,51 +1837,293 @@ class AngularMultiSelect {
439
1837
  }
440
1838
  toggleDropdown(evt) {
441
1839
  if (this.settings.disabled) {
442
- return false;
1840
+ return;
443
1841
  }
444
1842
  this.isActive = !this.isActive;
445
1843
  if (this.isActive) {
446
- if (this.settings.searchAutofocus && this.settings.enableSearchFilter) {
447
- setTimeout(() => {
448
- this.searchInput.nativeElement.focus();
449
- }, 0);
450
- }
451
- this.onOpen.emit(true);
1844
+ this.openDropdown();
452
1845
  }
453
1846
  else {
454
- this.onClose.emit(false);
1847
+ this.closeDropdown();
1848
+ }
1849
+ if (this.settings.lazyLoading) {
1850
+ this.virtualdata = this.data;
1851
+ this.virtualScroollInit = true;
455
1852
  }
456
1853
  evt.preventDefault();
457
1854
  }
1855
+ openDropdown() {
1856
+ if (this.settings.disabled) {
1857
+ return;
1858
+ }
1859
+ this.isActive = true;
1860
+ this.calculateDropdownDirection();
1861
+ if (this.settings.searchAutofocus && this.searchInput && this.settings.enableSearchFilter && !this.searchTempl) {
1862
+ setTimeout(() => {
1863
+ this.searchInput.nativeElement.focus();
1864
+ }, 0);
1865
+ }
1866
+ this.onOpen.emit(true);
1867
+ }
458
1868
  closeDropdown() {
1869
+ if (this.searchInput && this.settings.lazyLoading) {
1870
+ this.searchInput.nativeElement.value = "";
1871
+ }
459
1872
  if (this.searchInput) {
460
1873
  this.searchInput.nativeElement.value = "";
461
- this.data = [];
462
- this.data = this.cachedItems;
463
- this.totalHeight = this.itemHeight * this.data.length;
464
- this.totalRows = this.data.length;
465
- this.updateView(this.scrollTop);
466
1874
  }
467
1875
  this.filter = "";
468
1876
  this.isActive = false;
1877
+ this.searchTerm$.next('');
469
1878
  this.onClose.emit(false);
470
1879
  }
471
- toggleSelectAll() {
1880
+ closeDropdownOnClickOut() {
1881
+ if (this.isActive) {
1882
+ if (this.searchInput && this.settings.lazyLoading) {
1883
+ this.searchInput.nativeElement.value = "";
1884
+ }
1885
+ if (this.searchInput) {
1886
+ this.searchInput.nativeElement.value = "";
1887
+ }
1888
+ this.filter = "";
1889
+ this.isActive = false;
1890
+ this.clearSearch();
1891
+ this.searchTerm$.next('');
1892
+ this.onClose.emit(false);
1893
+ }
1894
+ }
1895
+ toggleSelectAll(event) {
472
1896
  if (!this.isSelectAll) {
473
1897
  this.selectedItems = [];
474
- this.selectedItems = this.data.slice();
1898
+ if (this.settings.groupBy) {
1899
+ this.groupedData.forEach((obj) => {
1900
+ obj.selected = !obj.disabled;
1901
+ });
1902
+ this.groupCachedItems.forEach((obj) => {
1903
+ obj.selected = !obj.disabled;
1904
+ });
1905
+ }
1906
+ // this.selectedItems = this.data.slice();
1907
+ this.selectedItems = this.data.filter((individualData) => !individualData.disabled);
475
1908
  this.isSelectAll = true;
476
1909
  this.onChangeCallback(this.selectedItems);
477
1910
  this.onTouchedCallback(this.selectedItems);
478
1911
  this.onSelectAll.emit(this.selectedItems);
479
1912
  }
480
1913
  else {
1914
+ if (this.settings.groupBy) {
1915
+ this.groupedData.forEach((obj) => {
1916
+ obj.selected = false;
1917
+ });
1918
+ this.groupCachedItems.forEach((obj) => {
1919
+ obj.selected = false;
1920
+ });
1921
+ }
481
1922
  this.selectedItems = [];
482
1923
  this.isSelectAll = false;
483
1924
  this.onChangeCallback(this.selectedItems);
484
1925
  this.onTouchedCallback(this.selectedItems);
485
1926
  this.onDeSelectAll.emit(this.selectedItems);
486
1927
  }
1928
+ setTimeout(() => {
1929
+ this.calculateDropdownDirection();
1930
+ });
1931
+ event.stopPropagation();
1932
+ }
1933
+ filterGroupedList() {
1934
+ if (this.filter == "" || this.filter == null) {
1935
+ this.clearSearch();
1936
+ return;
1937
+ }
1938
+ this.groupedData = this.cloneArray(this.groupCachedItems);
1939
+ this.groupedData = this.groupedData.filter(obj => {
1940
+ let arr = [];
1941
+ if (obj[this.settings.labelKey].toLowerCase().indexOf(this.filter.toLowerCase()) > -1) {
1942
+ arr = obj.list;
1943
+ }
1944
+ else {
1945
+ arr = obj.list.filter(t => {
1946
+ return t[this.settings.labelKey].toLowerCase().indexOf(this.filter.toLowerCase()) > -1;
1947
+ });
1948
+ }
1949
+ obj.list = arr;
1950
+ if (obj[this.settings.labelKey].toLowerCase().indexOf(this.filter.toLowerCase()) > -1) {
1951
+ return arr;
1952
+ }
1953
+ else {
1954
+ return arr.some(cat => {
1955
+ return cat[this.settings.labelKey].toLowerCase().indexOf(this.filter.toLowerCase()) > -1;
1956
+ });
1957
+ }
1958
+ });
1959
+ }
1960
+ toggleFilterSelectAll() {
1961
+ if (!this.isFilterSelectAll) {
1962
+ let added = [];
1963
+ if (this.settings.groupBy) {
1964
+ this.groupedData.forEach((item) => {
1965
+ item.sele;
1966
+ if (item.list) {
1967
+ item.list.forEach((el) => {
1968
+ if (!this.isSelected(el)) {
1969
+ this.addSelected(el);
1970
+ added.push(el);
1971
+ }
1972
+ });
1973
+ }
1974
+ this.updateGroupInfo(item);
1975
+ });
1976
+ this.filteredList.forEach((el) => {
1977
+ if (!this.isSelected(el) && !el.hasOwnProperty('grpTitle')) {
1978
+ this.addSelected(el);
1979
+ added.push(el);
1980
+ }
1981
+ });
1982
+ }
1983
+ else {
1984
+ this.filteredList.forEach((item) => {
1985
+ if (!this.isSelected(item)) {
1986
+ this.addSelected(item);
1987
+ added.push(item);
1988
+ }
1989
+ });
1990
+ }
1991
+ this.isFilterSelectAll = true;
1992
+ this.onFilterSelectAll.emit(added);
1993
+ }
1994
+ else {
1995
+ let removed = [];
1996
+ if (this.settings.groupBy) {
1997
+ this.groupedData.forEach((item) => {
1998
+ if (item.list) {
1999
+ item.list.forEach((el) => {
2000
+ if (this.isSelected(el)) {
2001
+ this.removeSelected(el);
2002
+ removed.push(el);
2003
+ }
2004
+ });
2005
+ }
2006
+ this.updateGroupInfo(item);
2007
+ });
2008
+ this.filteredList.forEach((el) => {
2009
+ if (this.isSelected(el)) {
2010
+ this.removeSelected(el);
2011
+ removed.push(el);
2012
+ }
2013
+ });
2014
+ }
2015
+ else {
2016
+ this.filteredList.forEach((item) => {
2017
+ if (this.isSelected(item)) {
2018
+ this.removeSelected(item);
2019
+ removed.push(item);
2020
+ }
2021
+ });
2022
+ }
2023
+ this.isFilterSelectAll = false;
2024
+ this.onFilterDeSelectAll.emit(removed);
2025
+ }
2026
+ }
2027
+ toggleInfiniteFilterSelectAll() {
2028
+ if (!this.isInfiniteFilterSelectAll) {
2029
+ this.virtualdata.forEach((item) => {
2030
+ if (!this.isSelected(item)) {
2031
+ this.addSelected(item);
2032
+ }
2033
+ });
2034
+ this.isInfiniteFilterSelectAll = true;
2035
+ }
2036
+ else {
2037
+ this.virtualdata.forEach((item) => {
2038
+ if (this.isSelected(item)) {
2039
+ this.removeSelected(item);
2040
+ }
2041
+ });
2042
+ this.isInfiniteFilterSelectAll = false;
2043
+ }
2044
+ }
2045
+ clearSearch() {
2046
+ if (this.settings.groupBy) {
2047
+ this.groupedData = [];
2048
+ this.groupedData = this.cloneArray(this.groupCachedItems);
2049
+ }
2050
+ this.filter = "";
2051
+ this.isFilterSelectAll = false;
2052
+ this.searchTerm$.next('');
2053
+ this.data = this.cachedItems;
2054
+ }
2055
+ onFilterChange(data) {
2056
+ if (this.filter && this.filter == "" || data.length == 0) {
2057
+ this.isFilterSelectAll = false;
2058
+ this.data = this.cachedItems.slice();
2059
+ }
2060
+ let cnt = 0;
2061
+ data.forEach((item) => {
2062
+ if (!item.hasOwnProperty('grpTitle') && this.isSelected(item)) {
2063
+ cnt++;
2064
+ }
2065
+ });
2066
+ if (cnt > 0 && this.filterLength == cnt) {
2067
+ this.isFilterSelectAll = true;
2068
+ }
2069
+ else if (cnt > 0 && this.filterLength != cnt) {
2070
+ this.isFilterSelectAll = false;
2071
+ }
2072
+ this.data = data;
2073
+ }
2074
+ cloneArray(arr) {
2075
+ let i, copy;
2076
+ if (Array.isArray(arr)) {
2077
+ return JSON.parse(JSON.stringify(arr));
2078
+ }
2079
+ else if (typeof arr === 'object') {
2080
+ throw 'Cannot clone array containing an object!';
2081
+ }
2082
+ else {
2083
+ return arr;
2084
+ }
2085
+ }
2086
+ updateGroupInfo(item) {
2087
+ if (item.disabled) {
2088
+ return;
2089
+ }
2090
+ let key = this.settings.groupBy;
2091
+ this.groupedData.forEach((obj) => {
2092
+ let cnt = 0;
2093
+ if (obj.grpTitle && (item[key] == obj[key])) {
2094
+ if (obj.list) {
2095
+ obj.list.forEach((el) => {
2096
+ if (this.isSelected(el)) {
2097
+ cnt++;
2098
+ }
2099
+ });
2100
+ }
2101
+ }
2102
+ if (obj.list && (cnt === obj.list.length) && (item[key] == obj[key])) {
2103
+ obj.selected = true;
2104
+ }
2105
+ else if (obj.list && (cnt != obj.list.length) && (item[key] == obj[key])) {
2106
+ obj.selected = false;
2107
+ }
2108
+ });
2109
+ this.groupCachedItems.forEach((obj) => {
2110
+ let cnt = 0;
2111
+ if (obj.grpTitle && (item[key] == obj[key])) {
2112
+ if (obj.list) {
2113
+ obj.list.forEach((el) => {
2114
+ if (this.isSelected(el)) {
2115
+ cnt++;
2116
+ }
2117
+ });
2118
+ }
2119
+ }
2120
+ if (obj.list && (cnt === obj.list.length) && (item[key] == obj[key])) {
2121
+ obj.selected = true;
2122
+ }
2123
+ else if (obj.list && (cnt != obj.list.length) && (item[key] == obj[key])) {
2124
+ obj.selected = false;
2125
+ }
2126
+ });
487
2127
  }
488
2128
  transformData(arr, field) {
489
2129
  const groupedObj = arr.reduce((prev, cur) => {
@@ -496,71 +2136,249 @@ class AngularMultiSelect {
496
2136
  return prev;
497
2137
  }, {});
498
2138
  const tempArr = [];
499
- Object.keys(groupedObj).map(function (x) {
500
- tempArr.push({ key: x, value: groupedObj[x] });
2139
+ Object.keys(groupedObj).map((x) => {
2140
+ let obj = {};
2141
+ let disabledChildrens = [];
2142
+ obj["grpTitle"] = true;
2143
+ obj[this.settings.labelKey] = x;
2144
+ obj[this.settings.groupBy] = x;
2145
+ obj['selected'] = false;
2146
+ obj['list'] = [];
2147
+ let cnt = 0;
2148
+ groupedObj[x].forEach((item) => {
2149
+ item['list'] = [];
2150
+ if (item.disabled) {
2151
+ this.isDisabledItemPresent = true;
2152
+ disabledChildrens.push(item);
2153
+ }
2154
+ obj.list.push(item);
2155
+ if (this.isSelected(item)) {
2156
+ cnt++;
2157
+ }
2158
+ });
2159
+ if (cnt == obj.list.length) {
2160
+ obj.selected = true;
2161
+ }
2162
+ else {
2163
+ obj.selected = false;
2164
+ }
2165
+ // Check if current group item's all childrens are disabled or not
2166
+ obj['disabled'] = disabledChildrens.length === groupedObj[x].length;
2167
+ tempArr.push(obj);
2168
+ // obj.list.forEach((item: any) => {
2169
+ // tempArr.push(item);
2170
+ // });
501
2171
  });
502
2172
  return tempArr;
503
2173
  }
504
- renderChunk(fromPos, howMany) {
505
- this.chunkArray = [];
506
- this.chunkIndex = [];
507
- var finalItem = fromPos + howMany;
508
- if (finalItem > this.totalRows)
509
- finalItem = this.totalRows;
510
- for (var i = fromPos; i < finalItem; i++) {
511
- this.chunkIndex.push((i * this.itemHeight) + 'px');
512
- this.chunkArray.push(this.data[i]);
513
- }
514
- }
515
- onScroll(e) {
516
- this.scrollTop = e.target.scrollTop;
517
- this.updateView(this.scrollTop);
518
- }
519
- updateView(scrollTop) {
520
- var scrollPos = scrollTop ? scrollTop : 0;
521
- var first = (scrollPos / this.itemHeight) - this.screenItemsLen;
522
- var firstTemp = "" + first;
523
- first = parseInt(firstTemp) < 0 ? 0 : parseInt(firstTemp);
524
- this.renderChunk(first, this.cachedItemsLen);
525
- this.lastRepaintY = scrollPos;
526
- }
527
2174
  filterInfiniteList(evt) {
528
- var filteredElems = [];
529
- this.data = this.cachedItems.slice();
530
- if (evt.target.value.toString() != '') {
531
- this.data.filter(function (el) {
532
- for (var prop in el) {
533
- if (el[prop].toString().toLowerCase().indexOf(evt.target.value.toString().toLowerCase()) >= 0) {
534
- filteredElems.push(el);
535
- break;
2175
+ let filteredElems = [];
2176
+ if (this.settings.groupBy) {
2177
+ this.groupedData = this.groupCachedItems.slice();
2178
+ }
2179
+ else {
2180
+ this.data = this.cachedItems.slice();
2181
+ this.virtualdata = this.cachedItems.slice();
2182
+ }
2183
+ if ((evt != null || evt != '') && !this.settings.groupBy) {
2184
+ if (this.settings.searchBy.length > 0) {
2185
+ for (let t = 0; t < this.settings.searchBy.length; t++) {
2186
+ this.virtualdata.filter((el) => {
2187
+ if (el[this.settings.searchBy[t].toString()].toString().toLowerCase().indexOf(evt.toString().toLowerCase()) >= 0) {
2188
+ filteredElems.push(el);
2189
+ }
2190
+ });
2191
+ }
2192
+ }
2193
+ else {
2194
+ this.virtualdata.filter(function (el) {
2195
+ for (let prop in el) {
2196
+ if (el[prop].toString().toLowerCase().indexOf(evt.toString().toLowerCase()) >= 0) {
2197
+ filteredElems.push(el);
2198
+ break;
2199
+ }
2200
+ }
2201
+ });
2202
+ }
2203
+ this.virtualdata = [];
2204
+ this.virtualdata = filteredElems;
2205
+ this.infiniteFilterLength = this.virtualdata.length;
2206
+ }
2207
+ if (evt.toString() != '' && this.settings.groupBy) {
2208
+ this.groupedData.filter(function (el) {
2209
+ if (el.hasOwnProperty('grpTitle')) {
2210
+ filteredElems.push(el);
2211
+ }
2212
+ else {
2213
+ for (let prop in el) {
2214
+ if (el[prop].toString().toLowerCase().indexOf(evt.toString().toLowerCase()) >= 0) {
2215
+ filteredElems.push(el);
2216
+ break;
2217
+ }
536
2218
  }
537
2219
  }
538
2220
  });
539
- //this.cachedItems = this.data;
540
- this.totalHeight = this.itemHeight * filteredElems.length;
541
- this.totalRows = filteredElems.length;
542
- this.data = [];
543
- this.data = filteredElems;
544
- this.updateView(this.scrollTop);
545
- }
546
- else if (evt.target.value.toString() == '' && this.cachedItems.length > 0) {
547
- this.data = [];
548
- this.data = this.cachedItems;
549
- this.totalHeight = this.itemHeight * this.data.length;
550
- this.totalRows = this.data.length;
551
- this.updateView(this.scrollTop);
552
- }
553
- }
554
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: AngularMultiSelect, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
555
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.14", type: AngularMultiSelect, isStandalone: false, selector: "angular-multiselect, angular2-multiselect", inputs: { data: "data", settings: "settings" }, outputs: { onSelect: "onSelect", onDeSelect: "onDeSelect", onSelectAll: "onSelectAll", onDeSelectAll: "onDeSelectAll", onOpen: "onOpen", onClose: "onClose" }, host: { 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 }], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"stackline-dropdown\" [ngClass]=\"getDropdownClasses()\" (clickOutside)=\"closeDropdown()\">\n <div class=\"selected-list\">\n <div class=\"c-btn\" (click)=\"toggleDropdown($event)\" [ngClass]=\"{'disabled': settings.disabled}\">\n <span *ngIf=\"selectedItems?.length == 0\">{{settings.text}}</span>\n <span *ngIf=\"settings.singleSelection\">\n <span *ngFor=\"let item of selectedItems;trackBy: trackByFn;\">\n {{item[settings.labelKey]}}\n </span>\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;let k = index\" [hidden]=\"k > settings.badgeShowLimit-1\">\n <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{item[settings.labelKey]}}</span>\n <span *ngIf=\"badgeTempl\" class=\"c-label\">\n <c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer>\n </span>\n <span class=\"fa fa-remove\" (click)=\"onItemClick(item,k,$event)\"></span>\n </div>\n </div> \n <span class=\"countplaceholder\" *ngIf=\"selectedItems?.length > settings.badgeShowLimit\">+{{selectedItems?.length - settings.badgeShowLimit }}</span>\n <span class=\"fa\" [ngClass]=\"{'fa-angle-down': !isActive,'fa-angle-up':isActive}\"></span>\n </div> \n </div>\n <div class=\"dropdown-list\" [hidden]=\"!isActive\">\n <div class=\"arrow-up arrow-2\"></div>\n <div class=\"arrow-up\"></div>\n <div class=\"list-area\">\n <div class=\"pure-checkbox select-all\" *ngIf=\"settings.enableCheckAll && !settings.singleSelection && !settings.limitSelection\" (click)=\"toggleSelectAll()\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelectAll\" [disabled]=\"settings.limitSelection == selectedItems?.length\"/>\n <label>\n <span [hidden]=\"isSelectAll\">{{settings.selectAllText}}</span>\n <span [hidden]=\"!isSelectAll\">{{settings.unSelectAllText}}</span>\n </label>\n </div> \n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter && !settings.lazyLoading\">\n <span class=\"fa fa-search\"></span>\n <input #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\" [(ngModel)]=\"filter\">\n </div> \n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter && settings.lazyLoading\">\n <span class=\"fa fa-search\"></span>\n <input #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\" (keyup)=\"filterInfiniteList($event)\">\n </div>\n <ul *ngIf=\"!settings.groupBy\" [style.maxHeight] = \"settings.maxHeight+'px'\" class=\"lazyContainer\" >\n <span *ngIf=\"itemTempl\">\n <li *ngFor=\"let item of data | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </span>\n <span *ngIf=\"!itemTempl && !settings.lazyLoading\" >\n <li *ngFor=\"let item of data | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\n </li>\n </span>\n <span *ngIf=\"!itemTempl && settings.lazyLoading\" >\n <div [ngStyle]=\"{'height':totalHeight+'px'}\" style=\"position: relative;\">\n\n \n <li *ngFor=\"let item of chunkArray | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" style=\"position: absolute;width: 100%;\" class=\"pure-checkbox\" [styleProp]=\"chunkIndex[i]\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\n </li>\n </div>\n </span>\n </ul>\n <div *ngIf=\"settings.groupBy\" [style.maxHeight] = \"settings.maxHeight+'px'\" style=\"overflow: auto;\">\n <ul *ngFor=\"let obj of groupedData ; let i = index;\" class=\"list-grp\">\n <h4 *ngIf=\"(obj.value | listFilter:filter ).length > 0\">{{obj.key}}</h4>\n <span *ngIf=\"itemTempl\" >\n <li *ngFor=\"let item of obj.value | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </span>\n <span *ngIf=\"!itemTempl\" >\n <li *ngFor=\"let item of obj.value | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\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", isInline: true, styles: [".stackline-dropdown{position:relative}.c-btn{display:inline-block;background:#fff;border:1px solid #ccc;border-radius:3px;font-size:14px;color:#333}.c-btn.disabled{background:#ccc}.c-btn:focus{outline:none}.selected-list .c-list{display:flex;flex:1 1 auto;align-items:center;flex-wrap:wrap;min-width:0;float:none;padding:0;margin:0;width:auto}.selected-list .c-list .c-token{list-style:none;padding:0 5px;background:#0079fe;color:#fff;border-radius:2px;margin-right:4px;margin-top:2px;float:left}.selected-list .c-list .c-token .c-label{display:block;float:left}.selected-list .c-list .c-token .fa-remove{margin-left:1px;font-size:12px}.selected-list .fa-angle-down,.selected-list .fa-angle-up{font-size:15pt;position:absolute;right:10px;top:50%;transform:translateY(-50%)}.selected-list .countplaceholder{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;align-self:center;margin:0 0 0 6px;line-height:1}.selected-list .c-btn{box-sizing:border-box;width:100%;box-shadow:0 1px 5px #959595;padding:10px 36px 10px 10px;cursor:pointer;display:flex;align-items:center;flex-wrap:nowrap;position:relative}.dropdown-list{position:absolute;padding-top:14px;width:100%;z-index:9999}.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 ul li:hover{background:#f5f5f5}.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{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-2{border-bottom:15px solid #ccc;top:-1px}.list-area{border:1px solid #ccc;border-radius:3px;background:#fff;margin:0;box-shadow:0 1px 5px #959595}.select-all{padding:10px;border-bottom:1px solid #ccc;text-align:left}.list-filter{border-bottom:1px solid #ccc;position:relative}.list-filter input{border:0px;width:100%;height:35px;padding:0 0 0 35px}.list-filter input:focus{outline:none}.list-filter .fa{position:absolute;top:10px;left:13px;color:#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{border-color:#0079fe;background-color:#f2f2f2}.pure-checkbox input[type=checkbox]:active+label:before{transition-duration:0s}.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;color:#000;font-weight:300}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";color:#0079fe;position:absolute;top:50%;left:0;width:14px;height:14px;margin-top:-9px;border:2px solid #0079FE;text-align:center;transition:all .4s ease}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";background-color:#0079fe;position:absolute;top:50%;left:4px;width:10px;height:10px;margin-top:-5px;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:4px;width:8px;height:3px;margin-top:-4px;border-style:solid;border-color:#fff;border-width:0 0 3px 3px;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:before{background:#0079fe}.pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.list-message{text-align:center}.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}.stackline-dropdown.theme-material,.stackline-dropdown.theme-dark,.stackline-dropdown.theme-custom{--ms-primary: #3f51b5;--ms-primary-soft: rgba(63, 81, 181, .12);--ms-surface: #ffffff;--ms-surface-soft: #f5f7fb;--ms-surface-muted: #e8eaf6;--ms-outline: #c5cae9;--ms-outline-strong: #7986cb;--ms-on-surface: #212121;--ms-on-surface-muted: #5f6368;--ms-chip-bg: #e8eaf6;--ms-chip-text: #303f9f;--ms-chip-remove: #303f9f;--ms-divider: rgba(125, 119, 134, .16);--ms-section-bg: rgba(247, 242, 250, .76);--ms-selected-text: var(--ms-primary);--ms-shadow: 0 1px 2px rgba(33, 33, 33, .16), 0 12px 32px rgba(63, 81, 181, .12);--ms-shadow-soft: 0 1px 2px rgba(33, 33, 33, .12), 0 4px 12px rgba(33, 33, 33, .08);display:block;width:100%;color:var(--ms-on-surface);font:inherit}.stackline-dropdown.theme-dark{--ms-primary: #8ab4f8;--ms-primary-soft: rgba(138, 180, 248, .18);--ms-surface: #151a23;--ms-surface-soft: #202736;--ms-surface-muted: #111722;--ms-outline: #384456;--ms-outline-strong: #8ab4f8;--ms-on-surface: #edf2f7;--ms-on-surface-muted: #aab6c5;--ms-chip-bg: #263247;--ms-chip-text: #d7e6ff;--ms-chip-remove: #d7e6ff;--ms-divider: rgba(170, 182, 197, .18);--ms-section-bg: #101620;--ms-selected-text: #d7e6ff;--ms-shadow: 0 20px 50px rgba(0, 0, 0, .42);--ms-shadow-soft: 0 1px 2px rgba(0, 0, 0, .45), 0 10px 24px rgba(0, 0, 0, .28)}.stackline-dropdown.theme-custom{--ms-primary: var(--stackline-ms-primary, #0f766e);--ms-primary-soft: var(--stackline-ms-primary-soft, rgba(15, 118, 110, .14));--ms-surface: var(--stackline-ms-surface, #ffffff);--ms-surface-soft: var(--stackline-ms-surface-soft, #ecfdf5);--ms-surface-muted: var(--stackline-ms-surface-muted, #d1fae5);--ms-outline: var(--stackline-ms-outline, #99f6e4);--ms-outline-strong: var(--stackline-ms-outline-strong, #0f766e);--ms-on-surface: var(--stackline-ms-on-surface, #102a2a);--ms-on-surface-muted: var(--stackline-ms-on-surface-muted, #47615f);--ms-chip-bg: var(--stackline-ms-chip-bg, #ccfbf1);--ms-chip-text: var(--stackline-ms-chip-text, #115e59);--ms-chip-remove: var(--stackline-ms-chip-remove, #115e59);--ms-divider: var(--stackline-ms-divider, rgba(15, 118, 110, .16));--ms-section-bg: var(--stackline-ms-section-bg, #f0fdfa);--ms-selected-text: var(--stackline-ms-selected-text, var(--ms-primary));--ms-shadow: var(--stackline-ms-shadow, 0 18px 42px rgba(15, 118, 110, .15));--ms-shadow-soft: var(--stackline-ms-shadow-soft, 0 1px 2px rgba(15, 118, 110, .16), 0 8px 18px rgba(15, 118, 110, .09))}.stackline-dropdown.theme-material .selected-list,.stackline-dropdown.theme-dark .selected-list,.stackline-dropdown.theme-custom .selected-list{width:100%}.stackline-dropdown.theme-material .selected-list .c-btn,.stackline-dropdown.theme-dark .selected-list .c-btn,.stackline-dropdown.theme-custom .selected-list .c-btn{position:relative;display:flex;align-items:center;flex-wrap:nowrap;gap:8px;width:100%;min-height:56px;padding:11px 54px 11px 16px;border-radius:18px;border:1px solid var(--ms-outline);background:var(--ms-surface);box-shadow:var(--ms-shadow-soft);color:var(--ms-on-surface);cursor:pointer;font-size:inherit;line-height:1.45;transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease,transform .16s ease}.stackline-dropdown.theme-material .selected-list .c-btn:hover,.stackline-dropdown.theme-dark .selected-list .c-btn:hover,.stackline-dropdown.theme-custom .selected-list .c-btn:hover{border-color:var(--ms-outline-strong)}.stackline-dropdown.theme-material .selected-list .c-btn.disabled,.stackline-dropdown.theme-dark .selected-list .c-btn.disabled,.stackline-dropdown.theme-custom .selected-list .c-btn.disabled{background:var(--ms-surface);cursor:not-allowed;opacity:.72}.stackline-dropdown.theme-material .selected-list .c-list,.stackline-dropdown.theme-dark .selected-list .c-list,.stackline-dropdown.theme-custom .selected-list .c-list{display:flex;flex:1 1 auto;flex-wrap:wrap;gap:8px;width:auto;min-width:0;margin:0;padding:0;float:none}.stackline-dropdown.theme-material .selected-list .c-list .c-token,.stackline-dropdown.theme-dark .selected-list .c-list .c-token,.stackline-dropdown.theme-custom .selected-list .c-list .c-token{position:relative;display:inline-block;vertical-align:middle;min-height:32px;max-width:100%;padding:6px 30px 6px 12px;background:var(--ms-chip-bg);color:var(--ms-chip-text);border-radius:999px;box-shadow:inset 0 0 0 1px #6750a414;line-height:1.35;white-space:normal;overflow-wrap:anywhere;margin:0;float:none}.stackline-dropdown.theme-material .selected-list .c-list .c-token .c-label,.stackline-dropdown.theme-dark .selected-list .c-list .c-token .c-label,.stackline-dropdown.theme-custom .selected-list .c-list .c-token .c-label{display:inline-flex;align-items:center;float:none;min-width:0;max-width:100%;line-height:1.3;font-weight:500;white-space:normal;overflow-wrap:anywhere}.stackline-dropdown.theme-material .selected-list .c-list .c-token .fa-remove,.stackline-dropdown.theme-dark .selected-list .c-list .c-token .fa-remove,.stackline-dropdown.theme-custom .selected-list .c-list .c-token .fa-remove{position:absolute;right:10px;top:50%;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:0;transform:translateY(-50%);color:var(--ms-chip-remove);cursor:pointer}.stackline-dropdown.theme-material .selected-list .countplaceholder,.stackline-dropdown.theme-dark .selected-list .countplaceholder,.stackline-dropdown.theme-custom .selected-list .countplaceholder{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;align-self:center;margin:0;line-height:1;color:var(--ms-on-surface-muted);font-size:.8rem;font-weight:600}.stackline-dropdown.theme-material .selected-list .fa-angle-down,.stackline-dropdown.theme-dark .selected-list .fa-angle-down,.stackline-dropdown.theme-custom .selected-list .fa-angle-down,.stackline-dropdown.theme-material .selected-list .fa-angle-up,.stackline-dropdown.theme-dark .selected-list .fa-angle-up,.stackline-dropdown.theme-custom .selected-list .fa-angle-up{position:absolute;top:50%;right:16px;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;transform:translateY(-50%);color:var(--ms-on-surface-muted);font-size:15pt;pointer-events:none}.stackline-dropdown.theme-material .dropdown-list,.stackline-dropdown.theme-dark .dropdown-list,.stackline-dropdown.theme-custom .dropdown-list{position:absolute;width:100%;padding-top:8px;z-index:99999}.stackline-dropdown.theme-material .arrow-up,.stackline-dropdown.theme-dark .arrow-up,.stackline-dropdown.theme-custom .arrow-up,.stackline-dropdown.theme-material .arrow-down,.stackline-dropdown.theme-dark .arrow-down,.stackline-dropdown.theme-custom .arrow-down,.stackline-dropdown.theme-material .arrow-2,.stackline-dropdown.theme-dark .arrow-2,.stackline-dropdown.theme-custom .arrow-2{display:none}.stackline-dropdown.theme-material .list-area,.stackline-dropdown.theme-dark .list-area,.stackline-dropdown.theme-custom .list-area{overflow:hidden;border-radius:22px;background:var(--ms-surface);border:1px solid var(--ms-outline);box-shadow:var(--ms-shadow);margin:0}.stackline-dropdown.theme-material .select-all,.stackline-dropdown.theme-dark .select-all,.stackline-dropdown.theme-custom .select-all{padding:10px 14px;border-bottom:1px solid var(--ms-divider);background:var(--ms-section-bg);text-align:left}.stackline-dropdown.theme-material .list-filter,.stackline-dropdown.theme-dark .list-filter,.stackline-dropdown.theme-custom .list-filter{position:relative;display:flex;align-items:center;min-height:52px;padding-left:48px;padding-right:44px;border-bottom:1px solid var(--ms-divider);background:var(--ms-surface)}.stackline-dropdown.theme-material .list-filter input,.stackline-dropdown.theme-dark .list-filter input,.stackline-dropdown.theme-custom .list-filter input{width:100%;height:100%;border:0;background:transparent;color:var(--ms-on-surface);font:inherit;padding:0}.stackline-dropdown.theme-material .list-filter input::placeholder,.stackline-dropdown.theme-dark .list-filter input::placeholder,.stackline-dropdown.theme-custom .list-filter input::placeholder{color:var(--ms-on-surface-muted)}.stackline-dropdown.theme-material .list-filter input:focus,.stackline-dropdown.theme-dark .list-filter input:focus,.stackline-dropdown.theme-custom .list-filter input:focus{outline:none}.stackline-dropdown.theme-material .list-filter .fa,.stackline-dropdown.theme-dark .list-filter .fa,.stackline-dropdown.theme-custom .list-filter .fa{position:absolute;top:50%;left:16px;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;transform:translateY(-50%);color:var(--ms-on-surface-muted)}.stackline-dropdown.theme-material .dropdown-list ul,.stackline-dropdown.theme-dark .dropdown-list ul,.stackline-dropdown.theme-custom .dropdown-list ul{list-style:none;margin:0;padding:8px;overflow:auto}.stackline-dropdown.theme-material .dropdown-list ul li,.stackline-dropdown.theme-dark .dropdown-list ul li,.stackline-dropdown.theme-custom .dropdown-list ul li{align-items:center;min-height:0;margin:4px;padding:12px 14px;border-radius:14px;cursor:pointer;text-align:left;line-height:1.35;transition:background-color .16s ease,color .16s ease}.stackline-dropdown.theme-material .dropdown-list ul li:first-child,.stackline-dropdown.theme-dark .dropdown-list ul li:first-child,.stackline-dropdown.theme-custom .dropdown-list ul li:first-child{padding-top:12px}.stackline-dropdown.theme-material .dropdown-list ul li:last-child,.stackline-dropdown.theme-dark .dropdown-list ul li:last-child,.stackline-dropdown.theme-custom .dropdown-list ul li:last-child{padding-bottom:12px}.stackline-dropdown.theme-material .dropdown-list ul li:hover,.stackline-dropdown.theme-dark .dropdown-list ul li:hover,.stackline-dropdown.theme-custom .dropdown-list ul li:hover{background:var(--ms-surface-soft)}.stackline-dropdown.theme-material .pure-checkbox,.stackline-dropdown.theme-dark .pure-checkbox,.stackline-dropdown.theme-custom .pure-checkbox{position:relative}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label{position:relative;display:block;width:100%;margin:0;padding-left:32px;color:inherit;cursor:pointer;font-weight:500;-webkit-user-select:none;user-select:none}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:16px;height:16px;margin-top:-10px;border:2px solid var(--ms-outline-strong);border-radius:5px;background:var(--ms-surface);transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label:after,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label:after,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:5px;width:8px;height:3px;margin-top:-4px;border-style:solid;border-color:#fff;border-width:0 0 3px 3px;border-image:none;background:transparent;transform:rotate(-45deg) scale(0);transform-origin:50%;transition:transform .16s ease}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:hover+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:hover+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:hover+label:before{border-color:var(--ms-primary);background:var(--ms-surface-soft)}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:checked+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:checked+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:checked+label:before{border-color:var(--ms-primary);background:var(--ms-primary)}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:checked+label:after,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:checked+label:after,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.stackline-dropdown.theme-material .list-message,.stackline-dropdown.theme-dark .list-message,.stackline-dropdown.theme-custom .list-message{margin:0;padding:20px 14px;color:var(--ms-on-surface-muted);text-align:center}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => i1.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(() => i2.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(() => i2.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i2.NgModel), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i0.forwardRef(() => ClickOutsideDirective), selector: "[clickOutside]", outputs: ["clickOutside"] }, { kind: "directive", type: i0.forwardRef(() => styleDirective), selector: "[styleProp]", inputs: ["styleProp"] }, { kind: "component", type: i0.forwardRef(() => TemplateRenderer), selector: "c-templateRenderer", inputs: ["data", "item"] }, { kind: "pipe", type: i0.forwardRef(() => ListFilterPipe), name: "listFilter" }] });
2221
+ this.groupedData = [];
2222
+ this.groupedData = filteredElems;
2223
+ this.infiniteFilterLength = this.groupedData.length;
2224
+ }
2225
+ else if (evt.toString() == '' && this.cachedItems.length > 0) {
2226
+ this.virtualdata = [];
2227
+ this.virtualdata = this.cachedItems;
2228
+ this.infiniteFilterLength = 0;
2229
+ }
2230
+ if (this.virtualScroller) {
2231
+ this.virtualScroller.refresh();
2232
+ }
2233
+ }
2234
+ resetInfiniteSearch() {
2235
+ this.filter = "";
2236
+ this.isInfiniteFilterSelectAll = false;
2237
+ this.virtualdata = [];
2238
+ this.virtualdata = this.cachedItems;
2239
+ this.groupedData = this.groupCachedItems;
2240
+ this.searchTerm$.next('');
2241
+ this.infiniteFilterLength = 0;
2242
+ }
2243
+ onScrollEnd(e) {
2244
+ if (e.endIndex === this.data.length - 1 || e.startIndex === 0) {
2245
+ }
2246
+ this.onScrollToEnd.emit(e);
2247
+ }
2248
+ ngOnDestroy() {
2249
+ if (this.subscription) {
2250
+ this.subscription.unsubscribe();
2251
+ }
2252
+ }
2253
+ selectGroup(item) {
2254
+ if (item.disabled) {
2255
+ return;
2256
+ }
2257
+ if (item.selected) {
2258
+ item.selected = false;
2259
+ item.list.forEach((obj) => {
2260
+ this.removeSelected(obj);
2261
+ });
2262
+ this.onGroupDeSelect.emit(item);
2263
+ this.updateGroupInfo(item);
2264
+ }
2265
+ else {
2266
+ item.selected = true;
2267
+ item.list.forEach((obj) => {
2268
+ if (!this.isSelected(obj)) {
2269
+ this.addSelected(obj);
2270
+ }
2271
+ });
2272
+ this.onGroupSelect.emit(item);
2273
+ this.updateGroupInfo(item);
2274
+ }
2275
+ }
2276
+ addFilterNewItem() {
2277
+ this.onAddFilterNewItem.emit(this.filter);
2278
+ this.filterPipe.transform(this.data, this.filter, this.settings.searchBy);
2279
+ }
2280
+ calculateDropdownDirection() {
2281
+ let shouldOpenTowardsTop = this.settings.position == 'top';
2282
+ const elem = this.stacklineDropdown.nativeElement;
2283
+ const dropdownWidth = elem.clientWidth;
2284
+ this.dropDownWidth = dropdownWidth;
2285
+ this.dropDownLeft = this.settings.tagToBody ? elem.getBoundingClientRect().x : 0;
2286
+ if (this.settings.position == 'top' && !this.settings.autoPosition) {
2287
+ this.openTowardsTop(true);
2288
+ }
2289
+ else if (this.settings.position == 'bottom' && !this.settings.autoPosition) {
2290
+ this.openTowardsTop(false);
2291
+ }
2292
+ if (this.settings.autoPosition) {
2293
+ const dropdownHeight = this.defaultSettings.maxHeight;
2294
+ const viewportHeight = document.documentElement.clientHeight;
2295
+ const selectedListBounds = this.selectedListElem.nativeElement.getBoundingClientRect();
2296
+ const spaceOnTop = selectedListBounds.top;
2297
+ const spaceOnBottom = viewportHeight - selectedListBounds.top;
2298
+ if (spaceOnBottom < spaceOnTop && dropdownHeight < spaceOnTop) {
2299
+ this.openTowardsTop(true);
2300
+ }
2301
+ else {
2302
+ this.openTowardsTop(false);
2303
+ }
2304
+ // Keep preference if there is not enough space on either the top or bottom
2305
+ /* if (spaceOnTop || spaceOnBottom) {
2306
+ if (shouldOpenTowardsTop) {
2307
+ shouldOpenTowardsTop = spaceOnTop;
2308
+ } else {
2309
+ shouldOpenTowardsTop = !spaceOnBottom;
2310
+ }
2311
+ } */
2312
+ }
2313
+ }
2314
+ openTowardsTop(value) {
2315
+ const elem = this.stacklineDropdown.nativeElement;
2316
+ if (value && this.selectedListElem.nativeElement.clientHeight) {
2317
+ this.dropdownListYOffset = 15 - this.selectedListElem.nativeElement.clientHeight;
2318
+ if (this.settings.tagToBody) {
2319
+ this.dropDownTop = (elem.getBoundingClientRect().y - this.selectedListElem.nativeElement.clientHeight * 2 - 15 - this.defaultSettings.maxHeight) + 'px';
2320
+ this.dropDownBottom = null;
2321
+ }
2322
+ else {
2323
+ this.dropDownTop = null;
2324
+ this.dropDownBottom = (this.selectedListElem.nativeElement.clientHeight + 15) + 'px';
2325
+ }
2326
+ this.settings.position = 'top';
2327
+ }
2328
+ else {
2329
+ if (this.settings.tagToBody) {
2330
+ this.dropDownTop = (elem.getBoundingClientRect().y + elem.clientHeight + 1) + 'px';
2331
+ this.dropDownBottom = null;
2332
+ }
2333
+ else {
2334
+ this.dropDownTop = null;
2335
+ this.dropDownBottom = null;
2336
+ }
2337
+ this.dropdownListYOffset = 0;
2338
+ this.settings.position = 'bottom';
2339
+ }
2340
+ }
2341
+ clearSelection(e) {
2342
+ if (this.settings.groupBy) {
2343
+ this.groupCachedItems.forEach((obj) => {
2344
+ obj.selected = false;
2345
+ });
2346
+ }
2347
+ this.clearSearch();
2348
+ this.selectedItems = [];
2349
+ this.isSelectAll = false;
2350
+ this.onChangeCallback(this.selectedItems);
2351
+ this.onTouchedCallback(this.selectedItems);
2352
+ this.onDeSelectAll.emit(this.selectedItems);
2353
+ }
2354
+ filteritems(evt) {
2355
+ this.filteredList = this.filterPipe.transform(this.cachedItems, evt.target.value, this.settings.searchBy);
2356
+ if (this.filteredList) {
2357
+ let len = 0;
2358
+ this.filteredList.forEach((obj, i) => {
2359
+ if (obj.disabled) {
2360
+ this.isDisabledItemPresent = true;
2361
+ }
2362
+ if (!obj.hasOwnProperty('grpTitle')) {
2363
+ len++;
2364
+ }
2365
+ });
2366
+ this.filterLength = len;
2367
+ }
2368
+ this.onFilterChange(this.filteredList);
2369
+ }
2370
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AngularMultiSelect, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: ListFilterPipe }], target: i0.ɵɵFactoryTarget.Component });
2371
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.7", type: AngularMultiSelect, isStandalone: false, selector: "angular-multiselect, 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: "stacklineDropdown", first: true, predicate: ["stacklineDropdown"], descendants: true }, { propertyName: "virtualScroller", first: true, predicate: VirtualScrollerComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"stackline-dropdown\" [ngClass]=\"{'is-open': isActive, 'is-disabled': settings.disabled, 'is-loading': loading}\" (clickOutside)=\"closeDropdownOnClickOut()\" #stacklineDropdown>\n <div class=\"selected-list\" #selectedList>\n <div class=\"c-btn\"\n (click)=\"toggleDropdown($event)\"\n [ngClass]=\"{'disabled': settings.disabled, 'is-active': isActive, 'has-selection': selectedItems?.length > 0, 'single-select-mode': settings.singleSelection}\"\n [attr.tabindex]=\"0\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isActive\"\n [attr.aria-disabled]=\"settings.disabled\">\n\n <span class=\"c-placeholder\" *ngIf=\"selectedItems?.length == 0\">{{settings.text}}</span>\n <span class=\"c-single-value\" *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 c-chip-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'\"></c-icon>\n </span>\n </div>\n </span>\n <div class=\"c-list c-chip-list\" *ngIf=\"selectedItems?.length > 0 && !settings.singleSelection\">\n <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\" [hidden]=\"k > settings.badgeShowLimit-1\">\n <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{item[settings.labelKey]}}</span>\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'\"></c-icon>\n </span>\n </div>\n </div>\n <span class=\"countplaceholder\" *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\" (click)=\"clearSelection($event);$event.stopPropagation()\">\n <c-icon [name]=\"'remove'\"></c-icon>\n </span>\n <span *ngIf=\"!isActive\" class=\"c-angle-down\">\n <c-icon [name]=\"'angle-down'\"></c-icon>\n </span>\n <span *ngIf=\"isActive\" class=\"c-angle-up\">\n <c-icon [name]=\"'angle-up'\"></c-icon>\n\n </span>\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 role=\"presentation\"\n [attr.aria-hidden]=\"!isActive\"\n [hidden]=\"!isActive\">\n <div [ngClass]=\"{'arrow-up': settings.position == 'bottom', 'arrow-down': settings.position == 'top'}\" 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\" *ngIf=\"settings.enableCheckAll && !settings.singleSelection && !settings.limitSelection && data?.length > 0 && !isDisabledItemPresent\"\n >\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelectAll\" [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\" (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\" (click)=\"resetInfiniteSearch()\">\n <c-icon [name]=\"'clear'\"></c-icon>\n </span>\n\n <input class=\"c-input\" *ngIf=\"settings.groupBy && !settings.lazyLoading && !searchTempl\" #searchInput 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 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\" [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\" *ngIf=\"!settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent\">\n <div class=\"pure-checkbox select-all\" *ngIf=\"!settings.groupBy && filter?.length > 0 && filterLength > 0 && !settings.singleSelection\" (click)=\"toggleFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isFilterSelectAll\" [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\" *ngIf=\"settings.groupBy && filter?.length > 0 && groupedData?.length > 0 && !settings.singleSelection\" (click)=\"toggleFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isFilterSelectAll && filter?.length > 0\" [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\" *ngIf=\"settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent && !settings.singleSelection\">\n <div class=\"pure-checkbox select-all\" *ngIf=\"filter?.length > 0 && infiniteFilterLength > 0\" (click)=\"toggleInfiniteFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isInfiniteFilterSelectAll\" [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\" [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)\" [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\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (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)\" class=\"pure-checkbox\"\n [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [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\" [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)\" [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\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll2 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (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)\" class=\"pure-checkbox\"\n [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [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\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll3 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (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\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"isSelected(item)\" [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\" [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)\" [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\" [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)\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"item.selected\" [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()\" [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)\" [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\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <virtual-scroller [items]=\"groupedData\" (vsUpdate)=\"viewPortItems = $event\" (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\">\n <ul virtualScroller #scroll4 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (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\" [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\" 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\" [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\" [checked]=\"isSelected(item)\" [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\" [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)\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"item.selected\" [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()\" [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)\" [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 <!-- <span *ngFor=\"let item of groupedData ; let i = index;\">\n <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !item.grpTitle\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n />\n <label>{{item[settings.labelKey]}}</label>\n </li>\n <li *ngIf=\"item.grpTitle && !settings.selectGroup\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && settings.selectGroup\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n />\n <label>{{item[settings.labelKey]}}</label>\n </li>\n <li (click)=\"selectGroup(item)\" *ngIf=\"item.grpTitle && settings.selectGroup\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && settings.selectGroup\" type=\"checkbox\" [checked]=\"item.selected\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n />\n <label>{{item[settings.labelKey]}}</label>\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%}.stackline-dropdown{--ms-primary: #3f51b5;--ms-primary-soft: rgba(63, 81, 181, .12);--ms-surface: #ffffff;--ms-surface-soft: #f5f7fb;--ms-surface-muted: #e8eaf6;--ms-outline: #c5cae9;--ms-outline-strong: #7986cb;--ms-on-surface: #212121;--ms-on-surface-muted: #5f6368;--ms-chip-bg: #e8eaf6;--ms-chip-text: #303f9f;--ms-chip-remove: #303f9f;--ms-shadow: 0 1px 2px rgba(33, 33, 33, .16), 0 12px 32px rgba(63, 81, 181, .12);--ms-shadow-soft: 0 1px 2px rgba(33, 33, 33, .12), 0 4px 12px rgba(33, 33, 33, .08);position:relative;display:block;width:100%;color:var(--ms-on-surface);font:inherit}.selected-list{width:100%}.c-btn{position:relative;display:flex;align-items:center;flex-wrap:wrap;gap:8px;width:100%;min-height:56px;padding:11px 54px 11px 16px;border-radius:18px;border:1px solid var(--ms-outline);background:var(--ms-surface);box-shadow:var(--ms-shadow-soft);cursor:pointer;line-height:1.45;transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease,transform .16s ease}.c-btn:hover{border-color:var(--ms-outline-strong)}.c-btn.is-active{border-color:var(--ms-primary);box-shadow:0 0 0 3px #6750a424,var(--ms-shadow-soft)}.c-btn.disabled{cursor:not-allowed;opacity:.72}.c-placeholder,.c-single-value{color:var(--ms-on-surface-muted);font-size:.95rem}.c-btn.has-selection .c-single-value,.c-btn.has-selection .c-placeholder{color:var(--ms-on-surface);font-weight:500}.c-list{display:flex;flex:1 1 auto;flex-wrap:wrap;gap:8px;margin:0;padding:0;min-width:0}.c-chip-list{padding-right:8px}.c-token{position:relative;display:inline-block;vertical-align:middle;min-height:32px;max-width:100%;padding:6px 30px 6px 12px;border-radius:999px;background:var(--ms-chip-bg);color:var(--ms-chip-text);box-shadow:inset 0 0 0 1px #6750a414;line-height:1.35;white-space:normal;overflow-wrap:anywhere}.c-token .c-label{display:inline-flex;align-items:center;min-width:0;max-width:100%;line-height:1.3;font-weight:500;white-space:normal;overflow-wrap:anywhere}.c-remove{position:absolute;right:10px;top:50%;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;transform:translateY(-50%);color:var(--ms-chip-remove)}.c-remove svg,.c-angle-down svg,.c-angle-up svg{fill:currentColor}.clear-all{position:absolute;top:50%;right:42px;width:20px;height:20px;transform:translateY(-50%);color:var(--ms-on-surface-muted)}.countplaceholder{position:absolute;top:50%;right:76px;transform:translateY(-50%);color:var(--ms-on-surface-muted);font-size:.8rem;font-weight:600}.c-angle-down,.c-angle-up{position:absolute;top:50%;right:16px;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;transform:translateY(-50%);color:var(--ms-on-surface-muted);pointer-events:none}.dropdown-list{position:absolute;width:100%;padding-top:8px;z-index:99999}.dropdown-list.tagToBody{position:fixed}.arrow-up,.arrow-down,.arrow-2{display:none}.list-area{overflow:hidden;border-radius:22px;background:var(--ms-surface);border:1px solid var(--ms-outline);box-shadow:var(--ms-shadow)}.select-all,.filter-select-all{padding:10px 14px;border-bottom:1px solid rgba(125,119,134,.16);background:#f7f2fac2}.list-filter{position:relative;display:flex;align-items:center;min-height:52px;padding-left:48px;padding-right:44px;border-bottom:1px solid rgba(125,119,134,.16);background:var(--ms-surface)}.list-filter .c-input,.list-filter input{width:100%;height:100%;border:0;background:transparent;color:var(--ms-on-surface);font:inherit}.list-filter .c-input::placeholder,.list-filter input::placeholder{color:var(--ms-on-surface-muted)}.list-filter .c-input:focus,.list-filter input:focus{outline:none}.list-filter .c-search,.list-filter .c-clear{position:absolute;top:50%;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;transform:translateY(-50%);color:var(--ms-on-surface-muted)}.list-filter .c-search{left:16px}.list-filter .c-clear{right:16px;cursor:pointer}.btn-container{padding:10px 14px 14px;text-align:center}.btn-iceblue{width:100%;min-height:40px;border-radius:999px;border:1px solid transparent;background:var(--ms-primary);color:#fff;font-weight:600}.dropdown-list ul{list-style:none;margin:0;padding:8px;overflow:auto}.dropdown-list ul li{align-items:center;min-height:0;margin:4px;padding:12px 14px;border-radius:14px;cursor:pointer;text-align:left;line-height:1.35;transition:background-color .16s ease,color .16s ease}.dropdown-list ul li:hover{background:var(--ms-surface-soft)}.selected-item{background:var(--ms-primary-soft)!important;color:var(--ms-primary)}.selected-item:hover{background:#6750a42e!important}.grp-item{padding-left:42px!important}.grp-title{margin-top:6px;padding-top:10px!important;padding-bottom:8px!important;background:transparent!important;color:var(--ms-on-surface-muted);cursor:default!important}.grp-title label{margin-bottom:0!important;font-size:.74rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.grp-title:hover{background:transparent!important}.pure-checkbox{position:relative}.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]+label{position:relative;display:block;width:100%;margin:0;padding-left:32px;color:inherit;cursor:pointer;font-weight:500;-webkit-user-select:none;user-select:none}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:18px;height:18px;margin-top:-10px;border:2px solid var(--ms-outline-strong);border-radius:6px;background:var(--ms-surface);transition:all .18s ease}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:5px;width:7px;height:3px;margin-top:-3px;border-style:solid;border-width:0 0 2px 2px;border-color:#fff;transform:rotate(-45deg) scale(0);transform-origin:50%;transition:transform .16s ease-out}.pure-checkbox input[type=checkbox]:focus+label:before,.pure-checkbox input[type=checkbox]:hover+label:before{border-color:var(--ms-primary);box-shadow:0 0 0 4px #3f51b51f}.pure-checkbox input[type=checkbox]:checked+label:before{border-color:var(--ms-primary);background:var(--ms-primary)}.pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.pure-checkbox input[type=checkbox]:disabled+label{color:#b1acb8;cursor:not-allowed}.pure-checkbox input[type=checkbox]:disabled+label:before{border-color:#d5d0db;background:#f2edf7;box-shadow:none}.single-select-mode .pure-checkbox input[type=checkbox]+label:before,.single-select-mode .pure-checkbox input[type=checkbox]+label:after{opacity:0}.single-select-mode .pure-checkbox input[type=checkbox]+label{padding-left:0}.list-message,.nodata-label{margin:0;padding:22px 16px 24px;color:var(--ms-on-surface-muted);text-align:center;font-size:.95rem;font-weight:500}.list-grp{padding:0 15px!important}.list-grp h4{margin:16px 0 6px;color:var(--ms-on-surface);font-size:.76rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.list-grp>li{padding-left:15px!important}.loading-icon{position:absolute;top:18px;right:16px;width:18px;z-index:2}.dropdown-list ::-webkit-scrollbar{width:10px}.dropdown-list ::-webkit-scrollbar-thumb{background:#7d778657;border-radius:999px;border:2px solid transparent;background-clip:padding-box}.dropdown-list ::-webkit-scrollbar-track{background:transparent}\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]", 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 });
556
2372
  }
557
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: AngularMultiSelect, decorators: [{
2373
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AngularMultiSelect, decorators: [{
558
2374
  type: Component,
559
- args: [{ standalone: false, selector: 'angular-multiselect, angular2-multiselect', template: "<div class=\"stackline-dropdown\" [ngClass]=\"getDropdownClasses()\" (clickOutside)=\"closeDropdown()\">\n <div class=\"selected-list\">\n <div class=\"c-btn\" (click)=\"toggleDropdown($event)\" [ngClass]=\"{'disabled': settings.disabled}\">\n <span *ngIf=\"selectedItems?.length == 0\">{{settings.text}}</span>\n <span *ngIf=\"settings.singleSelection\">\n <span *ngFor=\"let item of selectedItems;trackBy: trackByFn;\">\n {{item[settings.labelKey]}}\n </span>\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;let k = index\" [hidden]=\"k > settings.badgeShowLimit-1\">\n <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{item[settings.labelKey]}}</span>\n <span *ngIf=\"badgeTempl\" class=\"c-label\">\n <c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer>\n </span>\n <span class=\"fa fa-remove\" (click)=\"onItemClick(item,k,$event)\"></span>\n </div>\n </div> \n <span class=\"countplaceholder\" *ngIf=\"selectedItems?.length > settings.badgeShowLimit\">+{{selectedItems?.length - settings.badgeShowLimit }}</span>\n <span class=\"fa\" [ngClass]=\"{'fa-angle-down': !isActive,'fa-angle-up':isActive}\"></span>\n </div> \n </div>\n <div class=\"dropdown-list\" [hidden]=\"!isActive\">\n <div class=\"arrow-up arrow-2\"></div>\n <div class=\"arrow-up\"></div>\n <div class=\"list-area\">\n <div class=\"pure-checkbox select-all\" *ngIf=\"settings.enableCheckAll && !settings.singleSelection && !settings.limitSelection\" (click)=\"toggleSelectAll()\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelectAll\" [disabled]=\"settings.limitSelection == selectedItems?.length\"/>\n <label>\n <span [hidden]=\"isSelectAll\">{{settings.selectAllText}}</span>\n <span [hidden]=\"!isSelectAll\">{{settings.unSelectAllText}}</span>\n </label>\n </div> \n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter && !settings.lazyLoading\">\n <span class=\"fa fa-search\"></span>\n <input #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\" [(ngModel)]=\"filter\">\n </div> \n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter && settings.lazyLoading\">\n <span class=\"fa fa-search\"></span>\n <input #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\" (keyup)=\"filterInfiniteList($event)\">\n </div>\n <ul *ngIf=\"!settings.groupBy\" [style.maxHeight] = \"settings.maxHeight+'px'\" class=\"lazyContainer\" >\n <span *ngIf=\"itemTempl\">\n <li *ngFor=\"let item of data | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </span>\n <span *ngIf=\"!itemTempl && !settings.lazyLoading\" >\n <li *ngFor=\"let item of data | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\n </li>\n </span>\n <span *ngIf=\"!itemTempl && settings.lazyLoading\" >\n <div [ngStyle]=\"{'height':totalHeight+'px'}\" style=\"position: relative;\">\n\n \n <li *ngFor=\"let item of chunkArray | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" style=\"position: absolute;width: 100%;\" class=\"pure-checkbox\" [styleProp]=\"chunkIndex[i]\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\n </li>\n </div>\n </span>\n </ul>\n <div *ngIf=\"settings.groupBy\" [style.maxHeight] = \"settings.maxHeight+'px'\" style=\"overflow: auto;\">\n <ul *ngFor=\"let obj of groupedData ; let i = index;\" class=\"list-grp\">\n <h4 *ngIf=\"(obj.value | listFilter:filter ).length > 0\">{{obj.key}}</h4>\n <span *ngIf=\"itemTempl\" >\n <li *ngFor=\"let item of obj.value | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </span>\n <span *ngIf=\"!itemTempl\" >\n <li *ngFor=\"let item of obj.value | listFilter:filter; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"/>\n <label>{{item[settings.labelKey]}}</label>\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", host: { '[class]': 'defaultSettings.classes' }, providers: [DROPDOWN_CONTROL_VALUE_ACCESSOR, DROPDOWN_CONTROL_VALIDATION], styles: [".stackline-dropdown{position:relative}.c-btn{display:inline-block;background:#fff;border:1px solid #ccc;border-radius:3px;font-size:14px;color:#333}.c-btn.disabled{background:#ccc}.c-btn:focus{outline:none}.selected-list .c-list{display:flex;flex:1 1 auto;align-items:center;flex-wrap:wrap;min-width:0;float:none;padding:0;margin:0;width:auto}.selected-list .c-list .c-token{list-style:none;padding:0 5px;background:#0079fe;color:#fff;border-radius:2px;margin-right:4px;margin-top:2px;float:left}.selected-list .c-list .c-token .c-label{display:block;float:left}.selected-list .c-list .c-token .fa-remove{margin-left:1px;font-size:12px}.selected-list .fa-angle-down,.selected-list .fa-angle-up{font-size:15pt;position:absolute;right:10px;top:50%;transform:translateY(-50%)}.selected-list .countplaceholder{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;align-self:center;margin:0 0 0 6px;line-height:1}.selected-list .c-btn{box-sizing:border-box;width:100%;box-shadow:0 1px 5px #959595;padding:10px 36px 10px 10px;cursor:pointer;display:flex;align-items:center;flex-wrap:nowrap;position:relative}.dropdown-list{position:absolute;padding-top:14px;width:100%;z-index:9999}.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 ul li:hover{background:#f5f5f5}.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{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-2{border-bottom:15px solid #ccc;top:-1px}.list-area{border:1px solid #ccc;border-radius:3px;background:#fff;margin:0;box-shadow:0 1px 5px #959595}.select-all{padding:10px;border-bottom:1px solid #ccc;text-align:left}.list-filter{border-bottom:1px solid #ccc;position:relative}.list-filter input{border:0px;width:100%;height:35px;padding:0 0 0 35px}.list-filter input:focus{outline:none}.list-filter .fa{position:absolute;top:10px;left:13px;color:#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{border-color:#0079fe;background-color:#f2f2f2}.pure-checkbox input[type=checkbox]:active+label:before{transition-duration:0s}.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;color:#000;font-weight:300}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";color:#0079fe;position:absolute;top:50%;left:0;width:14px;height:14px;margin-top:-9px;border:2px solid #0079FE;text-align:center;transition:all .4s ease}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";background-color:#0079fe;position:absolute;top:50%;left:4px;width:10px;height:10px;margin-top:-5px;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:4px;width:8px;height:3px;margin-top:-4px;border-style:solid;border-color:#fff;border-width:0 0 3px 3px;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:before{background:#0079fe}.pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.list-message{text-align:center}.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}.stackline-dropdown.theme-material,.stackline-dropdown.theme-dark,.stackline-dropdown.theme-custom{--ms-primary: #3f51b5;--ms-primary-soft: rgba(63, 81, 181, .12);--ms-surface: #ffffff;--ms-surface-soft: #f5f7fb;--ms-surface-muted: #e8eaf6;--ms-outline: #c5cae9;--ms-outline-strong: #7986cb;--ms-on-surface: #212121;--ms-on-surface-muted: #5f6368;--ms-chip-bg: #e8eaf6;--ms-chip-text: #303f9f;--ms-chip-remove: #303f9f;--ms-divider: rgba(125, 119, 134, .16);--ms-section-bg: rgba(247, 242, 250, .76);--ms-selected-text: var(--ms-primary);--ms-shadow: 0 1px 2px rgba(33, 33, 33, .16), 0 12px 32px rgba(63, 81, 181, .12);--ms-shadow-soft: 0 1px 2px rgba(33, 33, 33, .12), 0 4px 12px rgba(33, 33, 33, .08);display:block;width:100%;color:var(--ms-on-surface);font:inherit}.stackline-dropdown.theme-dark{--ms-primary: #8ab4f8;--ms-primary-soft: rgba(138, 180, 248, .18);--ms-surface: #151a23;--ms-surface-soft: #202736;--ms-surface-muted: #111722;--ms-outline: #384456;--ms-outline-strong: #8ab4f8;--ms-on-surface: #edf2f7;--ms-on-surface-muted: #aab6c5;--ms-chip-bg: #263247;--ms-chip-text: #d7e6ff;--ms-chip-remove: #d7e6ff;--ms-divider: rgba(170, 182, 197, .18);--ms-section-bg: #101620;--ms-selected-text: #d7e6ff;--ms-shadow: 0 20px 50px rgba(0, 0, 0, .42);--ms-shadow-soft: 0 1px 2px rgba(0, 0, 0, .45), 0 10px 24px rgba(0, 0, 0, .28)}.stackline-dropdown.theme-custom{--ms-primary: var(--stackline-ms-primary, #0f766e);--ms-primary-soft: var(--stackline-ms-primary-soft, rgba(15, 118, 110, .14));--ms-surface: var(--stackline-ms-surface, #ffffff);--ms-surface-soft: var(--stackline-ms-surface-soft, #ecfdf5);--ms-surface-muted: var(--stackline-ms-surface-muted, #d1fae5);--ms-outline: var(--stackline-ms-outline, #99f6e4);--ms-outline-strong: var(--stackline-ms-outline-strong, #0f766e);--ms-on-surface: var(--stackline-ms-on-surface, #102a2a);--ms-on-surface-muted: var(--stackline-ms-on-surface-muted, #47615f);--ms-chip-bg: var(--stackline-ms-chip-bg, #ccfbf1);--ms-chip-text: var(--stackline-ms-chip-text, #115e59);--ms-chip-remove: var(--stackline-ms-chip-remove, #115e59);--ms-divider: var(--stackline-ms-divider, rgba(15, 118, 110, .16));--ms-section-bg: var(--stackline-ms-section-bg, #f0fdfa);--ms-selected-text: var(--stackline-ms-selected-text, var(--ms-primary));--ms-shadow: var(--stackline-ms-shadow, 0 18px 42px rgba(15, 118, 110, .15));--ms-shadow-soft: var(--stackline-ms-shadow-soft, 0 1px 2px rgba(15, 118, 110, .16), 0 8px 18px rgba(15, 118, 110, .09))}.stackline-dropdown.theme-material .selected-list,.stackline-dropdown.theme-dark .selected-list,.stackline-dropdown.theme-custom .selected-list{width:100%}.stackline-dropdown.theme-material .selected-list .c-btn,.stackline-dropdown.theme-dark .selected-list .c-btn,.stackline-dropdown.theme-custom .selected-list .c-btn{position:relative;display:flex;align-items:center;flex-wrap:nowrap;gap:8px;width:100%;min-height:56px;padding:11px 54px 11px 16px;border-radius:18px;border:1px solid var(--ms-outline);background:var(--ms-surface);box-shadow:var(--ms-shadow-soft);color:var(--ms-on-surface);cursor:pointer;font-size:inherit;line-height:1.45;transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease,transform .16s ease}.stackline-dropdown.theme-material .selected-list .c-btn:hover,.stackline-dropdown.theme-dark .selected-list .c-btn:hover,.stackline-dropdown.theme-custom .selected-list .c-btn:hover{border-color:var(--ms-outline-strong)}.stackline-dropdown.theme-material .selected-list .c-btn.disabled,.stackline-dropdown.theme-dark .selected-list .c-btn.disabled,.stackline-dropdown.theme-custom .selected-list .c-btn.disabled{background:var(--ms-surface);cursor:not-allowed;opacity:.72}.stackline-dropdown.theme-material .selected-list .c-list,.stackline-dropdown.theme-dark .selected-list .c-list,.stackline-dropdown.theme-custom .selected-list .c-list{display:flex;flex:1 1 auto;flex-wrap:wrap;gap:8px;width:auto;min-width:0;margin:0;padding:0;float:none}.stackline-dropdown.theme-material .selected-list .c-list .c-token,.stackline-dropdown.theme-dark .selected-list .c-list .c-token,.stackline-dropdown.theme-custom .selected-list .c-list .c-token{position:relative;display:inline-block;vertical-align:middle;min-height:32px;max-width:100%;padding:6px 30px 6px 12px;background:var(--ms-chip-bg);color:var(--ms-chip-text);border-radius:999px;box-shadow:inset 0 0 0 1px #6750a414;line-height:1.35;white-space:normal;overflow-wrap:anywhere;margin:0;float:none}.stackline-dropdown.theme-material .selected-list .c-list .c-token .c-label,.stackline-dropdown.theme-dark .selected-list .c-list .c-token .c-label,.stackline-dropdown.theme-custom .selected-list .c-list .c-token .c-label{display:inline-flex;align-items:center;float:none;min-width:0;max-width:100%;line-height:1.3;font-weight:500;white-space:normal;overflow-wrap:anywhere}.stackline-dropdown.theme-material .selected-list .c-list .c-token .fa-remove,.stackline-dropdown.theme-dark .selected-list .c-list .c-token .fa-remove,.stackline-dropdown.theme-custom .selected-list .c-list .c-token .fa-remove{position:absolute;right:10px;top:50%;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:0;transform:translateY(-50%);color:var(--ms-chip-remove);cursor:pointer}.stackline-dropdown.theme-material .selected-list .countplaceholder,.stackline-dropdown.theme-dark .selected-list .countplaceholder,.stackline-dropdown.theme-custom .selected-list .countplaceholder{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;align-self:center;margin:0;line-height:1;color:var(--ms-on-surface-muted);font-size:.8rem;font-weight:600}.stackline-dropdown.theme-material .selected-list .fa-angle-down,.stackline-dropdown.theme-dark .selected-list .fa-angle-down,.stackline-dropdown.theme-custom .selected-list .fa-angle-down,.stackline-dropdown.theme-material .selected-list .fa-angle-up,.stackline-dropdown.theme-dark .selected-list .fa-angle-up,.stackline-dropdown.theme-custom .selected-list .fa-angle-up{position:absolute;top:50%;right:16px;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;transform:translateY(-50%);color:var(--ms-on-surface-muted);font-size:15pt;pointer-events:none}.stackline-dropdown.theme-material .dropdown-list,.stackline-dropdown.theme-dark .dropdown-list,.stackline-dropdown.theme-custom .dropdown-list{position:absolute;width:100%;padding-top:8px;z-index:99999}.stackline-dropdown.theme-material .arrow-up,.stackline-dropdown.theme-dark .arrow-up,.stackline-dropdown.theme-custom .arrow-up,.stackline-dropdown.theme-material .arrow-down,.stackline-dropdown.theme-dark .arrow-down,.stackline-dropdown.theme-custom .arrow-down,.stackline-dropdown.theme-material .arrow-2,.stackline-dropdown.theme-dark .arrow-2,.stackline-dropdown.theme-custom .arrow-2{display:none}.stackline-dropdown.theme-material .list-area,.stackline-dropdown.theme-dark .list-area,.stackline-dropdown.theme-custom .list-area{overflow:hidden;border-radius:22px;background:var(--ms-surface);border:1px solid var(--ms-outline);box-shadow:var(--ms-shadow);margin:0}.stackline-dropdown.theme-material .select-all,.stackline-dropdown.theme-dark .select-all,.stackline-dropdown.theme-custom .select-all{padding:10px 14px;border-bottom:1px solid var(--ms-divider);background:var(--ms-section-bg);text-align:left}.stackline-dropdown.theme-material .list-filter,.stackline-dropdown.theme-dark .list-filter,.stackline-dropdown.theme-custom .list-filter{position:relative;display:flex;align-items:center;min-height:52px;padding-left:48px;padding-right:44px;border-bottom:1px solid var(--ms-divider);background:var(--ms-surface)}.stackline-dropdown.theme-material .list-filter input,.stackline-dropdown.theme-dark .list-filter input,.stackline-dropdown.theme-custom .list-filter input{width:100%;height:100%;border:0;background:transparent;color:var(--ms-on-surface);font:inherit;padding:0}.stackline-dropdown.theme-material .list-filter input::placeholder,.stackline-dropdown.theme-dark .list-filter input::placeholder,.stackline-dropdown.theme-custom .list-filter input::placeholder{color:var(--ms-on-surface-muted)}.stackline-dropdown.theme-material .list-filter input:focus,.stackline-dropdown.theme-dark .list-filter input:focus,.stackline-dropdown.theme-custom .list-filter input:focus{outline:none}.stackline-dropdown.theme-material .list-filter .fa,.stackline-dropdown.theme-dark .list-filter .fa,.stackline-dropdown.theme-custom .list-filter .fa{position:absolute;top:50%;left:16px;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;transform:translateY(-50%);color:var(--ms-on-surface-muted)}.stackline-dropdown.theme-material .dropdown-list ul,.stackline-dropdown.theme-dark .dropdown-list ul,.stackline-dropdown.theme-custom .dropdown-list ul{list-style:none;margin:0;padding:8px;overflow:auto}.stackline-dropdown.theme-material .dropdown-list ul li,.stackline-dropdown.theme-dark .dropdown-list ul li,.stackline-dropdown.theme-custom .dropdown-list ul li{align-items:center;min-height:0;margin:4px;padding:12px 14px;border-radius:14px;cursor:pointer;text-align:left;line-height:1.35;transition:background-color .16s ease,color .16s ease}.stackline-dropdown.theme-material .dropdown-list ul li:first-child,.stackline-dropdown.theme-dark .dropdown-list ul li:first-child,.stackline-dropdown.theme-custom .dropdown-list ul li:first-child{padding-top:12px}.stackline-dropdown.theme-material .dropdown-list ul li:last-child,.stackline-dropdown.theme-dark .dropdown-list ul li:last-child,.stackline-dropdown.theme-custom .dropdown-list ul li:last-child{padding-bottom:12px}.stackline-dropdown.theme-material .dropdown-list ul li:hover,.stackline-dropdown.theme-dark .dropdown-list ul li:hover,.stackline-dropdown.theme-custom .dropdown-list ul li:hover{background:var(--ms-surface-soft)}.stackline-dropdown.theme-material .pure-checkbox,.stackline-dropdown.theme-dark .pure-checkbox,.stackline-dropdown.theme-custom .pure-checkbox{position:relative}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label{position:relative;display:block;width:100%;margin:0;padding-left:32px;color:inherit;cursor:pointer;font-weight:500;-webkit-user-select:none;user-select:none}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:16px;height:16px;margin-top:-10px;border:2px solid var(--ms-outline-strong);border-radius:5px;background:var(--ms-surface);transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]+label:after,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]+label:after,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:5px;width:8px;height:3px;margin-top:-4px;border-style:solid;border-color:#fff;border-width:0 0 3px 3px;border-image:none;background:transparent;transform:rotate(-45deg) scale(0);transform-origin:50%;transition:transform .16s ease}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:focus+label:before,.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:hover+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:hover+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:hover+label:before{border-color:var(--ms-primary);background:var(--ms-surface-soft)}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:checked+label:before,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:checked+label:before,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:checked+label:before{border-color:var(--ms-primary);background:var(--ms-primary)}.stackline-dropdown.theme-material .pure-checkbox input[type=checkbox]:checked+label:after,.stackline-dropdown.theme-dark .pure-checkbox input[type=checkbox]:checked+label:after,.stackline-dropdown.theme-custom .pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.stackline-dropdown.theme-material .list-message,.stackline-dropdown.theme-dark .list-message,.stackline-dropdown.theme-custom .list-message{margin:0;padding:20px 14px;color:var(--ms-on-surface-muted);text-align:center}\n"] }]
560
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { data: [{
2375
+ args: [{ selector: 'angular-multiselect, angular2-multiselect', host: { '[class]': 'defaultSettings.classes' }, providers: [DROPDOWN_CONTROL_VALUE_ACCESSOR, DROPDOWN_CONTROL_VALIDATION], encapsulation: ViewEncapsulation.None, standalone: false, template: "<div class=\"stackline-dropdown\" [ngClass]=\"{'is-open': isActive, 'is-disabled': settings.disabled, 'is-loading': loading}\" (clickOutside)=\"closeDropdownOnClickOut()\" #stacklineDropdown>\n <div class=\"selected-list\" #selectedList>\n <div class=\"c-btn\"\n (click)=\"toggleDropdown($event)\"\n [ngClass]=\"{'disabled': settings.disabled, 'is-active': isActive, 'has-selection': selectedItems?.length > 0, 'single-select-mode': settings.singleSelection}\"\n [attr.tabindex]=\"0\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"isActive\"\n [attr.aria-disabled]=\"settings.disabled\">\n\n <span class=\"c-placeholder\" *ngIf=\"selectedItems?.length == 0\">{{settings.text}}</span>\n <span class=\"c-single-value\" *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 c-chip-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'\"></c-icon>\n </span>\n </div>\n </span>\n <div class=\"c-list c-chip-list\" *ngIf=\"selectedItems?.length > 0 && !settings.singleSelection\">\n <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\" [hidden]=\"k > settings.badgeShowLimit-1\">\n <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{item[settings.labelKey]}}</span>\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'\"></c-icon>\n </span>\n </div>\n </div>\n <span class=\"countplaceholder\" *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\" (click)=\"clearSelection($event);$event.stopPropagation()\">\n <c-icon [name]=\"'remove'\"></c-icon>\n </span>\n <span *ngIf=\"!isActive\" class=\"c-angle-down\">\n <c-icon [name]=\"'angle-down'\"></c-icon>\n </span>\n <span *ngIf=\"isActive\" class=\"c-angle-up\">\n <c-icon [name]=\"'angle-up'\"></c-icon>\n\n </span>\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 role=\"presentation\"\n [attr.aria-hidden]=\"!isActive\"\n [hidden]=\"!isActive\">\n <div [ngClass]=\"{'arrow-up': settings.position == 'bottom', 'arrow-down': settings.position == 'top'}\" 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\" *ngIf=\"settings.enableCheckAll && !settings.singleSelection && !settings.limitSelection && data?.length > 0 && !isDisabledItemPresent\"\n >\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelectAll\" [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\" (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\" (click)=\"resetInfiniteSearch()\">\n <c-icon [name]=\"'clear'\"></c-icon>\n </span>\n\n <input class=\"c-input\" *ngIf=\"settings.groupBy && !settings.lazyLoading && !searchTempl\" #searchInput 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 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\" [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\" *ngIf=\"!settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent\">\n <div class=\"pure-checkbox select-all\" *ngIf=\"!settings.groupBy && filter?.length > 0 && filterLength > 0 && !settings.singleSelection\" (click)=\"toggleFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isFilterSelectAll\" [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\" *ngIf=\"settings.groupBy && filter?.length > 0 && groupedData?.length > 0 && !settings.singleSelection\" (click)=\"toggleFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isFilterSelectAll && filter?.length > 0\" [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\" *ngIf=\"settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent && !settings.singleSelection\">\n <div class=\"pure-checkbox select-all\" *ngIf=\"filter?.length > 0 && infiniteFilterLength > 0\" (click)=\"toggleInfiniteFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isInfiniteFilterSelectAll\" [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\" [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)\" [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\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (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)\" class=\"pure-checkbox\"\n [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [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\" [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)\" [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\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll2 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (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)\" class=\"pure-checkbox\"\n [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [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\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll3 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (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\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"isSelected(item)\" [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\" [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)\" [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\" [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)\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"item.selected\" [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()\" [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)\" [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\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <virtual-scroller [items]=\"groupedData\" (vsUpdate)=\"viewPortItems = $event\" (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\">\n <ul virtualScroller #scroll4 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (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\" [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\" 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\" [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\" [checked]=\"isSelected(item)\" [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\" [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)\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"item.selected\" [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()\" [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)\" [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 <!-- <span *ngFor=\"let item of groupedData ; let i = index;\">\n <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !item.grpTitle\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n />\n <label>{{item[settings.labelKey]}}</label>\n </li>\n <li *ngIf=\"item.grpTitle && !settings.selectGroup\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && settings.selectGroup\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n />\n <label>{{item[settings.labelKey]}}</label>\n </li>\n <li (click)=\"selectGroup(item)\" *ngIf=\"item.grpTitle && settings.selectGroup\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && settings.selectGroup\" type=\"checkbox\" [checked]=\"item.selected\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n />\n <label>{{item[settings.labelKey]}}</label>\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%}.stackline-dropdown{--ms-primary: #3f51b5;--ms-primary-soft: rgba(63, 81, 181, .12);--ms-surface: #ffffff;--ms-surface-soft: #f5f7fb;--ms-surface-muted: #e8eaf6;--ms-outline: #c5cae9;--ms-outline-strong: #7986cb;--ms-on-surface: #212121;--ms-on-surface-muted: #5f6368;--ms-chip-bg: #e8eaf6;--ms-chip-text: #303f9f;--ms-chip-remove: #303f9f;--ms-shadow: 0 1px 2px rgba(33, 33, 33, .16), 0 12px 32px rgba(63, 81, 181, .12);--ms-shadow-soft: 0 1px 2px rgba(33, 33, 33, .12), 0 4px 12px rgba(33, 33, 33, .08);position:relative;display:block;width:100%;color:var(--ms-on-surface);font:inherit}.selected-list{width:100%}.c-btn{position:relative;display:flex;align-items:center;flex-wrap:wrap;gap:8px;width:100%;min-height:56px;padding:11px 54px 11px 16px;border-radius:18px;border:1px solid var(--ms-outline);background:var(--ms-surface);box-shadow:var(--ms-shadow-soft);cursor:pointer;line-height:1.45;transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease,transform .16s ease}.c-btn:hover{border-color:var(--ms-outline-strong)}.c-btn.is-active{border-color:var(--ms-primary);box-shadow:0 0 0 3px #6750a424,var(--ms-shadow-soft)}.c-btn.disabled{cursor:not-allowed;opacity:.72}.c-placeholder,.c-single-value{color:var(--ms-on-surface-muted);font-size:.95rem}.c-btn.has-selection .c-single-value,.c-btn.has-selection .c-placeholder{color:var(--ms-on-surface);font-weight:500}.c-list{display:flex;flex:1 1 auto;flex-wrap:wrap;gap:8px;margin:0;padding:0;min-width:0}.c-chip-list{padding-right:8px}.c-token{position:relative;display:inline-block;vertical-align:middle;min-height:32px;max-width:100%;padding:6px 30px 6px 12px;border-radius:999px;background:var(--ms-chip-bg);color:var(--ms-chip-text);box-shadow:inset 0 0 0 1px #6750a414;line-height:1.35;white-space:normal;overflow-wrap:anywhere}.c-token .c-label{display:inline-flex;align-items:center;min-width:0;max-width:100%;line-height:1.3;font-weight:500;white-space:normal;overflow-wrap:anywhere}.c-remove{position:absolute;right:10px;top:50%;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;transform:translateY(-50%);color:var(--ms-chip-remove)}.c-remove svg,.c-angle-down svg,.c-angle-up svg{fill:currentColor}.clear-all{position:absolute;top:50%;right:42px;width:20px;height:20px;transform:translateY(-50%);color:var(--ms-on-surface-muted)}.countplaceholder{position:absolute;top:50%;right:76px;transform:translateY(-50%);color:var(--ms-on-surface-muted);font-size:.8rem;font-weight:600}.c-angle-down,.c-angle-up{position:absolute;top:50%;right:16px;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;transform:translateY(-50%);color:var(--ms-on-surface-muted);pointer-events:none}.dropdown-list{position:absolute;width:100%;padding-top:8px;z-index:99999}.dropdown-list.tagToBody{position:fixed}.arrow-up,.arrow-down,.arrow-2{display:none}.list-area{overflow:hidden;border-radius:22px;background:var(--ms-surface);border:1px solid var(--ms-outline);box-shadow:var(--ms-shadow)}.select-all,.filter-select-all{padding:10px 14px;border-bottom:1px solid rgba(125,119,134,.16);background:#f7f2fac2}.list-filter{position:relative;display:flex;align-items:center;min-height:52px;padding-left:48px;padding-right:44px;border-bottom:1px solid rgba(125,119,134,.16);background:var(--ms-surface)}.list-filter .c-input,.list-filter input{width:100%;height:100%;border:0;background:transparent;color:var(--ms-on-surface);font:inherit}.list-filter .c-input::placeholder,.list-filter input::placeholder{color:var(--ms-on-surface-muted)}.list-filter .c-input:focus,.list-filter input:focus{outline:none}.list-filter .c-search,.list-filter .c-clear{position:absolute;top:50%;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;transform:translateY(-50%);color:var(--ms-on-surface-muted)}.list-filter .c-search{left:16px}.list-filter .c-clear{right:16px;cursor:pointer}.btn-container{padding:10px 14px 14px;text-align:center}.btn-iceblue{width:100%;min-height:40px;border-radius:999px;border:1px solid transparent;background:var(--ms-primary);color:#fff;font-weight:600}.dropdown-list ul{list-style:none;margin:0;padding:8px;overflow:auto}.dropdown-list ul li{align-items:center;min-height:0;margin:4px;padding:12px 14px;border-radius:14px;cursor:pointer;text-align:left;line-height:1.35;transition:background-color .16s ease,color .16s ease}.dropdown-list ul li:hover{background:var(--ms-surface-soft)}.selected-item{background:var(--ms-primary-soft)!important;color:var(--ms-primary)}.selected-item:hover{background:#6750a42e!important}.grp-item{padding-left:42px!important}.grp-title{margin-top:6px;padding-top:10px!important;padding-bottom:8px!important;background:transparent!important;color:var(--ms-on-surface-muted);cursor:default!important}.grp-title label{margin-bottom:0!important;font-size:.74rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.grp-title:hover{background:transparent!important}.pure-checkbox{position:relative}.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]+label{position:relative;display:block;width:100%;margin:0;padding-left:32px;color:inherit;cursor:pointer;font-weight:500;-webkit-user-select:none;user-select:none}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:18px;height:18px;margin-top:-10px;border:2px solid var(--ms-outline-strong);border-radius:6px;background:var(--ms-surface);transition:all .18s ease}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:5px;width:7px;height:3px;margin-top:-3px;border-style:solid;border-width:0 0 2px 2px;border-color:#fff;transform:rotate(-45deg) scale(0);transform-origin:50%;transition:transform .16s ease-out}.pure-checkbox input[type=checkbox]:focus+label:before,.pure-checkbox input[type=checkbox]:hover+label:before{border-color:var(--ms-primary);box-shadow:0 0 0 4px #3f51b51f}.pure-checkbox input[type=checkbox]:checked+label:before{border-color:var(--ms-primary);background:var(--ms-primary)}.pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.pure-checkbox input[type=checkbox]:disabled+label{color:#b1acb8;cursor:not-allowed}.pure-checkbox input[type=checkbox]:disabled+label:before{border-color:#d5d0db;background:#f2edf7;box-shadow:none}.single-select-mode .pure-checkbox input[type=checkbox]+label:before,.single-select-mode .pure-checkbox input[type=checkbox]+label:after{opacity:0}.single-select-mode .pure-checkbox input[type=checkbox]+label{padding-left:0}.list-message,.nodata-label{margin:0;padding:22px 16px 24px;color:var(--ms-on-surface-muted);text-align:center;font-size:.95rem;font-weight:500}.list-grp{padding:0 15px!important}.list-grp h4{margin:16px 0 6px;color:var(--ms-on-surface);font-size:.76rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.list-grp>li{padding-left:15px!important}.loading-icon{position:absolute;top:18px;right:16px;width:18px;z-index:2}.dropdown-list ::-webkit-scrollbar{width:10px}.dropdown-list ::-webkit-scrollbar-thumb{background:#7d778657;border-radius:999px;border:2px solid transparent;background-clip:padding-box}.dropdown-list ::-webkit-scrollbar-track{background:transparent}\n"] }]
2376
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: ListFilterPipe }], propDecorators: { data: [{
561
2377
  type: Input
562
2378
  }], settings: [{
563
2379
  type: Input
2380
+ }], loading: [{
2381
+ type: Input
564
2382
  }], onSelect: [{
565
2383
  type: Output,
566
2384
  args: ['onSelect']
@@ -579,27 +2397,67 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
579
2397
  }], onClose: [{
580
2398
  type: Output,
581
2399
  args: ['onClose']
2400
+ }], onScrollToEnd: [{
2401
+ type: Output,
2402
+ args: ['onScrollToEnd']
2403
+ }], onFilterSelectAll: [{
2404
+ type: Output,
2405
+ args: ['onFilterSelectAll']
2406
+ }], onFilterDeSelectAll: [{
2407
+ type: Output,
2408
+ args: ['onFilterDeSelectAll']
2409
+ }], onAddFilterNewItem: [{
2410
+ type: Output,
2411
+ args: ['onAddFilterNewItem']
2412
+ }], onGroupSelect: [{
2413
+ type: Output,
2414
+ args: ['onGroupSelect']
2415
+ }], onGroupDeSelect: [{
2416
+ type: Output,
2417
+ args: ['onGroupDeSelect']
582
2418
  }], itemTempl: [{
583
2419
  type: ContentChild,
584
2420
  args: [Item, { static: false }]
585
2421
  }], badgeTempl: [{
586
2422
  type: ContentChild,
587
2423
  args: [Badge, { static: false }]
2424
+ }], searchTempl: [{
2425
+ type: ContentChild,
2426
+ args: [Search, { static: false }]
588
2427
  }], searchInput: [{
589
2428
  type: ViewChild,
590
2429
  args: ['searchInput', { static: false }]
2430
+ }], selectedListElem: [{
2431
+ type: ViewChild,
2432
+ args: ['selectedList', { static: false }]
2433
+ }], dropdownListElem: [{
2434
+ type: ViewChild,
2435
+ args: ['dropdownList', { static: false }]
2436
+ }], stacklineDropdown: [{
2437
+ type: ViewChild,
2438
+ args: ['stacklineDropdown', { static: false }]
2439
+ }], onEscapeDown: [{
2440
+ type: HostListener,
2441
+ args: ['document:keyup.escape', ['$event']]
2442
+ }], onScroll: [{
2443
+ type: HostListener,
2444
+ args: ['window:scroll', ['$event']]
2445
+ }], virtualScroller: [{
2446
+ type: ViewChild,
2447
+ args: [VirtualScrollerComponent, { static: false }]
591
2448
  }] } });
592
2449
  class AngularMultiSelectModule {
593
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: AngularMultiSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
594
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.14", ngImport: i0, type: AngularMultiSelectModule, declarations: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge], imports: [CommonModule, FormsModule], exports: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge] });
595
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: AngularMultiSelectModule, imports: [CommonModule, FormsModule] });
2450
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AngularMultiSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2451
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.7", ngImport: i0, type: AngularMultiSelectModule, declarations: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge, Search, setPosition, CIcon], imports: [CommonModule, FormsModule, VirtualScrollerModule], exports: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge, Search, setPosition, CIcon] });
2452
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AngularMultiSelectModule, providers: [DataService, ListFilterPipe], imports: [CommonModule, FormsModule, VirtualScrollerModule] });
596
2453
  }
597
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: AngularMultiSelectModule, decorators: [{
2454
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: AngularMultiSelectModule, decorators: [{
598
2455
  type: NgModule,
599
2456
  args: [{
600
- imports: [CommonModule, FormsModule],
601
- declarations: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge],
602
- exports: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge]
2457
+ imports: [CommonModule, FormsModule, VirtualScrollerModule],
2458
+ declarations: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge, Search, setPosition, CIcon],
2459
+ exports: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge, Search, setPosition, CIcon],
2460
+ providers: [DataService, ListFilterPipe]
603
2461
  }]
604
2462
  }] });
605
2463
 
@@ -607,5 +2465,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
607
2465
  * Generated bundle index. Do not edit.
608
2466
  */
609
2467
 
610
- export { AngularMultiSelect, AngularMultiSelectModule, Badge, ClickOutsideDirective, Item, ListFilterPipe, ListItem, MyException, ScrollDirective, TemplateRenderer, styleDirective };
611
- //# sourceMappingURL=stackline-angular-multiselect-dropdown.mjs.map
2468
+ export { AngularMultiSelect, AngularMultiSelectModule, Badge, CIcon, ClickOutsideDirective, Item, ListFilterPipe, ScrollDirective, Search, TemplateRenderer, setPosition, styleDirective };