@meshmakers/shared-ui 0.0.0-0 → 0.0.2304-23001

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 (34) hide show
  1. package/README.md +4 -7
  2. package/esm2020/lib/confirmation-dialog/confirmation-dialog.module.mjs +4 -4
  3. package/esm2020/lib/confirmation-dialog/confirmation-window/confirmation-window.component.mjs +8 -4
  4. package/esm2020/lib/confirmation-dialog/services/confirmation.service.mjs +7 -7
  5. package/esm2020/lib/ia-shared-ui/ia-autocomplete-input/ia-autocomplete-input.mjs +33 -20
  6. package/esm2020/lib/ia-shared-ui/ia-entity-select-input/ia-entity-select-input.component.mjs +30 -18
  7. package/esm2020/lib/ia-shared-ui/ia-multiple-entity-select-input/ia-multiple-entity-select-input.component.mjs +300 -0
  8. package/esm2020/lib/ia-shared-ui/ia-notification-bar/ia-notification-bar.component.mjs +5 -4
  9. package/esm2020/lib/ia-shared-ui/ia-shared-ui.module.mjs +31 -9
  10. package/esm2020/lib/ia-shared-ui/message-details/message-details.component.mjs +3 -3
  11. package/esm2020/lib/progress-notifier/progress-notifier.module.mjs +4 -4
  12. package/esm2020/lib/progress-notifier/progress-window/progress-window.component.mjs +5 -4
  13. package/esm2020/lib/progress-notifier/services/progress-notifier.service.mjs +7 -6
  14. package/esm2020/lib/progress-notifier/shared/progressValue.mjs +5 -1
  15. package/esm2020/lib/shared/abstractDetailsComponent.mjs +8 -7
  16. package/esm2020/lib/shared/commonValidators.mjs +4 -3
  17. package/esm2020/public-api.mjs +2 -1
  18. package/fesm2015/meshmakers-shared-ui.mjs +438 -84
  19. package/fesm2015/meshmakers-shared-ui.mjs.map +1 -1
  20. package/fesm2020/meshmakers-shared-ui.mjs +424 -83
  21. package/fesm2020/meshmakers-shared-ui.mjs.map +1 -1
  22. package/lib/confirmation-dialog/confirmation-window/confirmation-window.component.d.ts +5 -5
  23. package/lib/confirmation-dialog/services/confirmation.service.d.ts +1 -1
  24. package/lib/ia-shared-ui/ia-autocomplete-input/ia-autocomplete-input.d.ts +4 -4
  25. package/lib/ia-shared-ui/ia-entity-select-input/ia-entity-select-input.component.d.ts +5 -5
  26. package/lib/ia-shared-ui/ia-multiple-entity-select-input/ia-multiple-entity-select-input.component.d.ts +73 -0
  27. package/lib/ia-shared-ui/ia-notification-bar/ia-notification-bar.component.d.ts +2 -2
  28. package/lib/ia-shared-ui/ia-shared-ui.module.d.ts +13 -10
  29. package/lib/ia-shared-ui/message-details/message-details.component.d.ts +1 -1
  30. package/lib/progress-notifier/progress-window/progress-window.component.d.ts +2 -2
  31. package/lib/progress-notifier/shared/progressValue.d.ts +2 -1
  32. package/lib/shared/abstractDetailsComponent.d.ts +5 -5
  33. package/package.json +8 -4
  34. package/public-api.d.ts +1 -0
@@ -16,7 +16,7 @@ import * as i7 from '@angular/forms';
16
16
  import { FormControl, NgControl, NG_VALUE_ACCESSOR, NG_VALIDATORS, ReactiveFormsModule, Validators } from '@angular/forms';
17
17
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
18
18
  import { debounceTime, filter, tap, map, switchMap } from 'rxjs/operators';
19
- import { Subject, BehaviorSubject } from 'rxjs';
19
+ import { Subject, of, BehaviorSubject } from 'rxjs';
20
20
  import * as i1$2 from '@angular/cdk/a11y';
21
21
  import * as i3$1 from '@angular/material/autocomplete';
22
22
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
@@ -25,6 +25,11 @@ import * as i5 from '@angular/material/input';
25
25
  import { MatInputModule } from '@angular/material/input';
26
26
  import * as i6 from '@angular/material/progress-spinner';
27
27
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
28
+ import { ENTER, COMMA } from '@angular/cdk/keycodes';
29
+ import * as i7$1 from '@angular/material/chips';
30
+ import { MatChipsModule } from '@angular/material/chips';
31
+ import * as i8 from '@angular/material/icon';
32
+ import { MatIconModule } from '@angular/material/icon';
28
33
  import * as i3$2 from '@angular/flex-layout/flex';
29
34
  import * as i5$1 from '@angular/material/progress-bar';
30
35
  import { MatProgressBarModule } from '@angular/material/progress-bar';
@@ -39,9 +44,9 @@ class MessageDetailsComponent {
39
44
  ngOnInit() {
40
45
  }
41
46
  }
42
- MessageDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: MessageDetailsComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
43
- MessageDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: MessageDetailsComponent, selector: "app-message-details", ngImport: i0, template: "<mat-dialog-content>\n\n <h2>{{errorMessage.title}}</h2>\n <p>{{errorMessage.message}}</p>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button color=\"primary\" mat-dialog-close mat-raised-button>OK</button>\n</mat-dialog-actions>\n", styles: [""], dependencies: [{ kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: MessageDetailsComponent, decorators: [{
47
+ MessageDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MessageDetailsComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
48
+ MessageDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: MessageDetailsComponent, selector: "app-message-details", ngImport: i0, template: "<mat-dialog-content>\n\n <h2>{{errorMessage.title}}</h2>\n <p>{{errorMessage.message}}</p>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button color=\"primary\" mat-dialog-close mat-raised-button>OK</button>\n</mat-dialog-actions>\n", styles: [""], dependencies: [{ kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MessageDetailsComponent, decorators: [{
45
50
  type: Component,
46
51
  args: [{ selector: 'app-message-details', template: "<mat-dialog-content>\n\n <h2>{{errorMessage.title}}</h2>\n <p>{{errorMessage.message}}</p>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button color=\"primary\" mat-dialog-close mat-raised-button>OK</button>\n</mat-dialog-actions>\n" }]
47
52
  }], ctorParameters: function () {
@@ -55,6 +60,7 @@ class IaNotificationBarComponent {
55
60
  constructor(messageService, dialog) {
56
61
  this.messageService = messageService;
57
62
  this.dialog = dialog;
63
+ this.errorMessage = null;
58
64
  }
59
65
  ngOnInit() {
60
66
  this.messageService.getLatestErrorMessage().subscribe(value => {
@@ -72,9 +78,9 @@ class IaNotificationBarComponent {
72
78
  });
73
79
  }
74
80
  }
75
- IaNotificationBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaNotificationBarComponent, deps: [{ token: i1$1.MessageService }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
76
- IaNotificationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: IaNotificationBarComponent, selector: "ia-notification-bar", ngImport: i0, template: "<mat-toolbar [hidden]=\"!errorMessage\" color=\"warn\">\n <a (click)=\"onShowDetails()\"><span class=\"mat-small\"><u>{{ errorMessage?.title }}</u></span></a>\n\n <!-- This fills the remaining space of the current row -->\n <span class=\"notification-fill-remaining-space\"></span>\n\n <button (click)=\"onHide()\" color=\"warn\" mat-raised-button><i class=\"pi pi-angle-double-up\"></i></button>\n</mat-toolbar>\n", styles: [".notification-fill-remaining-space{flex:1 1 auto}\n"], dependencies: [{ kind: "component", type: i3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
77
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaNotificationBarComponent, decorators: [{
81
+ IaNotificationBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaNotificationBarComponent, deps: [{ token: i1$1.MessageService }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
82
+ IaNotificationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: IaNotificationBarComponent, selector: "ia-notification-bar", ngImport: i0, template: "<mat-toolbar [hidden]=\"!errorMessage\" color=\"warn\">\n <a (click)=\"onShowDetails()\"><span class=\"mat-small\"><u>{{ errorMessage?.title }}</u></span></a>\n\n <!-- This fills the remaining space of the current row -->\n <span class=\"notification-fill-remaining-space\"></span>\n\n <button (click)=\"onHide()\" color=\"warn\" mat-raised-button><i class=\"pi pi-angle-double-up\"></i></button>\n</mat-toolbar>\n", styles: [".notification-fill-remaining-space{flex:1 1 auto}\n"], dependencies: [{ kind: "component", type: i3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaNotificationBarComponent, decorators: [{
78
84
  type: Component,
79
85
  args: [{ selector: 'ia-notification-bar', template: "<mat-toolbar [hidden]=\"!errorMessage\" color=\"warn\">\n <a (click)=\"onShowDetails()\"><span class=\"mat-small\"><u>{{ errorMessage?.title }}</u></span></a>\n\n <!-- This fills the remaining space of the current row -->\n <span class=\"notification-fill-remaining-space\"></span>\n\n <button (click)=\"onHide()\" color=\"warn\" mat-raised-button><i class=\"pi pi-angle-double-up\"></i></button>\n</mat-toolbar>\n", styles: [".notification-fill-remaining-space{flex:1 1 auto}\n"] }]
80
86
  }], ctorParameters: function () { return [{ type: i1$1.MessageService }, { type: i1.MatDialog }]; } });
@@ -95,6 +101,13 @@ class IaAutocompleteInput {
95
101
  };
96
102
  this._onTouched = () => {
97
103
  };
104
+ this.ngControl = null;
105
+ this.errorState = false;
106
+ this._selectedString = null;
107
+ this.inputField = null;
108
+ this._dataSource = null;
109
+ this._placeholder = "";
110
+ this._prefix = "";
98
111
  this.searchFormControl = new FormControl();
99
112
  this.isLoading = false;
100
113
  this._disabled = false;
@@ -130,7 +143,9 @@ class IaAutocompleteInput {
130
143
  }
131
144
  set required(req) {
132
145
  this._required = coerceBooleanProperty(req);
133
- this.inputField.required = this._required;
146
+ if (this.inputField) {
147
+ this.inputField.required = this._required;
148
+ }
134
149
  this.stateChanges.next();
135
150
  }
136
151
  get prefix() {
@@ -155,7 +170,7 @@ class IaAutocompleteInput {
155
170
  }
156
171
  get empty() {
157
172
  let n = this.searchFormControl.value;
158
- return !!!n;
173
+ return !n;
159
174
  }
160
175
  get shouldLabelFloat() {
161
176
  return this.focused || !this.empty;
@@ -170,14 +185,16 @@ class IaAutocompleteInput {
170
185
  if (this._prefix) {
171
186
  this.searchFormControl
172
187
  .valueChanges
173
- .pipe(debounceTime(300), filter(value => typeof value === 'string'), filter(value => value.startsWith(this._prefix)), tap(() => this.value = null), tap(() => this.isLoading = true), map(value => this._dataSource.onPreprocessSearchString(value)), switchMap(value => this._dataSource.onFilter(value)))
188
+ .pipe(debounceTime(300), filter(value => typeof value === 'string'), filter(value => value.startsWith(this._prefix)), tap(() => this.value = null), tap(() => this.isLoading = true), map(value => { var _a, _b; return (_b = (_a = this._dataSource) === null || _a === void 0 ? void 0 : _a.onPreprocessSearchString(value)) !== null && _b !== void 0 ? _b : ""; }), switchMap(value => { var _a, _b; return (_b = (_a = this._dataSource) === null || _a === void 0 ? void 0 : _a.onFilter(value)) !== null && _b !== void 0 ? _b : of(null); }))
174
189
  .subscribe(resultSet => {
175
- if (resultSet.list.length === 1) {
176
- this.value = resultSet[0];
177
- }
178
- else {
179
- this.filteredStrings = resultSet.list;
180
- this.searchFormControl.patchValue(resultSet.searchTerm, { emitEvent: false });
190
+ if (resultSet && resultSet.list) {
191
+ if (resultSet.list.length === 1) {
192
+ this.value = resultSet.list[0];
193
+ }
194
+ else {
195
+ this.filteredStrings = resultSet.list;
196
+ this.searchFormControl.patchValue(resultSet.searchTerm, { emitEvent: false });
197
+ }
181
198
  }
182
199
  this.isLoading = false;
183
200
  });
@@ -185,12 +202,14 @@ class IaAutocompleteInput {
185
202
  // This is the search functionality when search by human.
186
203
  this.searchFormControl
187
204
  .valueChanges
188
- .pipe(debounceTime(300), tap(value => {
205
+ .pipe(debounceTime(300), tap(_ => {
189
206
  this.filteredStrings = [];
190
- }), filter(value => value != null && value.toString().length >= 1), tap(() => this.isLoading = true), map(value => this._dataSource.onPreprocessSearchString(value)), tap(value => this.value = value), switchMap(value => this._dataSource.onFilter(value)))
207
+ }), filter(value => value != null && value.toString().length >= 1), tap(() => this.isLoading = true), map(value => { var _a; return (_a = this._dataSource) === null || _a === void 0 ? void 0 : _a.onPreprocessSearchString(value); }), tap(value => this.value = value), switchMap(value => { var _a, _b; return (_b = (_a = this._dataSource) === null || _a === void 0 ? void 0 : _a.onFilter(value)) !== null && _b !== void 0 ? _b : of(null); }))
191
208
  .subscribe(resultSet => {
192
- this.filteredStrings = resultSet.list;
193
- this.searchFormControl.patchValue(resultSet.searchTerm, { emitEvent: false });
209
+ if (resultSet && resultSet.list) {
210
+ this.filteredStrings = resultSet.list;
211
+ this.searchFormControl.patchValue(resultSet.searchTerm, { emitEvent: false });
212
+ }
194
213
  this.isLoading = false;
195
214
  });
196
215
  }
@@ -199,8 +218,9 @@ class IaAutocompleteInput {
199
218
  this.fm.stopMonitoring(this.elRef.nativeElement);
200
219
  }
201
220
  ngDoCheck() {
221
+ var _a;
202
222
  if (this.ngControl) {
203
- this.errorState = this.ngControl.invalid && this.ngControl.touched;
223
+ this.errorState = (_a = (this.ngControl.invalid && this.ngControl.touched)) !== null && _a !== void 0 ? _a : false;
204
224
  this.stateChanges.next();
205
225
  }
206
226
  }
@@ -268,8 +288,8 @@ class IaAutocompleteInput {
268
288
  }
269
289
  }
270
290
  IaAutocompleteInput.nextId = 0;
271
- IaAutocompleteInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaAutocompleteInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1$2.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
272
- IaAutocompleteInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: IaAutocompleteInput, selector: "ia-autocomplete", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
291
+ IaAutocompleteInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaAutocompleteInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1$2.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
292
+ IaAutocompleteInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: IaAutocompleteInput, selector: "ia-autocomplete", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
273
293
  {
274
294
  provide: NG_VALUE_ACCESSOR,
275
295
  useExisting: forwardRef(() => IaAutocompleteInput),
@@ -284,8 +304,8 @@ IaAutocompleteInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
284
304
  useExisting: forwardRef(() => IaAutocompleteInput),
285
305
  multi: true
286
306
  }
287
- ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\"\n (closed)=\"onAutoCompleteClosed()\" (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let str of filteredStrings\" [value]=\"str\">\n {{str}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i3$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i4$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
288
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaAutocompleteInput, decorators: [{
307
+ ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\"\n (closed)=\"onAutoCompleteClosed()\" (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let str of filteredStrings\" [value]=\"str\">\n {{str}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i3$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaAutocompleteInput, decorators: [{
289
309
  type: Component,
290
310
  args: [{ selector: 'ia-autocomplete', host: {
291
311
  '[id]': 'id',
@@ -345,6 +365,12 @@ class IaEntitySelectInput {
345
365
  };
346
366
  this._onTouched = () => {
347
367
  };
368
+ this.ngControl = null;
369
+ this.errorState = false;
370
+ this.inputField = null;
371
+ this._dataSource = null;
372
+ this._placeholder = "";
373
+ this._prefix = "";
348
374
  this.searchFormControl = new FormControl();
349
375
  this.isLoading = false;
350
376
  this._disabled = false;
@@ -380,7 +406,9 @@ class IaEntitySelectInput {
380
406
  }
381
407
  set required(req) {
382
408
  this._required = coerceBooleanProperty(req);
383
- this.inputField.required = this._required;
409
+ if (this.inputField) {
410
+ this.inputField.required = this._required;
411
+ }
384
412
  this.stateChanges.next();
385
413
  }
386
414
  get prefix() {
@@ -402,7 +430,7 @@ class IaEntitySelectInput {
402
430
  }
403
431
  get empty() {
404
432
  let n = this.searchFormControl.value;
405
- return !!!n;
433
+ return !n;
406
434
  }
407
435
  get shouldLabelFloat() {
408
436
  return this.focused || !this.empty;
@@ -417,13 +445,15 @@ class IaEntitySelectInput {
417
445
  if (this._prefix) {
418
446
  this.searchFormControl
419
447
  .valueChanges
420
- .pipe(debounceTime(300), filter(value => typeof value === 'string'), filter(value => value.startsWith(this._prefix)), tap(() => this.value = null), tap(() => this.isLoading = true), switchMap(value => this._dataSource.onFilter(value.replace(this._prefix, "").trim())))
448
+ .pipe(debounceTime(300), filter(value => typeof value === 'string'), filter(value => value.startsWith(this._prefix)), tap(() => this.value = null), tap(() => this.isLoading = true), switchMap(value => { var _a, _b; return (_b = (_a = this._dataSource) === null || _a === void 0 ? void 0 : _a.onFilter(value.replace(this._prefix, "").trim())) !== null && _b !== void 0 ? _b : of(null); }))
421
449
  .subscribe(resultSet => {
422
- if (resultSet.list.length === 1) {
423
- this.value = resultSet.list[0];
424
- }
425
- else {
426
- this.filteredEntities = resultSet.list;
450
+ if (resultSet && resultSet.list) {
451
+ if (resultSet.list.length === 1) {
452
+ this.value = resultSet.list[0];
453
+ }
454
+ else {
455
+ this.filteredEntities = resultSet.list;
456
+ }
427
457
  }
428
458
  this.isLoading = false;
429
459
  });
@@ -431,9 +461,11 @@ class IaEntitySelectInput {
431
461
  // This is the search functionality when search by human.
432
462
  this.searchFormControl
433
463
  .valueChanges
434
- .pipe(debounceTime(300), tap(() => this.filteredEntities = []), filter(value => typeof value === 'string'), tap(() => this.setValue(null)), filter(value => value.toString().length >= 3), tap(() => this.isLoading = true), switchMap(value => this._dataSource.onFilter(value)))
464
+ .pipe(debounceTime(300), tap(() => this.filteredEntities = []), filter(value => typeof value === 'string'), tap(() => this.setValue(null)), filter(value => value.toString().length >= 3), tap(() => this.isLoading = true), switchMap(value => { var _a, _b; return (_b = (_a = this._dataSource) === null || _a === void 0 ? void 0 : _a.onFilter(value)) !== null && _b !== void 0 ? _b : of(null); }))
435
465
  .subscribe(resultSet => {
436
- this.filteredEntities = resultSet.list;
466
+ if (resultSet && resultSet.list) {
467
+ this.filteredEntities = resultSet.list;
468
+ }
437
469
  this.isLoading = false;
438
470
  });
439
471
  }
@@ -442,8 +474,9 @@ class IaEntitySelectInput {
442
474
  this.fm.stopMonitoring(this.elRef.nativeElement);
443
475
  }
444
476
  ngDoCheck() {
477
+ var _a;
445
478
  if (this.ngControl) {
446
- this.errorState = this.ngControl.invalid && this.ngControl.touched;
479
+ this.errorState = (_a = (this.ngControl.invalid && this.ngControl.touched)) !== null && _a !== void 0 ? _a : false;
447
480
  this.stateChanges.next();
448
481
  }
449
482
  }
@@ -519,8 +552,8 @@ class IaEntitySelectInput {
519
552
  }
520
553
  }
521
554
  IaEntitySelectInput.nextId = 0;
522
- IaEntitySelectInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaEntitySelectInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1$2.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
523
- IaEntitySelectInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: IaEntitySelectInput, selector: "ia-entity-select", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
555
+ IaEntitySelectInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaEntitySelectInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1$2.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
556
+ IaEntitySelectInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: IaEntitySelectInput, selector: "ia-entity-select", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
524
557
  {
525
558
  provide: NG_VALUE_ACCESSOR,
526
559
  useExisting: forwardRef(() => IaEntitySelectInput),
@@ -535,8 +568,8 @@ IaEntitySelectInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
535
568
  useExisting: forwardRef(() => IaEntitySelectInput),
536
569
  multi: true
537
570
  }
538
- ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource.onDisplayEntity\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource.onDisplayEntity(entity)}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i3$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i4$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
539
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaEntitySelectInput, decorators: [{
571
+ ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i3$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
572
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaEntitySelectInput, decorators: [{
540
573
  type: Component,
541
574
  args: [{ selector: 'ia-entity-select', host: {
542
575
  '[id]': 'id',
@@ -556,7 +589,294 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImpor
556
589
  useExisting: forwardRef(() => IaEntitySelectInput),
557
590
  multi: true
558
591
  }
559
- ], template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource.onDisplayEntity\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource.onDisplayEntity(entity)}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"] }]
592
+ ], template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"] }]
593
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i1$2.FocusMonitor }]; }, propDecorators: { id: [{
594
+ type: HostBinding
595
+ }], inputField: [{
596
+ type: ViewChild,
597
+ args: ['input']
598
+ }], describedBy: [{
599
+ type: HostBinding,
600
+ args: ['attr.aria-describedby']
601
+ }], dataSource: [{
602
+ type: Input
603
+ }], disabled: [{
604
+ type: Input
605
+ }], placeholder: [{
606
+ type: Input
607
+ }], required: [{
608
+ type: Input
609
+ }], prefix: [{
610
+ type: Input
611
+ }], shouldLabelFloat: [{
612
+ type: HostBinding,
613
+ args: ['class.floating']
614
+ }] } });
615
+
616
+ class IaMultipleEntitySelectInput {
617
+ constructor(elRef, injector, fm) {
618
+ this.elRef = elRef;
619
+ this.injector = injector;
620
+ this.fm = fm;
621
+ this.filteredEntities = [];
622
+ this.stateChanges = new Subject();
623
+ this.id = `ia-multiple-entity-select-${IaMultipleEntitySelectInput.nextId++}`;
624
+ this.valuesChange = new EventEmitter();
625
+ this.describedBy = '';
626
+ this.separatorKeysCodes = [ENTER, COMMA];
627
+ this._disabled = false;
628
+ this._required = false;
629
+ this._propagateChange = (_) => {
630
+ };
631
+ this._onTouched = () => {
632
+ };
633
+ this.ngControl = null;
634
+ this.errorState = false;
635
+ this.inputField = null;
636
+ this._dataSource = null;
637
+ this._placeholder = "";
638
+ this._prefix = "";
639
+ this._selectedEntities = null;
640
+ this.valuesFormControl = new FormControl();
641
+ this.searchFormControl = new FormControl();
642
+ this.isLoading = false;
643
+ this._disabled = false;
644
+ this.focused = false;
645
+ fm.monitor(elRef.nativeElement, true).subscribe(origin => {
646
+ this.focused = !!origin;
647
+ this.stateChanges.next();
648
+ });
649
+ }
650
+ get dataSource() {
651
+ return this._dataSource;
652
+ }
653
+ set dataSource(value) {
654
+ this._dataSource = value;
655
+ }
656
+ get disabled() {
657
+ return this._disabled;
658
+ }
659
+ set disabled(dis) {
660
+ this._disabled = coerceBooleanProperty(dis);
661
+ this._disabled ? this.searchFormControl.disable() : this.searchFormControl.enable();
662
+ this.stateChanges.next();
663
+ }
664
+ get placeholder() {
665
+ return this._placeholder;
666
+ }
667
+ set placeholder(plh) {
668
+ this._placeholder = plh;
669
+ this.stateChanges.next();
670
+ }
671
+ get required() {
672
+ return this._required;
673
+ }
674
+ set required(req) {
675
+ this._required = coerceBooleanProperty(req);
676
+ if (this.inputField) {
677
+ this.inputField.required = this._required;
678
+ }
679
+ this.stateChanges.next();
680
+ }
681
+ get prefix() {
682
+ return this._prefix;
683
+ }
684
+ set prefix(value) {
685
+ if (value !== this._prefix) {
686
+ this._prefix = value;
687
+ }
688
+ }
689
+ get value() {
690
+ return this._selectedEntities;
691
+ }
692
+ set value(value) {
693
+ if (value !== this._selectedEntities) {
694
+ this.valuesFormControl.setValue(value);
695
+ this.setValue(value);
696
+ }
697
+ }
698
+ get empty() {
699
+ let n = this.valuesFormControl.value;
700
+ return !n;
701
+ }
702
+ get shouldLabelFloat() {
703
+ return this.focused || !this.empty;
704
+ }
705
+ ngOnInit() {
706
+ this.ngControl = this.injector.get(NgControl, null);
707
+ if (this.ngControl != null) {
708
+ this.ngControl.valueAccessor = this;
709
+ }
710
+ // If prefix defined, usually this is used for a code scanner.
711
+ // The goal is to select the entity in direct way.
712
+ if (this._prefix) {
713
+ this.searchFormControl
714
+ .valueChanges
715
+ .pipe(debounceTime(300), filter(value => typeof value === 'string'), filter(value => value.startsWith(this._prefix)), tap(() => this.isLoading = true), switchMap(value => { var _a, _b; return (_b = (_a = this._dataSource) === null || _a === void 0 ? void 0 : _a.onFilter(value.replace(this._prefix, "").trim())) !== null && _b !== void 0 ? _b : of(null); }))
716
+ .subscribe(resultSet => {
717
+ if (resultSet && resultSet.list) {
718
+ this.filteredEntities = resultSet.list;
719
+ }
720
+ this.isLoading = false;
721
+ });
722
+ }
723
+ // This is the search functionality when search by human.
724
+ this.searchFormControl
725
+ .valueChanges
726
+ .pipe(debounceTime(300), tap(() => this.filteredEntities = []), filter(value => typeof value === 'string'), filter(value => value.toString().length >= 3), tap(() => this.isLoading = true), switchMap(value => { var _a, _b; return (_b = (_a = this._dataSource) === null || _a === void 0 ? void 0 : _a.onFilter(value)) !== null && _b !== void 0 ? _b : of(null); }))
727
+ .subscribe(resultSet => {
728
+ const resultList = new Array();
729
+ if (resultSet && resultSet.list) {
730
+ resultSet.list.forEach(value1 => {
731
+ var _a;
732
+ if (!((_a = this.value) === null || _a === void 0 ? void 0 : _a.find(value2 => { var _a, _b; return ((_a = this._dataSource) === null || _a === void 0 ? void 0 : _a.getIdEntity(value2)) === ((_b = this._dataSource) === null || _b === void 0 ? void 0 : _b.getIdEntity(value1)); }))) {
733
+ resultList.push(value1);
734
+ }
735
+ });
736
+ }
737
+ this.filteredEntities = resultList;
738
+ this.isLoading = false;
739
+ });
740
+ }
741
+ ngOnDestroy() {
742
+ this.stateChanges.complete();
743
+ this.fm.stopMonitoring(this.elRef.nativeElement);
744
+ }
745
+ ngDoCheck() {
746
+ var _a;
747
+ if (this.ngControl) {
748
+ this.errorState = (_a = (this.ngControl.invalid && this.ngControl.touched)) !== null && _a !== void 0 ? _a : false;
749
+ this.stateChanges.next();
750
+ }
751
+ }
752
+ clear() {
753
+ this.filteredEntities = [];
754
+ this.searchFormControl.reset(null);
755
+ }
756
+ focus() {
757
+ this.elRef.nativeElement.querySelector('input').focus();
758
+ }
759
+ onEntitySelected(event) {
760
+ let list = this.value;
761
+ if (!list) {
762
+ list = new Array();
763
+ }
764
+ list.push(event.option.value);
765
+ this.value = list;
766
+ this.filteredEntities = [];
767
+ this.searchFormControl.setValue(null);
768
+ this.valuesFormControl.updateValueAndValidity();
769
+ }
770
+ onEntityActivated(event) {
771
+ var _a;
772
+ this.activatedValue = (_a = event.option) === null || _a === void 0 ? void 0 : _a.value;
773
+ }
774
+ onEntityClosed() {
775
+ if (this.activatedValue) {
776
+ this.value = this.activatedValue;
777
+ this.activatedValue = null;
778
+ }
779
+ }
780
+ reset() {
781
+ this.value = new Array();
782
+ }
783
+ onFocusOut() {
784
+ // if (this.filteredEntities.length === 1) {
785
+ // this.activatedValue = this.filteredEntities[0];
786
+ // this.value = this.filteredEntities[0];
787
+ // }
788
+ }
789
+ onTouched() {
790
+ this._onTouched();
791
+ this.stateChanges.next();
792
+ }
793
+ registerOnChange(fn) {
794
+ this._propagateChange = fn;
795
+ }
796
+ registerOnTouched(fn) {
797
+ this.onTouched = fn;
798
+ }
799
+ writeValue(obj) {
800
+ this.clear();
801
+ this.value = obj;
802
+ }
803
+ setDisabledState(isDisabled) {
804
+ this.disabled = isDisabled;
805
+ }
806
+ onContainerClick(event) {
807
+ if (event.target.tagName.toLowerCase() != 'input') {
808
+ this.focus();
809
+ }
810
+ }
811
+ setDescribedByIds(ids) {
812
+ this.describedBy = ids.join(' ');
813
+ }
814
+ validate(control) {
815
+ const selection = control.value;
816
+ if (typeof selection === 'string') {
817
+ return { incorrect: true };
818
+ }
819
+ return null;
820
+ }
821
+ remove(value) {
822
+ const list = this.value;
823
+ if (list) {
824
+ const index = list.indexOf(value);
825
+ if (index !== -1) {
826
+ list.splice(index, 1);
827
+ }
828
+ this.valuesFormControl.updateValueAndValidity();
829
+ }
830
+ }
831
+ setValue(values) {
832
+ var _a;
833
+ if (values !== this._selectedEntities) {
834
+ this._selectedEntities = values;
835
+ this.valuesChange.emit(values !== null && values !== void 0 ? values : []);
836
+ this._propagateChange((_a = this._selectedEntities) !== null && _a !== void 0 ? _a : []);
837
+ this.stateChanges.next();
838
+ }
839
+ }
840
+ }
841
+ IaMultipleEntitySelectInput.nextId = 0;
842
+ IaMultipleEntitySelectInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaMultipleEntitySelectInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1$2.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
843
+ IaMultipleEntitySelectInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: IaMultipleEntitySelectInput, selector: "ia-multiple-entity-select", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
844
+ {
845
+ provide: NG_VALUE_ACCESSOR,
846
+ useExisting: forwardRef(() => IaMultipleEntitySelectInput),
847
+ multi: true
848
+ },
849
+ {
850
+ provide: MatFormFieldControl,
851
+ useExisting: IaMultipleEntitySelectInput
852
+ },
853
+ {
854
+ provide: NG_VALIDATORS,
855
+ useExisting: forwardRef(() => IaMultipleEntitySelectInput),
856
+ multi: true
857
+ }
858
+ ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<mat-chip-grid #list>\n <mat-chip-row *ngFor=\"let entity of valuesFormControl.value\"\n (removed)=\"remove(entity)\"\n [editable]=\"false\"\n [aria-description]=\"'press enter to edit ' + dataSource?.onDisplayEntity(entity) ?? null\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n <button matChipRemove [attr.aria-label]=\"'remove ' + dataSource?.onDisplayEntity(entity) ?? null\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n <input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"list\"\n matChipInputAddOnBlur=\"true\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [placeholder]=\"placeholder\" matInput>\n <mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n</mat-chip-grid>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i3$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i7$1.MatChipGrid, selector: "mat-chip-grid", inputs: ["tabIndex", "disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7$1.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7$1.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7$1.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "editable"], outputs: ["edited"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
859
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaMultipleEntitySelectInput, decorators: [{
860
+ type: Component,
861
+ args: [{ selector: 'ia-multiple-entity-select', host: {
862
+ '[id]': 'id',
863
+ '[attr.aria-describedby]': 'describedBy'
864
+ }, providers: [
865
+ {
866
+ provide: NG_VALUE_ACCESSOR,
867
+ useExisting: forwardRef(() => IaMultipleEntitySelectInput),
868
+ multi: true
869
+ },
870
+ {
871
+ provide: MatFormFieldControl,
872
+ useExisting: IaMultipleEntitySelectInput
873
+ },
874
+ {
875
+ provide: NG_VALIDATORS,
876
+ useExisting: forwardRef(() => IaMultipleEntitySelectInput),
877
+ multi: true
878
+ }
879
+ ], template: "<mat-chip-grid #list>\n <mat-chip-row *ngFor=\"let entity of valuesFormControl.value\"\n (removed)=\"remove(entity)\"\n [editable]=\"false\"\n [aria-description]=\"'press enter to edit ' + dataSource?.onDisplayEntity(entity) ?? null\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n <button matChipRemove [attr.aria-label]=\"'remove ' + dataSource?.onDisplayEntity(entity) ?? null\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n <input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"list\"\n matChipInputAddOnBlur=\"true\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [placeholder]=\"placeholder\" matInput>\n <mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n</mat-chip-grid>\n" }]
560
880
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i1$2.FocusMonitor }]; }, propDecorators: { id: [{
561
881
  type: HostBinding
562
882
  }], inputField: [{
@@ -582,8 +902,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImpor
582
902
 
583
903
  class IaSharedUIModule {
584
904
  }
585
- IaSharedUIModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaSharedUIModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
586
- IaSharedUIModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.2", ngImport: i0, type: IaSharedUIModule, declarations: [IaNotificationBarComponent, MessageDetailsComponent, IaAutocompleteInput, IaEntitySelectInput], imports: [CommonModule,
905
+ IaSharedUIModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaSharedUIModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
906
+ IaSharedUIModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: IaSharedUIModule, declarations: [IaNotificationBarComponent,
907
+ MessageDetailsComponent,
908
+ IaAutocompleteInput,
909
+ IaEntitySelectInput,
910
+ IaMultipleEntitySelectInput], imports: [CommonModule,
587
911
  MatToolbarModule,
588
912
  MatButtonModule,
589
913
  MatSnackBarModule,
@@ -591,10 +915,13 @@ IaSharedUIModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
591
915
  MatAutocompleteModule,
592
916
  MatInputModule,
593
917
  MatProgressSpinnerModule,
918
+ MatChipsModule,
919
+ MatIconModule,
594
920
  ReactiveFormsModule], exports: [IaNotificationBarComponent,
595
921
  IaAutocompleteInput,
596
- IaEntitySelectInput] });
597
- IaSharedUIModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaSharedUIModule, imports: [CommonModule,
922
+ IaEntitySelectInput,
923
+ IaMultipleEntitySelectInput] });
924
+ IaSharedUIModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaSharedUIModule, imports: [CommonModule,
598
925
  MatToolbarModule,
599
926
  MatButtonModule,
600
927
  MatSnackBarModule,
@@ -602,20 +929,30 @@ IaSharedUIModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versio
602
929
  MatAutocompleteModule,
603
930
  MatInputModule,
604
931
  MatProgressSpinnerModule,
932
+ MatChipsModule,
933
+ MatIconModule,
605
934
  ReactiveFormsModule] });
606
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaSharedUIModule, decorators: [{
935
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: IaSharedUIModule, decorators: [{
607
936
  type: NgModule,
608
937
  args: [{
609
- declarations: [IaNotificationBarComponent, MessageDetailsComponent, IaAutocompleteInput, IaEntitySelectInput],
938
+ declarations: [
939
+ IaNotificationBarComponent,
940
+ MessageDetailsComponent,
941
+ IaAutocompleteInput,
942
+ IaEntitySelectInput,
943
+ IaMultipleEntitySelectInput
944
+ ],
610
945
  exports: [
611
946
  IaNotificationBarComponent,
612
947
  IaAutocompleteInput,
613
- IaEntitySelectInput
948
+ IaEntitySelectInput,
949
+ IaMultipleEntitySelectInput
614
950
  ],
615
951
  entryComponents: [
616
952
  MessageDetailsComponent,
617
953
  IaAutocompleteInput,
618
- IaEntitySelectInput
954
+ IaEntitySelectInput,
955
+ IaMultipleEntitySelectInput
619
956
  ],
620
957
  imports: [
621
958
  CommonModule,
@@ -626,6 +963,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImpor
626
963
  MatAutocompleteModule,
627
964
  MatInputModule,
628
965
  MatProgressSpinnerModule,
966
+ MatChipsModule,
967
+ MatIconModule,
629
968
  ReactiveFormsModule
630
969
  ]
631
970
  }]
@@ -635,6 +974,7 @@ class ProgressWindowComponent {
635
974
  constructor(data) {
636
975
  this.data = data;
637
976
  this.statusText = null;
977
+ this.progressValue = 0;
638
978
  data.progress.subscribe(value => {
639
979
  this.statusText = value.statusText;
640
980
  this.progressValue = value.progressValue;
@@ -646,9 +986,9 @@ class ProgressWindowComponent {
646
986
  this.data.cancelOperation();
647
987
  }
648
988
  }
649
- ProgressWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressWindowComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
650
- ProgressWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: ProgressWindowComponent, selector: "lib-progress-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div fxLayout=\"column\">\n <mat-progress-bar *ngIf=\"data.isDeterminate\" [value]=\"progressValue\" mode=\"determinate\"></mat-progress-bar>\n <mat-progress-bar *ngIf=\"!data.isDeterminate\" mode=\"indeterminate\"></mat-progress-bar>\n <p>{{statusText}}</p>\n </div>\n</div>\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\n <button (click)=\"onCancelClick()\" *ngIf=\"data.isCancelOperationAvailable\" mat-button>Cancel</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3$2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3$2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] });
651
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressWindowComponent, decorators: [{
989
+ ProgressWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProgressWindowComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
990
+ ProgressWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: ProgressWindowComponent, selector: "lib-progress-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div fxLayout=\"column\">\n <mat-progress-bar *ngIf=\"data.isDeterminate\" [value]=\"progressValue\" mode=\"determinate\"></mat-progress-bar>\n <mat-progress-bar *ngIf=\"!data.isDeterminate\" mode=\"indeterminate\"></mat-progress-bar>\n <p>{{statusText}}</p>\n </div>\n</div>\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\n <button (click)=\"onCancelClick()\" *ngIf=\"data.isCancelOperationAvailable\" mat-button>Cancel</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3$2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3$2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] });
991
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProgressWindowComponent, decorators: [{
652
992
  type: Component,
653
993
  args: [{ selector: 'lib-progress-window', template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div fxLayout=\"column\">\n <mat-progress-bar *ngIf=\"data.isDeterminate\" [value]=\"progressValue\" mode=\"determinate\"></mat-progress-bar>\n <mat-progress-bar *ngIf=\"!data.isDeterminate\" mode=\"indeterminate\"></mat-progress-bar>\n <p>{{statusText}}</p>\n </div>\n</div>\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\n <button (click)=\"onCancelClick()\" *ngIf=\"data.isCancelOperationAvailable\" mat-button>Cancel</button>\n</div>\n" }]
654
994
  }], ctorParameters: function () {
@@ -662,7 +1002,8 @@ class ProgressNotifierService {
662
1002
  constructor(dialog) {
663
1003
  this.dialog = dialog;
664
1004
  this._currentProgressValue = new BehaviorSubject(null);
665
- this.isCanceled = false;
1005
+ this.currentDialogRef = null;
1006
+ this._isCanceled = false;
666
1007
  }
667
1008
  get isCanceled() {
668
1009
  return this._isCanceled;
@@ -702,12 +1043,13 @@ class ProgressNotifierService {
702
1043
  });
703
1044
  }
704
1045
  complete() {
705
- this.currentDialogRef.close();
1046
+ var _a;
1047
+ (_a = this.currentDialogRef) === null || _a === void 0 ? void 0 : _a.close();
706
1048
  }
707
1049
  }
708
- ProgressNotifierService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
709
- ProgressNotifierService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierService });
710
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierService, decorators: [{
1050
+ ProgressNotifierService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProgressNotifierService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
1051
+ ProgressNotifierService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProgressNotifierService });
1052
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProgressNotifierService, decorators: [{
711
1053
  type: Injectable
712
1054
  }], ctorParameters: function () { return [{ type: i1.MatDialog }]; } });
713
1055
 
@@ -721,18 +1063,18 @@ class ProgressNotifierModule {
721
1063
  };
722
1064
  }
723
1065
  }
724
- ProgressNotifierModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
725
- ProgressNotifierModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierModule, declarations: [ProgressWindowComponent], imports: [CommonModule,
1066
+ ProgressNotifierModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProgressNotifierModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1067
+ ProgressNotifierModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: ProgressNotifierModule, declarations: [ProgressWindowComponent], imports: [CommonModule,
726
1068
  MatDialogModule,
727
1069
  FlexLayoutModule,
728
1070
  MatButtonModule,
729
1071
  MatProgressBarModule] });
730
- ProgressNotifierModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierModule, imports: [CommonModule,
1072
+ ProgressNotifierModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProgressNotifierModule, imports: [CommonModule,
731
1073
  MatDialogModule,
732
1074
  FlexLayoutModule,
733
1075
  MatButtonModule,
734
1076
  MatProgressBarModule] });
735
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ProgressNotifierModule, decorators: [{
1077
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ProgressNotifierModule, decorators: [{
736
1078
  type: NgModule,
737
1079
  args: [{
738
1080
  declarations: [ProgressWindowComponent],
@@ -765,6 +1107,10 @@ class ConfirmationWindowComponent {
765
1107
  constructor(dialogRef, data) {
766
1108
  this.dialogRef = dialogRef;
767
1109
  this.data = data;
1110
+ this.button2Text = null;
1111
+ this.button2Result = null;
1112
+ this.button3Text = null;
1113
+ this.button3Result = null;
768
1114
  if (data.dialogType === DialogType.OkCancel) {
769
1115
  this.button1Text = "OK";
770
1116
  this.button1Result = ButtonTypes.Ok;
@@ -808,9 +1154,9 @@ class ConfirmationWindowComponent {
808
1154
  });
809
1155
  }
810
1156
  }
811
- ConfirmationWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationWindowComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
812
- ConfirmationWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: ConfirmationWindowComponent, selector: "lib-shared-ui-confirmation-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>{{data.message}}</div>\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\n <button (click)=\"onButton1()\" color=\"primary\" mat-button>{{button1Text}}</button>\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-button>{{button2Text}}</button>\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-button>{{button3Text}}</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3$2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
813
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationWindowComponent, decorators: [{
1157
+ ConfirmationWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationWindowComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
1158
+ ConfirmationWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: ConfirmationWindowComponent, selector: "lib-shared-ui-confirmation-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>{{data.message}}</div>\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\n <button (click)=\"onButton1()\" color=\"primary\" mat-button>{{button1Text}}</button>\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-button>{{button2Text}}</button>\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-button>{{button3Text}}</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3$2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
1159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationWindowComponent, decorators: [{
814
1160
  type: Component,
815
1161
  args: [{ selector: 'lib-shared-ui-confirmation-window', template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>{{data.message}}</div>\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\n <button (click)=\"onButton1()\" color=\"primary\" mat-button>{{button1Text}}</button>\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-button>{{button2Text}}</button>\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-button>{{button3Text}}</button>\n</div>\n" }]
816
1162
  }], ctorParameters: function () {
@@ -834,7 +1180,7 @@ class ConfirmationService {
834
1180
  dialogType: DialogType.YesNo
835
1181
  }
836
1182
  });
837
- return dialogRef.afterClosed().pipe(map(value => value.result == ButtonTypes.Yes));
1183
+ return dialogRef.afterClosed().pipe(map(value => (value === null || value === void 0 ? void 0 : value.result) == ButtonTypes.Yes));
838
1184
  }
839
1185
  showYesNoCancelConfirmationDialog(title, message) {
840
1186
  const dialogRef = this.dialog.open(ConfirmationWindowComponent, {
@@ -858,7 +1204,7 @@ class ConfirmationService {
858
1204
  dialogType: DialogType.OkCancel
859
1205
  }
860
1206
  });
861
- return dialogRef.afterClosed().pipe(map(value => value.result == ButtonTypes.Ok));
1207
+ return dialogRef.afterClosed().pipe(map(value => (value === null || value === void 0 ? void 0 : value.result) == ButtonTypes.Ok));
862
1208
  }
863
1209
  showOkDialog(title, message) {
864
1210
  const dialogRef = this.dialog.open(ConfirmationWindowComponent, {
@@ -870,12 +1216,12 @@ class ConfirmationService {
870
1216
  dialogType: DialogType.Ok
871
1217
  }
872
1218
  });
873
- return dialogRef.afterClosed().pipe(map(value => value.result == ButtonTypes.Ok));
1219
+ return dialogRef.afterClosed().pipe(map(value => (value === null || value === void 0 ? void 0 : value.result) == ButtonTypes.Ok));
874
1220
  }
875
1221
  }
876
- ConfirmationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
877
- ConfirmationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationService, providedIn: 'root' });
878
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationService, decorators: [{
1222
+ ConfirmationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
1223
+ ConfirmationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationService, providedIn: 'root' });
1224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationService, decorators: [{
879
1225
  type: Injectable,
880
1226
  args: [{
881
1227
  providedIn: 'root'
@@ -892,16 +1238,16 @@ class ConfirmationDialogModule {
892
1238
  };
893
1239
  }
894
1240
  }
895
- ConfirmationDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
896
- ConfirmationDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationDialogModule, declarations: [ConfirmationWindowComponent], imports: [CommonModule,
1241
+ ConfirmationDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1242
+ ConfirmationDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationDialogModule, declarations: [ConfirmationWindowComponent], imports: [CommonModule,
897
1243
  MatDialogModule,
898
1244
  FlexLayoutModule,
899
1245
  MatButtonModule] });
900
- ConfirmationDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationDialogModule, imports: [CommonModule,
1246
+ ConfirmationDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationDialogModule, imports: [CommonModule,
901
1247
  MatDialogModule,
902
1248
  FlexLayoutModule,
903
1249
  MatButtonModule] });
904
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationDialogModule, decorators: [{
1250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ConfirmationDialogModule, decorators: [{
905
1251
  type: NgModule,
906
1252
  args: [{
907
1253
  declarations: [ConfirmationWindowComponent],
@@ -927,16 +1273,18 @@ class CommonValidators {
927
1273
  }
928
1274
  static conditionalRequired(sourceControlName, sourceValueCompareExpression) {
929
1275
  return (control) => {
930
- if (control.parent && sourceValueCompareExpression(control.parent.get(sourceControlName).value)) {
1276
+ var _a;
1277
+ if (control.parent && sourceValueCompareExpression((_a = control.parent.get(sourceControlName)) === null || _a === void 0 ? void 0 : _a.value)) {
931
1278
  return isEmptyInputValue(control.value) ? { 'required': true } : null;
932
1279
  }
1280
+ return null;
933
1281
  };
934
1282
  }
935
1283
  static dependentControls(controlNames) {
936
1284
  return (control) => {
937
1285
  controlNames.forEach(controlName => {
938
- var _a;
939
- (_a = control.parent) === null || _a === void 0 ? void 0 : _a.get(controlName).updateValueAndValidity();
1286
+ var _a, _b;
1287
+ (_b = (_a = control.parent) === null || _a === void 0 ? void 0 : _a.get(controlName)) === null || _b === void 0 ? void 0 : _b.updateValueAndValidity();
940
1288
  });
941
1289
  return null;
942
1290
  };
@@ -946,13 +1294,16 @@ class CommonValidators {
946
1294
  class AbstractDetailsComponent {
947
1295
  constructor() {
948
1296
  this.hasError = (controlName, errorName) => {
949
- return this.ownerForm.controls[controlName].hasError(errorName);
1297
+ var _a;
1298
+ return (_a = this.ownerForm) === null || _a === void 0 ? void 0 : _a.controls[controlName].hasError(errorName);
950
1299
  };
951
1300
  this.hasFormError = (errorName) => {
952
- return this.ownerForm.hasError(errorName);
1301
+ var _a;
1302
+ return (_a = this.ownerForm) === null || _a === void 0 ? void 0 : _a.hasError(errorName);
953
1303
  };
954
1304
  this.loading = true;
955
1305
  this.entity = null;
1306
+ this._ownerForm = null;
956
1307
  }
957
1308
  get ownerForm() {
958
1309
  return this._ownerForm;
@@ -961,7 +1312,8 @@ class AbstractDetailsComponent {
961
1312
  return this.entity !== null;
962
1313
  }
963
1314
  updateDateTime(controlName) {
964
- this.ownerForm.get(controlName).setValue(IsoDateTime.utcToLocalDateTimeIso(IsoDateTime.currentUtcDateTimeIso()));
1315
+ var _a, _b;
1316
+ (_b = (_a = this.ownerForm) === null || _a === void 0 ? void 0 : _a.get(controlName)) === null || _b === void 0 ? void 0 : _b.setValue(IsoDateTime.utcToLocalDateTimeIso(IsoDateTime.currentUtcDateTimeIso()));
965
1317
  }
966
1318
  copyInputMessage(inputElement) {
967
1319
  inputElement.select();
@@ -969,12 +1321,14 @@ class AbstractDetailsComponent {
969
1321
  inputElement.setSelectionRange(0, 0);
970
1322
  }
971
1323
  onProgressStarting() {
1324
+ var _a, _b;
972
1325
  this.loading = true;
973
- this.ownerForm.disable();
974
- this.ownerForm.updateValueAndValidity();
1326
+ (_a = this.ownerForm) === null || _a === void 0 ? void 0 : _a.disable();
1327
+ (_b = this.ownerForm) === null || _b === void 0 ? void 0 : _b.updateValueAndValidity();
975
1328
  }
976
1329
  onProgressCompleted() {
977
- this.ownerForm.enable();
1330
+ var _a;
1331
+ (_a = this.ownerForm) === null || _a === void 0 ? void 0 : _a.enable();
978
1332
  this.loading = false;
979
1333
  }
980
1334
  }
@@ -987,5 +1341,5 @@ class AbstractDetailsComponent {
987
1341
  * Generated bundle index. Do not edit.
988
1342
  */
989
1343
 
990
- export { AbstractDetailsComponent, ButtonTypes, CommonValidators, ConfirmationDialogModule, ConfirmationService, DialogType, IaAutocompleteInput, IaEntitySelectInput, IaNotificationBarComponent, IaSharedUIModule, ProgressNotifierModule, ProgressNotifierService };
1344
+ export { AbstractDetailsComponent, ButtonTypes, CommonValidators, ConfirmationDialogModule, ConfirmationService, DialogType, IaAutocompleteInput, IaEntitySelectInput, IaMultipleEntitySelectInput, IaNotificationBarComponent, IaSharedUIModule, ProgressNotifierModule, ProgressNotifierService };
991
1345
  //# sourceMappingURL=meshmakers-shared-ui.mjs.map