@ajf/material 18.1.1 → 18.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/audio/index.d.ts +22 -0
  2. package/audio/src/audio-module.d.ts +12 -0
  3. package/audio/src/audio.d.ts +41 -0
  4. package/audio/src/public_api.d.ts +23 -0
  5. package/esm2022/audio/ajf-material-audio.mjs +5 -0
  6. package/esm2022/audio/index.mjs +23 -0
  7. package/esm2022/audio/src/audio-module.mjs +43 -0
  8. package/esm2022/audio/src/audio.mjs +122 -0
  9. package/esm2022/audio/src/public_api.mjs +24 -0
  10. package/esm2022/form-builder/form-builder-service.mjs +5 -1
  11. package/esm2022/form-builder/form-builder.mjs +2 -2
  12. package/esm2022/form-builder/node-entry.mjs +4 -4
  13. package/esm2022/forms/audio-field.mjs +44 -0
  14. package/esm2022/forms/display-field.mjs +49 -0
  15. package/esm2022/forms/field-service.mjs +9 -3
  16. package/esm2022/forms/form.mjs +10 -4
  17. package/esm2022/forms/forms-module.mjs +20 -6
  18. package/esm2022/forms/range-field.mjs +15 -7
  19. package/esm2022/forms/text-field.mjs +27 -9
  20. package/esm2022/signature/signature.mjs +48 -16
  21. package/esm2022/time/time-module.mjs +6 -4
  22. package/esm2022/time/time.mjs +10 -6
  23. package/fesm2022/ajf-material-audio.mjs +212 -0
  24. package/fesm2022/ajf-material-audio.mjs.map +1 -0
  25. package/fesm2022/ajf-material-form-builder.mjs +9 -5
  26. package/fesm2022/ajf-material-form-builder.mjs.map +1 -1
  27. package/fesm2022/ajf-material-forms.mjs +172 -45
  28. package/fesm2022/ajf-material-forms.mjs.map +1 -1
  29. package/fesm2022/ajf-material-signature.mjs +47 -15
  30. package/fesm2022/ajf-material-signature.mjs.map +1 -1
  31. package/fesm2022/ajf-material-time.mjs +14 -8
  32. package/fesm2022/ajf-material-time.mjs.map +1 -1
  33. package/forms/audio-field.d.ts +30 -0
  34. package/forms/display-field.d.ts +35 -0
  35. package/forms/form.d.ts +2 -1
  36. package/forms/forms-module.d.ts +52 -48
  37. package/forms/range-field.d.ts +1 -0
  38. package/forms/text-field.d.ts +8 -2
  39. package/package.json +8 -2
  40. package/signature/signature.d.ts +13 -1
  41. package/time/time-module.d.ts +6 -4
  42. package/time/time.d.ts +2 -0
@@ -1,5 +1,5 @@
1
1
  import * as i1 from '@ajf/core/forms';
2
- import { AjfBaseFieldComponent, AJF_WARNING_ALERT_SERVICE, AjfInputFieldComponent as AjfInputFieldComponent$1, AjfFieldWithChoicesComponent, AJF_SEARCH_ALERT_THRESHOLD, AjfTableFieldComponent as AjfTableFieldComponent$1, AjfVideoUrlFieldComponent as AjfVideoUrlFieldComponent$1, AjfFieldService as AjfFieldService$1, AjfReadOnlyFieldComponent, AjfFieldType, AjfReadOnlyDateFieldComponent, AjfReadOnlyTableFieldComponent, AjfReadOnlySelectFieldComponent, AjfReadOnlyImageFieldComponent, AjfReadOnlyGeolocationFieldComponent, AjfReadOnlyFileFieldComponent, AjfFileFieldComponent, AjfImageFieldComponent, AjfReadOnlyVideoUrlFieldComponent, AjfFormField as AjfFormField$1, AjfFormRenderer as AjfFormRenderer$1, AjfFormsModule as AjfFormsModule$1 } from '@ajf/core/forms';
2
+ import { AjfBaseFieldComponent, AJF_WARNING_ALERT_SERVICE, AjfAudioFieldComponent as AjfAudioFieldComponent$1, AjfInputFieldComponent as AjfInputFieldComponent$1, AjfFieldWithChoicesComponent, AJF_SEARCH_ALERT_THRESHOLD, AjfTableFieldComponent as AjfTableFieldComponent$1, AjfVideoUrlFieldComponent as AjfVideoUrlFieldComponent$1, AjfFieldService as AjfFieldService$1, AjfReadOnlyFieldComponent, AjfFieldType, AjfReadOnlyDateFieldComponent, AjfReadOnlyTableFieldComponent, AjfReadOnlySelectFieldComponent, AjfReadOnlyImageFieldComponent, AjfReadOnlyGeolocationFieldComponent, AjfReadOnlyFileFieldComponent, AjfFileFieldComponent, AjfImageFieldComponent, AjfReadOnlyVideoUrlFieldComponent, AjfFormField as AjfFormField$1, AjfFormRenderer as AjfFormRenderer$1, AjfFormsModule as AjfFormsModule$1 } from '@ajf/core/forms';
3
3
  import * as i0 from '@angular/core';
4
4
  import { ViewEncapsulation, ChangeDetectionStrategy, Component, Injectable, Inject, ViewChild, Optional, Input, NgModule } from '@angular/core';
5
5
  import * as i2$1 from '@angular/common';
@@ -15,55 +15,58 @@ import * as i2 from '@angular/material/dialog';
15
15
  import { MatDialogModule } from '@angular/material/dialog';
16
16
  import * as i2$2 from '@ajf/material/calendar';
17
17
  import { AjfCalendarModule } from '@ajf/material/calendar';
18
- import * as i4$2 from '@angular/material/input';
18
+ import * as i5$1 from '@angular/material/input';
19
19
  import { MatInput, MatInputModule } from '@angular/material/input';
20
20
  import * as i3$1 from '@angular/material/datepicker';
21
21
  import { MatDatepickerModule } from '@angular/material/datepicker';
22
22
  import * as i4$1 from '@angular/material/form-field';
23
23
  import { MatFormFieldModule } from '@angular/material/form-field';
24
24
  import * as i3$2 from '@ngneat/transloco';
25
- import * as i2$3 from '@ajf/material/barcode';
25
+ import * as i2$3 from '@ajf/material/audio';
26
+ import { AjfAudioModule } from '@ajf/material/audio';
27
+ import * as i2$4 from '@ajf/material/barcode';
26
28
  import { AjfBarcodeModule } from '@ajf/material/barcode';
27
- import * as i2$4 from '@ajf/material/geolocation';
29
+ import * as i4$2 from '@ajf/core/common';
30
+ import { AjfCommonModule } from '@ajf/core/common';
31
+ import * as i2$5 from '@ajf/material/geolocation';
28
32
  import { AjfGeolocationModule } from '@ajf/material/geolocation';
29
- import * as i2$5 from '@ajf/material/checkbox-group';
33
+ import * as i2$6 from '@ajf/material/checkbox-group';
30
34
  import { AjfCheckboxGroupModule } from '@ajf/material/checkbox-group';
31
35
  import * as i3$3 from '@ajf/core/checkbox-group';
32
- import * as i5$1 from '@angular/material/select';
36
+ import * as i5$2 from '@angular/material/select';
33
37
  import { MatSelectModule } from '@angular/material/select';
34
38
  import * as i6 from '@angular/material/core';
35
39
  import { MatNativeDateModule } from '@angular/material/core';
36
40
  import * as i8 from 'ngx-mat-select-search';
37
41
  import { NgxMatSelectSearchModule } from 'ngx-mat-select-search';
38
42
  import { AjfRange } from '@ajf/core/range';
39
- import * as i4$3 from '@angular/material/slider';
43
+ import * as i3$4 from '@angular/material/icon';
44
+ import { MatIconModule } from '@angular/material/icon';
45
+ import * as i5$3 from '@angular/material/slider';
40
46
  import { MatSliderModule } from '@angular/material/slider';
41
- import * as i3$4 from '@angular/material/radio';
47
+ import * as i3$5 from '@angular/material/radio';
42
48
  import { MatRadioModule } from '@angular/material/radio';
43
- import * as i4$4 from '@ajf/core/common';
44
- import { AjfCommonModule } from '@ajf/core/common';
45
- import * as i5$2 from '@angular/cdk/text-field';
46
- import { TextFieldModule } from '@angular/cdk/text-field';
47
- import * as i2$6 from '@ajf/material/time';
49
+ import * as i4$3 from 'ngx-quill';
50
+ import { QuillModule } from 'ngx-quill';
51
+ import * as i2$7 from '@ajf/material/time';
48
52
  import { AjfTimeModule } from '@ajf/material/time';
49
- import * as i2$7 from '@angular/platform-browser';
50
- import * as i3$5 from '@angular/common/http';
51
- import * as i2$8 from '@ajf/material/signature';
53
+ import * as i2$8 from '@angular/platform-browser';
54
+ import * as i3$6 from '@angular/common/http';
55
+ import * as i2$9 from '@ajf/material/signature';
52
56
  import { AjfSignatureModule } from '@ajf/material/signature';
53
- import * as i2$9 from '@ajf/core/page-slider';
54
- import * as i3$6 from '@ajf/material/page-slider';
57
+ import * as i2$a from '@ajf/core/page-slider';
58
+ import * as i3$7 from '@ajf/material/page-slider';
55
59
  import { AjfPageSliderModule } from '@ajf/material/page-slider';
56
60
  import * as i6$1 from '@angular/material/button-toggle';
57
61
  import { MatButtonToggleModule } from '@angular/material/button-toggle';
58
62
  import * as i7 from '@angular/material/card';
59
63
  import { MatCardModule } from '@angular/material/card';
60
- import * as i8$1 from '@angular/material/icon';
61
- import { MatIconModule } from '@angular/material/icon';
62
64
  import * as i9 from '@angular/material/toolbar';
63
65
  import { MatToolbarModule } from '@angular/material/toolbar';
64
66
  import * as i10 from '@angular/material/tooltip';
65
67
  import { MatTooltipModule } from '@angular/material/tooltip';
66
68
  import { AjfTranslocoModule } from '@ajf/core/transloco';
69
+ import { TextFieldModule } from '@angular/cdk/text-field';
67
70
 
68
71
  /**
69
72
  * @license
@@ -212,7 +215,7 @@ class AjfDateInputFieldComponent extends AjfBaseFieldComponent {
212
215
  super(cdr, service, was);
213
216
  }
214
217
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfDateInputFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
215
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfDateInputFieldComponent, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatInput, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"control|async as ctrl\">\n <input\n matInput\n [matDatepicker]=\"picker\"\n [attr.aria-label]=\"instance!|ajfNodeCompleteName\"\n [min]=\"instance!.node.minDate|ajfDateValueString\"\n [max]=\"instance!.node.maxDate|ajfDateValueString\"\n [formControl]=\"ctrl!\"\n readonly\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n</mat-form-field>\n", styles: [""], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i3$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i3$1.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i4$2.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: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AjfDateValueStringPipe, name: "ajfDateValueString" }, { kind: "pipe", type: i1.AjfNodeCompleteNamePipe, name: "ajfNodeCompleteName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
218
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfDateInputFieldComponent, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: MatInput, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"control|async as ctrl\">\n <input\n matInput\n [matDatepicker]=\"picker\"\n [attr.aria-label]=\"instance!|ajfNodeCompleteName\"\n [min]=\"instance!.node.minDate|ajfDateValueString\"\n [max]=\"instance!.node.maxDate|ajfDateValueString\"\n [formControl]=\"ctrl!\"\n readonly\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n</mat-form-field>\n", styles: [""], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i3$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i3$1.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5$1.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: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AjfDateValueStringPipe, name: "ajfDateValueString" }, { kind: "pipe", type: i1.AjfNodeCompleteNamePipe, name: "ajfNodeCompleteName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
216
219
  }
217
220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfDateInputFieldComponent, decorators: [{
218
221
  type: Component,
@@ -261,6 +264,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
261
264
  args: [AJF_WARNING_ALERT_SERVICE]
262
265
  }] }] });
263
266
 
267
+ /**
268
+ * @license
269
+ * Copyright (C) Gnucoop soc. coop.
270
+ *
271
+ * This file is part of the Advanced JSON forms (ajf).
272
+ *
273
+ * Advanced JSON forms (ajf) is free software: you can redistribute it and/or
274
+ * modify it under the terms of the GNU Affero General Public License as
275
+ * published by the Free Software Foundation, either version 3 of the License,
276
+ * or (at your option) any later version.
277
+ *
278
+ * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,
279
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
280
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
281
+ * General Public License for more details.
282
+ *
283
+ * You should have received a copy of the GNU Affero General Public License
284
+ * along with Advanced JSON forms (ajf).
285
+ * If not, see http://www.gnu.org/licenses/.
286
+ *
287
+ */
288
+ class AjfAudioFieldComponent extends AjfAudioFieldComponent$1 {
289
+ constructor(cdr, service, was) {
290
+ super(cdr, service, was);
291
+ }
292
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfAudioFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
293
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfAudioFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"ajf-field-wrapper\" *ngIf=\"control | async as ctrl\">\n <ajf-audio\n [readonly]=\"!instance?.editable\"\n [formControl]=\"ctrl\"\n ></ajf-audio>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i2$3.AjfAudioComponent, selector: "ajf-audio", inputs: ["readonly"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
294
+ }
295
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfAudioFieldComponent, decorators: [{
296
+ type: Component,
297
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"ajf-field-wrapper\" *ngIf=\"control | async as ctrl\">\n <ajf-audio\n [readonly]=\"!instance?.editable\"\n [formControl]=\"ctrl\"\n ></ajf-audio>\n</div>\n" }]
298
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.AjfFormRendererService }, { type: AjfWarningAlertService, decorators: [{
299
+ type: Inject,
300
+ args: [AJF_WARNING_ALERT_SERVICE]
301
+ }] }] });
302
+
264
303
  /**
265
304
  * @license
266
305
  * Copyright (C) Gnucoop soc. coop.
@@ -287,7 +326,7 @@ class AjfBarcodeFieldComponent extends AjfBaseFieldComponent {
287
326
  super(cdr, service, was);
288
327
  }
289
328
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfBarcodeFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
290
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfBarcodeFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ajf-barcode *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\"></ajf-barcode>\n", styles: [""], dependencies: [{ kind: "component", type: i2$3.AjfBarcodeComponent, selector: "ajf-barcode" }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
329
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfBarcodeFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ajf-barcode *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\"></ajf-barcode>\n", styles: [""], dependencies: [{ kind: "component", type: i2$4.AjfBarcodeComponent, selector: "ajf-barcode" }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
291
330
  }
292
331
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfBarcodeFieldComponent, decorators: [{
293
332
  type: Component,
@@ -297,6 +336,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
297
336
  args: [AJF_WARNING_ALERT_SERVICE]
298
337
  }] }] });
299
338
 
339
+ /**
340
+ * @license
341
+ * Copyright (C) Gnucoop soc. coop.
342
+ *
343
+ * This file is part of the Advanced JSON forms (ajf).
344
+ *
345
+ * Advanced JSON forms (ajf) is free software: you can redistribute it and/or
346
+ * modify it under the terms of the GNU Affero General Public License as
347
+ * published by the Free Software Foundation, either version 3 of the License,
348
+ * or (at your option) any later version.
349
+ *
350
+ * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,
351
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
352
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
353
+ * General Public License for more details.
354
+ *
355
+ * You should have received a copy of the GNU Affero General Public License
356
+ * along with Advanced JSON forms (ajf).
357
+ * If not, see http://www.gnu.org/licenses/.
358
+ *
359
+ */
360
+ /**
361
+ * this component show the control value inherited from AjfBaseFieldComponent.
362
+ *
363
+ * @export
364
+ * @class AjfDisplayFieldComponent
365
+ */
366
+ class AjfDisplayFieldComponent extends AjfInputFieldComponent$1 {
367
+ constructor(cdr, service, was) {
368
+ super(cdr, service, was);
369
+ }
370
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfDisplayFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
371
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfDisplayFieldComponent, selector: "ajf-display-field", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"control | async as ctrl\">\n <ng-container [ngSwitch]=\"instance?.node?.fieldType\">\n\n <!-- String -->\n <span *ngSwitchCase=\"0\">{{ ctrl.value }}</span>\n\n <!-- Textarea with HTML -->\n <div *ngSwitchCase=\"1\" [innerHTML]=\"ctrl.value | safeHtml\"></div>\n\n <!-- Number -->\n <span *ngSwitchCase=\"2\">{{ ctrl.value | number }}</span>\n\n <!-- Boolean -->\n <mat-slide-toggle *ngSwitchCase=\"3\" [checked]=\"ctrl.value\" (click)=\"$event.preventDefault()\"\n (change)=\"$event.source.checked = ctrl.value\" [disableRipple]=\"true\">\n </mat-slide-toggle>\n\n <!-- Default -->\n <span *ngSwitchDefault>{{ ctrl.value }}</span>\n\n </ng-container>\n</ng-container>", styles: ["ajf-display-field span{min-height:1em;display:block}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "pipe", type: i4$2.SafeHtmlPipe, name: "safeHtml" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
372
+ }
373
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfDisplayFieldComponent, decorators: [{
374
+ type: Component,
375
+ args: [{ selector: 'ajf-display-field', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"control | async as ctrl\">\n <ng-container [ngSwitch]=\"instance?.node?.fieldType\">\n\n <!-- String -->\n <span *ngSwitchCase=\"0\">{{ ctrl.value }}</span>\n\n <!-- Textarea with HTML -->\n <div *ngSwitchCase=\"1\" [innerHTML]=\"ctrl.value | safeHtml\"></div>\n\n <!-- Number -->\n <span *ngSwitchCase=\"2\">{{ ctrl.value | number }}</span>\n\n <!-- Boolean -->\n <mat-slide-toggle *ngSwitchCase=\"3\" [checked]=\"ctrl.value\" (click)=\"$event.preventDefault()\"\n (change)=\"$event.source.checked = ctrl.value\" [disableRipple]=\"true\">\n </mat-slide-toggle>\n\n <!-- Default -->\n <span *ngSwitchDefault>{{ ctrl.value }}</span>\n\n </ng-container>\n</ng-container>", styles: ["ajf-display-field span{min-height:1em;display:block}\n"] }]
376
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.AjfFormRendererService }, { type: undefined, decorators: [{
377
+ type: Inject,
378
+ args: [AJF_WARNING_ALERT_SERVICE]
379
+ }] }] });
380
+
300
381
  /**
301
382
  * @license
302
383
  * Copyright (C) Gnucoop soc. coop.
@@ -323,7 +404,7 @@ class AjfInputFieldComponent extends AjfInputFieldComponent$1 {
323
404
  super(cdr, service, was);
324
405
  }
325
406
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfInputFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
326
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfInputFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"control|async as ctrl\">\n <input matInput *ngIf=\"type === 'text'\" type=\"text\" [formControl]=\"ctrl!\"\n [readonly]=\"instance!|ajfIsReadonlyInputField\" [attr.aria-labelledby]=\"instance!.node.name\">\n <input matInput *ngIf=\"type === 'number'\" type=\"number\" [formControl]=\"ctrl!\"\n [readonly]=\"instance!|ajfIsReadonlyInputField\" [attr.aria-labelledby]=\"instance!.node.name\">\n</mat-form-field>\n", styles: [""], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.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: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AjfIsReadonlyInputFieldPipe, name: "ajfIsReadonlyInputField" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
407
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfInputFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"control|async as ctrl\">\n <input matInput *ngIf=\"type === 'text'\" type=\"text\" [formControl]=\"ctrl!\"\n [readonly]=\"instance!|ajfIsReadonlyInputField\" [attr.aria-labelledby]=\"instance!.node.name\">\n <input matInput *ngIf=\"type === 'number'\" type=\"number\" [formControl]=\"ctrl!\"\n [readonly]=\"instance!|ajfIsReadonlyInputField\" [attr.aria-labelledby]=\"instance!.node.name\">\n</mat-form-field>\n", styles: [""], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$1.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: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AjfIsReadonlyInputFieldPipe, name: "ajfIsReadonlyInputField" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
327
408
  }
328
409
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfInputFieldComponent, decorators: [{
329
410
  type: Component,
@@ -359,7 +440,7 @@ class AjfGeolocationFieldComponent extends AjfBaseFieldComponent {
359
440
  super(cdr, service, was);
360
441
  }
361
442
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfGeolocationFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
362
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfGeolocationFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ajf-geolocation *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\"></ajf-geolocation>", styles: [""], dependencies: [{ kind: "component", type: i2$4.AjfGeolocationComponent, selector: "ajf-geolocation" }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
443
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfGeolocationFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ajf-geolocation *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\"></ajf-geolocation>", styles: [""], dependencies: [{ kind: "component", type: i2$5.AjfGeolocationComponent, selector: "ajf-geolocation" }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
363
444
  }
364
445
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfGeolocationFieldComponent, decorators: [{
365
446
  type: Component,
@@ -412,7 +493,7 @@ class AjfMultipleChoiceFieldComponent extends AjfFieldWithChoicesComponent {
412
493
  this.searchFilterSub.unsubscribe();
413
494
  }
414
495
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfMultipleChoiceFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }, { token: AJF_SEARCH_ALERT_THRESHOLD, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
415
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfMultipleChoiceFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"instance\">\n <ng-container *ngIf=\"!(instance|ajfExpandFieldWithChoices:searchThreshold); else expanded\">\n <mat-select *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\" [multiple]=\"true\">\n <mat-option [style.backgroundColor]=\"'white'\">\n <ngx-mat-select-search\n [formControl]=\"searchFilterCtrl\"\n [placeholderLabel]=\"'Search'|transloco\"\n [noEntriesFoundLabel]=\"'Nothing found'|transloco\"\n [enableClearOnEscapePressed]=\"true\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option [value]=\"choice.value\" *ngFor=\"let choice of filteredChoices()\">\n {{ choice.label | transloco }}\n </mat-option>\n </mat-select>\n </ng-container>\n</ng-container>\n<ng-template #expanded>\n <ajf-checkbox-group *ngIf=\"control|async as ctrl\" class=\"ajf-choices-container\"\n [formControl]=\"ctrl!\">\n <ajf-checkbox-group-item [value]=\"choice.value\" *ngFor=\"let choice of instance!.filteredChoices\">\n {{ choice.label | transloco }}\n </ajf-checkbox-group-item>\n </ajf-checkbox-group>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "component", type: i2$5.CheckboxGroupItem, selector: "ajf-checkbox-group-item" }, { kind: "directive", type: i3$3.AjfCheckboxGroup, selector: "ajf-checkbox-group,[ajf-checkbox-group]", inputs: ["value", "name", "disabled"], outputs: ["change"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i8.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "pipe", type: i3$2.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AjfExpandFieldWithChoicesPipe, name: "ajfExpandFieldWithChoices" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
496
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfMultipleChoiceFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"instance\">\n <ng-container *ngIf=\"!(instance|ajfExpandFieldWithChoices:searchThreshold); else expanded\">\n <mat-select *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\" [multiple]=\"true\">\n <mat-option [style.backgroundColor]=\"'white'\">\n <ngx-mat-select-search\n [formControl]=\"searchFilterCtrl\"\n [placeholderLabel]=\"'Search'|transloco\"\n [noEntriesFoundLabel]=\"'Nothing found'|transloco\"\n [enableClearOnEscapePressed]=\"true\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option [value]=\"choice.value\" *ngFor=\"let choice of filteredChoices()\">\n {{ choice.label | transloco }}\n </mat-option>\n </mat-select>\n </ng-container>\n</ng-container>\n<ng-template #expanded>\n <ajf-checkbox-group *ngIf=\"control|async as ctrl\" class=\"ajf-choices-container\"\n [formControl]=\"ctrl!\">\n <ajf-checkbox-group-item [value]=\"choice.value\" *ngFor=\"let choice of instance!.filteredChoices\">\n {{ choice.label | transloco }}\n </ajf-checkbox-group-item>\n </ajf-checkbox-group>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "component", type: i2$6.CheckboxGroupItem, selector: "ajf-checkbox-group-item" }, { kind: "directive", type: i3$3.AjfCheckboxGroup, selector: "ajf-checkbox-group,[ajf-checkbox-group]", inputs: ["value", "name", "disabled"], outputs: ["change"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5$2.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i8.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "pipe", type: i3$2.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AjfExpandFieldWithChoicesPipe, name: "ajfExpandFieldWithChoices" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
416
497
  }
417
498
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfMultipleChoiceFieldComponent, decorators: [{
418
499
  type: Component,
@@ -452,12 +533,19 @@ class AjfRangeFieldComponent extends AjfRange {
452
533
  constructor(cdr, service, was) {
453
534
  super(cdr, service, was);
454
535
  }
536
+ enumerateStars() {
537
+ const nums = [];
538
+ for (let i = 1; i <= (this.end || 5); i++) {
539
+ nums.push(i);
540
+ }
541
+ return nums;
542
+ }
455
543
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfRangeFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
456
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfRangeFieldComponent, selector: "ajf-range", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"control|async as ctrl\">\n <mat-slider\n discrete\n showTickMarks\n [step]=\"step\"\n [min]=\"start\"\n [max]=\"end\"\n [attr.aria-label]=\"name\"\n [attr.name]=\"name\"\n ><input matSliderThumb [value]=\"value\" [formControl]=\"ctrl\" /></mat-slider>\n <div class=\"ajf-range-label\">\n <label>{{ctrl.value}}</label>\n </div>\n</ng-container>\n", styles: ["ajf-range{display:inline-block;padding-top:20px}ajf-range .ajf-range-label{display:inline-block;padding:0 10px}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4$3.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i4$3.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
544
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfRangeFieldComponent, selector: "ajf-range", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"control|async as ctrl\">\n <div *ngIf=\"appearance !== 'rating'; else ratingTemplate\">\n <mat-slider\n discrete\n showTickMarks\n [step]=\"step\"\n [min]=\"start\"\n [max]=\"end\"\n [attr.aria-label]=\"name\"\n [attr.name]=\"name\"\n ><input matSliderThumb [value]=\"value\" [formControl]=\"ctrl\" /></mat-slider>\n <div class=\"ajf-range-label\">\n <label>{{ctrl.value}}</label>\n </div>\n </div>\n \n <ng-template #ratingTemplate>\n <div class=\"ajf-rating-container\">\n <button type=\"button\"\n *ngFor=\"let i of enumerateStars()\"\n class=\"ajf-rating-star\"\n [class.selected]=\"i <= ctrl.value\"\n (click)=\"ctrl.setValue(i)\"\n [attr.aria-label]=\"'Rate ' + i + ' out of ' + end\"\n [attr.name]=\"name\">\n <mat-icon>star</mat-icon>\n </button>\n <div class=\"ajf-range-label\">\n <label>{{ctrl.value}}</label>\n </div>\n </div>\n </ng-template>\n</ng-container>\n", styles: ["ajf-range{display:inline-block;padding-top:20px}ajf-range .ajf-range-label{display:inline-block;padding:0 10px}ajf-range .ajf-rating-container{display:flex;align-items:center;gap:8px;padding:8px 0}ajf-range .ajf-rating-container .ajf-rating-star{background:none;border:none;cursor:pointer;padding:0;color:#ccc;transition:color .2s}ajf-range .ajf-rating-container .ajf-rating-star.selected{color:gold}ajf-range .ajf-rating-container .ajf-rating-star mat-icon{font-size:32px;height:32px;width:32px}\n"], dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5$3.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i5$3.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
457
545
  }
458
546
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfRangeFieldComponent, decorators: [{
459
547
  type: Component,
460
- args: [{ selector: 'ajf-range', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"control|async as ctrl\">\n <mat-slider\n discrete\n showTickMarks\n [step]=\"step\"\n [min]=\"start\"\n [max]=\"end\"\n [attr.aria-label]=\"name\"\n [attr.name]=\"name\"\n ><input matSliderThumb [value]=\"value\" [formControl]=\"ctrl\" /></mat-slider>\n <div class=\"ajf-range-label\">\n <label>{{ctrl.value}}</label>\n </div>\n</ng-container>\n", styles: ["ajf-range{display:inline-block;padding-top:20px}ajf-range .ajf-range-label{display:inline-block;padding:0 10px}\n"] }]
548
+ args: [{ selector: 'ajf-range', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"control|async as ctrl\">\n <div *ngIf=\"appearance !== 'rating'; else ratingTemplate\">\n <mat-slider\n discrete\n showTickMarks\n [step]=\"step\"\n [min]=\"start\"\n [max]=\"end\"\n [attr.aria-label]=\"name\"\n [attr.name]=\"name\"\n ><input matSliderThumb [value]=\"value\" [formControl]=\"ctrl\" /></mat-slider>\n <div class=\"ajf-range-label\">\n <label>{{ctrl.value}}</label>\n </div>\n </div>\n \n <ng-template #ratingTemplate>\n <div class=\"ajf-rating-container\">\n <button type=\"button\"\n *ngFor=\"let i of enumerateStars()\"\n class=\"ajf-rating-star\"\n [class.selected]=\"i <= ctrl.value\"\n (click)=\"ctrl.setValue(i)\"\n [attr.aria-label]=\"'Rate ' + i + ' out of ' + end\"\n [attr.name]=\"name\">\n <mat-icon>star</mat-icon>\n </button>\n <div class=\"ajf-range-label\">\n <label>{{ctrl.value}}</label>\n </div>\n </div>\n </ng-template>\n</ng-container>\n", styles: ["ajf-range{display:inline-block;padding-top:20px}ajf-range .ajf-range-label{display:inline-block;padding:0 10px}ajf-range .ajf-rating-container{display:flex;align-items:center;gap:8px;padding:8px 0}ajf-range .ajf-rating-container .ajf-rating-star{background:none;border:none;cursor:pointer;padding:0;color:#ccc;transition:color .2s}ajf-range .ajf-rating-container .ajf-rating-star.selected{color:gold}ajf-range .ajf-rating-container .ajf-rating-star mat-icon{font-size:32px;height:32px;width:32px}\n"] }]
461
549
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.AjfFormRendererService }, { type: AjfWarningAlertService, decorators: [{
462
550
  type: Inject,
463
551
  args: [AJF_WARNING_ALERT_SERVICE]
@@ -506,7 +594,7 @@ class AjfSingleChoiceFieldComponent extends AjfFieldWithChoicesComponent {
506
594
  this.searchFilterSub.unsubscribe();
507
595
  }
508
596
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfSingleChoiceFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }, { token: AJF_SEARCH_ALERT_THRESHOLD, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
509
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfSingleChoiceFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"instance\">\n <ng-container *ngIf=\"!(instance|ajfExpandFieldWithChoices:searchThreshold) ; else expanded\">\n <mat-select *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\">\n <mat-option [style.backgroundColor]=\"'white'\">\n <ngx-mat-select-search\n [formControl]=\"searchFilterCtrl\"\n [placeholderLabel]=\"'Search'|transloco\"\n [noEntriesFoundLabel]=\"'Nothing found'|transloco\"\n [enableClearOnEscapePressed]=\"true\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option [value]=\"choice.value\" *ngFor=\"let choice of filteredChoices()\">\n {{ choice.label | transloco }}\n </mat-option>\n </mat-select>\n </ng-container>\n</ng-container>\n<ng-template #expanded>\n <mat-radio-group *ngIf=\"control|async as ctrl\" class=\"ajf-choices-container\"\n [attr.aria-labelledby]=\"instance!.node.name\"\n [formControl]=\"ctrl!\">\n <mat-radio-button [value]=\"choice.value\" *ngFor=\"let choice of instance!.filteredChoices\">\n {{ choice.label | transloco }}\n </mat-radio-button>\n </mat-radio-group>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$4.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i3$4.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i5$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i8.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "pipe", type: i3$2.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AjfExpandFieldWithChoicesPipe, name: "ajfExpandFieldWithChoices" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
597
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfSingleChoiceFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"instance\">\n <ng-container *ngIf=\"!(instance|ajfExpandFieldWithChoices:searchThreshold) ; else expanded\">\n <mat-select *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\">\n <mat-option [style.backgroundColor]=\"'white'\">\n <ngx-mat-select-search\n [formControl]=\"searchFilterCtrl\"\n [placeholderLabel]=\"'Search'|transloco\"\n [noEntriesFoundLabel]=\"'Nothing found'|transloco\"\n [enableClearOnEscapePressed]=\"true\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option [value]=\"choice.value\" *ngFor=\"let choice of filteredChoices()\">\n {{ choice.label | transloco }}\n </mat-option>\n </mat-select>\n </ng-container>\n</ng-container>\n<ng-template #expanded>\n <mat-radio-group *ngIf=\"control|async as ctrl\" class=\"ajf-choices-container\"\n [attr.aria-labelledby]=\"instance!.node.name\"\n [formControl]=\"ctrl!\">\n <mat-radio-button [value]=\"choice.value\" *ngFor=\"let choice of instance!.filteredChoices\">\n {{ choice.label | transloco }}\n </mat-radio-button>\n </mat-radio-group>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$5.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i3$5.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i5$2.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i8.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "pipe", type: i3$2.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AjfExpandFieldWithChoicesPipe, name: "ajfExpandFieldWithChoices" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
510
598
  }
511
599
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfSingleChoiceFieldComponent, decorators: [{
512
600
  type: Component,
@@ -547,7 +635,7 @@ class AjfTableFieldComponent extends AjfTableFieldComponent$1 {
547
635
  super(cdr, service, was);
548
636
  }
549
637
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfTableFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
550
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfTableFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<table *ngIf=\"instance\" class=\"ajf-table-field\">\n <ng-container *ngIf=\"instance.node as node\">\n <ng-container *ngFor=\"let columns of instance.controls; let row = index\">\n <tr [ngClass]=\"row | ajfTableRowClass\">\n <td>\n <ng-container *ngIf=\"columns.length > 0 && columns[0]\">\n {{ columns[0] | ajfTranslateIfString | ajfFormatIfNumber: '.0-2' }}\n </ng-container>\n </td>\n <ng-container *ngIf=\"columns.length > 1\">\n <td *ngFor=\"let c of columns[1]; let column = index\">\n <ng-container *ngIf=\"row === 0; else controlCell\">\n {{ c | ajfTranslateIfString | ajfFormatIfNumber: '.0-2' }}\n </ng-container>\n <ng-template #controlCell>\n <ng-container *ngIf=\"c|ajfGetTableCellControl as contr\">\n <ng-container *ngIf=\"contr\">\n <ng-container *ngIf=\"contr!.show && (node.rows[row-1][column]|ajfIsCellEditable); else plainTextCell\">\n <ng-container *ngIf=\"contr.type === 'number';else genericInput\">\n <input (focusout)=\"contr!.show = false\" type=\"number\" [formControl]=\"contr.control\"\n (keydown.tab)=\"goToNextCell($event, row, column)\" autofocus />\n </ng-container>\n <ng-template #genericInput>\n <input (focusout)=\"contr!.show = false\" [type]=\"contr.type\" [formControl]=\"contr.control\"\n (keydown.tab)=\"goToNextCell($event, row, column)\" autofocus />\n </ng-template>\n </ng-container>\n\n <ng-template #plainTextCell>\n <span (click)=\"goToCell(row, column)\">{{ contr.control!.value |\n ajfTranslateIfString | ajfFormatIfNumber: '.0-2'\n }}</span>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-template>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </ng-container>\n</table>", styles: ["table.ajf-table-field{width:100%;border-collapse:collapse;table-layout:fixed}table.ajf-table-field .ajf-header-row{font-weight:700;background-color:#f9f9f9}table.ajf-table-field th,table.ajf-table-field td{padding:12px 15px;text-align:left;border-bottom:1px solid #ddd;border-top:solid 1px transparent;border-right:solid 1px #cccccc;border-left:solid 1px transparent;position:relative}table.ajf-table-field th span,table.ajf-table-field td span{display:inline-block;width:100%;box-sizing:border-box;font-family:inherit;font-size:inherit;line-height:1.5;text-align:center;padding:12px 15px;word-wrap:break-word}table.ajf-table-field th input,table.ajf-table-field td input{cursor:text;position:absolute;width:100%;box-sizing:border-box;outline:none;inset:0;border-top:solid 1px transparent;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent;display:inline-block;font-family:inherit;font-size:inherit;line-height:inherit;text-align:center;padding:12px 15px}table.ajf-table-field tr:hover{background-color:#f1f1f1}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i4$4.FormatIfNumber, name: "ajfFormatIfNumber" }, { kind: "pipe", type: i4$4.TranslateIfString, name: "ajfTranslateIfString" }, { kind: "pipe", type: i1.AjfGetTableCellControlPipe, name: "ajfGetTableCellControl" }, { kind: "pipe", type: i1.AjfIsCellEditablePipe, name: "ajfIsCellEditable" }, { kind: "pipe", type: i1.AjfTableRowClass, name: "ajfTableRowClass" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
638
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfTableFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<table *ngIf=\"instance\" class=\"ajf-table-field\">\n <ng-container *ngIf=\"instance.node as node\">\n <ng-container *ngFor=\"let columns of instance.controls; let row = index\">\n <tr [ngClass]=\"row | ajfTableRowClass\">\n <td>\n <ng-container *ngIf=\"columns.length > 0 && columns[0]\">\n {{ columns[0] | ajfTranslateIfString | ajfFormatIfNumber: '.0-2' }}\n </ng-container>\n </td>\n <ng-container *ngIf=\"columns.length > 1\">\n <td *ngFor=\"let c of columns[1]; let column = index\">\n <ng-container *ngIf=\"row === 0; else controlCell\">\n {{ c | ajfTranslateIfString | ajfFormatIfNumber: '.0-2' }}\n </ng-container>\n <ng-template #controlCell>\n <ng-container *ngIf=\"c|ajfGetTableCellControl as contr\">\n <ng-container *ngIf=\"contr\">\n <ng-container *ngIf=\"contr!.show && (node.rows[row-1][column]|ajfIsCellEditable); else plainTextCell\">\n <ng-container *ngIf=\"contr.type === 'number';else genericInput\">\n <input (focusout)=\"contr!.show = false\" type=\"number\" [formControl]=\"contr.control\"\n (keydown.tab)=\"goToNextCell($event, row, column)\" autofocus />\n </ng-container>\n <ng-template #genericInput>\n <input (focusout)=\"contr!.show = false\" [type]=\"contr.type\" [formControl]=\"contr.control\"\n (keydown.tab)=\"goToNextCell($event, row, column)\" autofocus />\n </ng-template>\n </ng-container>\n\n <ng-template #plainTextCell>\n <span (click)=\"goToCell(row, column)\">{{ contr.control!.value |\n ajfTranslateIfString | ajfFormatIfNumber: '.0-2'\n }}</span>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-template>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </ng-container>\n</table>", styles: ["table.ajf-table-field{width:100%;border-collapse:collapse;table-layout:fixed}table.ajf-table-field .ajf-header-row{font-weight:700;background-color:#f9f9f9}table.ajf-table-field th,table.ajf-table-field td{padding:12px 15px;text-align:left;border-bottom:1px solid #ddd;border-top:solid 1px transparent;border-right:solid 1px #cccccc;border-left:solid 1px transparent;position:relative}table.ajf-table-field th span,table.ajf-table-field td span{display:inline-block;width:100%;box-sizing:border-box;font-family:inherit;font-size:inherit;line-height:1.5;text-align:center;padding:12px 15px;word-wrap:break-word}table.ajf-table-field th input,table.ajf-table-field td input{cursor:text;position:absolute;width:100%;box-sizing:border-box;outline:none;inset:0;border-top:solid 1px transparent;border-right:solid 1px transparent;border-bottom:solid 1px transparent;border-left:solid 1px transparent;display:inline-block;font-family:inherit;font-size:inherit;line-height:inherit;text-align:center;padding:12px 15px}table.ajf-table-field tr:hover{background-color:#f1f1f1}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i4$2.FormatIfNumber, name: "ajfFormatIfNumber" }, { kind: "pipe", type: i4$2.TranslateIfString, name: "ajfTranslateIfString" }, { kind: "pipe", type: i1.AjfGetTableCellControlPipe, name: "ajfGetTableCellControl" }, { kind: "pipe", type: i1.AjfIsCellEditablePipe, name: "ajfIsCellEditable" }, { kind: "pipe", type: i1.AjfTableRowClass, name: "ajfTableRowClass" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
551
639
  }
552
640
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfTableFieldComponent, decorators: [{
553
641
  type: Component,
@@ -581,13 +669,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
581
669
  class AjfTextFieldComponent extends AjfInputFieldComponent$1 {
582
670
  constructor(cdr, service, was) {
583
671
  super(cdr, service, was);
672
+ this.quillModules = {
673
+ toolbar: [
674
+ ['bold', 'italic', 'underline'],
675
+ [{ 'list': 'ordered' }, { 'list': 'bullet' }],
676
+ ['clean'],
677
+ ],
678
+ };
679
+ }
680
+ ngOnInit() {
681
+ super.ngOnInit();
682
+ if (this.control) {
683
+ this.control.subscribe(ctrl => {
684
+ if (ctrl && typeof ctrl.value === 'string') {
685
+ const converted = ctrl.value.replace(/\r\n|\r|\n/g, '<br>');
686
+ if (converted !== ctrl.value) {
687
+ ctrl.setValue(converted, { emitEvent: false });
688
+ }
689
+ }
690
+ });
691
+ }
584
692
  }
585
693
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfTextFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
586
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfTextFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"control|async as ctrl\">\n <textarea matInput cdkTextareaAutosize [formControl]=\"ctrl!\"></textarea>\n</mat-form-field>\n", styles: [""], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.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: "directive", type: i5$2.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
694
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfTextFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<quill-editor *ngIf=\"control | async as ctrl\" [formControl]=\"ctrl!\" [modules]=\"quillModules\" class=\"resizable-quill\"\n placeholder=\"\">\n</quill-editor>", styles: [".resizable-quill{display:block;width:100%;max-width:800px}.resizable-quill .ql-toolbar{background-color:var(--mdc-filled-text-field-container-color, var(--mat-app-surface-variant))}.resizable-quill .ql-editor{min-height:11.36em;max-height:35.5em;overflow-y:auto;resize:vertical;font-size:var(--mat-form-field-container-text-size, var(--mat-app-body-large-size))}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4$3.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
587
695
  }
588
696
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfTextFieldComponent, decorators: [{
589
697
  type: Component,
590
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<mat-form-field *ngIf=\"control|async as ctrl\">\n <textarea matInput cdkTextareaAutosize [formControl]=\"ctrl!\"></textarea>\n</mat-form-field>\n" }]
698
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<quill-editor *ngIf=\"control | async as ctrl\" [formControl]=\"ctrl!\" [modules]=\"quillModules\" class=\"resizable-quill\"\n placeholder=\"\">\n</quill-editor>", styles: [".resizable-quill{display:block;width:100%;max-width:800px}.resizable-quill .ql-toolbar{background-color:var(--mdc-filled-text-field-container-color, var(--mat-app-surface-variant))}.resizable-quill .ql-editor{min-height:11.36em;max-height:35.5em;overflow-y:auto;resize:vertical;font-size:var(--mat-form-field-container-text-size, var(--mat-app-body-large-size))}\n"] }]
591
699
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.AjfFormRendererService }, { type: AjfWarningAlertService, decorators: [{
592
700
  type: Inject,
593
701
  args: [AJF_WARNING_ALERT_SERVICE]
@@ -619,7 +727,7 @@ class AjfTimeFieldComponent extends AjfBaseFieldComponent {
619
727
  super(cdr, service, was);
620
728
  }
621
729
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfTimeFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
622
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfTimeFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ajf-time *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\"></ajf-time>\n", styles: [""], dependencies: [{ kind: "component", type: i2$6.AjfTime, selector: "ajf-time" }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
730
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfTimeFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ajf-time *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\"></ajf-time>\n", styles: [""], dependencies: [{ kind: "component", type: i2$7.AjfTime, selector: "ajf-time" }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
623
731
  }
624
732
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfTimeFieldComponent, decorators: [{
625
733
  type: Component,
@@ -654,8 +762,8 @@ class AjfVideoUrlFieldComponent extends AjfVideoUrlFieldComponent$1 {
654
762
  constructor(cdr, service, was, domSanitizer, httpClient) {
655
763
  super(cdr, service, was, domSanitizer, httpClient);
656
764
  }
657
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfVideoUrlFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }, { token: i2$7.DomSanitizer }, { token: i3$5.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
658
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfVideoUrlFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"control|async as ctrl\">\n <mat-form-field class=\"ajf-video-input\">\n <input matInput type=\"url\" [formControl]=\"ctrl!\">\n </mat-form-field>\n <div class=\"ajf-video-thumbnail\">\n <ng-container *ngIf=\"validUrl|async\">\n <a target=\"_blank\" [href]=\"ctrl.value\">\n <img *ngIf=\"videoThumbnail|async as thumb\" [src]=\"thumb\" class=\"\" alt=\"\">\n </a>\n </ng-container>\n </div>\n</ng-container>\n", styles: [".ajf-video-input{width:100%}.ajf-video-thumbnail{width:212px;height:120px;background-color:#eee;display:flex;align-items:center;justify-content:center}.ajf-video-thumbnail img{flex:1 1 auto}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.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: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
765
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfVideoUrlFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }, { token: i2$8.DomSanitizer }, { token: i3$6.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
766
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfVideoUrlFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"control|async as ctrl\">\n <mat-form-field class=\"ajf-video-input\">\n <input matInput type=\"url\" [formControl]=\"ctrl!\">\n </mat-form-field>\n <div class=\"ajf-video-thumbnail\">\n <ng-container *ngIf=\"validUrl|async\">\n <a target=\"_blank\" [href]=\"ctrl.value\">\n <img *ngIf=\"videoThumbnail|async as thumb\" [src]=\"thumb\" class=\"\" alt=\"\">\n </a>\n </ng-container>\n </div>\n</ng-container>\n", styles: [".ajf-video-input{width:100%}.ajf-video-thumbnail{width:212px;height:120px;background-color:#eee;display:flex;align-items:center;justify-content:center}.ajf-video-thumbnail img{flex:1 1 auto}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$1.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: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
659
767
  }
660
768
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfVideoUrlFieldComponent, decorators: [{
661
769
  type: Component,
@@ -663,7 +771,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
663
771
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.AjfFormRendererService }, { type: AjfWarningAlertService, decorators: [{
664
772
  type: Inject,
665
773
  args: [AJF_WARNING_ALERT_SERVICE]
666
- }] }, { type: i2$7.DomSanitizer }, { type: i3$5.HttpClient }] });
774
+ }] }, { type: i2$8.DomSanitizer }, { type: i3$6.HttpClient }] });
667
775
 
668
776
  /**
669
777
  * @license
@@ -697,7 +805,7 @@ class AjfSignatureFieldComponent extends AjfBaseFieldComponent {
697
805
  super(cdr, service, was);
698
806
  }
699
807
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfSignatureFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AjfFormRendererService }, { token: AJF_WARNING_ALERT_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
700
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfSignatureFieldComponent, selector: "ajf-signature-field", usesInheritance: true, ngImport: i0, template: "<ajf-signature *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\"></ajf-signature>\n", styles: [""], dependencies: [{ kind: "component", type: i2$8.AjfSignatureComponent, selector: "ajf-signature" }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
808
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfSignatureFieldComponent, selector: "ajf-signature-field", usesInheritance: true, ngImport: i0, template: "<ajf-signature *ngIf=\"control|async as ctrl\" [formControl]=\"ctrl!\"></ajf-signature>\n", styles: [""], dependencies: [{ kind: "component", type: i2$9.AjfSignatureComponent, selector: "ajf-signature" }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
701
809
  }
702
810
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfSignatureFieldComponent, decorators: [{
703
811
  type: Component,
@@ -737,7 +845,7 @@ class AjfFieldService extends AjfFieldService$1 {
737
845
  }),
738
846
  (this.componentsMap[AjfFieldType.Text] = {
739
847
  component: AjfTextFieldComponent,
740
- readOnlyComponent: AjfReadOnlyFieldComponent,
848
+ readOnlyComponent: AjfDisplayFieldComponent,
741
849
  }),
742
850
  (this.componentsMap[AjfFieldType.Number] = {
743
851
  component: AjfInputFieldComponent,
@@ -746,7 +854,7 @@ class AjfFieldService extends AjfFieldService$1 {
746
854
  }),
747
855
  (this.componentsMap[AjfFieldType.Boolean] = {
748
856
  component: AjfBooleanFieldComponent,
749
- readOnlyComponent: AjfReadOnlyFieldComponent,
857
+ readOnlyComponent: AjfDisplayFieldComponent,
750
858
  }),
751
859
  (this.componentsMap[AjfFieldType.Formula] = {
752
860
  component: AjfInputFieldComponent,
@@ -806,6 +914,10 @@ class AjfFieldService extends AjfFieldService$1 {
806
914
  component: AjfRangeFieldComponent,
807
915
  readOnlyComponent: AjfReadOnlyFieldComponent,
808
916
  };
917
+ this.componentsMap[AjfFieldType.Audio] = {
918
+ component: AjfAudioFieldComponent,
919
+ readOnlyComponent: AjfReadOnlyFileFieldComponent,
920
+ };
809
921
  }
810
922
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfFieldService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
811
923
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfFieldService, providedIn: 'root' }); }
@@ -888,12 +1000,18 @@ class AjfFormRenderer extends AjfFormRenderer$1 {
888
1000
  this.centeredFieldsContent = false;
889
1001
  this.maxColumns = 1;
890
1002
  }
1003
+ fieldStyle(field) {
1004
+ if (field.node.fieldType === AjfFieldType.Formula && field.node.label === '') {
1005
+ return { display: 'none' };
1006
+ }
1007
+ return {};
1008
+ }
891
1009
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfFormRenderer, deps: [{ token: i1.AjfFormRendererService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
892
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfFormRenderer, selector: "ajf-form", inputs: { topBar: "topBar", centeredFieldsContent: "centeredFieldsContent", maxColumns: "maxColumns" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"formGroup|async as fg\">\n <form [class.ajf-form-readonly]=\"readonly\" novalidate [formGroup]=\"fg!\">\n <div class=\"ajf-form-container\">\n <mat-toolbar *ngIf=\"!hideTopToolbar && topBar\" class=\"ajf-btn-strip\">\n <mat-button-toggle-group>\n <ng-container\n *ngFor=\"let slideInstance of (slides|async); let idx = index; trackBy: trackNodeById\"\n >\n <mat-button-toggle\n *ngIf=\"slideInstance.node.label && slideInstance.node.label.length > 0\"\n class=\"ajf-topbar-button\"\n (click)=\"scrollToSlide(slideInstance)\"\n [checked]=\"isSlideToggleChecked(slideInstance, formSlider.currentPage)\"\n [disabled]=\"slideInstance.visible === false\"\n >\n {{slideInstance.node.label | transloco}} {{ getRepeatingSlideRepIndex(slideInstance,\n formSlider.currentPage)|async}}\n <mat-icon\n *ngIf=\"!slideInstance.valid && slideInstance.visible !== false\"\n class=\"ajf-warning\"\n >warning</mat-icon\n >\n <mat-icon\n *ngIf=\"slideInstance.valid && slideInstance.visible !== false\"\n class=\"ajf-success\"\n >check</mat-icon\n >\n </mat-button-toggle>\n </ng-container>\n </mat-button-toggle-group>\n </mat-toolbar>\n <mat-toolbar *ngIf=\"!hideTopToolbar\">\n {{ title }}\n <span class=\"ajf-spacer\"></span>\n <!-- this content projection allow to add buttons on toolbar -->\n <ng-content select=\"[ajfFormTopToolbarButtons]\"></ng-content>\n <!-- apply a default save button only when ajfFormSaveButton is empty -->\n <span *ngIf=\"!saveDisabled\" (click)=\"onSave($event)\">\n <span #saveButton><ng-content select=\"[ajfFormSaveButton]\"></ng-content></span>\n <button\n *ngIf=\"saveButton && saveButton.childNodes && saveButton.childNodes.length === 0\"\n mat-button\n default\n >\n {{'Save'|transloco}}\n </button>\n </span>\n </mat-toolbar>\n <div class=\"ajf-slider-container\">\n <ajf-page-slider\n (orientationChange)=\"orientationChangeHandler($event)\"\n [fixedOrientation]=\"fixedOrientation\"\n [hideNavigationButtons]=\"hideNavigationButtons\"\n [orientation]=\"orientation\"\n #formSlider\n >\n <ng-container *ngIf=\"(slides|async) as curSlides\">\n <ng-container *ngIf=\"curSlides!.length > 0 && hasStartMessage\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"> 1 &rarr; </span>\n <span class=\"ajf-title\">\n <ng-content select=\"[ajfFormStartMessageTitle]\"></ng-content>\n </span>\n </h2>\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-content select=\"[ajfFormStartMessage]\"></ng-content>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n <ng-container *ngFor=\"let slideInstance of curSlides; trackBy:trackNodeById\">\n <!-- non repeating slides -->\n <ng-container *ngIf=\"slideInstance.visible\">\n <ng-container *ngIf=\"!(slideInstance|ajfIsRepeatingSlideInstance)\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"\n >{{ slideInstance.position + (hasStartMessage | ajfBoolToInt) }}\n &rarr;</span\n >\n <span [innerHTML]=\"slideInstance.node.label | transloco\"></span>\n </h2>\n <mat-icon class=\"ajf-warning\" *ngIf=\"!slideInstance.valid\"\n >warning</mat-icon\n >\n <mat-icon class=\"ajf-success\" *ngIf=\"slideInstance.valid\"\n >check</mat-icon\n >\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-template\n ngFor\n let-fieldInstance\n [ngForOf]=\"slideInstance.flatNodes\"\n [ngForTrackBy]=\"trackNodeById\"\n >\n <mat-card\n appearance=\"outlined\"\n [ngClass]=\"'ajf-' + (fieldInstance|ajfAsFieldInstance).node.size +\n ' ajf-max-columns-' + maxColumns +\n (centeredFieldsContent ? ' ajf-centered-field' : '')\"\n class=\"ajf-field-entry\"\n *ngIf=\"fieldInstance.visible\"\n >\n <i\n [class]=\"(fieldInstance|ajfAsFieldInstance).node.fieldType | ajfFieldIcon\"\n item-right\n ></i>\n <p>\n {{ ((fieldInstance|ajfAsFieldInstance).node.description || '') |\n transloco }}\n </p>\n\n <mat-card-header>\n <mat-card-title>\n <label\n [attr.id]=\"fieldInstance.node.name\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node.fieldType !== 7\"\n [innerHTML]=\"fieldInstance.node.label | transloco\"\n ></label>\n </mat-card-title>\n <mat-icon\n class=\"ajf-tooltip-icon\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node?.hint as hint\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"right\"\n >\n {{(fieldInstance|ajfAsFieldInstance).node.hintIcon ||\n 'help'}}</mat-icon\n ></mat-card-header\n >\n <mat-card-content>\n <ajf-field\n [instance]=\"fieldInstance|ajfAsFieldInstance\"\n [readonly]=\"readonly || !slideInstance.editable\"\n [id]=\"'field_entry_' + fieldInstance.node.id\"\n >\n </ajf-field>\n </mat-card-content>\n <mat-card-actions\n [ngClass]=\"(fieldInstance|ajfAsFieldInstance)?.valid ?\n 'ajf-valid-field'\n : 'ajf-invalid-field'\"\n >\n <ng-container\n *ngIf=\"(fieldInstance|ajfAsFieldInstance)?.valid !== true; else ajfValidFieldTemplate\"\n >\n <span class=\"ajf-field-error-message\"\n >{{(fieldInstance|ajfAsFieldInstanceErrors|transloco)}}</span\n >\n <mat-icon class=\"ajf-warning\">warning</mat-icon>\n </ng-container>\n <ng-template #ajfValidFieldTemplate>\n <mat-icon class=\"ajf-success\">check</mat-icon>\n </ng-template>\n </mat-card-actions>\n </mat-card>\n </ng-template>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n <!-- repeating slides -->\n <ng-container *ngIf=\"(slideInstance|ajfIsRepeatingSlideInstance)\">\n <ajf-page-slider-item\n *ngFor=\"let curRep of ((slideInstance|ajfAsRepeatingSlideInstance).reps|ajfRange); let idx = index; let lastSlide = last\"\n [isRepeating]=\"true\"\n [isRepeatingLast]=\"lastSlide\"\n >\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"\n >{{ slideInstance.position|ajfIncrement:idx + (hasStartMessage |\n ajfBoolToInt) }} &rarr;</span\n >\n <span [innerHTML]=\"slideInstance.node.label | transloco\"></span>\n </h2>\n <mat-icon class=\"ajf-warning\" *ngIf=\"!(slideInstance|ajfValidSlide:idx)\"\n >warning</mat-icon\n >\n <mat-icon class=\"ajf-success\" *ngIf=\"(slideInstance|ajfValidSlide:idx)\"\n >check</mat-icon\n >\n </div>\n </mat-card-header>\n <mat-card-content>\n <div *ngIf=\"!readonly\" class=\"ajf-group-actions\">\n <button\n *ngIf=\"lastSlide\"\n (click)=\"addGroup(slideInstance)\"\n [disabled]=\"!(slideInstance|ajfAsRepeatingSlideInstance).canAdd || ((slideInstance|ajfAsRepeatingSlideInstance).node.disableRemoval && !slideInstance.valid)\"\n mat-mini-fab\n >\n <mat-icon>add</mat-icon>\n </button>\n <button\n (click)=\"removeGroup(slideInstance, idx)\"\n [disabled]=\"!(slideInstance|ajfAsRepeatingSlideInstance).canRemove || (slideInstance|ajfAsRepeatingSlideInstance).node.disableRemoval\"\n mat-mini-fab\n >\n <mat-icon>remove</mat-icon>\n </button>\n </div>\n <ng-template\n ngFor\n let-fieldInstance\n [ngForOf]=\"slideInstance.slideNodes[idx]\"\n [ngForTrackBy]=\"trackNodeById\"\n >\n <mat-card\n appearance=\"outlined\"\n [ngClass]=\"'ajf-' + (fieldInstance|ajfAsFieldInstance).node.size +\n ' ajf-max-columns-' + maxColumns +\n (centeredFieldsContent ? ' ajf-centered-field' : '')\"\n class=\"ajf-field-entry\"\n *ngIf=\"fieldInstance.visible\"\n >\n <i\n [class]=\"(fieldInstance|ajfAsFieldInstance).node.fieldType | ajfFieldIcon\"\n item-right\n ></i>\n <p>\n {{ ((fieldInstance|ajfAsFieldInstance).node.description || '') |\n transloco }}\n </p>\n\n <mat-card-header>\n <mat-card-title>\n <label\n [attr.id]=\"fieldInstance.node.name\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node.fieldType !== 7\"\n [innerHTML]=\"fieldInstance.node.label | transloco\"\n ></label>\n </mat-card-title>\n <mat-icon\n class=\"ajf-tooltip-icon\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node?.hint as hint\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"right\"\n >\n {{(fieldInstance|ajfAsFieldInstance).node.hintIcon ||\n 'help'}}</mat-icon\n ></mat-card-header\n >\n <mat-card-content>\n <ajf-field\n [instance]=\"fieldInstance|ajfAsFieldInstance\"\n [readonly]=\"readonly || !slideInstance.editable\"\n [id]=\"'field_entry_' + fieldInstance.node.id\"\n >\n </ajf-field>\n </mat-card-content>\n <mat-card-actions\n [ngClass]=\"(fieldInstance|ajfAsFieldInstance)?.valid ?\n 'ajf-valid-field'\n : 'ajf-invalid-field'\"\n >\n <ng-container\n *ngIf=\"(fieldInstance|ajfAsFieldInstance)?.valid !== true; else ajfValidFieldTemplate\"\n >\n <span class=\"ajf-field-error-message\"\n >{{(fieldInstance|ajfAsFieldInstanceErrors)}}</span\n >\n <mat-icon class=\"ajf-warning\">warning</mat-icon>\n </ng-container>\n <ng-template #ajfValidFieldTemplate>\n <mat-icon class=\"ajf-success\">check</mat-icon>\n </ng-template>\n </mat-card-actions>\n </mat-card>\n </ng-template>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"curSlides && curSlides!.length > 0 && hasEndMessage\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span *ngIf=\"(slidesNum|async) as snum\" class=\"ajf-form-header-number\">\n {{ snum! + (hasStartMessage | ajfBoolToInt ) + 1 }} &rarr;\n </span>\n <span class=\"ajf-title\">\n <ng-content select=\"[ajfFormEndMessageTitle]\"></ng-content>\n </span>\n </h2>\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-content select=\"[ajfFormEndMessage]\"></ng-content>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n </ng-container>\n <div ajfPageSliderBar *ngIf=\"!hideBottomToolbar\">\n <div class=\"ajf-left-bar\">\n <div class=\"ajf-errors\" *ngIf=\"((errors | async) || 0) > 0\">\n <button mat-button (click)=\"goToPrevError()\" danger>\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button mat-button (click)=\"goToNextError()\" danger>\n <mat-icon>arrow_downward</mat-icon>\n </button>\n </div>\n <div class=\"ajf-info-box ajf-error\">\n <div class=\"ajf-title\">{{'Errors'|transloco}}</div>\n <div class=\"ajf-content\">{{ errors | async }} / {{ slidesNum|async }}</div>\n </div>\n </div>\n </div>\n </ajf-page-slider>\n </div>\n </div>\n </form>\n</ng-container>\n", styles: ["ajf-form{display:block}ajf-form .ajf-form-readonly .ajf-field-entry>label{font-weight:700}ajf-form .ajf-form-container{display:flex;flex-direction:column;position:absolute;inset:0}ajf-form .ajf-form-container mat-toolbar.ajf-hidden{opacity:0}ajf-form .ajf-form-container .ajf-btn-strip .mat-button-toggle-group{overflow-x:auto}ajf-form .ajf-form-container .ajf-topbar-button{font-size:.8em}ajf-form .ajf-form-container mat-icon.ajf-warning{color:#f53d3d}ajf-form .ajf-form-container mat-icon.ajf-success{color:#32db64}ajf-form .ajf-form-container>.ajf-slider-container{flex:1;position:relative}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider{height:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content{padding:16px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page{flex:1;max-height:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card{margin:1em 0 3em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content{display:flex;flex-wrap:wrap;flex-direction:row;align-content:flex-start;position:relative}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content .ajf-group-actions{position:absolute;right:0;top:-30px;padding:15px;z-index:10}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry{padding-right:10px;min-width:350px;display:flex;flex-direction:column;margin:5px;border-left:3px solid;border-radius:5px;min-height:30vh;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-icon{vertical-align:bottom;margin-left:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-1{flex:1 0 100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-2{flex:1 0 45%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-3{flex:1 0 30%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-normal{width:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-small{width:50%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-smaller{width:33%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-tiny{width:25%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-mini{width:20%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions{position:absolute;bottom:0;width:100%;display:flex;justify-content:flex-start;align-items:center;align-content:center;border-bottom-left-radius:5px;border-bottom-right-radius:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-valid-field{background-color:#32db6433}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-invalid-field{background-color:#f53d3d33}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-invalid-field .ajf-field-error-message{margin-left:8px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions .mat-icon{margin-left:auto}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-radio-button,ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry ajf-checkbox-group-item .mat-mdc-button{background-color:inherit!important}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-header{margin-bottom:15px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-header .ajf-tooltip-icon{align-self:center;min-width:24px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content{position:relative;flex:1;flex-flow:row wrap;justify-content:flex-start;align-items:flex-start;padding-top:2%;padding-bottom:10%;overflow-y:auto;max-width:95%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-select{margin:20px 0}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-radio-group{display:flex;flex-flow:column wrap;justify-content:space-between}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-radio-group .mat-mdc-radio-button{flex:1 1 30%;padding:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .ajf-errors .error{display:none}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .mat-mdc-card-content,ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .mat-mdc-card-header{justify-content:center;text-align:center}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .ajf-choices-container .mat-mdc-radio-button{text-align:start}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .ajf-field-range{margin-top:30px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header{display:flex;align-items:center;width:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header>h2{flex:1}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header>h2>.ajf-form-header-number{margin-right:.5em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header h2>.ajf-title{display:inline-block;margin-right:40px;white-space:normal;vertical-align:top}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar{display:flex;align-items:flex-start;flex-direction:row;position:absolute;bottom:0}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-right-button{float:right}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-button-icon-only ion-icon{padding:0 .1em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box{height:40px;padding:4px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box>div{height:16px;line-height:16px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box>div.ajf-content{font-weight:700}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box.ajf-error{order:2;color:red}ajf-form .ajf-form-container .ajf-spacer{flex:1 0 auto}\n"], dependencies: [{ kind: "component", type: i2$9.AjfPageSliderItem, selector: "ajf-page-slider-item", inputs: ["isRepeating", "isRepeatingLast"], outputs: ["scroll"] }, { kind: "component", type: i3$6.AjfPageSlider, selector: "ajf-page-slider" }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "directive", type: i6$1.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6$1.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i8$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: AjfFormField, selector: "ajf-field,ajf-form-field" }, { kind: "pipe", type: i3$2.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AjfAsFieldInstancePipe, name: "ajfAsFieldInstance" }, { kind: "pipe", type: i1.AjfAsFieldInstanceErrorsPipe, name: "ajfAsFieldInstanceErrors" }, { kind: "pipe", type: i1.AjfAsRepeatingSlideInstancePipe, name: "ajfAsRepeatingSlideInstance" }, { kind: "pipe", type: i1.AjfBoolToIntPipe, name: "ajfBoolToInt" }, { kind: "pipe", type: i1.AjfFieldIconPipe, name: "ajfFieldIcon" }, { kind: "pipe", type: i1.AjfIncrementPipe, name: "ajfIncrement" }, { kind: "pipe", type: i1.AjfIsRepeatingSlideInstancePipe, name: "ajfIsRepeatingSlideInstance" }, { kind: "pipe", type: i1.AjfRangePipe, name: "ajfRange" }, { kind: "pipe", type: i1.AjfValidSlidePipe, name: "ajfValidSlide" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1010
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfFormRenderer, selector: "ajf-form", inputs: { topBar: "topBar", centeredFieldsContent: "centeredFieldsContent", maxColumns: "maxColumns" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"formGroup|async as fg\">\n <form [class.ajf-form-readonly]=\"readonly\" novalidate [formGroup]=\"fg!\">\n <div class=\"ajf-form-container\">\n <mat-toolbar *ngIf=\"!hideTopToolbar && topBar\" class=\"ajf-btn-strip\">\n <mat-button-toggle-group>\n <ng-container\n *ngFor=\"let slideInstance of (slides|async); let idx = index; trackBy: trackNodeById\"\n >\n <mat-button-toggle\n *ngIf=\"slideInstance.node.label && slideInstance.node.label.length > 0\"\n class=\"ajf-topbar-button\"\n (click)=\"scrollToSlide(slideInstance)\"\n [checked]=\"isSlideToggleChecked(slideInstance, formSlider.currentPage)\"\n [disabled]=\"slideInstance.visible === false\"\n >\n {{slideInstance.node.label | transloco}} {{ getRepeatingSlideRepIndex(slideInstance,\n formSlider.currentPage)|async}}\n <mat-icon\n *ngIf=\"!slideInstance.valid && slideInstance.visible !== false\"\n class=\"ajf-warning\"\n >warning</mat-icon\n >\n <mat-icon\n *ngIf=\"slideInstance.valid && slideInstance.visible !== false\"\n class=\"ajf-success\"\n >check</mat-icon\n >\n </mat-button-toggle>\n </ng-container>\n </mat-button-toggle-group>\n </mat-toolbar>\n <mat-toolbar *ngIf=\"!hideTopToolbar\">\n {{ title }}\n <span class=\"ajf-spacer\"></span>\n <!-- this content projection allow to add buttons on toolbar -->\n <ng-content select=\"[ajfFormTopToolbarButtons]\"></ng-content>\n <!-- apply a default save button only when ajfFormSaveButton is empty -->\n <span *ngIf=\"!saveDisabled\" (click)=\"onSave($event)\">\n <span #saveButton><ng-content select=\"[ajfFormSaveButton]\"></ng-content></span>\n <button\n *ngIf=\"saveButton && saveButton.childNodes && saveButton.childNodes.length === 0\"\n mat-button\n default\n >\n {{'Save'|transloco}}\n </button>\n </span>\n </mat-toolbar>\n <div class=\"ajf-slider-container\">\n <ajf-page-slider\n (orientationChange)=\"orientationChangeHandler($event)\"\n [fixedOrientation]=\"fixedOrientation\"\n [hideNavigationButtons]=\"hideNavigationButtons\"\n [orientation]=\"orientation\"\n #formSlider\n >\n <ng-container *ngIf=\"(slides|async) as curSlides\">\n <ng-container *ngIf=\"curSlides!.length > 0 && hasStartMessage\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"> 1 &rarr; </span>\n <span class=\"ajf-title\">\n <ng-content select=\"[ajfFormStartMessageTitle]\"></ng-content>\n </span>\n </h2>\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-content select=\"[ajfFormStartMessage]\"></ng-content>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n <ng-container *ngFor=\"let slideInstance of curSlides; trackBy:trackNodeById\">\n <!-- non repeating slides -->\n <ng-container *ngIf=\"slideInstance.visible\">\n <ng-container *ngIf=\"!(slideInstance|ajfIsRepeatingSlideInstance)\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"\n >{{ slideInstance.position + (hasStartMessage | ajfBoolToInt) }}\n &rarr;</span\n >\n <span [innerHTML]=\"slideInstance.node.label | transloco\"></span>\n </h2>\n <mat-icon class=\"ajf-warning\" *ngIf=\"!slideInstance.valid\"\n >warning</mat-icon\n >\n <mat-icon class=\"ajf-success\" *ngIf=\"slideInstance.valid\"\n >check</mat-icon\n >\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-template\n ngFor\n let-fieldInstance\n [ngForOf]=\"slideInstance.flatNodes\"\n [ngForTrackBy]=\"trackNodeById\"\n >\n <mat-card\n appearance=\"outlined\"\n [ngClass]=\"'ajf-' + (fieldInstance|ajfAsFieldInstance).node.size +\n ' ajf-max-columns-' + maxColumns +\n (centeredFieldsContent ? ' ajf-centered-field' : '')\"\n class=\"ajf-field-entry\"\n *ngIf=\"fieldInstance.visible\"\n [ngStyle]=\"fieldStyle(fieldInstance|ajfAsFieldInstance)\"\n >\n <i\n [class]=\"(fieldInstance|ajfAsFieldInstance).node.fieldType | ajfFieldIcon\"\n item-right\n ></i>\n <p>\n {{ ((fieldInstance|ajfAsFieldInstance).node.description || '') |\n transloco }}\n </p>\n\n <mat-card-header>\n <mat-card-title>\n <label\n [attr.id]=\"fieldInstance.node.name\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node.fieldType !== 7\"\n [innerHTML]=\"fieldInstance.node.label | transloco\"\n ></label>\n </mat-card-title>\n <mat-icon\n class=\"ajf-tooltip-icon\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node?.hint as hint\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"right\"\n >\n {{(fieldInstance|ajfAsFieldInstance).node.hintIcon ||\n 'help'}}</mat-icon\n ></mat-card-header\n >\n <mat-card-content>\n <ajf-field\n [instance]=\"fieldInstance|ajfAsFieldInstance\"\n [readonly]=\"readonly || !slideInstance.editable\"\n [id]=\"'field_entry_' + fieldInstance.node.id\"\n >\n </ajf-field>\n </mat-card-content>\n <mat-card-actions\n [ngClass]=\"(fieldInstance|ajfAsFieldInstance)?.valid ?\n 'ajf-valid-field'\n : 'ajf-invalid-field'\"\n >\n <ng-container\n *ngIf=\"(fieldInstance|ajfAsFieldInstance)?.valid !== true; else ajfValidFieldTemplate\"\n >\n <span class=\"ajf-field-error-message\"\n >{{(fieldInstance|ajfAsFieldInstanceErrors|transloco)}}</span\n >\n <mat-icon class=\"ajf-warning\">warning</mat-icon>\n </ng-container>\n <ng-template #ajfValidFieldTemplate>\n <mat-icon class=\"ajf-success\">check</mat-icon>\n </ng-template>\n </mat-card-actions>\n </mat-card>\n </ng-template>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n <!-- repeating slides -->\n <ng-container *ngIf=\"(slideInstance|ajfIsRepeatingSlideInstance)\">\n <ajf-page-slider-item\n *ngFor=\"let curRep of ((slideInstance|ajfAsRepeatingSlideInstance).reps|ajfRange); let idx = index; let lastSlide = last\"\n [isRepeating]=\"true\"\n [isRepeatingLast]=\"lastSlide\"\n >\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"\n >{{ slideInstance.position|ajfIncrement:idx + (hasStartMessage |\n ajfBoolToInt) }} &rarr;</span\n >\n <span [innerHTML]=\"slideInstance.node.label | transloco\"></span>\n </h2>\n <mat-icon class=\"ajf-warning\" *ngIf=\"!(slideInstance|ajfValidSlide:idx)\"\n >warning</mat-icon\n >\n <mat-icon class=\"ajf-success\" *ngIf=\"(slideInstance|ajfValidSlide:idx)\"\n >check</mat-icon\n >\n </div>\n </mat-card-header>\n <mat-card-content>\n <div *ngIf=\"!readonly\" class=\"ajf-group-actions\">\n <button\n *ngIf=\"lastSlide\"\n (click)=\"addGroup(slideInstance)\"\n [disabled]=\"!(slideInstance|ajfAsRepeatingSlideInstance).canAdd || ((slideInstance|ajfAsRepeatingSlideInstance).node.disableRemoval && !slideInstance.valid)\"\n mat-mini-fab\n >\n <mat-icon>add</mat-icon>\n </button>\n <button\n (click)=\"removeGroup(slideInstance, idx)\"\n [disabled]=\"!(slideInstance|ajfAsRepeatingSlideInstance).canRemove || (slideInstance|ajfAsRepeatingSlideInstance).node.disableRemoval\"\n mat-mini-fab\n >\n <mat-icon>remove</mat-icon>\n </button>\n </div>\n <ng-template\n ngFor\n let-fieldInstance\n [ngForOf]=\"slideInstance.slideNodes[idx]\"\n [ngForTrackBy]=\"trackNodeById\"\n >\n <mat-card\n appearance=\"outlined\"\n [ngClass]=\"'ajf-' + (fieldInstance|ajfAsFieldInstance).node.size +\n ' ajf-max-columns-' + maxColumns +\n (centeredFieldsContent ? ' ajf-centered-field' : '')\"\n class=\"ajf-field-entry\"\n *ngIf=\"fieldInstance.visible\"\n [ngStyle]=\"fieldStyle(fieldInstance|ajfAsFieldInstance)\"\n >\n <i\n [class]=\"(fieldInstance|ajfAsFieldInstance).node.fieldType | ajfFieldIcon\"\n item-right\n ></i>\n <p>\n {{ ((fieldInstance|ajfAsFieldInstance).node.description || '') |\n transloco }}\n </p>\n\n <mat-card-header>\n <mat-card-title>\n <label\n [attr.id]=\"fieldInstance.node.name\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node.fieldType !== 7\"\n [innerHTML]=\"fieldInstance.node.label | transloco\"\n ></label>\n </mat-card-title>\n <mat-icon\n class=\"ajf-tooltip-icon\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node?.hint as hint\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"right\"\n >\n {{(fieldInstance|ajfAsFieldInstance).node.hintIcon ||\n 'help'}}</mat-icon\n ></mat-card-header\n >\n <mat-card-content>\n <ajf-field\n [instance]=\"fieldInstance|ajfAsFieldInstance\"\n [readonly]=\"readonly || !slideInstance.editable\"\n [id]=\"'field_entry_' + fieldInstance.node.id\"\n >\n </ajf-field>\n </mat-card-content>\n <mat-card-actions\n [ngClass]=\"(fieldInstance|ajfAsFieldInstance)?.valid ?\n 'ajf-valid-field'\n : 'ajf-invalid-field'\"\n >\n <ng-container\n *ngIf=\"(fieldInstance|ajfAsFieldInstance)?.valid !== true; else ajfValidFieldTemplate\"\n >\n <span class=\"ajf-field-error-message\"\n >{{(fieldInstance|ajfAsFieldInstanceErrors)}}</span\n >\n <mat-icon class=\"ajf-warning\">warning</mat-icon>\n </ng-container>\n <ng-template #ajfValidFieldTemplate>\n <mat-icon class=\"ajf-success\">check</mat-icon>\n </ng-template>\n </mat-card-actions>\n </mat-card>\n </ng-template>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"curSlides && curSlides!.length > 0 && hasEndMessage\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span *ngIf=\"(slidesNum|async) as snum\" class=\"ajf-form-header-number\">\n {{ snum! + (hasStartMessage | ajfBoolToInt ) + 1 }} &rarr;\n </span>\n <span class=\"ajf-title\">\n <ng-content select=\"[ajfFormEndMessageTitle]\"></ng-content>\n </span>\n </h2>\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-content select=\"[ajfFormEndMessage]\"></ng-content>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n </ng-container>\n <div ajfPageSliderBar *ngIf=\"!hideBottomToolbar\">\n <div class=\"ajf-left-bar\">\n <div class=\"ajf-errors\" *ngIf=\"((errors | async) || 0) > 0\">\n <button mat-button (click)=\"goToPrevError()\" danger>\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button mat-button (click)=\"goToNextError()\" danger>\n <mat-icon>arrow_downward</mat-icon>\n </button>\n </div>\n <div class=\"ajf-info-box ajf-error\">\n <div class=\"ajf-title\">{{'Errors'|transloco}}</div>\n <div class=\"ajf-content\">{{ errors | async }} / {{ slidesNum|async }}</div>\n </div>\n </div>\n </div>\n </ajf-page-slider>\n </div>\n </div>\n </form>\n</ng-container>\n", styles: ["ajf-form{display:block}ajf-form .ajf-form-readonly .ajf-field-entry>label{font-weight:700}ajf-form .ajf-form-container{display:flex;flex-direction:column;position:absolute;inset:0}ajf-form .ajf-form-container mat-toolbar.ajf-hidden{opacity:0}ajf-form .ajf-form-container .ajf-btn-strip .mat-button-toggle-group{overflow-x:auto}ajf-form .ajf-form-container .ajf-topbar-button{font-size:.8em}ajf-form .ajf-form-container mat-icon.ajf-warning{color:#f53d3d}ajf-form .ajf-form-container mat-icon.ajf-success{color:#32db64}ajf-form .ajf-form-container>.ajf-slider-container{flex:1;position:relative}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider{height:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content{padding:16px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page{flex:1;max-height:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card{margin:1em 0 3em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content{display:flex;flex-wrap:wrap;flex-direction:row;align-content:flex-start;position:relative}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content .ajf-group-actions{position:absolute;right:0;top:-30px;padding:15px;z-index:10}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry{padding-right:10px;min-width:350px;display:flex;flex-direction:column;margin:5px;border-left:3px solid;border-radius:5px;min-height:30vh;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-icon{vertical-align:bottom;margin-left:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-1{flex:1 0 100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-2{flex:1 0 45%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-3{flex:1 0 30%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-normal{width:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-small{width:50%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-smaller{width:33%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-tiny{width:25%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-mini{width:20%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions{position:absolute;bottom:0;width:100%;display:flex;justify-content:flex-start;align-items:center;align-content:center;border-bottom-left-radius:5px;border-bottom-right-radius:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-valid-field{background-color:#32db6433}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-invalid-field{background-color:#f53d3d33}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-invalid-field .ajf-field-error-message{margin-left:8px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions .mat-icon{margin-left:auto}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-radio-button,ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry ajf-checkbox-group-item .mat-mdc-button{background-color:inherit!important}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-header{margin-bottom:15px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-header .ajf-tooltip-icon{align-self:center;min-width:24px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content{position:relative;flex:1;flex-flow:row wrap;justify-content:flex-start;align-items:flex-start;padding-top:2%;padding-bottom:10%;overflow-y:auto;max-width:95%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-select{margin:20px 0}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-radio-group{display:flex;flex-flow:column wrap;justify-content:space-between}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-radio-group .mat-mdc-radio-button{flex:1 1 30%;padding:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .ajf-errors .error{display:none}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .mat-mdc-card-content,ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .mat-mdc-card-header{justify-content:center;text-align:center}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .ajf-choices-container .mat-mdc-radio-button{text-align:start}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .ajf-field-range{margin-top:30px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header{display:flex;align-items:center;width:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header>h2{flex:1}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header>h2>.ajf-form-header-number{margin-right:.5em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header h2>.ajf-title{display:inline-block;margin-right:40px;white-space:normal;vertical-align:top}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar{display:flex;align-items:flex-start;flex-direction:row;position:absolute;bottom:0}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-right-button{float:right}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-button-icon-only ion-icon{padding:0 .1em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box{height:40px;padding:4px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box>div{height:16px;line-height:16px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box>div.ajf-content{font-weight:700}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box.ajf-error{order:2;color:red}ajf-form .ajf-form-container .ajf-spacer{flex:1 0 auto}\n"], dependencies: [{ kind: "component", type: i2$a.AjfPageSliderItem, selector: "ajf-page-slider-item", inputs: ["isRepeating", "isRepeatingLast"], outputs: ["scroll"] }, { kind: "component", type: i3$7.AjfPageSlider, selector: "ajf-page-slider" }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "directive", type: i6$1.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6$1.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i3$4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: AjfFormField, selector: "ajf-field,ajf-form-field" }, { kind: "pipe", type: i3$2.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.AjfAsFieldInstancePipe, name: "ajfAsFieldInstance" }, { kind: "pipe", type: i1.AjfAsFieldInstanceErrorsPipe, name: "ajfAsFieldInstanceErrors" }, { kind: "pipe", type: i1.AjfAsRepeatingSlideInstancePipe, name: "ajfAsRepeatingSlideInstance" }, { kind: "pipe", type: i1.AjfBoolToIntPipe, name: "ajfBoolToInt" }, { kind: "pipe", type: i1.AjfFieldIconPipe, name: "ajfFieldIcon" }, { kind: "pipe", type: i1.AjfIncrementPipe, name: "ajfIncrement" }, { kind: "pipe", type: i1.AjfIsRepeatingSlideInstancePipe, name: "ajfIsRepeatingSlideInstance" }, { kind: "pipe", type: i1.AjfRangePipe, name: "ajfRange" }, { kind: "pipe", type: i1.AjfValidSlidePipe, name: "ajfValidSlide" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
893
1011
  }
894
1012
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfFormRenderer, decorators: [{
895
1013
  type: Component,
896
- args: [{ selector: 'ajf-form', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"formGroup|async as fg\">\n <form [class.ajf-form-readonly]=\"readonly\" novalidate [formGroup]=\"fg!\">\n <div class=\"ajf-form-container\">\n <mat-toolbar *ngIf=\"!hideTopToolbar && topBar\" class=\"ajf-btn-strip\">\n <mat-button-toggle-group>\n <ng-container\n *ngFor=\"let slideInstance of (slides|async); let idx = index; trackBy: trackNodeById\"\n >\n <mat-button-toggle\n *ngIf=\"slideInstance.node.label && slideInstance.node.label.length > 0\"\n class=\"ajf-topbar-button\"\n (click)=\"scrollToSlide(slideInstance)\"\n [checked]=\"isSlideToggleChecked(slideInstance, formSlider.currentPage)\"\n [disabled]=\"slideInstance.visible === false\"\n >\n {{slideInstance.node.label | transloco}} {{ getRepeatingSlideRepIndex(slideInstance,\n formSlider.currentPage)|async}}\n <mat-icon\n *ngIf=\"!slideInstance.valid && slideInstance.visible !== false\"\n class=\"ajf-warning\"\n >warning</mat-icon\n >\n <mat-icon\n *ngIf=\"slideInstance.valid && slideInstance.visible !== false\"\n class=\"ajf-success\"\n >check</mat-icon\n >\n </mat-button-toggle>\n </ng-container>\n </mat-button-toggle-group>\n </mat-toolbar>\n <mat-toolbar *ngIf=\"!hideTopToolbar\">\n {{ title }}\n <span class=\"ajf-spacer\"></span>\n <!-- this content projection allow to add buttons on toolbar -->\n <ng-content select=\"[ajfFormTopToolbarButtons]\"></ng-content>\n <!-- apply a default save button only when ajfFormSaveButton is empty -->\n <span *ngIf=\"!saveDisabled\" (click)=\"onSave($event)\">\n <span #saveButton><ng-content select=\"[ajfFormSaveButton]\"></ng-content></span>\n <button\n *ngIf=\"saveButton && saveButton.childNodes && saveButton.childNodes.length === 0\"\n mat-button\n default\n >\n {{'Save'|transloco}}\n </button>\n </span>\n </mat-toolbar>\n <div class=\"ajf-slider-container\">\n <ajf-page-slider\n (orientationChange)=\"orientationChangeHandler($event)\"\n [fixedOrientation]=\"fixedOrientation\"\n [hideNavigationButtons]=\"hideNavigationButtons\"\n [orientation]=\"orientation\"\n #formSlider\n >\n <ng-container *ngIf=\"(slides|async) as curSlides\">\n <ng-container *ngIf=\"curSlides!.length > 0 && hasStartMessage\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"> 1 &rarr; </span>\n <span class=\"ajf-title\">\n <ng-content select=\"[ajfFormStartMessageTitle]\"></ng-content>\n </span>\n </h2>\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-content select=\"[ajfFormStartMessage]\"></ng-content>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n <ng-container *ngFor=\"let slideInstance of curSlides; trackBy:trackNodeById\">\n <!-- non repeating slides -->\n <ng-container *ngIf=\"slideInstance.visible\">\n <ng-container *ngIf=\"!(slideInstance|ajfIsRepeatingSlideInstance)\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"\n >{{ slideInstance.position + (hasStartMessage | ajfBoolToInt) }}\n &rarr;</span\n >\n <span [innerHTML]=\"slideInstance.node.label | transloco\"></span>\n </h2>\n <mat-icon class=\"ajf-warning\" *ngIf=\"!slideInstance.valid\"\n >warning</mat-icon\n >\n <mat-icon class=\"ajf-success\" *ngIf=\"slideInstance.valid\"\n >check</mat-icon\n >\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-template\n ngFor\n let-fieldInstance\n [ngForOf]=\"slideInstance.flatNodes\"\n [ngForTrackBy]=\"trackNodeById\"\n >\n <mat-card\n appearance=\"outlined\"\n [ngClass]=\"'ajf-' + (fieldInstance|ajfAsFieldInstance).node.size +\n ' ajf-max-columns-' + maxColumns +\n (centeredFieldsContent ? ' ajf-centered-field' : '')\"\n class=\"ajf-field-entry\"\n *ngIf=\"fieldInstance.visible\"\n >\n <i\n [class]=\"(fieldInstance|ajfAsFieldInstance).node.fieldType | ajfFieldIcon\"\n item-right\n ></i>\n <p>\n {{ ((fieldInstance|ajfAsFieldInstance).node.description || '') |\n transloco }}\n </p>\n\n <mat-card-header>\n <mat-card-title>\n <label\n [attr.id]=\"fieldInstance.node.name\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node.fieldType !== 7\"\n [innerHTML]=\"fieldInstance.node.label | transloco\"\n ></label>\n </mat-card-title>\n <mat-icon\n class=\"ajf-tooltip-icon\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node?.hint as hint\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"right\"\n >\n {{(fieldInstance|ajfAsFieldInstance).node.hintIcon ||\n 'help'}}</mat-icon\n ></mat-card-header\n >\n <mat-card-content>\n <ajf-field\n [instance]=\"fieldInstance|ajfAsFieldInstance\"\n [readonly]=\"readonly || !slideInstance.editable\"\n [id]=\"'field_entry_' + fieldInstance.node.id\"\n >\n </ajf-field>\n </mat-card-content>\n <mat-card-actions\n [ngClass]=\"(fieldInstance|ajfAsFieldInstance)?.valid ?\n 'ajf-valid-field'\n : 'ajf-invalid-field'\"\n >\n <ng-container\n *ngIf=\"(fieldInstance|ajfAsFieldInstance)?.valid !== true; else ajfValidFieldTemplate\"\n >\n <span class=\"ajf-field-error-message\"\n >{{(fieldInstance|ajfAsFieldInstanceErrors|transloco)}}</span\n >\n <mat-icon class=\"ajf-warning\">warning</mat-icon>\n </ng-container>\n <ng-template #ajfValidFieldTemplate>\n <mat-icon class=\"ajf-success\">check</mat-icon>\n </ng-template>\n </mat-card-actions>\n </mat-card>\n </ng-template>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n <!-- repeating slides -->\n <ng-container *ngIf=\"(slideInstance|ajfIsRepeatingSlideInstance)\">\n <ajf-page-slider-item\n *ngFor=\"let curRep of ((slideInstance|ajfAsRepeatingSlideInstance).reps|ajfRange); let idx = index; let lastSlide = last\"\n [isRepeating]=\"true\"\n [isRepeatingLast]=\"lastSlide\"\n >\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"\n >{{ slideInstance.position|ajfIncrement:idx + (hasStartMessage |\n ajfBoolToInt) }} &rarr;</span\n >\n <span [innerHTML]=\"slideInstance.node.label | transloco\"></span>\n </h2>\n <mat-icon class=\"ajf-warning\" *ngIf=\"!(slideInstance|ajfValidSlide:idx)\"\n >warning</mat-icon\n >\n <mat-icon class=\"ajf-success\" *ngIf=\"(slideInstance|ajfValidSlide:idx)\"\n >check</mat-icon\n >\n </div>\n </mat-card-header>\n <mat-card-content>\n <div *ngIf=\"!readonly\" class=\"ajf-group-actions\">\n <button\n *ngIf=\"lastSlide\"\n (click)=\"addGroup(slideInstance)\"\n [disabled]=\"!(slideInstance|ajfAsRepeatingSlideInstance).canAdd || ((slideInstance|ajfAsRepeatingSlideInstance).node.disableRemoval && !slideInstance.valid)\"\n mat-mini-fab\n >\n <mat-icon>add</mat-icon>\n </button>\n <button\n (click)=\"removeGroup(slideInstance, idx)\"\n [disabled]=\"!(slideInstance|ajfAsRepeatingSlideInstance).canRemove || (slideInstance|ajfAsRepeatingSlideInstance).node.disableRemoval\"\n mat-mini-fab\n >\n <mat-icon>remove</mat-icon>\n </button>\n </div>\n <ng-template\n ngFor\n let-fieldInstance\n [ngForOf]=\"slideInstance.slideNodes[idx]\"\n [ngForTrackBy]=\"trackNodeById\"\n >\n <mat-card\n appearance=\"outlined\"\n [ngClass]=\"'ajf-' + (fieldInstance|ajfAsFieldInstance).node.size +\n ' ajf-max-columns-' + maxColumns +\n (centeredFieldsContent ? ' ajf-centered-field' : '')\"\n class=\"ajf-field-entry\"\n *ngIf=\"fieldInstance.visible\"\n >\n <i\n [class]=\"(fieldInstance|ajfAsFieldInstance).node.fieldType | ajfFieldIcon\"\n item-right\n ></i>\n <p>\n {{ ((fieldInstance|ajfAsFieldInstance).node.description || '') |\n transloco }}\n </p>\n\n <mat-card-header>\n <mat-card-title>\n <label\n [attr.id]=\"fieldInstance.node.name\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node.fieldType !== 7\"\n [innerHTML]=\"fieldInstance.node.label | transloco\"\n ></label>\n </mat-card-title>\n <mat-icon\n class=\"ajf-tooltip-icon\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node?.hint as hint\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"right\"\n >\n {{(fieldInstance|ajfAsFieldInstance).node.hintIcon ||\n 'help'}}</mat-icon\n ></mat-card-header\n >\n <mat-card-content>\n <ajf-field\n [instance]=\"fieldInstance|ajfAsFieldInstance\"\n [readonly]=\"readonly || !slideInstance.editable\"\n [id]=\"'field_entry_' + fieldInstance.node.id\"\n >\n </ajf-field>\n </mat-card-content>\n <mat-card-actions\n [ngClass]=\"(fieldInstance|ajfAsFieldInstance)?.valid ?\n 'ajf-valid-field'\n : 'ajf-invalid-field'\"\n >\n <ng-container\n *ngIf=\"(fieldInstance|ajfAsFieldInstance)?.valid !== true; else ajfValidFieldTemplate\"\n >\n <span class=\"ajf-field-error-message\"\n >{{(fieldInstance|ajfAsFieldInstanceErrors)}}</span\n >\n <mat-icon class=\"ajf-warning\">warning</mat-icon>\n </ng-container>\n <ng-template #ajfValidFieldTemplate>\n <mat-icon class=\"ajf-success\">check</mat-icon>\n </ng-template>\n </mat-card-actions>\n </mat-card>\n </ng-template>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"curSlides && curSlides!.length > 0 && hasEndMessage\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span *ngIf=\"(slidesNum|async) as snum\" class=\"ajf-form-header-number\">\n {{ snum! + (hasStartMessage | ajfBoolToInt ) + 1 }} &rarr;\n </span>\n <span class=\"ajf-title\">\n <ng-content select=\"[ajfFormEndMessageTitle]\"></ng-content>\n </span>\n </h2>\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-content select=\"[ajfFormEndMessage]\"></ng-content>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n </ng-container>\n <div ajfPageSliderBar *ngIf=\"!hideBottomToolbar\">\n <div class=\"ajf-left-bar\">\n <div class=\"ajf-errors\" *ngIf=\"((errors | async) || 0) > 0\">\n <button mat-button (click)=\"goToPrevError()\" danger>\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button mat-button (click)=\"goToNextError()\" danger>\n <mat-icon>arrow_downward</mat-icon>\n </button>\n </div>\n <div class=\"ajf-info-box ajf-error\">\n <div class=\"ajf-title\">{{'Errors'|transloco}}</div>\n <div class=\"ajf-content\">{{ errors | async }} / {{ slidesNum|async }}</div>\n </div>\n </div>\n </div>\n </ajf-page-slider>\n </div>\n </div>\n </form>\n</ng-container>\n", styles: ["ajf-form{display:block}ajf-form .ajf-form-readonly .ajf-field-entry>label{font-weight:700}ajf-form .ajf-form-container{display:flex;flex-direction:column;position:absolute;inset:0}ajf-form .ajf-form-container mat-toolbar.ajf-hidden{opacity:0}ajf-form .ajf-form-container .ajf-btn-strip .mat-button-toggle-group{overflow-x:auto}ajf-form .ajf-form-container .ajf-topbar-button{font-size:.8em}ajf-form .ajf-form-container mat-icon.ajf-warning{color:#f53d3d}ajf-form .ajf-form-container mat-icon.ajf-success{color:#32db64}ajf-form .ajf-form-container>.ajf-slider-container{flex:1;position:relative}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider{height:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content{padding:16px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page{flex:1;max-height:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card{margin:1em 0 3em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content{display:flex;flex-wrap:wrap;flex-direction:row;align-content:flex-start;position:relative}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content .ajf-group-actions{position:absolute;right:0;top:-30px;padding:15px;z-index:10}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry{padding-right:10px;min-width:350px;display:flex;flex-direction:column;margin:5px;border-left:3px solid;border-radius:5px;min-height:30vh;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-icon{vertical-align:bottom;margin-left:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-1{flex:1 0 100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-2{flex:1 0 45%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-3{flex:1 0 30%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-normal{width:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-small{width:50%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-smaller{width:33%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-tiny{width:25%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-mini{width:20%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions{position:absolute;bottom:0;width:100%;display:flex;justify-content:flex-start;align-items:center;align-content:center;border-bottom-left-radius:5px;border-bottom-right-radius:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-valid-field{background-color:#32db6433}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-invalid-field{background-color:#f53d3d33}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-invalid-field .ajf-field-error-message{margin-left:8px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions .mat-icon{margin-left:auto}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-radio-button,ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry ajf-checkbox-group-item .mat-mdc-button{background-color:inherit!important}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-header{margin-bottom:15px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-header .ajf-tooltip-icon{align-self:center;min-width:24px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content{position:relative;flex:1;flex-flow:row wrap;justify-content:flex-start;align-items:flex-start;padding-top:2%;padding-bottom:10%;overflow-y:auto;max-width:95%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-select{margin:20px 0}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-radio-group{display:flex;flex-flow:column wrap;justify-content:space-between}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-radio-group .mat-mdc-radio-button{flex:1 1 30%;padding:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .ajf-errors .error{display:none}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .mat-mdc-card-content,ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .mat-mdc-card-header{justify-content:center;text-align:center}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .ajf-choices-container .mat-mdc-radio-button{text-align:start}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .ajf-field-range{margin-top:30px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header{display:flex;align-items:center;width:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header>h2{flex:1}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header>h2>.ajf-form-header-number{margin-right:.5em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header h2>.ajf-title{display:inline-block;margin-right:40px;white-space:normal;vertical-align:top}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar{display:flex;align-items:flex-start;flex-direction:row;position:absolute;bottom:0}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-right-button{float:right}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-button-icon-only ion-icon{padding:0 .1em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box{height:40px;padding:4px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box>div{height:16px;line-height:16px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box>div.ajf-content{font-weight:700}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box.ajf-error{order:2;color:red}ajf-form .ajf-form-container .ajf-spacer{flex:1 0 auto}\n"] }]
1014
+ args: [{ selector: 'ajf-form', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"formGroup|async as fg\">\n <form [class.ajf-form-readonly]=\"readonly\" novalidate [formGroup]=\"fg!\">\n <div class=\"ajf-form-container\">\n <mat-toolbar *ngIf=\"!hideTopToolbar && topBar\" class=\"ajf-btn-strip\">\n <mat-button-toggle-group>\n <ng-container\n *ngFor=\"let slideInstance of (slides|async); let idx = index; trackBy: trackNodeById\"\n >\n <mat-button-toggle\n *ngIf=\"slideInstance.node.label && slideInstance.node.label.length > 0\"\n class=\"ajf-topbar-button\"\n (click)=\"scrollToSlide(slideInstance)\"\n [checked]=\"isSlideToggleChecked(slideInstance, formSlider.currentPage)\"\n [disabled]=\"slideInstance.visible === false\"\n >\n {{slideInstance.node.label | transloco}} {{ getRepeatingSlideRepIndex(slideInstance,\n formSlider.currentPage)|async}}\n <mat-icon\n *ngIf=\"!slideInstance.valid && slideInstance.visible !== false\"\n class=\"ajf-warning\"\n >warning</mat-icon\n >\n <mat-icon\n *ngIf=\"slideInstance.valid && slideInstance.visible !== false\"\n class=\"ajf-success\"\n >check</mat-icon\n >\n </mat-button-toggle>\n </ng-container>\n </mat-button-toggle-group>\n </mat-toolbar>\n <mat-toolbar *ngIf=\"!hideTopToolbar\">\n {{ title }}\n <span class=\"ajf-spacer\"></span>\n <!-- this content projection allow to add buttons on toolbar -->\n <ng-content select=\"[ajfFormTopToolbarButtons]\"></ng-content>\n <!-- apply a default save button only when ajfFormSaveButton is empty -->\n <span *ngIf=\"!saveDisabled\" (click)=\"onSave($event)\">\n <span #saveButton><ng-content select=\"[ajfFormSaveButton]\"></ng-content></span>\n <button\n *ngIf=\"saveButton && saveButton.childNodes && saveButton.childNodes.length === 0\"\n mat-button\n default\n >\n {{'Save'|transloco}}\n </button>\n </span>\n </mat-toolbar>\n <div class=\"ajf-slider-container\">\n <ajf-page-slider\n (orientationChange)=\"orientationChangeHandler($event)\"\n [fixedOrientation]=\"fixedOrientation\"\n [hideNavigationButtons]=\"hideNavigationButtons\"\n [orientation]=\"orientation\"\n #formSlider\n >\n <ng-container *ngIf=\"(slides|async) as curSlides\">\n <ng-container *ngIf=\"curSlides!.length > 0 && hasStartMessage\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"> 1 &rarr; </span>\n <span class=\"ajf-title\">\n <ng-content select=\"[ajfFormStartMessageTitle]\"></ng-content>\n </span>\n </h2>\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-content select=\"[ajfFormStartMessage]\"></ng-content>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n <ng-container *ngFor=\"let slideInstance of curSlides; trackBy:trackNodeById\">\n <!-- non repeating slides -->\n <ng-container *ngIf=\"slideInstance.visible\">\n <ng-container *ngIf=\"!(slideInstance|ajfIsRepeatingSlideInstance)\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"\n >{{ slideInstance.position + (hasStartMessage | ajfBoolToInt) }}\n &rarr;</span\n >\n <span [innerHTML]=\"slideInstance.node.label | transloco\"></span>\n </h2>\n <mat-icon class=\"ajf-warning\" *ngIf=\"!slideInstance.valid\"\n >warning</mat-icon\n >\n <mat-icon class=\"ajf-success\" *ngIf=\"slideInstance.valid\"\n >check</mat-icon\n >\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-template\n ngFor\n let-fieldInstance\n [ngForOf]=\"slideInstance.flatNodes\"\n [ngForTrackBy]=\"trackNodeById\"\n >\n <mat-card\n appearance=\"outlined\"\n [ngClass]=\"'ajf-' + (fieldInstance|ajfAsFieldInstance).node.size +\n ' ajf-max-columns-' + maxColumns +\n (centeredFieldsContent ? ' ajf-centered-field' : '')\"\n class=\"ajf-field-entry\"\n *ngIf=\"fieldInstance.visible\"\n [ngStyle]=\"fieldStyle(fieldInstance|ajfAsFieldInstance)\"\n >\n <i\n [class]=\"(fieldInstance|ajfAsFieldInstance).node.fieldType | ajfFieldIcon\"\n item-right\n ></i>\n <p>\n {{ ((fieldInstance|ajfAsFieldInstance).node.description || '') |\n transloco }}\n </p>\n\n <mat-card-header>\n <mat-card-title>\n <label\n [attr.id]=\"fieldInstance.node.name\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node.fieldType !== 7\"\n [innerHTML]=\"fieldInstance.node.label | transloco\"\n ></label>\n </mat-card-title>\n <mat-icon\n class=\"ajf-tooltip-icon\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node?.hint as hint\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"right\"\n >\n {{(fieldInstance|ajfAsFieldInstance).node.hintIcon ||\n 'help'}}</mat-icon\n ></mat-card-header\n >\n <mat-card-content>\n <ajf-field\n [instance]=\"fieldInstance|ajfAsFieldInstance\"\n [readonly]=\"readonly || !slideInstance.editable\"\n [id]=\"'field_entry_' + fieldInstance.node.id\"\n >\n </ajf-field>\n </mat-card-content>\n <mat-card-actions\n [ngClass]=\"(fieldInstance|ajfAsFieldInstance)?.valid ?\n 'ajf-valid-field'\n : 'ajf-invalid-field'\"\n >\n <ng-container\n *ngIf=\"(fieldInstance|ajfAsFieldInstance)?.valid !== true; else ajfValidFieldTemplate\"\n >\n <span class=\"ajf-field-error-message\"\n >{{(fieldInstance|ajfAsFieldInstanceErrors|transloco)}}</span\n >\n <mat-icon class=\"ajf-warning\">warning</mat-icon>\n </ng-container>\n <ng-template #ajfValidFieldTemplate>\n <mat-icon class=\"ajf-success\">check</mat-icon>\n </ng-template>\n </mat-card-actions>\n </mat-card>\n </ng-template>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n <!-- repeating slides -->\n <ng-container *ngIf=\"(slideInstance|ajfIsRepeatingSlideInstance)\">\n <ajf-page-slider-item\n *ngFor=\"let curRep of ((slideInstance|ajfAsRepeatingSlideInstance).reps|ajfRange); let idx = index; let lastSlide = last\"\n [isRepeating]=\"true\"\n [isRepeatingLast]=\"lastSlide\"\n >\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span class=\"ajf-form-header-number\"\n >{{ slideInstance.position|ajfIncrement:idx + (hasStartMessage |\n ajfBoolToInt) }} &rarr;</span\n >\n <span [innerHTML]=\"slideInstance.node.label | transloco\"></span>\n </h2>\n <mat-icon class=\"ajf-warning\" *ngIf=\"!(slideInstance|ajfValidSlide:idx)\"\n >warning</mat-icon\n >\n <mat-icon class=\"ajf-success\" *ngIf=\"(slideInstance|ajfValidSlide:idx)\"\n >check</mat-icon\n >\n </div>\n </mat-card-header>\n <mat-card-content>\n <div *ngIf=\"!readonly\" class=\"ajf-group-actions\">\n <button\n *ngIf=\"lastSlide\"\n (click)=\"addGroup(slideInstance)\"\n [disabled]=\"!(slideInstance|ajfAsRepeatingSlideInstance).canAdd || ((slideInstance|ajfAsRepeatingSlideInstance).node.disableRemoval && !slideInstance.valid)\"\n mat-mini-fab\n >\n <mat-icon>add</mat-icon>\n </button>\n <button\n (click)=\"removeGroup(slideInstance, idx)\"\n [disabled]=\"!(slideInstance|ajfAsRepeatingSlideInstance).canRemove || (slideInstance|ajfAsRepeatingSlideInstance).node.disableRemoval\"\n mat-mini-fab\n >\n <mat-icon>remove</mat-icon>\n </button>\n </div>\n <ng-template\n ngFor\n let-fieldInstance\n [ngForOf]=\"slideInstance.slideNodes[idx]\"\n [ngForTrackBy]=\"trackNodeById\"\n >\n <mat-card\n appearance=\"outlined\"\n [ngClass]=\"'ajf-' + (fieldInstance|ajfAsFieldInstance).node.size +\n ' ajf-max-columns-' + maxColumns +\n (centeredFieldsContent ? ' ajf-centered-field' : '')\"\n class=\"ajf-field-entry\"\n *ngIf=\"fieldInstance.visible\"\n [ngStyle]=\"fieldStyle(fieldInstance|ajfAsFieldInstance)\"\n >\n <i\n [class]=\"(fieldInstance|ajfAsFieldInstance).node.fieldType | ajfFieldIcon\"\n item-right\n ></i>\n <p>\n {{ ((fieldInstance|ajfAsFieldInstance).node.description || '') |\n transloco }}\n </p>\n\n <mat-card-header>\n <mat-card-title>\n <label\n [attr.id]=\"fieldInstance.node.name\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node.fieldType !== 7\"\n [innerHTML]=\"fieldInstance.node.label | transloco\"\n ></label>\n </mat-card-title>\n <mat-icon\n class=\"ajf-tooltip-icon\"\n *ngIf=\"(fieldInstance|ajfAsFieldInstance).node?.hint as hint\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"right\"\n >\n {{(fieldInstance|ajfAsFieldInstance).node.hintIcon ||\n 'help'}}</mat-icon\n ></mat-card-header\n >\n <mat-card-content>\n <ajf-field\n [instance]=\"fieldInstance|ajfAsFieldInstance\"\n [readonly]=\"readonly || !slideInstance.editable\"\n [id]=\"'field_entry_' + fieldInstance.node.id\"\n >\n </ajf-field>\n </mat-card-content>\n <mat-card-actions\n [ngClass]=\"(fieldInstance|ajfAsFieldInstance)?.valid ?\n 'ajf-valid-field'\n : 'ajf-invalid-field'\"\n >\n <ng-container\n *ngIf=\"(fieldInstance|ajfAsFieldInstance)?.valid !== true; else ajfValidFieldTemplate\"\n >\n <span class=\"ajf-field-error-message\"\n >{{(fieldInstance|ajfAsFieldInstanceErrors)}}</span\n >\n <mat-icon class=\"ajf-warning\">warning</mat-icon>\n </ng-container>\n <ng-template #ajfValidFieldTemplate>\n <mat-icon class=\"ajf-success\">check</mat-icon>\n </ng-template>\n </mat-card-actions>\n </mat-card>\n </ng-template>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"curSlides && curSlides!.length > 0 && hasEndMessage\">\n <ajf-page-slider-item>\n <div class=\"ajf-form-page\">\n <mat-card appearance=\"outlined\">\n <mat-card-header>\n <div class=\"ajf-page-slider-item-header\">\n <h2>\n <span *ngIf=\"(slidesNum|async) as snum\" class=\"ajf-form-header-number\">\n {{ snum! + (hasStartMessage | ajfBoolToInt ) + 1 }} &rarr;\n </span>\n <span class=\"ajf-title\">\n <ng-content select=\"[ajfFormEndMessageTitle]\"></ng-content>\n </span>\n </h2>\n </div>\n </mat-card-header>\n <mat-card-content>\n <ng-content select=\"[ajfFormEndMessage]\"></ng-content>\n </mat-card-content>\n </mat-card>\n </div>\n </ajf-page-slider-item>\n </ng-container>\n </ng-container>\n <div ajfPageSliderBar *ngIf=\"!hideBottomToolbar\">\n <div class=\"ajf-left-bar\">\n <div class=\"ajf-errors\" *ngIf=\"((errors | async) || 0) > 0\">\n <button mat-button (click)=\"goToPrevError()\" danger>\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button mat-button (click)=\"goToNextError()\" danger>\n <mat-icon>arrow_downward</mat-icon>\n </button>\n </div>\n <div class=\"ajf-info-box ajf-error\">\n <div class=\"ajf-title\">{{'Errors'|transloco}}</div>\n <div class=\"ajf-content\">{{ errors | async }} / {{ slidesNum|async }}</div>\n </div>\n </div>\n </div>\n </ajf-page-slider>\n </div>\n </div>\n </form>\n</ng-container>\n", styles: ["ajf-form{display:block}ajf-form .ajf-form-readonly .ajf-field-entry>label{font-weight:700}ajf-form .ajf-form-container{display:flex;flex-direction:column;position:absolute;inset:0}ajf-form .ajf-form-container mat-toolbar.ajf-hidden{opacity:0}ajf-form .ajf-form-container .ajf-btn-strip .mat-button-toggle-group{overflow-x:auto}ajf-form .ajf-form-container .ajf-topbar-button{font-size:.8em}ajf-form .ajf-form-container mat-icon.ajf-warning{color:#f53d3d}ajf-form .ajf-form-container mat-icon.ajf-success{color:#32db64}ajf-form .ajf-form-container>.ajf-slider-container{flex:1;position:relative}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider{height:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content{padding:16px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page{flex:1;max-height:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card{margin:1em 0 3em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content{display:flex;flex-wrap:wrap;flex-direction:row;align-content:flex-start;position:relative}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content .ajf-group-actions{position:absolute;right:0;top:-30px;padding:15px;z-index:10}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry{padding-right:10px;min-width:350px;display:flex;flex-direction:column;margin:5px;border-left:3px solid;border-radius:5px;min-height:30vh;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-icon{vertical-align:bottom;margin-left:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-1{flex:1 0 100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-2{flex:1 0 45%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-max-columns-3{flex:1 0 30%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-normal{width:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-small{width:50%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-smaller{width:33%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-tiny{width:25%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-mini{width:20%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions{position:absolute;bottom:0;width:100%;display:flex;justify-content:flex-start;align-items:center;align-content:center;border-bottom-left-radius:5px;border-bottom-right-radius:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-valid-field{background-color:#32db6433}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-invalid-field{background-color:#f53d3d33}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions.ajf-invalid-field .ajf-field-error-message{margin-left:8px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-actions .mat-icon{margin-left:auto}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-radio-button,ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry ajf-checkbox-group-item .mat-mdc-button{background-color:inherit!important}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-header{margin-bottom:15px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-header .ajf-tooltip-icon{align-self:center;min-width:24px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content{position:relative;flex:1;flex-flow:row wrap;justify-content:flex-start;align-items:flex-start;padding-top:2%;padding-bottom:10%;overflow-y:auto;max-width:95%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-select{margin:20px 0}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-radio-group{display:flex;flex-flow:column wrap;justify-content:space-between}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .mat-mdc-radio-group .mat-mdc-radio-button{flex:1 1 30%;padding:5px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .mat-mdc-card-content .ajf-errors .error{display:none}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .mat-mdc-card-content,ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .mat-mdc-card-header{justify-content:center;text-align:center}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry.ajf-centered-field .ajf-choices-container .mat-mdc-radio-button{text-align:start}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider ajf-page-slider-item .ajf-page-slider-item-content .ajf-form-page>mat-card>mat-card-content>.ajf-field-entry .ajf-field-range{margin-top:30px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header{display:flex;align-items:center;width:100%}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header>h2{flex:1}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header>h2>.ajf-form-header-number{margin-right:.5em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider .ajf-page-slider-item-header h2>.ajf-title{display:inline-block;margin-right:40px;white-space:normal;vertical-align:top}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar{display:flex;align-items:flex-start;flex-direction:row;position:absolute;bottom:0}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-right-button{float:right}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-button-icon-only ion-icon{padding:0 .1em}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box{height:40px;padding:4px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box>div{height:16px;line-height:16px}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box>div.ajf-content{font-weight:700}ajf-form .ajf-form-container>.ajf-slider-container>ajf-page-slider [ajfPageSliderBar] .ajf-left-bar .ajf-info-box.ajf-error{order:2;color:red}ajf-form .ajf-form-container .ajf-spacer{flex:1 0 auto}\n"] }]
897
1015
  }], ctorParameters: () => [{ type: i1.AjfFormRendererService }, { type: i0.ChangeDetectorRef }], propDecorators: { topBar: [{
898
1016
  type: Input
899
1017
  }], centeredFieldsContent: [{
@@ -931,7 +1049,8 @@ class AjfFormsModule {
931
1049
  };
932
1050
  }
933
1051
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
934
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AjfFormsModule, declarations: [AjfBarcodeFieldComponent,
1052
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AjfFormsModule, declarations: [AjfAudioFieldComponent,
1053
+ AjfBarcodeFieldComponent,
935
1054
  AjfBooleanFieldComponent,
936
1055
  AjfDateFieldComponent,
937
1056
  AjfDateInputFieldComponent,
@@ -948,7 +1067,9 @@ class AjfFormsModule {
948
1067
  AjfTableFieldComponent,
949
1068
  AjfTextFieldComponent,
950
1069
  AjfTimeFieldComponent,
951
- AjfVideoUrlFieldComponent], imports: [AjfBarcodeModule,
1070
+ AjfVideoUrlFieldComponent,
1071
+ AjfDisplayFieldComponent], imports: [AjfAudioModule,
1072
+ AjfBarcodeModule,
952
1073
  AjfCalendarModule,
953
1074
  AjfCommonModule,
954
1075
  AjfCheckboxGroupModule,
@@ -976,11 +1097,12 @@ class AjfFormsModule {
976
1097
  ReactiveFormsModule,
977
1098
  TextFieldModule,
978
1099
  MatSliderModule,
979
- NgxMatSelectSearchModule], exports: [AjfFormField, AjfFormRenderer] }); }
1100
+ NgxMatSelectSearchModule, i4$3.QuillModule], exports: [AjfFormField, AjfFormRenderer] }); }
980
1101
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfFormsModule, providers: [
981
1102
  AjfFieldService,
982
1103
  { provide: AJF_WARNING_ALERT_SERVICE, useClass: AjfWarningAlertService },
983
- ], imports: [AjfBarcodeModule,
1104
+ ], imports: [AjfAudioModule,
1105
+ AjfBarcodeModule,
984
1106
  AjfCalendarModule,
985
1107
  AjfCommonModule,
986
1108
  AjfCheckboxGroupModule,
@@ -1008,12 +1130,14 @@ class AjfFormsModule {
1008
1130
  ReactiveFormsModule,
1009
1131
  TextFieldModule,
1010
1132
  MatSliderModule,
1011
- NgxMatSelectSearchModule] }); }
1133
+ NgxMatSelectSearchModule,
1134
+ QuillModule.forRoot()] }); }
1012
1135
  }
1013
1136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfFormsModule, decorators: [{
1014
1137
  type: NgModule,
1015
1138
  args: [{
1016
1139
  imports: [
1140
+ AjfAudioModule,
1017
1141
  AjfBarcodeModule,
1018
1142
  AjfCalendarModule,
1019
1143
  AjfCommonModule,
@@ -1043,8 +1167,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1043
1167
  TextFieldModule,
1044
1168
  MatSliderModule,
1045
1169
  NgxMatSelectSearchModule,
1170
+ QuillModule.forRoot(),
1046
1171
  ],
1047
1172
  declarations: [
1173
+ AjfAudioFieldComponent,
1048
1174
  AjfBarcodeFieldComponent,
1049
1175
  AjfBooleanFieldComponent,
1050
1176
  AjfDateFieldComponent,
@@ -1063,6 +1189,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1063
1189
  AjfTextFieldComponent,
1064
1190
  AjfTimeFieldComponent,
1065
1191
  AjfVideoUrlFieldComponent,
1192
+ AjfDisplayFieldComponent,
1066
1193
  ],
1067
1194
  exports: [AjfFormField, AjfFormRenderer],
1068
1195
  providers: [