ng-jvx-multiselect 1.1.28

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.
Files changed (56) hide show
  1. package/README.md +330 -0
  2. package/_index.scss +1 -0
  3. package/esm2020/lib/directives/ng-jvx-disabled-option.directive.mjs +49 -0
  4. package/esm2020/lib/directives/ng-jvx-focus.directive.mjs +29 -0
  5. package/esm2020/lib/directives/ng-jvx-group-header.directive.mjs +25 -0
  6. package/esm2020/lib/directives/ng-jvx-options-template.directive.mjs +26 -0
  7. package/esm2020/lib/directives/ng-jvx-selection-template.directive.mjs +25 -0
  8. package/esm2020/lib/interfaces/ng-jvx-group-mapper.mjs +2 -0
  9. package/esm2020/lib/interfaces/ng-jvx-option-mapper.mjs +2 -0
  10. package/esm2020/lib/interfaces/ng-jvx-search-mapper.mjs +2 -0
  11. package/esm2020/lib/ng-jvx-multiselect.component.mjs +589 -0
  12. package/esm2020/lib/ng-jvx-multiselect.module.mjs +92 -0
  13. package/esm2020/lib/ng-jvx-multiselect.service.mjs +42 -0
  14. package/esm2020/lib/ng-jvx-option/ng-jvx-option.component.mjs +31 -0
  15. package/esm2020/lib/ng-jvx-panel/ng-jvx-panel.component.mjs +41 -0
  16. package/esm2020/ng-jvx-multiselect.mjs +5 -0
  17. package/esm2020/public-api.mjs +15 -0
  18. package/fesm2015/ng-jvx-multiselect.mjs +924 -0
  19. package/fesm2015/ng-jvx-multiselect.mjs.map +1 -0
  20. package/fesm2020/ng-jvx-multiselect.mjs +918 -0
  21. package/fesm2020/ng-jvx-multiselect.mjs.map +1 -0
  22. package/lib/directives/ng-jvx-disabled-option.directive.d.ts +14 -0
  23. package/lib/directives/ng-jvx-disabled-option.directive.d.ts.map +1 -0
  24. package/lib/directives/ng-jvx-focus.directive.d.ts +11 -0
  25. package/lib/directives/ng-jvx-focus.directive.d.ts.map +1 -0
  26. package/lib/directives/ng-jvx-group-header.directive.d.ts +10 -0
  27. package/lib/directives/ng-jvx-group-header.directive.d.ts.map +1 -0
  28. package/lib/directives/ng-jvx-options-template.directive.d.ts +11 -0
  29. package/lib/directives/ng-jvx-options-template.directive.d.ts.map +1 -0
  30. package/lib/directives/ng-jvx-selection-template.directive.d.ts +10 -0
  31. package/lib/directives/ng-jvx-selection-template.directive.d.ts.map +1 -0
  32. package/lib/interfaces/ng-jvx-group-mapper.d.ts +8 -0
  33. package/lib/interfaces/ng-jvx-group-mapper.d.ts.map +1 -0
  34. package/lib/interfaces/ng-jvx-option-mapper.d.ts +7 -0
  35. package/lib/interfaces/ng-jvx-option-mapper.d.ts.map +1 -0
  36. package/lib/interfaces/ng-jvx-search-mapper.d.ts +7 -0
  37. package/lib/interfaces/ng-jvx-search-mapper.d.ts.map +1 -0
  38. package/lib/ng-jvx-multiselect.component.d.ts +144 -0
  39. package/lib/ng-jvx-multiselect.component.d.ts.map +1 -0
  40. package/lib/ng-jvx-multiselect.module.d.ts +26 -0
  41. package/lib/ng-jvx-multiselect.module.d.ts.map +1 -0
  42. package/lib/ng-jvx-multiselect.service.d.ts +20 -0
  43. package/lib/ng-jvx-multiselect.service.d.ts.map +1 -0
  44. package/lib/ng-jvx-option/ng-jvx-option.component.d.ts +14 -0
  45. package/lib/ng-jvx-option/ng-jvx-option.component.d.ts.map +1 -0
  46. package/lib/ng-jvx-panel/ng-jvx-panel.component.d.ts +16 -0
  47. package/lib/ng-jvx-panel/ng-jvx-panel.component.d.ts.map +1 -0
  48. package/ng-jvx-multiselect.d.ts +5 -0
  49. package/ng-jvx-multiselect.d.ts.map +1 -0
  50. package/package.json +48 -0
  51. package/public-api.d.ts +11 -0
  52. package/public-api.d.ts.map +1 -0
  53. package/src/lib/mixins.scss +6 -0
  54. package/src/lib/ng-jvx-multiselect.component.scss +234 -0
  55. package/src/lib/ng-jvx-option/ng-jvx-option.component.scss +40 -0
  56. package/src/lib/ng-jvx-panel/ng-jvx-panel.component.scss +0 -0
@@ -0,0 +1,924 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component, ViewChild, Input, Directive, Injectable, EventEmitter, forwardRef, ChangeDetectionStrategy, Optional, Self, HostBinding, ViewChildren, ContentChild, Output, ViewEncapsulation, Inject, NgModule } from '@angular/core';
3
+ import * as i1 from '@angular/material/list';
4
+ import { MatListModule } from '@angular/material/list';
5
+ import * as i9 from '@angular/common';
6
+ import { CommonModule } from '@angular/common';
7
+ import { Subject, fromEvent, of, noop, timer, forkJoin } from 'rxjs';
8
+ import { takeUntil, debounceTime, map, switchMap, tap, distinctUntilChanged } from 'rxjs/operators';
9
+ import * as i1$1 from '@angular/common/http';
10
+ import { HttpParams, HttpHeaders, HttpClientModule } from '@angular/common/http';
11
+ import * as i1$2 from '@angular/forms';
12
+ import { FormControl, ReactiveFormsModule, FormsModule } from '@angular/forms';
13
+ import { MatFormFieldControl } from '@angular/material/form-field';
14
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
15
+ import * as i3 from '@angular/material/menu';
16
+ import { _MatMenuBase, MAT_MENU_DEFAULT_OPTIONS, MAT_MENU_PANEL, MatMenu, matMenuAnimations, MatMenuModule } from '@angular/material/menu';
17
+ import * as i4 from 'ngx-scrollbar';
18
+ import { NgScrollbarModule } from 'ngx-scrollbar';
19
+ import * as i7 from '@angular/material/icon';
20
+ import { MatIconModule } from '@angular/material/icon';
21
+ import * as i8 from '@angular/material/chips';
22
+ import { MatChipsModule } from '@angular/material/chips';
23
+ import * as i11 from 'ngx-scrollbar/smooth-scroll';
24
+ import { SmoothScrollModule } from 'ngx-scrollbar/smooth-scroll';
25
+ import { MatButtonModule } from '@angular/material/button';
26
+ import { MatOptionModule } from '@angular/material/core';
27
+ import { MatSelectModule } from '@angular/material/select';
28
+
29
+ class NgJvxOptionComponent {
30
+ constructor() {
31
+ this.isSelected = false;
32
+ }
33
+ ngOnInit() {
34
+ }
35
+ ngDoCheck() {
36
+ if (this.isSelected !== this.listOption.selected) {
37
+ this.isSelected = this.listOption.selected;
38
+ }
39
+ }
40
+ deselect() {
41
+ this.listOption.selected = false;
42
+ }
43
+ }
44
+ NgJvxOptionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
+ NgJvxOptionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: NgJvxOptionComponent, selector: "ng-jvx-option", inputs: { value: "value" }, viewQueries: [{ propertyName: "listOption", first: true, predicate: ["listOption"], descendants: true, static: true }], ngImport: i0, template: "<mat-list-option [value]=\"value\" [ngClass]=\"{'ng-jvx-option': true, 'mat-list-single-selected-option': isSelected}\" #listOption>\r\n <ng-content></ng-content>\r\n <div class=\"list-option-background\"></div>\r\n</mat-list-option>\r\n", styles: [""], components: [{ type: i1.MatListOption, selector: "mat-list-option", inputs: ["disableRipple", "checkboxPosition", "color", "value", "disabled", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }], directives: [{ type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxOptionComponent, decorators: [{
47
+ type: Component,
48
+ args: [{ selector: 'ng-jvx-option', template: "<mat-list-option [value]=\"value\" [ngClass]=\"{'ng-jvx-option': true, 'mat-list-single-selected-option': isSelected}\" #listOption>\r\n <ng-content></ng-content>\r\n <div class=\"list-option-background\"></div>\r\n</mat-list-option>\r\n", styles: [""] }]
49
+ }], ctorParameters: function () { return []; }, propDecorators: { listOption: [{
50
+ type: ViewChild,
51
+ args: ['listOption', { static: true }]
52
+ }], value: [{
53
+ type: Input
54
+ }] } });
55
+
56
+ class NgJvxOptionsTemplateDirective {
57
+ constructor(el, template, vcRef) {
58
+ this.el = el;
59
+ this.template = template;
60
+ this.vcRef = vcRef;
61
+ }
62
+ set ngJvxOptionsTemplateOf(source) {
63
+ for (const item of source) {
64
+ this.vcRef.createEmbeddedView(this.template, { $implicit: item });
65
+ }
66
+ }
67
+ }
68
+ NgJvxOptionsTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxOptionsTemplateDirective, deps: [{ token: i0.ElementRef }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
69
+ NgJvxOptionsTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: NgJvxOptionsTemplateDirective, selector: "[ngJvxOptionsTemplate]", inputs: { ngJvxOptionsTemplateOf: "ngJvxOptionsTemplateOf" }, ngImport: i0 });
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxOptionsTemplateDirective, decorators: [{
71
+ type: Directive,
72
+ args: [{
73
+ // tslint:disable-next-line:directive-selector
74
+ selector: '[ngJvxOptionsTemplate]'
75
+ }]
76
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { ngJvxOptionsTemplateOf: [{
77
+ type: Input
78
+ }] } });
79
+
80
+ class NgJvxSelectionTemplateDirective {
81
+ constructor(template, vcRef) {
82
+ this.template = template;
83
+ this.vcRef = vcRef;
84
+ }
85
+ set ngJvxSelectionTemplateOf(source) {
86
+ for (const item of source) {
87
+ this.vcRef.createEmbeddedView(this.template, { $implicit: item });
88
+ }
89
+ }
90
+ }
91
+ NgJvxSelectionTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxSelectionTemplateDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
92
+ NgJvxSelectionTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: NgJvxSelectionTemplateDirective, selector: "[ngJvxSelectionTemplate]", inputs: { ngJvxSelectionTemplateOf: "ngJvxSelectionTemplateOf" }, ngImport: i0 });
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxSelectionTemplateDirective, decorators: [{
94
+ type: Directive,
95
+ args: [{
96
+ // tslint:disable-next-line:directive-selector
97
+ selector: '[ngJvxSelectionTemplate]'
98
+ }]
99
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { ngJvxSelectionTemplateOf: [{
100
+ type: Input
101
+ }] } });
102
+
103
+ class NgJvxGroupHeaderDirective {
104
+ constructor(template, vcRef) {
105
+ this.template = template;
106
+ this.vcRef = vcRef;
107
+ }
108
+ set ngJvxGroupHeaderOf(source) {
109
+ for (const item of source) {
110
+ this.vcRef.createEmbeddedView(this.template, { $implicit: item });
111
+ }
112
+ }
113
+ }
114
+ NgJvxGroupHeaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxGroupHeaderDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
115
+ NgJvxGroupHeaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: NgJvxGroupHeaderDirective, selector: "[ngJvxGroupHeader]", inputs: { ngJvxGroupHeaderOf: "ngJvxGroupHeaderOf" }, ngImport: i0 });
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxGroupHeaderDirective, decorators: [{
117
+ type: Directive,
118
+ args: [{
119
+ // tslint:disable-next-line:directive-selector
120
+ selector: '[ngJvxGroupHeader]'
121
+ }]
122
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { ngJvxGroupHeaderOf: [{
123
+ type: Input
124
+ }] } });
125
+
126
+ class NgJvxDisabledOptionDirective {
127
+ constructor(el) {
128
+ this.el = el;
129
+ this.isDisabled = false;
130
+ this.originalOpacity = 1;
131
+ this.unsubs = new Subject();
132
+ this.originalOpacity = el.nativeElement.style.opacity;
133
+ }
134
+ set ngJvxDisabledOption(source) {
135
+ this.isDisabled = source;
136
+ if (this.isDisabled) {
137
+ this.el.nativeElement.style.opacity = this.originalOpacity ? this.originalOpacity / 2 : 0.5;
138
+ }
139
+ else {
140
+ this.el.nativeElement.style.opacity = this.originalOpacity;
141
+ }
142
+ }
143
+ ngOnInit() {
144
+ fromEvent(this.el.nativeElement.closest('.mat-list-item-content'), 'click', {
145
+ capture: true,
146
+ }).pipe(takeUntil(this.unsubs)).subscribe((e) => {
147
+ if (this.isDisabled) {
148
+ e.stopImmediatePropagation();
149
+ e.stopPropagation();
150
+ e.preventDefault();
151
+ }
152
+ });
153
+ }
154
+ ngOnDestroy() {
155
+ this.unsubs.next();
156
+ this.unsubs.complete();
157
+ }
158
+ }
159
+ NgJvxDisabledOptionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxDisabledOptionDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
160
+ NgJvxDisabledOptionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: NgJvxDisabledOptionDirective, selector: "[ngJvxDisabledOption]", inputs: { ngJvxDisabledOption: "ngJvxDisabledOption" }, ngImport: i0 });
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxDisabledOptionDirective, decorators: [{
162
+ type: Directive,
163
+ args: [{
164
+ // tslint:disable-next-line:directive-selector
165
+ selector: '[ngJvxDisabledOption]'
166
+ }]
167
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { ngJvxDisabledOption: [{
168
+ type: Input
169
+ }] } });
170
+
171
+ class NgJvxMultiselectService {
172
+ constructor(http) {
173
+ this.http = http;
174
+ }
175
+ getList({ url, ignorePagination = false, currentPage, pageSize, requestType = 'get', requestHeaders, search, searchProp = 'search', data }) {
176
+ let params = new HttpParams();
177
+ if (search && search.length > 0) {
178
+ params = params.set(searchProp, search);
179
+ }
180
+ if (!ignorePagination) {
181
+ params = params.set('page', currentPage.toString())
182
+ .set('size', pageSize.toString());
183
+ }
184
+ const options = {
185
+ mode: 'no-cors',
186
+ headers: requestHeaders,
187
+ // withCredentials: true,
188
+ // credentials: 'same-origin', // cache: 'default',
189
+ data,
190
+ params
191
+ };
192
+ if (requestType === 'get') {
193
+ return this.http.get(url, options);
194
+ }
195
+ else {
196
+ return this.http.post(url, options);
197
+ }
198
+ }
199
+ }
200
+ NgJvxMultiselectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxMultiselectService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
201
+ NgJvxMultiselectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxMultiselectService, providedIn: 'root' });
202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxMultiselectService, decorators: [{
203
+ type: Injectable,
204
+ args: [{
205
+ providedIn: 'root'
206
+ }]
207
+ }], ctorParameters: function () { return [{ type: i1$1.HttpClient }]; } });
208
+
209
+ class NgJvxFocusDirective {
210
+ constructor(el) {
211
+ this.el = el;
212
+ }
213
+ ngOnInit() {
214
+ if (this.ngJvxFocus) {
215
+ this.el.nativeElement.focus();
216
+ }
217
+ }
218
+ ngOnChanges(changes) {
219
+ if (changes.hasOwnProperty('ngJvxFocus') && changes.ngJvxFocus.currentValue === true) {
220
+ this.el.nativeElement.focus();
221
+ }
222
+ }
223
+ }
224
+ NgJvxFocusDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxFocusDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
225
+ NgJvxFocusDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: NgJvxFocusDirective, selector: "[ngJvxFocus]", inputs: { ngJvxFocus: "ngJvxFocus" }, usesOnChanges: true, ngImport: i0 });
226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxFocusDirective, decorators: [{
227
+ type: Directive,
228
+ args: [{
229
+ // tslint:disable-next-line:directive-selector
230
+ selector: '[ngJvxFocus]'
231
+ }]
232
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { ngJvxFocus: [{
233
+ type: Input
234
+ }] } });
235
+
236
+ class NgJvxMultiselectComponent {
237
+ constructor(formBuilder, service, elementRef, changeDetectorRef, ngControl, fb) {
238
+ this.formBuilder = formBuilder;
239
+ this.service = service;
240
+ this.elementRef = elementRef;
241
+ this.changeDetectorRef = changeDetectorRef;
242
+ this.ngControl = ngControl;
243
+ this.id = `jvx-multiselect-${NgJvxMultiselectComponent.nextId++}`;
244
+ this.optionsTemplate = null;
245
+ this.selectionTemplate = null;
246
+ this.groupHeaderTemplate = null;
247
+ // @ContentChild(NgJvxOptionComponent) optionComp: NgJvxOptionComponent;
248
+ // @ContentChild(TemplateRef) optionsTemplate: TemplateRef<any> | null = null;
249
+ this.options = [];
250
+ this.multi = false;
251
+ this.url = '';
252
+ this.requestType = 'get';
253
+ this.itemValue = 'value';
254
+ this.itemText = 'text';
255
+ this.ignorePagination = false;
256
+ this.clearable = false;
257
+ this.closeOnClick = true;
258
+ this.hasErrors = false;
259
+ this.searchMode = null;
260
+ this.searchInput = false;
261
+ this.searchLabel = 'search';
262
+ this.listProp = '';
263
+ this.totalRowsProp = '';
264
+ this.panelClass = '';
265
+ this.searchProp = 'search';
266
+ this.mapper = {
267
+ mapOption(source) {
268
+ return of(source);
269
+ }
270
+ };
271
+ this.searchMapper = {
272
+ mapSearch: (source, options) => {
273
+ return of(options.filter(o => o[this.itemText].toString().toLowerCase().includes(source.toString().toLowerCase())));
274
+ }
275
+ };
276
+ this.requestHeaders = new HttpHeaders();
277
+ // tslint:disable-next-line:variable-name
278
+ this._required = false;
279
+ // tslint:disable-next-line:variable-name
280
+ this._disabled = false;
281
+ this.valueChange = new EventEmitter();
282
+ this.jvxMultiselectOpen = new EventEmitter();
283
+ this.jvxMultiselectOpened = new EventEmitter();
284
+ this.jvxMultiselectClose = new EventEmitter();
285
+ this.jvxMultiselectClosed = new EventEmitter();
286
+ this.scrollEnd = new EventEmitter();
287
+ this.controlType = 'ng-jvx-multiselect';
288
+ this.document = document;
289
+ this.window = window;
290
+ this.isOpen = false;
291
+ this.isLoading = false;
292
+ this.showList = true;
293
+ this.asyncOptions = [];
294
+ this.selectableOptions = [];
295
+ this.orderedOptions = [];
296
+ this.searchValue = '';
297
+ this.yPosition = 'above';
298
+ this.stateChanges = new Subject();
299
+ this.currentPage = 0;
300
+ this.listContainerSize = { height: 'auto', minHeight: '0', width: '100%' };
301
+ this.touched = false;
302
+ this.focused = false;
303
+ this.multiContainerWidth = 100;
304
+ this.searchValueSubject = new Subject();
305
+ this.searchValue$ = this.searchValueSubject.asObservable();
306
+ this.pValue = [];
307
+ this.shouldLoadMore = true;
308
+ this.pageSize = 15;
309
+ this.unsubscribe = new Subject();
310
+ this.unsubscribe$ = this.unsubscribe.asObservable();
311
+ this.onTouched = () => {
312
+ };
313
+ if (this.ngControl != null) {
314
+ // Setting the value accessor directly (instead of using
315
+ // the providers) to avoid running into a circular import.
316
+ this.ngControl.valueAccessor = this;
317
+ }
318
+ this.parts = fb.group({
319
+ area: '',
320
+ exchange: '',
321
+ subscriber: '',
322
+ });
323
+ this.form = this.formBuilder.group({
324
+ selectionValue: new FormControl(this.selectionValue)
325
+ });
326
+ }
327
+ get shouldLabelFloat() {
328
+ return this.focused || !this.empty;
329
+ }
330
+ set value(value) {
331
+ this.pValue = value !== null && value !== void 0 ? value : [];
332
+ if (value) {
333
+ this.form.get('selectionValue').setValue(this.pValue.map(v => v[this.itemValue]));
334
+ }
335
+ else {
336
+ this.form.get('selectionValue').setValue(value);
337
+ }
338
+ this.stateChanges.next();
339
+ }
340
+ get value() {
341
+ return this.pValue;
342
+ }
343
+ get required() {
344
+ return this._required;
345
+ }
346
+ set required(req) {
347
+ this._required = coerceBooleanProperty(req);
348
+ this.stateChanges.next();
349
+ }
350
+ get disabled() {
351
+ return this._disabled;
352
+ }
353
+ set disabled(value) {
354
+ this._disabled = coerceBooleanProperty(value);
355
+ this._disabled ? this.parts.disable() : this.parts.enable();
356
+ this.stateChanges.next();
357
+ }
358
+ get errorState() {
359
+ if (this.ngControl != null) {
360
+ return this.ngControl.invalid && this.ngControl.touched;
361
+ }
362
+ else {
363
+ return false;
364
+ }
365
+ }
366
+ ngOnInit() {
367
+ this.stateChange$.pipe(takeUntil(this.unsubscribe)).subscribe(() => {
368
+ this.changeDetectorRef.markForCheck();
369
+ });
370
+ this.selectableOptions = [...this.options];
371
+ this.updateOrderedOptions(this.selectableOptions).subscribe(noop);
372
+ fromEvent(window, 'resize').pipe(takeUntil(this.unsubscribe), debounceTime(100), map(() => {
373
+ return this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';
374
+ }), switchMap(() => timer(100)), tap(() => {
375
+ var _a, _b, _c, _d, _e;
376
+ this.multiContainerWidth = (_c = (_b = (_a = this.multiContainer) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.offsetWidth) !== null && _c !== void 0 ? _c : 100;
377
+ this.yPosition = window.innerHeight - ((_e = (_d = this.jvxMultiselect.nativeElement) === null || _d === void 0 ? void 0 : _d.getBoundingClientRect()) === null || _e === void 0 ? void 0 : _e.top) < 260 ? 'above' : 'below';
378
+ this.changeDetectorRef.markForCheck();
379
+ })).subscribe(noop);
380
+ this.searchValue$.pipe(takeUntil(this.unsubscribe), debounceTime(300), distinctUntilChanged((prev, curr) => {
381
+ return curr === this.searchValue;
382
+ }), switchMap((val) => {
383
+ this.searchValue = val;
384
+ this.currentPage = 0;
385
+ if (this.searchMode === 'client') {
386
+ return this.clientSearch();
387
+ }
388
+ else if (this.url && this.url.length > 0) {
389
+ return this.serverSearch();
390
+ }
391
+ })).subscribe((val) => {
392
+ this.changeDetectorRef.markForCheck();
393
+ });
394
+ }
395
+ clientSearch() {
396
+ let obs;
397
+ if (this.url && this.url.length > 0) {
398
+ this.selectableOptions = [];
399
+ this.updateOrderedOptions(this.selectableOptions).subscribe(noop);
400
+ this.shouldLoadMore = true;
401
+ obs = this.getList().pipe(map(() => {
402
+ return this.selectableOptions;
403
+ }));
404
+ }
405
+ else {
406
+ obs = of(this.options);
407
+ }
408
+ return obs.pipe(switchMap((val) => this.searchMapper.mapSearch(this.searchValue, val)), tap((res) => {
409
+ this.selectableOptions = [];
410
+ this.selectableOptions.push(...res);
411
+ }), switchMap(() => this.updateOrderedOptions(this.selectableOptions)));
412
+ }
413
+ serverSearch() {
414
+ this.shouldLoadMore = true;
415
+ this.selectableOptions = [];
416
+ this.shouldLoadMore = true;
417
+ return this.getList();
418
+ }
419
+ ngOnDestroy() {
420
+ this.unsubscribe.next();
421
+ this.stateChanges.complete();
422
+ }
423
+ ngAfterViewInit() {
424
+ timer(0).subscribe(() => {
425
+ this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';
426
+ });
427
+ if (this.scrollbar) {
428
+ this.scrollbar.scrolled.pipe(takeUntil(this.unsubscribe$)).subscribe((e) => {
429
+ this.onScrolled(e);
430
+ });
431
+ }
432
+ timer(0).pipe(tap(() => {
433
+ var _a, _b, _c, _d, _e;
434
+ this.multiContainerWidth = (_c = (_b = (_a = this.multiContainer) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.offsetWidth) !== null && _c !== void 0 ? _c : 100;
435
+ this.yPosition = window.innerHeight - ((_e = (_d = this.jvxMultiselect.nativeElement) === null || _d === void 0 ? void 0 : _d.getBoundingClientRect()) === null || _e === void 0 ? void 0 : _e.top) < 260 ? 'above' : 'below';
436
+ this.changeDetectorRef.markForCheck();
437
+ })).subscribe(noop);
438
+ }
439
+ ngOnChanges(changes) {
440
+ if (changes.options) {
441
+ this.selectableOptions = [...this.options];
442
+ this.updateOrderedOptions(this.selectableOptions).subscribe(noop);
443
+ }
444
+ }
445
+ get selectionValue() {
446
+ return this.value.map((v) => {
447
+ return v[this.itemValue];
448
+ });
449
+ }
450
+ get empty() {
451
+ const n = this.parts.value;
452
+ return !n.area && !n.exchange && !n.subscriber;
453
+ }
454
+ onCLickOnMenu(e) {
455
+ if (this.multi || this.closeOnClick === false) {
456
+ e.stopPropagation();
457
+ }
458
+ }
459
+ propagateChange(_) {
460
+ }
461
+ // this is the initial value set to the component
462
+ writeValue(obj) {
463
+ this.value = obj;
464
+ }
465
+ // registers 'fn' that will be fired when changes are made
466
+ // this is how we emit the changes back to the form
467
+ registerOnChange(fn) {
468
+ this.propagateChange = fn;
469
+ }
470
+ registerOnTouched(fn) {
471
+ this.onTouched = fn;
472
+ }
473
+ onChange(e) {
474
+ let vals = e.source.selectedOptions.selected.map(o => o.value);
475
+ vals = this.selectableOptions.filter(o => vals.includes(o[this.itemValue]));
476
+ console.log(vals);
477
+ const selectableIds = this.selectableOptions.map(s => s[this.itemValue]);
478
+ console.log(selectableIds);
479
+ if (this.multi) {
480
+ // if search is active, probably some of the already selected values are not included in the selectable options,
481
+ // so we have to push them in the selected values of the list;
482
+ for (const v of this.value) {
483
+ if (!selectableIds.includes(v[this.itemValue])) {
484
+ vals = [v, ...vals];
485
+ }
486
+ }
487
+ }
488
+ vals.sort((a, b) => {
489
+ return typeof a[this.itemValue] === 'string' ?
490
+ a[this.itemValue].localeCompare(b[this.itemValue]) : a[this.itemValue] - b[this.itemValue];
491
+ });
492
+ console.log(vals);
493
+ this.value = [...vals];
494
+ this.form.get('selectionValue').setValue(this.value.map(v => v[this.itemValue]));
495
+ this.valueChange.emit(this.value);
496
+ this.propagateChange(this.value);
497
+ this.changeDetectorRef.markForCheck();
498
+ }
499
+ onFocusIn(event) {
500
+ if (!this.focused) {
501
+ this.focused = true;
502
+ this.stateChanges.next();
503
+ }
504
+ }
505
+ onFocusOut(event) {
506
+ if (!this.elementRef.nativeElement.contains(event.relatedTarget)) {
507
+ this.touched = true;
508
+ this.focused = false;
509
+ this.onTouched();
510
+ this.stateChanges.next();
511
+ }
512
+ }
513
+ onMenuOpen() {
514
+ this.isOpen = true;
515
+ this.jvxMultiselectOpen.emit();
516
+ }
517
+ onMenuClose() {
518
+ this.isOpen = false;
519
+ this.jvxMultiselectClose.emit();
520
+ }
521
+ deselect(val) {
522
+ this.value = [...this.value.filter(v => v[this.itemValue] !== val[this.itemValue])];
523
+ // this.value.splice(this.value.findIndex(v => v[this.itemValue] === val[this.itemValue]), 1);
524
+ this.form.get('selectionValue').setValue(this.value.map(m => m.value));
525
+ this.valueChange.emit(this.value);
526
+ this.propagateChange(this.value);
527
+ this.changeDetectorRef.markForCheck();
528
+ }
529
+ setSelectionContainerSize() {
530
+ timer(0).subscribe(() => {
531
+ if (this.selectionContainer) {
532
+ this.listContainerSize.height = this.selectionContainer.nativeElement.offsetHeight > 260 ? '260px' : 'auto';
533
+ this.listContainerSize.minHeight = this.selectionContainer.nativeElement.offsetHeight <= 260 ?
534
+ this.selectionContainer.nativeElement.offsetHeight + 'px' : '260px';
535
+ this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';
536
+ }
537
+ this.changeDetectorRef.detectChanges();
538
+ });
539
+ }
540
+ clickOnMenuTrigger(e) {
541
+ if (!this.disabled) {
542
+ this.showList = false;
543
+ this.shouldLoadMore = true;
544
+ timer(0).subscribe(() => {
545
+ this.showList = true;
546
+ if (this.url.length > 0) {
547
+ e.preventDefault();
548
+ this.selectableOptions.length = 0;
549
+ this.updateOrderedOptions(this.selectableOptions);
550
+ this.getList().subscribe(noop);
551
+ this.setSelectionContainerSize();
552
+ }
553
+ else {
554
+ this.trigger.openMenu();
555
+ this.setSelectionContainerSize();
556
+ }
557
+ });
558
+ }
559
+ }
560
+ getList() {
561
+ this.isLoading = true;
562
+ return this.service.getList({
563
+ url: this.url,
564
+ requestType: this.requestType,
565
+ data: {},
566
+ currentPage: ++this.currentPage,
567
+ ignorePagination: this.ignorePagination,
568
+ requestHeaders: this.requestHeaders,
569
+ search: this.searchValue,
570
+ searchProp: this.searchProp,
571
+ pageSize: this.pageSize
572
+ }).pipe(switchMap((val) => {
573
+ let result = [];
574
+ if (this.listProp.length > 0) {
575
+ result = [...val[this.listProp]];
576
+ }
577
+ else {
578
+ result = [...val];
579
+ }
580
+ if (result.length === 0) {
581
+ this.shouldLoadMore = false;
582
+ this.isLoading = false;
583
+ return forkJoin([]);
584
+ }
585
+ else {
586
+ const newOptions = [];
587
+ for (const opt of result) {
588
+ const newOption = this.mapper.mapOption(opt);
589
+ newOptions.push(newOption);
590
+ }
591
+ return forkJoin(newOptions);
592
+ }
593
+ }), switchMap((finVal) => {
594
+ this.selectableOptions.push(...finVal);
595
+ return this.updateOrderedOptions(this.selectableOptions);
596
+ }), map((val) => {
597
+ this.isLoading = false;
598
+ this.trigger.openMenu();
599
+ this.setSelectionContainerSize();
600
+ this.changeDetectorRef.markForCheck();
601
+ return val;
602
+ }));
603
+ }
604
+ onScrolled(e) {
605
+ if (e.target.scrollTop + 220 + ((this.searchInput ? 0 : 1) * 40) === this.selectionContainer.nativeElement.offsetHeight
606
+ && !this.isLoading) {
607
+ this.scrollEnd.emit();
608
+ if (this.url && this.url.length > 0 && !this.ignorePagination && this.shouldLoadMore) {
609
+ this.getList().subscribe(noop);
610
+ }
611
+ }
612
+ }
613
+ onMenuOpened() {
614
+ this.jvxMultiselectOpened.emit();
615
+ }
616
+ onMenuClosed() {
617
+ if ((!this.url || this.url.length === 0) && this.searchMode === 'client') {
618
+ this.searchValueSubject.next('');
619
+ }
620
+ else {
621
+ this.searchValue = '';
622
+ this.currentPage = 0;
623
+ }
624
+ this.jvxMultiselectClosed.emit();
625
+ this.changeDetectorRef.markForCheck();
626
+ }
627
+ onSearchInputClick(e) {
628
+ e.stopPropagation();
629
+ }
630
+ onSearchValueChange(e) {
631
+ this.searchValueSubject.next(e.target.value);
632
+ }
633
+ clear(e) {
634
+ e.stopPropagation();
635
+ e.preventDefault();
636
+ this.value = [];
637
+ this.form.get('selectionValue').setValue(this.value.map(v => v[this.itemValue]));
638
+ this.propagateChange(this.value);
639
+ this.valueChange.emit(this.value);
640
+ this.changeDetectorRef.markForCheck();
641
+ }
642
+ setDescribedByIds(ids) {
643
+ const controlElement = this.elementRef.nativeElement
644
+ .querySelector('.ng-jvx-multiselect');
645
+ controlElement.setAttribute('aria-describedby', ids.join(' '));
646
+ }
647
+ onContainerClick(event) {
648
+ // if ((event.target as Element).tagName.toLowerCase() !== 'input') {
649
+ // this.elementRef.nativeElement.querySelector('input').focus();
650
+ // }
651
+ }
652
+ get stateChange$() {
653
+ return this.stateChanges.asObservable();
654
+ }
655
+ updateOrderedOptions(options) {
656
+ let obs = of(options);
657
+ if (this.groupBy) {
658
+ this.orderedOptions.length = 0;
659
+ const obsArr = [];
660
+ for (const option of options) {
661
+ if (typeof this.groupBy !== 'string') {
662
+ obsArr.push(this.groupBy.mapGroup(option));
663
+ }
664
+ else {
665
+ obsArr.push(of({ group: option[this.groupBy], option }));
666
+ }
667
+ }
668
+ obs = forkJoin(obsArr).pipe(map((res) => {
669
+ const groups = [...new Set(res.map(item => item.group))];
670
+ for (const group of groups) {
671
+ this.orderedOptions.push({
672
+ group,
673
+ options: res.filter(r => r.group === group).map(o => o.option)
674
+ });
675
+ }
676
+ return this.orderedOptions;
677
+ }));
678
+ }
679
+ return obs;
680
+ }
681
+ closeMenu() {
682
+ this.trigger.closeMenu();
683
+ }
684
+ }
685
+ NgJvxMultiselectComponent.nextId = 0;
686
+ NgJvxMultiselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxMultiselectComponent, deps: [{ token: i1$2.FormBuilder }, { token: NgJvxMultiselectService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$2.NgControl, optional: true, self: true }, { token: i1$2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
687
+ NgJvxMultiselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: NgJvxMultiselectComponent, selector: "ng-jvx-multiselect", inputs: { options: "options", multi: "multi", url: "url", requestType: "requestType", itemValue: "itemValue", itemText: "itemText", ignorePagination: "ignorePagination", clearable: "clearable", closeOnClick: "closeOnClick", hasErrors: "hasErrors", searchMode: "searchMode", searchInput: "searchInput", searchLabel: "searchLabel", listProp: "listProp", totalRowsProp: "totalRowsProp", panelClass: "panelClass", searchProp: "searchProp", mapper: "mapper", searchMapper: "searchMapper", groupBy: "groupBy", value: "value", requestHeaders: "requestHeaders", required: "required", disabled: "disabled" }, outputs: { valueChange: "valueChange", jvxMultiselectOpen: "jvxMultiselectOpen", jvxMultiselectOpened: "jvxMultiselectOpened", jvxMultiselectClose: "jvxMultiselectClose", jvxMultiselectClosed: "jvxMultiselectClosed", scrollEnd: "scrollEnd" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat" } }, providers: [
688
+ {
689
+ provide: MatFormFieldControl,
690
+ useExisting: forwardRef(() => NgJvxMultiselectComponent),
691
+ multi: true,
692
+ }
693
+ ], queries: [{ propertyName: "optionsTemplate", first: true, predicate: NgJvxOptionsTemplateDirective, descendants: true }, { propertyName: "selectionTemplate", first: true, predicate: NgJvxSelectionTemplateDirective, descendants: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: NgJvxGroupHeaderDirective, descendants: true }], viewQueries: [{ propertyName: "jvxMultiselect", first: true, predicate: ["jvxMultiselect"], descendants: true, static: true }, { propertyName: "selectionContainer", first: true, predicate: ["selectionContainer"], descendants: true }, { propertyName: "selection", first: true, predicate: ["selection"], descendants: true, static: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, static: true }, { propertyName: "scrollbar", first: true, predicate: ["scrollbar"], descendants: true }, { propertyName: "multiContainer", first: true, predicate: ["multiContainer"], descendants: true }, { propertyName: "optionComp", predicate: NgJvxOptionComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [matMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n #trigger=\"matMenuTrigger\">\r\n <mat-menu #menuRef=\"matMenu\" [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n\r\n [yPosition]=\"yPosition\">\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <mat-selection-list #selection [multiple]=\"multi\"\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n (selectionChange)=\"onChange($event)\"\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\" [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <span style=\"padding-inline: 10px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </span>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </mat-selection-list>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </mat-menu>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n\r\n <div class=\"ng-jvx-multiselect__placeholder\" *ngIf=\"value.length === 0\">\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container></div>\r\n </div>\r\n <div class=\"ng-jvx-multiselect__remove-button\" *ngIf=\"clearable && value.length > 0\" (click)=\"clear($event)\">\r\n <mat-icon style=\"font-size: 18px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\">clear\r\n </mat-icon>\r\n </div>\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n <mat-icon *ngIf=\"!isLoading\">expand_more</mat-icon>\r\n <div *ngIf=\"isLoading\" class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"max-width: 100%;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{option[itemText]}}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{value[itemText]}}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <mat-chip-list #chipList [disabled]=\"this.disabled\">\r\n <mat-chip [color]=\"'primary'\" selected *ngFor=\"let val of value\" [selectable]=\"false\"\r\n class=\"ng-jvx-multiselect-chip\"\r\n [removable]=\"true\" (removed)=\"deselect(val)\">\r\n <span class=\"chip-content\"\r\n [ngStyle]=\"{'max-width': multiContainerWidth - 50 +'px'}\">{{val[itemText]}}</span>\r\n\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </mat-chip-list>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{opt.group}}</strong></div>\r\n</ng-template>\r\n", styles: [""], components: [{ type: i3.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { type: i1.MatSelectionList, selector: "mat-selection-list", inputs: ["disableRipple", "tabIndex", "color", "compareWith", "disabled", "multiple"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { type: NgJvxOptionComponent, selector: "ng-jvx-option", inputs: ["value"] }, { type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }], directives: [{ type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: NgJvxFocusDirective, selector: "[ngJvxFocus]", inputs: ["ngJvxFocus"] }, { type: i11.SmoothScroll, selector: "[smoothScroll], [smooth-scroll]", exportAs: ["smoothScroll"] }, { type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i8.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i8.MatChipRemove, selector: "[matChipRemove]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
694
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxMultiselectComponent, decorators: [{
695
+ type: Component,
696
+ args: [{ selector: 'ng-jvx-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
697
+ {
698
+ provide: MatFormFieldControl,
699
+ useExisting: forwardRef(() => NgJvxMultiselectComponent),
700
+ multi: true,
701
+ }
702
+ ], template: "<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [matMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n #trigger=\"matMenuTrigger\">\r\n <mat-menu #menuRef=\"matMenu\" [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n\r\n [yPosition]=\"yPosition\">\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <mat-selection-list #selection [multiple]=\"multi\"\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n (selectionChange)=\"onChange($event)\"\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\" [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <span style=\"padding-inline: 10px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </span>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </mat-selection-list>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </mat-menu>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n\r\n <div class=\"ng-jvx-multiselect__placeholder\" *ngIf=\"value.length === 0\">\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container></div>\r\n </div>\r\n <div class=\"ng-jvx-multiselect__remove-button\" *ngIf=\"clearable && value.length > 0\" (click)=\"clear($event)\">\r\n <mat-icon style=\"font-size: 18px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\">clear\r\n </mat-icon>\r\n </div>\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n <mat-icon *ngIf=\"!isLoading\">expand_more</mat-icon>\r\n <div *ngIf=\"isLoading\" class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"max-width: 100%;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{option[itemText]}}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{value[itemText]}}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <mat-chip-list #chipList [disabled]=\"this.disabled\">\r\n <mat-chip [color]=\"'primary'\" selected *ngFor=\"let val of value\" [selectable]=\"false\"\r\n class=\"ng-jvx-multiselect-chip\"\r\n [removable]=\"true\" (removed)=\"deselect(val)\">\r\n <span class=\"chip-content\"\r\n [ngStyle]=\"{'max-width': multiContainerWidth - 50 +'px'}\">{{val[itemText]}}</span>\r\n\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </mat-chip-list>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{opt.group}}</strong></div>\r\n</ng-template>\r\n", styles: [""] }]
703
+ }], ctorParameters: function () {
704
+ return [{ type: i1$2.FormBuilder }, { type: NgJvxMultiselectService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$2.NgControl, decorators: [{
705
+ type: Optional
706
+ }, {
707
+ type: Self
708
+ }] }, { type: i1$2.FormBuilder }];
709
+ }, propDecorators: { id: [{
710
+ type: HostBinding
711
+ }], shouldLabelFloat: [{
712
+ type: HostBinding,
713
+ args: ['class.floating']
714
+ }], jvxMultiselect: [{
715
+ type: ViewChild,
716
+ args: ['jvxMultiselect', { static: true }]
717
+ }], selectionContainer: [{
718
+ type: ViewChild,
719
+ args: ['selectionContainer', { static: false }]
720
+ }], selection: [{
721
+ type: ViewChild,
722
+ args: ['selection', { static: true }]
723
+ }], trigger: [{
724
+ type: ViewChild,
725
+ args: ['trigger', { static: true }]
726
+ }], scrollbar: [{
727
+ type: ViewChild,
728
+ args: ['scrollbar', { static: false }]
729
+ }], multiContainer: [{
730
+ type: ViewChild,
731
+ args: ['multiContainer', { static: false }]
732
+ }], optionComp: [{
733
+ type: ViewChildren,
734
+ args: [NgJvxOptionComponent]
735
+ }], optionsTemplate: [{
736
+ type: ContentChild,
737
+ args: [NgJvxOptionsTemplateDirective]
738
+ }], selectionTemplate: [{
739
+ type: ContentChild,
740
+ args: [NgJvxSelectionTemplateDirective]
741
+ }], groupHeaderTemplate: [{
742
+ type: ContentChild,
743
+ args: [NgJvxGroupHeaderDirective]
744
+ }], options: [{
745
+ type: Input
746
+ }], multi: [{
747
+ type: Input
748
+ }], url: [{
749
+ type: Input
750
+ }], requestType: [{
751
+ type: Input
752
+ }], itemValue: [{
753
+ type: Input
754
+ }], itemText: [{
755
+ type: Input
756
+ }], ignorePagination: [{
757
+ type: Input
758
+ }], clearable: [{
759
+ type: Input
760
+ }], closeOnClick: [{
761
+ type: Input
762
+ }], hasErrors: [{
763
+ type: Input
764
+ }], searchMode: [{
765
+ type: Input
766
+ }], searchInput: [{
767
+ type: Input
768
+ }], searchLabel: [{
769
+ type: Input
770
+ }], listProp: [{
771
+ type: Input
772
+ }], totalRowsProp: [{
773
+ type: Input
774
+ }], panelClass: [{
775
+ type: Input
776
+ }], searchProp: [{
777
+ type: Input
778
+ }], mapper: [{
779
+ type: Input
780
+ }], searchMapper: [{
781
+ type: Input
782
+ }], groupBy: [{
783
+ type: Input
784
+ }], value: [{
785
+ type: Input
786
+ }], requestHeaders: [{
787
+ type: Input
788
+ }], required: [{
789
+ type: Input
790
+ }], disabled: [{
791
+ type: Input
792
+ }], valueChange: [{
793
+ type: Output
794
+ }], jvxMultiselectOpen: [{
795
+ type: Output
796
+ }], jvxMultiselectOpened: [{
797
+ type: Output
798
+ }], jvxMultiselectClose: [{
799
+ type: Output
800
+ }], jvxMultiselectClosed: [{
801
+ type: Output
802
+ }], scrollEnd: [{
803
+ type: Output
804
+ }] } });
805
+
806
+ /**
807
+ * @license
808
+ * Copyright Google LLC All Rights Reserved.
809
+ *
810
+ * Use of this source code is governed by an MIT-style license that can be
811
+ * found in the LICENSE file at https://angular.io/license
812
+ */
813
+ /** @docs-public MatMenu */
814
+ class NgJvxPanelComponent extends _MatMenuBase {
815
+ constructor(elementRef, ngZone, defaultOptions) {
816
+ super(elementRef, ngZone, defaultOptions);
817
+ }
818
+ }
819
+ NgJvxPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxPanelComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: MAT_MENU_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Component });
820
+ NgJvxPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: NgJvxPanelComponent, selector: "ngJvxPanel", host: { properties: { "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.aria-describedby": "null" } }, providers: [
821
+ { provide: MAT_MENU_PANEL, useExisting: MatMenu },
822
+ ], exportAs: ["ngJvxPanel"], usesInheritance: true, ngImport: i0, template: "<ng-template>\r\n <div\r\n class=\"mat-menu-panel\"\r\n [id]=\"panelId\"\r\n [ngClass]=\"_classList\"\r\n (keydown)=\"_handleKeydown($event)\"\r\n (click)=\"closed.emit('click')\"\r\n [@transformMenu]=\"_panelAnimationState\"\r\n (@transformMenu.start)=\"_onAnimationStart($event)\"\r\n (@transformMenu.done)=\"_onAnimationDone($event)\"\r\n tabindex=\"-1\"\r\n role=\"menu\"\r\n [attr.aria-label]=\"ariaLabel || null\"\r\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\r\n [attr.aria-describedby]=\"ariaDescribedby || null\">\r\n <div class=\"mat-menu-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [""], directives: [{ type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [
823
+ matMenuAnimations.transformMenu,
824
+ matMenuAnimations.fadeInItems
825
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
826
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxPanelComponent, decorators: [{
827
+ type: Component,
828
+ args: [{ selector: 'ngJvxPanel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, exportAs: 'ngJvxPanel', host: {
829
+ '[attr.aria-label]': 'null',
830
+ '[attr.aria-labelledby]': 'null',
831
+ '[attr.aria-describedby]': 'null',
832
+ }, animations: [
833
+ matMenuAnimations.transformMenu,
834
+ matMenuAnimations.fadeInItems
835
+ ], providers: [
836
+ { provide: MAT_MENU_PANEL, useExisting: MatMenu },
837
+ ], template: "<ng-template>\r\n <div\r\n class=\"mat-menu-panel\"\r\n [id]=\"panelId\"\r\n [ngClass]=\"_classList\"\r\n (keydown)=\"_handleKeydown($event)\"\r\n (click)=\"closed.emit('click')\"\r\n [@transformMenu]=\"_panelAnimationState\"\r\n (@transformMenu.start)=\"_onAnimationStart($event)\"\r\n (@transformMenu.done)=\"_onAnimationDone($event)\"\r\n tabindex=\"-1\"\r\n role=\"menu\"\r\n [attr.aria-label]=\"ariaLabel || null\"\r\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\r\n [attr.aria-describedby]=\"ariaDescribedby || null\">\r\n <div class=\"mat-menu-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [""] }]
838
+ }], ctorParameters: function () {
839
+ return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
840
+ type: Inject,
841
+ args: [MAT_MENU_DEFAULT_OPTIONS]
842
+ }] }];
843
+ } });
844
+
845
+ class NgJvxMultiselectModule {
846
+ }
847
+ NgJvxMultiselectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxMultiselectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
848
+ NgJvxMultiselectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxMultiselectModule, declarations: [NgJvxMultiselectComponent,
849
+ NgJvxOptionComponent,
850
+ NgJvxOptionsTemplateDirective,
851
+ NgJvxPanelComponent,
852
+ NgJvxSelectionTemplateDirective,
853
+ NgJvxDisabledOptionDirective,
854
+ NgJvxGroupHeaderDirective,
855
+ NgJvxFocusDirective], imports: [MatButtonModule,
856
+ MatOptionModule,
857
+ MatSelectModule,
858
+ MatMenuModule,
859
+ CommonModule,
860
+ MatIconModule,
861
+ MatListModule,
862
+ MatChipsModule,
863
+ ReactiveFormsModule,
864
+ HttpClientModule,
865
+ NgScrollbarModule,
866
+ SmoothScrollModule,
867
+ FormsModule], exports: [NgJvxMultiselectComponent, NgJvxOptionComponent, NgJvxOptionsTemplateDirective, NgJvxSelectionTemplateDirective, NgJvxDisabledOptionDirective, NgJvxGroupHeaderDirective] });
868
+ NgJvxMultiselectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxMultiselectModule, imports: [[
869
+ MatButtonModule,
870
+ MatOptionModule,
871
+ MatSelectModule,
872
+ MatMenuModule,
873
+ CommonModule,
874
+ MatIconModule,
875
+ MatListModule,
876
+ MatChipsModule,
877
+ ReactiveFormsModule,
878
+ HttpClientModule,
879
+ NgScrollbarModule,
880
+ SmoothScrollModule,
881
+ FormsModule
882
+ ]] });
883
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NgJvxMultiselectModule, decorators: [{
884
+ type: NgModule,
885
+ args: [{
886
+ declarations: [
887
+ NgJvxMultiselectComponent,
888
+ NgJvxOptionComponent,
889
+ NgJvxOptionsTemplateDirective,
890
+ NgJvxPanelComponent,
891
+ NgJvxSelectionTemplateDirective,
892
+ NgJvxDisabledOptionDirective,
893
+ NgJvxGroupHeaderDirective,
894
+ NgJvxFocusDirective
895
+ ],
896
+ imports: [
897
+ MatButtonModule,
898
+ MatOptionModule,
899
+ MatSelectModule,
900
+ MatMenuModule,
901
+ CommonModule,
902
+ MatIconModule,
903
+ MatListModule,
904
+ MatChipsModule,
905
+ ReactiveFormsModule,
906
+ HttpClientModule,
907
+ NgScrollbarModule,
908
+ SmoothScrollModule,
909
+ FormsModule
910
+ ],
911
+ exports: [NgJvxMultiselectComponent, NgJvxOptionComponent, NgJvxOptionsTemplateDirective, NgJvxSelectionTemplateDirective, NgJvxDisabledOptionDirective, NgJvxGroupHeaderDirective]
912
+ }]
913
+ }] });
914
+
915
+ /*
916
+ * Public API Surface of ng-jvx-multiselect
917
+ */
918
+
919
+ /**
920
+ * Generated bundle index. Do not edit.
921
+ */
922
+
923
+ export { NgJvxDisabledOptionDirective, NgJvxGroupHeaderDirective, NgJvxMultiselectComponent, NgJvxMultiselectModule, NgJvxMultiselectService, NgJvxOptionComponent, NgJvxOptionsTemplateDirective, NgJvxSelectionTemplateDirective };
924
+ //# sourceMappingURL=ng-jvx-multiselect.mjs.map