@ajf/material 18.4.1 → 18.5.1

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 (76) hide show
  1. package/README.md +167 -2
  2. package/audio/src/audio-module.d.ts +7 -6
  3. package/esm2022/audio/src/audio-module.mjs +22 -4
  4. package/esm2022/audio/src/audio.mjs +6 -6
  5. package/esm2022/barcode/barcode.mjs +3 -3
  6. package/esm2022/calendar/calendar.mjs +2 -2
  7. package/esm2022/checkbox-group/checkbox-group-item.mjs +3 -3
  8. package/esm2022/form-builder/form-builder-service.mjs +121 -32
  9. package/esm2022/form-builder/form-builder-utils.mjs +25 -1
  10. package/esm2022/form-builder/node-entry.mjs +18 -4
  11. package/esm2022/form-builder/node-properties.mjs +11 -17
  12. package/esm2022/forms/boolean-field.mjs +6 -5
  13. package/esm2022/forms/current-slide.mjs +92 -0
  14. package/esm2022/forms/date-input-field.mjs +7 -9
  15. package/esm2022/forms/display-field.mjs +2 -2
  16. package/esm2022/forms/empty-field.mjs +3 -3
  17. package/esm2022/forms/field-row.mjs +117 -0
  18. package/esm2022/forms/field.mjs +2 -2
  19. package/esm2022/forms/form.mjs +107 -13
  20. package/esm2022/forms/forms-module.mjs +26 -3
  21. package/esm2022/forms/input-field.mjs +6 -8
  22. package/esm2022/forms/multiple-choice-field.mjs +45 -10
  23. package/esm2022/forms/public_api.mjs +6 -1
  24. package/esm2022/forms/range-field.mjs +5 -6
  25. package/esm2022/forms/rep-strip.mjs +61 -0
  26. package/esm2022/forms/single-choice-field.mjs +26 -11
  27. package/esm2022/forms/slide-header.mjs +68 -0
  28. package/esm2022/forms/slide-stats.mjs +148 -0
  29. package/esm2022/forms/table-field.mjs +2 -2
  30. package/esm2022/forms/text-field.mjs +2 -2
  31. package/esm2022/forms/video-url-field.mjs +6 -8
  32. package/esm2022/geolocation/geolocation.mjs +4 -6
  33. package/esm2022/node-icon/node-icon.mjs +4 -1
  34. package/esm2022/page-slider/page-slider.mjs +3 -3
  35. package/esm2022/signature/signature.mjs +5 -6
  36. package/esm2022/time/time-module.mjs +22 -4
  37. package/esm2022/time/time.mjs +4 -4
  38. package/fesm2022/ajf-material-audio.mjs +27 -9
  39. package/fesm2022/ajf-material-audio.mjs.map +1 -1
  40. package/fesm2022/ajf-material-barcode.mjs +2 -2
  41. package/fesm2022/ajf-material-barcode.mjs.map +1 -1
  42. package/fesm2022/ajf-material-calendar.mjs +2 -2
  43. package/fesm2022/ajf-material-calendar.mjs.map +1 -1
  44. package/fesm2022/ajf-material-checkbox-group.mjs +2 -2
  45. package/fesm2022/ajf-material-checkbox-group.mjs.map +1 -1
  46. package/fesm2022/ajf-material-form-builder.mjs +168 -49
  47. package/fesm2022/ajf-material-form-builder.mjs.map +1 -1
  48. package/fesm2022/ajf-material-forms.mjs +712 -99
  49. package/fesm2022/ajf-material-forms.mjs.map +1 -1
  50. package/fesm2022/ajf-material-geolocation.mjs +5 -7
  51. package/fesm2022/ajf-material-geolocation.mjs.map +1 -1
  52. package/fesm2022/ajf-material-node-icon.mjs +3 -0
  53. package/fesm2022/ajf-material-node-icon.mjs.map +1 -1
  54. package/fesm2022/ajf-material-page-slider.mjs +2 -2
  55. package/fesm2022/ajf-material-page-slider.mjs.map +1 -1
  56. package/fesm2022/ajf-material-signature.mjs +7 -8
  57. package/fesm2022/ajf-material-signature.mjs.map +1 -1
  58. package/fesm2022/ajf-material-time.mjs +24 -6
  59. package/fesm2022/ajf-material-time.mjs.map +1 -1
  60. package/form-builder/form-builder-service.d.ts +23 -0
  61. package/form-builder/form-builder-utils.d.ts +8 -0
  62. package/form-builder/node-entry.d.ts +10 -0
  63. package/form-builder/node-properties.d.ts +5 -1
  64. package/forms/_theming.scss +142 -0
  65. package/forms/current-slide.d.ts +61 -0
  66. package/forms/field-row.d.ts +63 -0
  67. package/forms/form.d.ts +40 -3
  68. package/forms/forms-module.d.ts +57 -51
  69. package/forms/multiple-choice-field.d.ts +15 -1
  70. package/forms/public_api.d.ts +5 -0
  71. package/forms/rep-strip.d.ts +52 -0
  72. package/forms/single-choice-field.d.ts +7 -0
  73. package/forms/slide-header.d.ts +61 -0
  74. package/forms/slide-stats.d.ts +76 -0
  75. package/package.json +2 -2
  76. package/time/time-module.d.ts +4 -3
@@ -0,0 +1,61 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/material/icon";
6
+ import * as i3 from "@ngneat/transloco";
7
+ import * as i4 from "@ajf/core/forms";
8
+ /**
9
+ * The pager for a repeating slide: one button per repetition plus add and remove
10
+ * actions. The renderer keeps one page per repetition, so picking a number here
11
+ * is a page change, which the renderer performs.
12
+ */
13
+ export class AjfRepStrip {
14
+ constructor() {
15
+ /** The repetition currently on screen, zero based. */
16
+ this.current = 0;
17
+ this._readonly = false;
18
+ this.goTo = new EventEmitter();
19
+ this.add = new EventEmitter();
20
+ this.remove = new EventEmitter();
21
+ }
22
+ set readonly(readonly) {
23
+ this._readonly = coerceBooleanProperty(readonly);
24
+ }
25
+ get readonly() {
26
+ return this._readonly;
27
+ }
28
+ /**
29
+ * A repetition count driven by a formula is not the reader's to change:
30
+ * `AjfFormRendererService.addGroup` and `removeGroup` both refuse the call
31
+ * outright, so without this the buttons would sit enabled and do nothing.
32
+ */
33
+ get manualReps() {
34
+ return this.slide.formulaReps == null;
35
+ }
36
+ get canAdd() {
37
+ return this.manualReps && !!this.slide.canAdd;
38
+ }
39
+ get canRemove() {
40
+ return this.manualReps && !!this.slide.canRemove;
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfRepStrip, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
43
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfRepStrip, selector: "ajf-rep-strip", inputs: { slide: "slide", current: "current", readonly: "readonly" }, outputs: { goTo: "goTo", add: "add", remove: "remove" }, ngImport: i0, template: "<div class=\"ajf-rep-strip\">\n <span class=\"ajf-micro-label ajf-rep-strip-label\"\n >{{ 'Number of' | transloco }} {{ slide.node.label | transloco }}</span\n >\n\n <div class=\"ajf-rep-pager\">\n <button\n type=\"button\"\n class=\"ajf-btn\"\n [disabled]=\"current === 0\"\n (click)=\"goTo.emit(current - 1)\"\n [attr.aria-label]=\"'Back' | transloco\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"ajf-btn ajf-rep-page\"\n *ngFor=\"let rep of (slide.reps | ajfRange); let idx = index\"\n [class.ajf-selected]=\"idx === current\"\n (click)=\"goTo.emit(idx)\"\n >\n {{ idx + 1 }}\n </button>\n <button\n type=\"button\"\n class=\"ajf-btn\"\n [disabled]=\"current >= slide.reps - 1\"\n (click)=\"goTo.emit(current + 1)\"\n [attr.aria-label]=\"'Forward' | transloco\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <ng-container *ngIf=\"!readonly\">\n <button\n type=\"button\"\n class=\"ajf-btn\"\n [disabled]=\"!canAdd\"\n (click)=\"add.emit()\"\n [attr.aria-label]=\"'Add' | transloco\"\n >\n <mat-icon>add</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"ajf-btn\"\n [disabled]=\"!canRemove\"\n (click)=\"remove.emit()\"\n [attr.aria-label]=\"'Remove' | transloco\"\n >\n <mat-icon>remove</mat-icon>\n </button>\n </ng-container>\n </div>\n\n <span class=\"ajf-rep-strip-context\">\n <span [innerHTML]=\"slide.node.label | transloco\"></span>\n {{ current + 1 }} {{ 'of' | transloco }} {{ slide.reps }}\n </span>\n</div>\n", styles: ["ajf-rep-strip{display:block}ajf-rep-strip .ajf-rep-strip{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 20px;border-bottom:1px solid var(--ajf-border);background:var(--ajf-band);font-family:var(--ajf-font-sans)}ajf-rep-strip .ajf-rep-strip-label{flex:0 0 auto}ajf-rep-strip .ajf-rep-pager{display:flex;flex-wrap:wrap;gap:6px}ajf-rep-strip .ajf-rep-pager .ajf-btn{min-width:32px;min-height:32px;padding:0 6px;font-size:13px}ajf-rep-strip .ajf-rep-pager .ajf-btn .mat-icon{width:18px;height:18px;font-size:18px}ajf-rep-strip .ajf-rep-pager .ajf-rep-page.ajf-selected{border-color:var(--ajf-accent);background:var(--ajf-accent);color:var(--ajf-accent-fg)}ajf-rep-strip .ajf-rep-strip-context{margin-left:auto;color:var(--ajf-text-muted);font-size:13px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i3.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i4.AjfRangePipe, name: "ajfRange" }], encapsulation: i0.ViewEncapsulation.None }); }
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfRepStrip, decorators: [{
46
+ type: Component,
47
+ args: [{ selector: 'ajf-rep-strip', encapsulation: ViewEncapsulation.None, template: "<div class=\"ajf-rep-strip\">\n <span class=\"ajf-micro-label ajf-rep-strip-label\"\n >{{ 'Number of' | transloco }} {{ slide.node.label | transloco }}</span\n >\n\n <div class=\"ajf-rep-pager\">\n <button\n type=\"button\"\n class=\"ajf-btn\"\n [disabled]=\"current === 0\"\n (click)=\"goTo.emit(current - 1)\"\n [attr.aria-label]=\"'Back' | transloco\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"ajf-btn ajf-rep-page\"\n *ngFor=\"let rep of (slide.reps | ajfRange); let idx = index\"\n [class.ajf-selected]=\"idx === current\"\n (click)=\"goTo.emit(idx)\"\n >\n {{ idx + 1 }}\n </button>\n <button\n type=\"button\"\n class=\"ajf-btn\"\n [disabled]=\"current >= slide.reps - 1\"\n (click)=\"goTo.emit(current + 1)\"\n [attr.aria-label]=\"'Forward' | transloco\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <ng-container *ngIf=\"!readonly\">\n <button\n type=\"button\"\n class=\"ajf-btn\"\n [disabled]=\"!canAdd\"\n (click)=\"add.emit()\"\n [attr.aria-label]=\"'Add' | transloco\"\n >\n <mat-icon>add</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"ajf-btn\"\n [disabled]=\"!canRemove\"\n (click)=\"remove.emit()\"\n [attr.aria-label]=\"'Remove' | transloco\"\n >\n <mat-icon>remove</mat-icon>\n </button>\n </ng-container>\n </div>\n\n <span class=\"ajf-rep-strip-context\">\n <span [innerHTML]=\"slide.node.label | transloco\"></span>\n {{ current + 1 }} {{ 'of' | transloco }} {{ slide.reps }}\n </span>\n</div>\n", styles: ["ajf-rep-strip{display:block}ajf-rep-strip .ajf-rep-strip{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 20px;border-bottom:1px solid var(--ajf-border);background:var(--ajf-band);font-family:var(--ajf-font-sans)}ajf-rep-strip .ajf-rep-strip-label{flex:0 0 auto}ajf-rep-strip .ajf-rep-pager{display:flex;flex-wrap:wrap;gap:6px}ajf-rep-strip .ajf-rep-pager .ajf-btn{min-width:32px;min-height:32px;padding:0 6px;font-size:13px}ajf-rep-strip .ajf-rep-pager .ajf-btn .mat-icon{width:18px;height:18px;font-size:18px}ajf-rep-strip .ajf-rep-pager .ajf-rep-page.ajf-selected{border-color:var(--ajf-accent);background:var(--ajf-accent);color:var(--ajf-accent-fg)}ajf-rep-strip .ajf-rep-strip-context{margin-left:auto;color:var(--ajf-text-muted);font-size:13px}\n"] }]
48
+ }], propDecorators: { slide: [{
49
+ type: Input
50
+ }], current: [{
51
+ type: Input
52
+ }], readonly: [{
53
+ type: Input
54
+ }], goTo: [{
55
+ type: Output
56
+ }], add: [{
57
+ type: Output
58
+ }], remove: [{
59
+ type: Output
60
+ }] } });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwLXN0cmlwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwvZm9ybXMvc3JjL3JlcC1zdHJpcC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsL2Zvcm1zL3NyYy9yZXAtc3RyaXAuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1QkEsT0FBTyxFQUFlLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDMUUsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBRXhGOzs7O0dBSUc7QUFVSCxNQUFNLE9BQU8sV0FBVztJQVR4QjtRQVlFLHNEQUFzRDtRQUM3QyxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBU2IsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVQLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2xDLFFBQUcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQy9CLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0tBb0J0RDtJQS9CQyxJQUNJLFFBQVEsQ0FBQyxRQUFpQjtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQU9EOzs7O09BSUc7SUFDSCxJQUFZLFVBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDbkQsQ0FBQzsrR0FsQ1UsV0FBVzttR0FBWCxXQUFXLG9MQ3hDeEIsaXREQTZEQTs7NEZEckJhLFdBQVc7a0JBVHZCLFNBQVM7K0JBQ0UsZUFBZSxpQkFHVixpQkFBaUIsQ0FBQyxJQUFJOzhCQU01QixLQUFLO3NCQUFiLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUdGLFFBQVE7c0JBRFgsS0FBSztnQkFTYSxJQUFJO3NCQUF0QixNQUFNO2dCQUNZLEdBQUc7c0JBQXJCLE1BQU07Z0JBQ1ksTUFBTTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoQykgR251Y29vcCBzb2MuIGNvb3AuXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikuXG4gKlxuICogQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsXG4gKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEFmZmVyb1xuICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpLlxuICogSWYgbm90LCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy5cbiAqXG4gKi9cblxuaW1wb3J0IHtBamZSZXBlYXRpbmdTbGlkZUluc3RhbmNlfSBmcm9tICdAYWpmL2NvcmUvZm9ybXMnO1xuaW1wb3J0IHtCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBUaGUgcGFnZXIgZm9yIGEgcmVwZWF0aW5nIHNsaWRlOiBvbmUgYnV0dG9uIHBlciByZXBldGl0aW9uIHBsdXMgYWRkIGFuZCByZW1vdmVcbiAqIGFjdGlvbnMuIFRoZSByZW5kZXJlciBrZWVwcyBvbmUgcGFnZSBwZXIgcmVwZXRpdGlvbiwgc28gcGlja2luZyBhIG51bWJlciBoZXJlXG4gKiBpcyBhIHBhZ2UgY2hhbmdlLCB3aGljaCB0aGUgcmVuZGVyZXIgcGVyZm9ybXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FqZi1yZXAtc3RyaXAnLFxuICB0ZW1wbGF0ZVVybDogJ3JlcC1zdHJpcC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3JlcC1zdHJpcC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIC8vIERlbGliZXJhdGVseSBub3QgT25QdXNoOiBgcmVwc2AsIGBjYW5BZGRgIGFuZCBgY2FuUmVtb3ZlYCBhcmUgbXV0YXRlZCBpblxuICAvLyBwbGFjZSBvbiB0aGUgc2xpZGUgaW5zdGFuY2UsIHNvIHRoZSBndWFyZHMgYmVsb3cgd291bGQgZ28gc3RhbGUgdW5kZXIgYVxuICAvLyBzdHJhdGVneSB0aGF0IG9ubHkgcmUtY2hlY2tzIHdoZW4gYW4gaW5wdXQgaWRlbnRpdHkgY2hhbmdlcy5cbn0pXG5leHBvcnQgY2xhc3MgQWpmUmVwU3RyaXAge1xuICBASW5wdXQoKSBzbGlkZSE6IEFqZlJlcGVhdGluZ1NsaWRlSW5zdGFuY2U7XG5cbiAgLyoqIFRoZSByZXBldGl0aW9uIGN1cnJlbnRseSBvbiBzY3JlZW4sIHplcm8gYmFzZWQuICovXG4gIEBJbnB1dCgpIGN1cnJlbnQgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIHNldCByZWFkb25seShyZWFkb25seTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHJlYWRvbmx5KTtcbiAgfVxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG4gIHByaXZhdGUgX3JlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGdvVG8gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogQSByZXBldGl0aW9uIGNvdW50IGRyaXZlbiBieSBhIGZvcm11bGEgaXMgbm90IHRoZSByZWFkZXIncyB0byBjaGFuZ2U6XG4gICAqIGBBamZGb3JtUmVuZGVyZXJTZXJ2aWNlLmFkZEdyb3VwYCBhbmQgYHJlbW92ZUdyb3VwYCBib3RoIHJlZnVzZSB0aGUgY2FsbFxuICAgKiBvdXRyaWdodCwgc28gd2l0aG91dCB0aGlzIHRoZSBidXR0b25zIHdvdWxkIHNpdCBlbmFibGVkIGFuZCBkbyBub3RoaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgbWFudWFsUmVwcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zbGlkZS5mb3JtdWxhUmVwcyA9PSBudWxsO1xuICB9XG5cbiAgZ2V0IGNhbkFkZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tYW51YWxSZXBzICYmICEhdGhpcy5zbGlkZS5jYW5BZGQ7XG4gIH1cblxuICBnZXQgY2FuUmVtb3ZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hbnVhbFJlcHMgJiYgISF0aGlzLnNsaWRlLmNhblJlbW92ZTtcbiAgfVxuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZWFkb25seTogQm9vbGVhbklucHV0O1xufVxuIiwiPGRpdiBjbGFzcz1cImFqZi1yZXAtc3RyaXBcIj5cbiAgPHNwYW4gY2xhc3M9XCJhamYtbWljcm8tbGFiZWwgYWpmLXJlcC1zdHJpcC1sYWJlbFwiXG4gICAgPnt7ICdOdW1iZXIgb2YnIHwgdHJhbnNsb2NvIH19IHt7IHNsaWRlLm5vZGUubGFiZWwgfCB0cmFuc2xvY28gfX08L3NwYW5cbiAgPlxuXG4gIDxkaXYgY2xhc3M9XCJhamYtcmVwLXBhZ2VyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImFqZi1idG5cIlxuICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnQgPT09IDBcIlxuICAgICAgKGNsaWNrKT1cImdvVG8uZW1pdChjdXJyZW50IC0gMSlcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQmFjaycgfCB0cmFuc2xvY29cIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jaGV2cm9uX2xlZnQ8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhamYtYnRuIGFqZi1yZXAtcGFnZVwiXG4gICAgICAqbmdGb3I9XCJsZXQgcmVwIG9mIChzbGlkZS5yZXBzIHwgYWpmUmFuZ2UpOyBsZXQgaWR4ID0gaW5kZXhcIlxuICAgICAgW2NsYXNzLmFqZi1zZWxlY3RlZF09XCJpZHggPT09IGN1cnJlbnRcIlxuICAgICAgKGNsaWNrKT1cImdvVG8uZW1pdChpZHgpXCJcbiAgICA+XG4gICAgICB7eyBpZHggKyAxIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImFqZi1idG5cIlxuICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnQgPj0gc2xpZGUucmVwcyAtIDFcIlxuICAgICAgKGNsaWNrKT1cImdvVG8uZW1pdChjdXJyZW50ICsgMSlcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRm9yd2FyZCcgfCB0cmFuc2xvY29cIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHlcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYWpmLWJ0blwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQWRkXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZC5lbWl0KClcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBZGQnIHwgdHJhbnNsb2NvXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYWpmLWJ0blwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhY2FuUmVtb3ZlXCJcbiAgICAgICAgKGNsaWNrKT1cInJlbW92ZS5lbWl0KClcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmUnIHwgdHJhbnNsb2NvXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPnJlbW92ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPHNwYW4gY2xhc3M9XCJhamYtcmVwLXN0cmlwLWNvbnRleHRcIj5cbiAgICA8c3BhbiBbaW5uZXJIVE1MXT1cInNsaWRlLm5vZGUubGFiZWwgfCB0cmFuc2xvY29cIj48L3NwYW4+XG4gICAge3sgY3VycmVudCArIDEgfX0ge3sgJ29mJyB8IHRyYW5zbG9jbyB9fSB7eyBzbGlkZS5yZXBzIH19XG4gIDwvc3Bhbj5cbjwvZGl2PlxuIl19
@@ -27,15 +27,30 @@ import { debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'r
27
27
  import * as i0 from "@angular/core";
28
28
  import * as i1 from "@ajf/core/forms";
29
29
  import * as i2 from "@angular/common";
30
- import * as i3 from "@angular/material/radio";
31
- import * as i4 from "@angular/material/select";
32
- import * as i5 from "@angular/material/core";
33
- import * as i6 from "@angular/forms";
34
- import * as i7 from "ngx-mat-select-search";
35
- import * as i8 from "@ngneat/transloco";
36
- import * as i9 from "./warning-alert-service";
30
+ import * as i3 from "@angular/material/select";
31
+ import * as i4 from "@angular/material/core";
32
+ import * as i5 from "@angular/forms";
33
+ import * as i6 from "ngx-mat-select-search";
34
+ import * as i7 from "@ngneat/transloco";
35
+ import * as i8 from "./warning-alert-service";
37
36
  const maxChoicesInDom = 40;
38
37
  export class AjfSingleChoiceFieldComponent extends AjfFieldWithChoicesComponent {
38
+ /**
39
+ * Whether the choices collapse into a searchable dropdown. Below the search
40
+ * threshold they are laid out as buttons instead, which reads faster for a
41
+ * short list. `forceExpanded` wins over `forceNarrow`, so a schema can pin
42
+ * either presentation regardless of how many choices there are.
43
+ */
44
+ get isNarrow() {
45
+ const instance = this.instance;
46
+ if (instance == null) {
47
+ return false;
48
+ }
49
+ if (instance.node.forceExpanded) {
50
+ return false;
51
+ }
52
+ return instance.node.forceNarrow || instance.filteredChoices.length > this.expandThreshold;
53
+ }
39
54
  constructor(cdr, service, was, searchThreshold) {
40
55
  super(cdr, service, was, searchThreshold);
41
56
  this.expandThreshold = super.searchThreshold;
@@ -82,12 +97,12 @@ export class AjfSingleChoiceFieldComponent extends AjfFieldWithChoicesComponent
82
97
  this._choicesUpdate$.complete();
83
98
  }
84
99
  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 }); }
85
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AjfSingleChoiceFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "@if (instance) {\n @if (instance.node.forceNarrow || instance.filteredChoices.length > expandThreshold) {\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$ | async\">\n {{ choice.translatedLabel ?? (choice.label|transloco) }}\n </mat-option>\n </mat-select>\n } @else {\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.translatedLabel ?? (choice.label|transloco) }}\n </mat-radio-button>\n </mat-radio-group>\n }\n}\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i3.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: i4.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: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7.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: i8.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AjfSingleChoiceFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "@if (instance) {\n<ng-container *ngIf=\"control | async as ctrl\">\n <div class=\"ajf-choice-control\">\n @if (isNarrow) {\n <mat-select [formControl]=\"ctrl!\" panelClass=\"ajf-select-panel\">\n <mat-option class=\"ajf-select-search-option\">\n <ngx-mat-select-search\n [formControl]=\"searchFilterCtrl\"\n [placeholderLabel]=\"'Search' | transloco\"\n [noEntriesFoundLabel]=\"'Nothing found' | transloco\"\n [enableClearOnEscapePressed]=\"true\"\n >\n </ngx-mat-select-search>\n </mat-option>\n <mat-option [value]=\"choice.value\" *ngFor=\"let choice of filteredChoices$ | async\">\n {{ choice.translatedLabel ?? (choice.label | transloco) }}\n </mat-option>\n </mat-select>\n } @else {\n <div\n class=\"ajf-segmented ajf-choices-container\"\n role=\"radiogroup\"\n [attr.aria-labelledby]=\"instance.node.name\"\n >\n <button\n type=\"button\"\n class=\"ajf-segment\"\n role=\"radio\"\n *ngFor=\"let choice of instance.filteredChoices\"\n [attr.aria-checked]=\"ctrl.value === choice.value\"\n [class.ajf-selected]=\"ctrl.value === choice.value\"\n [disabled]=\"ctrl.disabled\"\n (click)=\"ctrl.setValue(choice.value)\"\n >\n {{ choice.translatedLabel ?? (choice.label | transloco) }}\n </button>\n </div>\n }\n\n <!-- A picked radio cannot be unpicked, so emptying the field needs its own\n action. -->\n <button\n type=\"button\"\n class=\"ajf-btn--ghost ajf-clear-value\"\n *ngIf=\"hasValue(ctrl) && !ctrl.disabled\"\n (click)=\"clearValue(ctrl, $event)\"\n >\n {{ 'Clear' | transloco }}\n </button>\n </div>\n</ng-container>\n}\n", styles: [".ajf-choice-control{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mat-mdc-select-panel.ajf-select-panel{border:1px solid var(--ajf-border, #e6e2dc);background:var(--ajf-surface, #ffffff)}.mat-mdc-select-panel.ajf-select-panel .mat-mdc-option{font-family:var(--ajf-font-sans, sans-serif)}.mat-mdc-select-panel.ajf-select-panel .mat-mdc-option .mdc-list-item__primary-text{color:var(--ajf-text, #1c1a17);font-size:14px}.mat-mdc-select-panel.ajf-select-panel .mat-mdc-option.ajf-select-search-option{min-height:0;padding:0;border-bottom:1px solid var(--ajf-border, #e6e2dc);background:var(--ajf-surface, #ffffff);pointer-events:auto}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.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: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.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: i7.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
86
101
  }
87
102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfSingleChoiceFieldComponent, decorators: [{
88
103
  type: Component,
89
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@if (instance) {\n @if (instance.node.forceNarrow || instance.filteredChoices.length > expandThreshold) {\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$ | async\">\n {{ choice.translatedLabel ?? (choice.label|transloco) }}\n </mat-option>\n </mat-select>\n } @else {\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.translatedLabel ?? (choice.label|transloco) }}\n </mat-radio-button>\n </mat-radio-group>\n }\n}\n" }]
90
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.AjfFormRendererService }, { type: i9.AjfWarningAlertService, decorators: [{
104
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@if (instance) {\n<ng-container *ngIf=\"control | async as ctrl\">\n <div class=\"ajf-choice-control\">\n @if (isNarrow) {\n <mat-select [formControl]=\"ctrl!\" panelClass=\"ajf-select-panel\">\n <mat-option class=\"ajf-select-search-option\">\n <ngx-mat-select-search\n [formControl]=\"searchFilterCtrl\"\n [placeholderLabel]=\"'Search' | transloco\"\n [noEntriesFoundLabel]=\"'Nothing found' | transloco\"\n [enableClearOnEscapePressed]=\"true\"\n >\n </ngx-mat-select-search>\n </mat-option>\n <mat-option [value]=\"choice.value\" *ngFor=\"let choice of filteredChoices$ | async\">\n {{ choice.translatedLabel ?? (choice.label | transloco) }}\n </mat-option>\n </mat-select>\n } @else {\n <div\n class=\"ajf-segmented ajf-choices-container\"\n role=\"radiogroup\"\n [attr.aria-labelledby]=\"instance.node.name\"\n >\n <button\n type=\"button\"\n class=\"ajf-segment\"\n role=\"radio\"\n *ngFor=\"let choice of instance.filteredChoices\"\n [attr.aria-checked]=\"ctrl.value === choice.value\"\n [class.ajf-selected]=\"ctrl.value === choice.value\"\n [disabled]=\"ctrl.disabled\"\n (click)=\"ctrl.setValue(choice.value)\"\n >\n {{ choice.translatedLabel ?? (choice.label | transloco) }}\n </button>\n </div>\n }\n\n <!-- A picked radio cannot be unpicked, so emptying the field needs its own\n action. -->\n <button\n type=\"button\"\n class=\"ajf-btn--ghost ajf-clear-value\"\n *ngIf=\"hasValue(ctrl) && !ctrl.disabled\"\n (click)=\"clearValue(ctrl, $event)\"\n >\n {{ 'Clear' | transloco }}\n </button>\n </div>\n</ng-container>\n}\n", styles: [".ajf-choice-control{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}.mat-mdc-select-panel.ajf-select-panel{border:1px solid var(--ajf-border, #e6e2dc);background:var(--ajf-surface, #ffffff)}.mat-mdc-select-panel.ajf-select-panel .mat-mdc-option{font-family:var(--ajf-font-sans, sans-serif)}.mat-mdc-select-panel.ajf-select-panel .mat-mdc-option .mdc-list-item__primary-text{color:var(--ajf-text, #1c1a17);font-size:14px}.mat-mdc-select-panel.ajf-select-panel .mat-mdc-option.ajf-select-search-option{min-height:0;padding:0;border-bottom:1px solid var(--ajf-border, #e6e2dc);background:var(--ajf-surface, #ffffff);pointer-events:auto}\n"] }]
105
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.AjfFormRendererService }, { type: i8.AjfWarningAlertService, decorators: [{
91
106
  type: Inject,
92
107
  args: [AJF_WARNING_ALERT_SERVICE]
93
108
  }] }, { type: undefined, decorators: [{
@@ -96,4 +111,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
96
111
  type: Inject,
97
112
  args: [AJF_SEARCH_ALERT_THRESHOLD]
98
113
  }] }] });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLWNob2ljZS1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsL2Zvcm1zL3NyYy9zaW5nbGUtY2hvaWNlLWZpZWxkLnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwvZm9ybXMvc3JjL3NpbmdsZS1jaG9pY2UtZmllbGQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUV6Qiw0QkFBNEIsR0FFN0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sUUFBUSxFQUNSLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQUk3RixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFRM0IsTUFBTSxPQUFPLDZCQUNYLFNBQVEsNEJBQStCO0lBV3ZDLFlBQ0UsR0FBc0IsRUFDdEIsT0FBK0IsRUFDSSxHQUEyQixFQUNkLGVBQXVCO1FBRXZFLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQWRuQyxvQkFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDeEMscUJBQWdCLEdBQUcsSUFBSSxXQUFXLENBQVMsRUFBRSxFQUFFLEVBQUMsV0FB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QztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRVEsV0FBVztRQUNsQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQzsrR0F4RVUsNkJBQTZCLHlGQWU5Qix5QkFBeUIsYUFDYiwwQkFBMEI7bUdBaEJyQyw2QkFBNkIsMkVDcEQxQyxrb0NBeUJBOzs0RkQyQmEsNkJBQTZCO2tCQU56QyxTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7OzBCQWlCbEMsTUFBTTsyQkFBQyx5QkFBeUI7OzBCQUNoQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoQykgR251Y29vcCBzb2MuIGNvb3AuXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikuXG4gKlxuICogQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsXG4gKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEFmZmVyb1xuICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpLlxuICogSWYgbm90LCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy5cbiAqXG4gKi9cblxuaW1wb3J0IHtcbiAgQUpGX1NFQVJDSF9BTEVSVF9USFJFU0hPTEQsXG4gIEFKRl9XQVJOSU5HX0FMRVJUX1NFUlZJQ0UsXG4gIEFqZkNob2ljZSxcbiAgQWpmRmllbGRXaXRoQ2hvaWNlc0NvbXBvbmVudCxcbiAgQWpmRm9ybVJlbmRlcmVyU2VydmljZSxcbn0gZnJvbSAnQGFqZi9jb3JlL2Zvcm1zJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7QWpmV2FybmluZ0FsZXJ0U2VydmljZX0gZnJvbSAnLi93YXJuaW5nLWFsZXJ0LXNlcnZpY2UnO1xuXG5jb25zdCBtYXhDaG9pY2VzSW5Eb20gPSA0MDtcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnc2luZ2xlLWNob2ljZS1maWVsZC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3NpbmdsZS1jaG9pY2UtZmllbGQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQWpmU2luZ2xlQ2hvaWNlRmllbGRDb21wb25lbnQ8VD5cbiAgZXh0ZW5kcyBBamZGaWVsZFdpdGhDaG9pY2VzQ29tcG9uZW50PFQ+XG4gIGltcGxlbWVudHMgT25EZXN0cm95XG57XG4gIHJlYWRvbmx5IGV4cGFuZFRocmVzaG9sZCA9IHN1cGVyLnNlYXJjaFRocmVzaG9sZDtcbiAgcmVhZG9ubHkgc2VhcmNoRmlsdGVyQ3RybCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KCcnLCB7bm9uTnVsbGFibGU6IHRydWV9KTtcblxuICBmaWx0ZXJlZENob2ljZXMkOiBPYnNlcnZhYmxlPEFqZkNob2ljZTxhbnk+W10+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Nob2ljZXNVcGRhdGUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfaW5zdGFuY2VVcGRhdGVGb3JDaG9pY2VzU3ViID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgc2VydmljZTogQWpmRm9ybVJlbmRlcmVyU2VydmljZSxcbiAgICBASW5qZWN0KEFKRl9XQVJOSU5HX0FMRVJUX1NFUlZJQ0UpIHdhczogQWpmV2FybmluZ0FsZXJ0U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFKRl9TRUFSQ0hfQUxFUlRfVEhSRVNIT0xEKSBzZWFyY2hUaHJlc2hvbGQ6IG51bWJlcixcbiAgKSB7XG4gICAgc3VwZXIoY2RyLCBzZXJ2aWNlLCB3YXMsIHNlYXJjaFRocmVzaG9sZCk7XG5cbiAgICBjb25zdCBjb250cm9sVmFsdWUkID0gdGhpcy5jb250cm9sLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY3RybCA9PiAoY3RybCA/IGN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKGN0cmwudmFsdWUpKSA6IG9mKG51bGwpKSksXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICk7XG5cbiAgICB0aGlzLmZpbHRlcmVkQ2hvaWNlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLnNlYXJjaEZpbHRlckN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDE1MCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICAgICAgICB0aGlzLl9jaG9pY2VzVXBkYXRlJCxcbiAgICAgICkucGlwZShzdGFydFdpdGgobnVsbCkpLFxuICAgICAgY29udHJvbFZhbHVlJCxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbXywgc2VsZWN0ZWRWYWx1ZV0pID0+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2hGaWx0ZXJDdHJsLnZhbHVlO1xuICAgICAgICBjb25zdCBjaG9pY2VzID0gdGhpcy5pbnN0YW5jZT8uZmlsdGVyZWRDaG9pY2VzIHx8IFtdO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgY29uc3QgbG93ZXJTZWFyY2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICByZXR1cm4gY2hvaWNlcy5maWx0ZXIoYyA9PlxuICAgICAgICAgICAgKGMudHJhbnNsYXRlZExhYmVsID8/IGMubGFiZWwpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJTZWFyY2gpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNob2ljZXMubGVuZ3RoIDw9IG1heENob2ljZXNJbkRvbSkge1xuICAgICAgICAgIHJldHVybiBjaG9pY2VzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRydW5jYXRlZCA9IGNob2ljZXMuc2xpY2UoMCwgbWF4Q2hvaWNlc0luRG9tKTtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBzZWxlY3RlZCBjaG9pY2UgaXMgaW5jbHVkZWQgaW4gdHJ1bmNhdGVkXG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICE9IG51bGwgJiYgIXRydW5jYXRlZC5zb21lKGMgPT4gYy52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGNob2ljZXMuZmluZChjID0+IGMudmFsdWUgPT09IHNlbGVjdGVkVmFsdWUpO1xuICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFtzZWxlY3RlZCwgLi4udHJ1bmNhdGVkXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydW5jYXRlZDtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX29uSW5zdGFuY2VDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5faW5zdGFuY2VVcGRhdGVGb3JDaG9pY2VzU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fY2hvaWNlc1VwZGF0ZSQubmV4dCgpO1xuICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLl9pbnN0YW5jZVVwZGF0ZUZvckNob2ljZXNTdWIgPSB0aGlzLmluc3RhbmNlLnVwZGF0ZWRFdnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hvaWNlc1VwZGF0ZSQubmV4dCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9pbnN0YW5jZVVwZGF0ZUZvckNob2ljZXNTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9jaG9pY2VzVXBkYXRlJC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCJAaWYgKGluc3RhbmNlKSB7XG4gIEBpZiAoaW5zdGFuY2Uubm9kZS5mb3JjZU5hcnJvdyB8fCBpbnN0YW5jZS5maWx0ZXJlZENob2ljZXMubGVuZ3RoID4gZXhwYW5kVGhyZXNob2xkKSB7XG4gICAgPG1hdC1zZWxlY3QgKm5nSWY9XCJjb250cm9sfGFzeW5jIGFzIGN0cmxcIiBbZm9ybUNvbnRyb2xdPVwiY3RybCFcIj5cbiAgICAgIDxtYXQtb3B0aW9uIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiJ3doaXRlJ1wiPlxuICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaEZpbHRlckN0cmxcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlckxhYmVsXT1cIidTZWFyY2gnfHRyYW5zbG9jb1wiXG4gICAgICAgICAgW25vRW50cmllc0ZvdW5kTGFiZWxdPVwiJ05vdGhpbmcgZm91bmQnfHRyYW5zbG9jb1wiXG4gICAgICAgICAgW2VuYWJsZUNsZWFyT25Fc2NhcGVQcmVzc2VkXT1cInRydWVcIj5cbiAgICAgICAgPC9uZ3gtbWF0LXNlbGVjdC1zZWFyY2g+XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiY2hvaWNlLnZhbHVlXCIgKm5nRm9yPVwibGV0IGNob2ljZSBvZiBmaWx0ZXJlZENob2ljZXMkIHwgYXN5bmNcIj5cbiAgICAgICAge3sgY2hvaWNlLnRyYW5zbGF0ZWRMYWJlbCA/PyAoY2hvaWNlLmxhYmVsfHRyYW5zbG9jbykgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gIH0gQGVsc2Uge1xuICAgIDxtYXQtcmFkaW8tZ3JvdXAgKm5nSWY9XCJjb250cm9sfGFzeW5jIGFzIGN0cmxcIiBjbGFzcz1cImFqZi1jaG9pY2VzLWNvbnRhaW5lclwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpbnN0YW5jZS5ub2RlLm5hbWVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY3RybCFcIj5cbiAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIFt2YWx1ZV09XCJjaG9pY2UudmFsdWVcIiAqbmdGb3I9XCJsZXQgY2hvaWNlIG9mIGluc3RhbmNlLmZpbHRlcmVkQ2hvaWNlc1wiPlxuICAgICAgICB7eyBjaG9pY2UudHJhbnNsYXRlZExhYmVsID8/IChjaG9pY2UubGFiZWx8dHJhbnNsb2NvKSB9fVxuICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICB9XG59XG4iXX0=
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLWNob2ljZS1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsL2Zvcm1zL3NyYy9zaW5nbGUtY2hvaWNlLWZpZWxkLnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwvZm9ybXMvc3JjL3NpbmdsZS1jaG9pY2UtZmllbGQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUV6Qiw0QkFBNEIsR0FFN0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sUUFBUSxFQUNSLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBSTdGLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQVEzQixNQUFNLE9BQU8sNkJBQ1gsU0FBUSw0QkFBK0I7SUFNdkM7Ozs7O09BS0c7SUFDSCxJQUFJLFFBQVE7UUFDVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEtBQUssQ0FB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LENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFa0IsaUJBQWlCO1FBQ2xDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMxRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFUSxXQUFXO1FBQ2xCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsNEJBQTRCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQyxDQUFDOytHQXpGVSw2QkFBNkIseUZBZ0M5Qix5QkFBeUIsYUFDYiwwQkFBMEI7bUdBakNyQyw2QkFBNkIsMkVDcEQxQyx5dkRBb0RBOzs0RkRBYSw2QkFBNkI7a0JBTnpDLFNBQVM7c0NBR1MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs7MEJBa0NsQyxNQUFNOzJCQUFDLHlCQUF5Qjs7MEJBQ2hDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChDKSBHbnVjb29wIHNvYy4gY29vcC5cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKS5cbiAqXG4gKiBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzXG4gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSxcbiAqIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgQWZmZXJvXG4gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikuXG4gKiBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLlxuICpcbiAqL1xuXG5pbXBvcnQge1xuICBBSkZfU0VBUkNIX0FMRVJUX1RIUkVTSE9MRCxcbiAgQUpGX1dBUk5JTkdfQUxFUlRfU0VSVklDRSxcbiAgQWpmQ2hvaWNlLFxuICBBamZGaWVsZFdpdGhDaG9pY2VzQ29tcG9uZW50LFxuICBBamZGb3JtUmVuZGVyZXJTZXJ2aWNlLFxufSBmcm9tICdAYWpmL2NvcmUvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtBamZXYXJuaW5nQWxlcnRTZXJ2aWNlfSBmcm9tICcuL3dhcm5pbmctYWxlcnQtc2VydmljZSc7XG5cbmNvbnN0IG1heENob2ljZXNJbkRvbSA9IDQwO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdzaW5nbGUtY2hvaWNlLWZpZWxkLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc2luZ2xlLWNob2ljZS1maWVsZC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBBamZTaW5nbGVDaG9pY2VGaWVsZENvbXBvbmVudDxUPlxuICBleHRlbmRzIEFqZkZpZWxkV2l0aENob2ljZXNDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgcmVhZG9ubHkgZXhwYW5kVGhyZXNob2xkID0gc3VwZXIuc2VhcmNoVGhyZXNob2xkO1xuICByZWFkb25seSBzZWFyY2hGaWx0ZXJDdHJsID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycsIHtub25OdWxsYWJsZTogdHJ1ZX0pO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjaG9pY2VzIGNvbGxhcHNlIGludG8gYSBzZWFyY2hhYmxlIGRyb3Bkb3duLiBCZWxvdyB0aGUgc2VhcmNoXG4gICAqIHRocmVzaG9sZCB0aGV5IGFyZSBsYWlkIG91dCBhcyBidXR0b25zIGluc3RlYWQsIHdoaWNoIHJlYWRzIGZhc3RlciBmb3IgYVxuICAgKiBzaG9ydCBsaXN0LiBgZm9yY2VFeHBhbmRlZGAgd2lucyBvdmVyIGBmb3JjZU5hcnJvd2AsIHNvIGEgc2NoZW1hIGNhbiBwaW5cbiAgICogZWl0aGVyIHByZXNlbnRhdGlvbiByZWdhcmRsZXNzIG9mIGhvdyBtYW55IGNob2ljZXMgdGhlcmUgYXJlLlxuICAgKi9cbiAgZ2V0IGlzTmFycm93KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZTtcbiAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5zdGFuY2Uubm9kZS5mb3JjZUV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5ub2RlLmZvcmNlTmFycm93IHx8IGluc3RhbmNlLmZpbHRlcmVkQ2hvaWNlcy5sZW5ndGggPiB0aGlzLmV4cGFuZFRocmVzaG9sZDtcbiAgfVxuXG4gIGZpbHRlcmVkQ2hvaWNlcyQ6IE9ic2VydmFibGU8QWpmQ2hvaWNlPGFueT5bXT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY2hvaWNlc1VwZGF0ZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9pbnN0YW5jZVVwZGF0ZUZvckNob2ljZXNTdWIgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBzZXJ2aWNlOiBBamZGb3JtUmVuZGVyZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoQUpGX1dBUk5JTkdfQUxFUlRfU0VSVklDRSkgd2FzOiBBamZXYXJuaW5nQWxlcnRTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQUpGX1NFQVJDSF9BTEVSVF9USFJFU0hPTEQpIHNlYXJjaFRocmVzaG9sZDogbnVtYmVyLFxuICApIHtcbiAgICBzdXBlcihjZHIsIHNlcnZpY2UsIHdhcywgc2VhcmNoVGhyZXNob2xkKTtcblxuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSQgPSB0aGlzLmNvbnRyb2wucGlwZShcbiAgICAgIHN3aXRjaE1hcChjdHJsID0+IChjdHJsID8gY3RybC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgoY3RybC52YWx1ZSkpIDogb2YobnVsbCkpKSxcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyZWRDaG9pY2VzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuc2VhcmNoRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMTUwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gICAgICAgIHRoaXMuX2Nob2ljZXNVcGRhdGUkLFxuICAgICAgKS5waXBlKHN0YXJ0V2l0aChudWxsKSksXG4gICAgICBjb250cm9sVmFsdWUkLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtfLCBzZWxlY3RlZFZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaEZpbHRlckN0cmwudmFsdWU7XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSB0aGlzLmluc3RhbmNlPy5maWx0ZXJlZENob2ljZXMgfHwgW107XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCBsb3dlclNlYXJjaCA9IHNlYXJjaC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHJldHVybiBjaG9pY2VzLmZpbHRlcihjID0+XG4gICAgICAgICAgICAoYy50cmFuc2xhdGVkTGFiZWwgPz8gYy5sYWJlbCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclNlYXJjaCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hvaWNlcy5sZW5ndGggPD0gbWF4Q2hvaWNlc0luRG9tKSB7XG4gICAgICAgICAgcmV0dXJuIGNob2ljZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJ1bmNhdGVkID0gY2hvaWNlcy5zbGljZSgwLCBtYXhDaG9pY2VzSW5Eb20pO1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIHNlbGVjdGVkIGNob2ljZSBpcyBpbmNsdWRlZCBpbiB0cnVuY2F0ZWRcbiAgICAgICAgaWYgKHNlbGVjdGVkVmFsdWUgIT0gbnVsbCAmJiAhdHJ1bmNhdGVkLnNvbWUoYyA9PiBjLnZhbHVlID09PSBzZWxlY3RlZFZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gY2hvaWNlcy5maW5kKGMgPT4gYy52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gW3NlbGVjdGVkLCAuLi50cnVuY2F0ZWRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1bmNhdGVkO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfb25JbnN0YW5jZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZVVwZGF0ZUZvckNob2ljZXNTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9jaG9pY2VzVXBkYXRlJC5uZXh0KCk7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuX2luc3RhbmNlVXBkYXRlRm9yQ2hvaWNlc1N1YiA9IHRoaXMuaW5zdGFuY2UudXBkYXRlZEV2dC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaG9pY2VzVXBkYXRlJC5uZXh0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuX2luc3RhbmNlVXBkYXRlRm9yQ2hvaWNlc1N1Yi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2Nob2ljZXNVcGRhdGUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIkBpZiAoaW5zdGFuY2UpIHtcbjxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sIHwgYXN5bmMgYXMgY3RybFwiPlxuICA8ZGl2IGNsYXNzPVwiYWpmLWNob2ljZS1jb250cm9sXCI+XG4gICAgQGlmIChpc05hcnJvdykge1xuICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJjdHJsIVwiIHBhbmVsQ2xhc3M9XCJhamYtc2VsZWN0LXBhbmVsXCI+XG4gICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImFqZi1zZWxlY3Qtc2VhcmNoLW9wdGlvblwiPlxuICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaEZpbHRlckN0cmxcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlckxhYmVsXT1cIidTZWFyY2gnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBbbm9FbnRyaWVzRm91bmRMYWJlbF09XCInTm90aGluZyBmb3VuZCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIFtlbmFibGVDbGVhck9uRXNjYXBlUHJlc3NlZF09XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICA8L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJjaG9pY2UudmFsdWVcIiAqbmdGb3I9XCJsZXQgY2hvaWNlIG9mIGZpbHRlcmVkQ2hvaWNlcyQgfCBhc3luY1wiPlxuICAgICAgICB7eyBjaG9pY2UudHJhbnNsYXRlZExhYmVsID8/IChjaG9pY2UubGFiZWwgfCB0cmFuc2xvY28pIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0PlxuICAgIH0gQGVsc2Uge1xuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYWpmLXNlZ21lbnRlZCBhamYtY2hvaWNlcy1jb250YWluZXJcIlxuICAgICAgcm9sZT1cInJhZGlvZ3JvdXBcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImluc3RhbmNlLm5vZGUubmFtZVwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJhamYtc2VnbWVudFwiXG4gICAgICAgIHJvbGU9XCJyYWRpb1wiXG4gICAgICAgICpuZ0Zvcj1cImxldCBjaG9pY2Ugb2YgaW5zdGFuY2UuZmlsdGVyZWRDaG9pY2VzXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImN0cmwudmFsdWUgPT09IGNob2ljZS52YWx1ZVwiXG4gICAgICAgIFtjbGFzcy5hamYtc2VsZWN0ZWRdPVwiY3RybC52YWx1ZSA9PT0gY2hvaWNlLnZhbHVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImN0cmwuZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwiY3RybC5zZXRWYWx1ZShjaG9pY2UudmFsdWUpXCJcbiAgICAgID5cbiAgICAgICAge3sgY2hvaWNlLnRyYW5zbGF0ZWRMYWJlbCA/PyAoY2hvaWNlLmxhYmVsIHwgdHJhbnNsb2NvKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBBIHBpY2tlZCByYWRpbyBjYW5ub3QgYmUgdW5waWNrZWQsIHNvIGVtcHR5aW5nIHRoZSBmaWVsZCBuZWVkcyBpdHMgb3duXG4gICAgICAgICBhY3Rpb24uIC0tPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhamYtYnRuLS1naG9zdCBhamYtY2xlYXItdmFsdWVcIlxuICAgICAgKm5nSWY9XCJoYXNWYWx1ZShjdHJsKSAmJiAhY3RybC5kaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJWYWx1ZShjdHJsLCAkZXZlbnQpXCJcbiAgICA+XG4gICAgICB7eyAnQ2xlYXInIHwgdHJhbnNsb2NvIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG59XG4iXX0=
@@ -0,0 +1,68 @@
1
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "@angular/material/icon";
5
+ import * as i3 from "@angular/material/menu";
6
+ import * as i4 from "@ngneat/transloco";
7
+ /**
8
+ * The bar at the top of every slide: its number and title, a menu to jump to any
9
+ * other slide, previous/next paging, and a slot for the form's own action
10
+ * buttons.
11
+ *
12
+ * What the form still has failing is reported by the footer alone. Naming it
13
+ * here too cost a phone's whole header width to repeat something already on
14
+ * screen.
15
+ *
16
+ * Paging belongs to the renderer, which owns the page slider, so it is raised
17
+ * as an event rather than handled here.
18
+ */
19
+ export class AjfSlideHeader {
20
+ constructor() {
21
+ /** Absent while a start or end message page is on screen. */
22
+ this.slide = null;
23
+ /** The number shown in the badge, already offset by any start message. */
24
+ this.displayNumber = 1;
25
+ /** Every slide of the form, for the jump menu. */
26
+ this.slides = [];
27
+ /** How many pages the slider holds, repetitions and message pages included. */
28
+ this.pages = 0;
29
+ this.jumpTo = new EventEmitter();
30
+ this.prev = new EventEmitter();
31
+ this.next = new EventEmitter();
32
+ }
33
+ /**
34
+ * Whether the form has anywhere to page to. A single page form gets no arrows
35
+ * and no "slide 1 of 1": both are controls that cannot do anything.
36
+ */
37
+ get canNavigate() {
38
+ return this.pages > 1;
39
+ }
40
+ /**
41
+ * Whether the jump menu is worth opening. Counted over the visible slides, the
42
+ * only ones the menu can actually reach.
43
+ */
44
+ get canJump() {
45
+ return this.slides.filter(s => s.visible !== false).length > 1;
46
+ }
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfSlideHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AjfSlideHeader, selector: "ajf-slide-header", inputs: { slide: "slide", displayNumber: "displayNumber", slides: "slides", pages: "pages" }, outputs: { jumpTo: "jumpTo", prev: "prev", next: "next" }, ngImport: i0, template: "<div class=\"ajf-slide-header\">\n <button\n type=\"button\"\n class=\"ajf-slide-title\"\n [class.ajf-slide-title-static]=\"!slide || !canJump\"\n [disabled]=\"!slide || !canJump\"\n [matMenuTriggerFor]=\"slideMenu\"\n [attr.aria-label]=\"'Go to slide' | transloco\"\n >\n <span class=\"ajf-slide-number\">{{ displayNumber }}</span>\n\n <!-- Every slide title is laid out in the same grid cell, so the trigger is as\n wide as the longest of them and keeps that width while paging. Only the\n current title is visible; the rest just hold the space open. -->\n <span class=\"ajf-slide-label-stack\">\n <span\n class=\"ajf-slide-label\"\n *ngFor=\"let s of slides\"\n [class.ajf-current]=\"s === slide\"\n [innerHTML]=\"s.node.label | transloco\"\n ></span>\n </span>\n <mat-icon class=\"ajf-slide-caret\" *ngIf=\"slide && canJump\">arrow_drop_down</mat-icon>\n </button>\n\n <mat-menu #slideMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let s of slides\"\n [disabled]=\"s.visible === false\"\n (click)=\"jumpTo.emit(s)\"\n >\n <mat-icon [class.ajf-invalid]=\"!s.valid\">{{ s.valid ? 'check' : 'warning' }}</mat-icon>\n <span [innerHTML]=\"s.node.label | transloco\"></span>\n </button>\n </mat-menu>\n\n <!-- Nothing to page through in a single page form. -->\n <div class=\"ajf-slide-nav\" *ngIf=\"canNavigate\">\n <button\n type=\"button\"\n class=\"ajf-btn\"\n (click)=\"prev.emit()\"\n [attr.aria-label]=\"'Back' | transloco\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"ajf-btn\"\n (click)=\"next.emit()\"\n [attr.aria-label]=\"'Forward' | transloco\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n\n <span class=\"ajf-slide-header-spacer\"></span>\n\n <ng-content></ng-content>\n</div>\n", styles: ["ajf-slide-header{display:block}ajf-slide-header .ajf-slide-header{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:12px 20px;background:var(--ajf-surface);font-family:var(--ajf-font-sans)}ajf-slide-header .ajf-slide-header-spacer{flex:1 1 auto}ajf-slide-header .ajf-slide-title{display:inline-flex;align-items:center;justify-content:center;gap:8px;box-sizing:border-box;min-height:var(--ajf-control-h);border:1px solid var(--ajf-border-strong);border-radius:var(--ajf-radius);background:var(--ajf-surface);color:var(--ajf-text);font-family:var(--ajf-font-sans);font-size:14px;cursor:pointer;flex:0 1 auto;justify-content:flex-start;gap:10px;max-width:100%;padding:0 12px}ajf-slide-header .ajf-slide-title:hover:not(:disabled){border-color:var(--ajf-accent)}ajf-slide-header .ajf-slide-title:disabled{color:var(--ajf-text-faint);cursor:default}ajf-slide-header .ajf-slide-title .ajf-slide-number{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--ajf-accent);color:var(--ajf-accent-fg);font-size:12px;font-weight:600}ajf-slide-header .ajf-slide-title .ajf-slide-label-stack{display:grid;min-width:0;max-width:340px;text-align:left}ajf-slide-header .ajf-slide-title .ajf-slide-label{grid-area:1/1;overflow:hidden;visibility:hidden;font-size:16px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}ajf-slide-header .ajf-slide-title .ajf-slide-label.ajf-current{visibility:visible}ajf-slide-header .ajf-slide-title .ajf-slide-caret{width:20px;height:20px;margin-left:auto;color:var(--ajf-text-muted);font-size:20px}ajf-slide-header .ajf-slide-title-static{cursor:default}ajf-slide-header .ajf-slide-title-static:hover{border-color:var(--ajf-border-strong)}ajf-slide-header .ajf-slide-nav{display:flex;gap:8px}ajf-slide-header .ajf-slide-nav .ajf-btn{width:var(--ajf-control-h);padding:0}.mat-mdc-menu-panel .mat-mdc-menu-item .mat-icon.ajf-invalid{color:var(--ajf-danger)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfSlideHeader, decorators: [{
51
+ type: Component,
52
+ args: [{ selector: 'ajf-slide-header', encapsulation: ViewEncapsulation.None, template: "<div class=\"ajf-slide-header\">\n <button\n type=\"button\"\n class=\"ajf-slide-title\"\n [class.ajf-slide-title-static]=\"!slide || !canJump\"\n [disabled]=\"!slide || !canJump\"\n [matMenuTriggerFor]=\"slideMenu\"\n [attr.aria-label]=\"'Go to slide' | transloco\"\n >\n <span class=\"ajf-slide-number\">{{ displayNumber }}</span>\n\n <!-- Every slide title is laid out in the same grid cell, so the trigger is as\n wide as the longest of them and keeps that width while paging. Only the\n current title is visible; the rest just hold the space open. -->\n <span class=\"ajf-slide-label-stack\">\n <span\n class=\"ajf-slide-label\"\n *ngFor=\"let s of slides\"\n [class.ajf-current]=\"s === slide\"\n [innerHTML]=\"s.node.label | transloco\"\n ></span>\n </span>\n <mat-icon class=\"ajf-slide-caret\" *ngIf=\"slide && canJump\">arrow_drop_down</mat-icon>\n </button>\n\n <mat-menu #slideMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let s of slides\"\n [disabled]=\"s.visible === false\"\n (click)=\"jumpTo.emit(s)\"\n >\n <mat-icon [class.ajf-invalid]=\"!s.valid\">{{ s.valid ? 'check' : 'warning' }}</mat-icon>\n <span [innerHTML]=\"s.node.label | transloco\"></span>\n </button>\n </mat-menu>\n\n <!-- Nothing to page through in a single page form. -->\n <div class=\"ajf-slide-nav\" *ngIf=\"canNavigate\">\n <button\n type=\"button\"\n class=\"ajf-btn\"\n (click)=\"prev.emit()\"\n [attr.aria-label]=\"'Back' | transloco\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"ajf-btn\"\n (click)=\"next.emit()\"\n [attr.aria-label]=\"'Forward' | transloco\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n\n <span class=\"ajf-slide-header-spacer\"></span>\n\n <ng-content></ng-content>\n</div>\n", styles: ["ajf-slide-header{display:block}ajf-slide-header .ajf-slide-header{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:12px 20px;background:var(--ajf-surface);font-family:var(--ajf-font-sans)}ajf-slide-header .ajf-slide-header-spacer{flex:1 1 auto}ajf-slide-header .ajf-slide-title{display:inline-flex;align-items:center;justify-content:center;gap:8px;box-sizing:border-box;min-height:var(--ajf-control-h);border:1px solid var(--ajf-border-strong);border-radius:var(--ajf-radius);background:var(--ajf-surface);color:var(--ajf-text);font-family:var(--ajf-font-sans);font-size:14px;cursor:pointer;flex:0 1 auto;justify-content:flex-start;gap:10px;max-width:100%;padding:0 12px}ajf-slide-header .ajf-slide-title:hover:not(:disabled){border-color:var(--ajf-accent)}ajf-slide-header .ajf-slide-title:disabled{color:var(--ajf-text-faint);cursor:default}ajf-slide-header .ajf-slide-title .ajf-slide-number{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--ajf-accent);color:var(--ajf-accent-fg);font-size:12px;font-weight:600}ajf-slide-header .ajf-slide-title .ajf-slide-label-stack{display:grid;min-width:0;max-width:340px;text-align:left}ajf-slide-header .ajf-slide-title .ajf-slide-label{grid-area:1/1;overflow:hidden;visibility:hidden;font-size:16px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}ajf-slide-header .ajf-slide-title .ajf-slide-label.ajf-current{visibility:visible}ajf-slide-header .ajf-slide-title .ajf-slide-caret{width:20px;height:20px;margin-left:auto;color:var(--ajf-text-muted);font-size:20px}ajf-slide-header .ajf-slide-title-static{cursor:default}ajf-slide-header .ajf-slide-title-static:hover{border-color:var(--ajf-border-strong)}ajf-slide-header .ajf-slide-nav{display:flex;gap:8px}ajf-slide-header .ajf-slide-nav .ajf-btn{width:var(--ajf-control-h);padding:0}.mat-mdc-menu-panel .mat-mdc-menu-item .mat-icon.ajf-invalid{color:var(--ajf-danger)}\n"] }]
53
+ }], propDecorators: { slide: [{
54
+ type: Input
55
+ }], displayNumber: [{
56
+ type: Input
57
+ }], slides: [{
58
+ type: Input
59
+ }], pages: [{
60
+ type: Input
61
+ }], jumpTo: [{
62
+ type: Output
63
+ }], prev: [{
64
+ type: Output
65
+ }], next: [{
66
+ type: Output
67
+ }] } });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGUtaGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwvZm9ybXMvc3JjL3NsaWRlLWhlYWRlci50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsL2Zvcm1zL3NyYy9zbGlkZS1oZWFkZXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1QkEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBRXhGOzs7Ozs7Ozs7OztHQVdHO0FBVUgsTUFBTSxPQUFPLGNBQWM7SUFUM0I7UUFVRSw2REFBNkQ7UUFDcEQsVUFBSyxHQUE0QixJQUFJLENBQUM7UUFFL0MsMEVBQTBFO1FBQ2pFLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRTNCLGtEQUFrRDtRQUN6QyxXQUFNLEdBQXVCLEVBQUUsQ0FBQztRQUV6QywrRUFBK0U7UUFDdEUsVUFBSyxHQUFHLENBQUMsQ0FBQztRQWtCQSxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFDOUMsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDaEMsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7S0FDcEQ7SUFuQkM7OztPQUdHO0lBQ0gsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqRSxDQUFDOytHQTNCVSxjQUFjO21HQUFkLGNBQWMsaU5DOUMzQixpN0RBNkRBOzs0RkRmYSxjQUFjO2tCQVQxQixTQUFTOytCQUNFLGtCQUFrQixpQkFHYixpQkFBaUIsQ0FBQyxJQUFJOzhCQU81QixLQUFLO3NCQUFiLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csS0FBSztzQkFBYixLQUFLO2dCQWtCYSxNQUFNO3NCQUF4QixNQUFNO2dCQUNZLElBQUk7c0JBQXRCLE1BQU07Z0JBQ1ksSUFBSTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoQykgR251Y29vcCBzb2MuIGNvb3AuXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikuXG4gKlxuICogQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsXG4gKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEFmZmVyb1xuICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpLlxuICogSWYgbm90LCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy5cbiAqXG4gKi9cblxuaW1wb3J0IHtBamZTbGlkZUluc3RhbmNlfSBmcm9tICdAYWpmL2NvcmUvZm9ybXMnO1xuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFRoZSBiYXIgYXQgdGhlIHRvcCBvZiBldmVyeSBzbGlkZTogaXRzIG51bWJlciBhbmQgdGl0bGUsIGEgbWVudSB0byBqdW1wIHRvIGFueVxuICogb3RoZXIgc2xpZGUsIHByZXZpb3VzL25leHQgcGFnaW5nLCBhbmQgYSBzbG90IGZvciB0aGUgZm9ybSdzIG93biBhY3Rpb25cbiAqIGJ1dHRvbnMuXG4gKlxuICogV2hhdCB0aGUgZm9ybSBzdGlsbCBoYXMgZmFpbGluZyBpcyByZXBvcnRlZCBieSB0aGUgZm9vdGVyIGFsb25lLiBOYW1pbmcgaXRcbiAqIGhlcmUgdG9vIGNvc3QgYSBwaG9uZSdzIHdob2xlIGhlYWRlciB3aWR0aCB0byByZXBlYXQgc29tZXRoaW5nIGFscmVhZHkgb25cbiAqIHNjcmVlbi5cbiAqXG4gKiBQYWdpbmcgYmVsb25ncyB0byB0aGUgcmVuZGVyZXIsIHdoaWNoIG93bnMgdGhlIHBhZ2Ugc2xpZGVyLCBzbyBpdCBpcyByYWlzZWRcbiAqIGFzIGFuIGV2ZW50IHJhdGhlciB0aGFuIGhhbmRsZWQgaGVyZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWpmLXNsaWRlLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnc2xpZGUtaGVhZGVyLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc2xpZGUtaGVhZGVyLnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgLy8gRGVsaWJlcmF0ZWx5IG5vdCBPblB1c2g6IHNsaWRlIHZpc2liaWxpdHkgYW5kIHJlcGV0aXRpb24gY291bnRzIGFyZSBtdXRhdGVkXG4gIC8vIGluIHBsYWNlLCBzbyB0aGUganVtcCBtZW51IGFuZCB0aGUgcmVwZXRpdGlvbiBwaWxsIHdvdWxkIGdvIHN0YWxlIHVuZGVyIGFcbiAgLy8gc3RyYXRlZ3kgdGhhdCBvbmx5IHJlLWNoZWNrcyB3aGVuIGFuIGlucHV0IGlkZW50aXR5IGNoYW5nZXMuXG59KVxuZXhwb3J0IGNsYXNzIEFqZlNsaWRlSGVhZGVyIHtcbiAgLyoqIEFic2VudCB3aGlsZSBhIHN0YXJ0IG9yIGVuZCBtZXNzYWdlIHBhZ2UgaXMgb24gc2NyZWVuLiAqL1xuICBASW5wdXQoKSBzbGlkZTogQWpmU2xpZGVJbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBUaGUgbnVtYmVyIHNob3duIGluIHRoZSBiYWRnZSwgYWxyZWFkeSBvZmZzZXQgYnkgYW55IHN0YXJ0IG1lc3NhZ2UuICovXG4gIEBJbnB1dCgpIGRpc3BsYXlOdW1iZXIgPSAxO1xuXG4gIC8qKiBFdmVyeSBzbGlkZSBvZiB0aGUgZm9ybSwgZm9yIHRoZSBqdW1wIG1lbnUuICovXG4gIEBJbnB1dCgpIHNsaWRlczogQWpmU2xpZGVJbnN0YW5jZVtdID0gW107XG5cbiAgLyoqIEhvdyBtYW55IHBhZ2VzIHRoZSBzbGlkZXIgaG9sZHMsIHJlcGV0aXRpb25zIGFuZCBtZXNzYWdlIHBhZ2VzIGluY2x1ZGVkLiAqL1xuICBASW5wdXQoKSBwYWdlcyA9IDA7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvcm0gaGFzIGFueXdoZXJlIHRvIHBhZ2UgdG8uIEEgc2luZ2xlIHBhZ2UgZm9ybSBnZXRzIG5vIGFycm93c1xuICAgKiBhbmQgbm8gXCJzbGlkZSAxIG9mIDFcIjogYm90aCBhcmUgY29udHJvbHMgdGhhdCBjYW5ub3QgZG8gYW55dGhpbmcuXG4gICAqL1xuICBnZXQgY2FuTmF2aWdhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXMgPiAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGp1bXAgbWVudSBpcyB3b3J0aCBvcGVuaW5nLiBDb3VudGVkIG92ZXIgdGhlIHZpc2libGUgc2xpZGVzLCB0aGVcbiAgICogb25seSBvbmVzIHRoZSBtZW51IGNhbiBhY3R1YWxseSByZWFjaC5cbiAgICovXG4gIGdldCBjYW5KdW1wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNsaWRlcy5maWx0ZXIocyA9PiBzLnZpc2libGUgIT09IGZhbHNlKS5sZW5ndGggPiAxO1xuICB9XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGp1bXBUbyA9IG5ldyBFdmVudEVtaXR0ZXI8QWpmU2xpZGVJbnN0YW5jZT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHByZXYgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBuZXh0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xufVxuIiwiPGRpdiBjbGFzcz1cImFqZi1zbGlkZS1oZWFkZXJcIj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiYWpmLXNsaWRlLXRpdGxlXCJcbiAgICBbY2xhc3MuYWpmLXNsaWRlLXRpdGxlLXN0YXRpY109XCIhc2xpZGUgfHwgIWNhbkp1bXBcIlxuICAgIFtkaXNhYmxlZF09XCIhc2xpZGUgfHwgIWNhbkp1bXBcIlxuICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJzbGlkZU1lbnVcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0dvIHRvIHNsaWRlJyB8IHRyYW5zbG9jb1wiXG4gID5cbiAgICA8c3BhbiBjbGFzcz1cImFqZi1zbGlkZS1udW1iZXJcIj57eyBkaXNwbGF5TnVtYmVyIH19PC9zcGFuPlxuXG4gICAgPCEtLSBFdmVyeSBzbGlkZSB0aXRsZSBpcyBsYWlkIG91dCBpbiB0aGUgc2FtZSBncmlkIGNlbGwsIHNvIHRoZSB0cmlnZ2VyIGlzIGFzXG4gICAgICAgICB3aWRlIGFzIHRoZSBsb25nZXN0IG9mIHRoZW0gYW5kIGtlZXBzIHRoYXQgd2lkdGggd2hpbGUgcGFnaW5nLiBPbmx5IHRoZVxuICAgICAgICAgY3VycmVudCB0aXRsZSBpcyB2aXNpYmxlOyB0aGUgcmVzdCBqdXN0IGhvbGQgdGhlIHNwYWNlIG9wZW4uIC0tPlxuICAgIDxzcGFuIGNsYXNzPVwiYWpmLXNsaWRlLWxhYmVsLXN0YWNrXCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImFqZi1zbGlkZS1sYWJlbFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBzIG9mIHNsaWRlc1wiXG4gICAgICAgIFtjbGFzcy5hamYtY3VycmVudF09XCJzID09PSBzbGlkZVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwicy5ub2RlLmxhYmVsIHwgdHJhbnNsb2NvXCJcbiAgICAgID48L3NwYW4+XG4gICAgPC9zcGFuPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImFqZi1zbGlkZS1jYXJldFwiICpuZ0lmPVwic2xpZGUgJiYgY2FuSnVtcFwiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuXG4gIDxtYXQtbWVudSAjc2xpZGVNZW51PVwibWF0TWVudVwiPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICpuZ0Zvcj1cImxldCBzIG9mIHNsaWRlc1wiXG4gICAgICBbZGlzYWJsZWRdPVwicy52aXNpYmxlID09PSBmYWxzZVwiXG4gICAgICAoY2xpY2spPVwianVtcFRvLmVtaXQocylcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbiBbY2xhc3MuYWpmLWludmFsaWRdPVwiIXMudmFsaWRcIj57eyBzLnZhbGlkID8gJ2NoZWNrJyA6ICd3YXJuaW5nJyB9fTwvbWF0LWljb24+XG4gICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cInMubm9kZS5sYWJlbCB8IHRyYW5zbG9jb1wiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtbWVudT5cblxuICA8IS0tIE5vdGhpbmcgdG8gcGFnZSB0aHJvdWdoIGluIGEgc2luZ2xlIHBhZ2UgZm9ybS4gLS0+XG4gIDxkaXYgY2xhc3M9XCJhamYtc2xpZGUtbmF2XCIgKm5nSWY9XCJjYW5OYXZpZ2F0ZVwiPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhamYtYnRuXCJcbiAgICAgIChjbGljayk9XCJwcmV2LmVtaXQoKVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidCYWNrJyB8IHRyYW5zbG9jb1wiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNoZXZyb25fbGVmdDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImFqZi1idG5cIlxuICAgICAgKGNsaWNrKT1cIm5leHQuZW1pdCgpXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0ZvcndhcmQnIHwgdHJhbnNsb2NvXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxzcGFuIGNsYXNzPVwiYWpmLXNsaWRlLWhlYWRlci1zcGFjZXJcIj48L3NwYW4+XG5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,148 @@
1
+ /**
2
+ * @license
3
+ * Copyright (C) Gnucoop soc. coop.
4
+ *
5
+ * This file is part of the Advanced JSON forms (ajf).
6
+ *
7
+ * Advanced JSON forms (ajf) is free software: you can redistribute it and/or
8
+ * modify it under the terms of the GNU Affero General Public License as
9
+ * published by the Free Software Foundation, either version 3 of the License,
10
+ * or (at your option) any later version.
11
+ *
12
+ * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
15
+ * General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Affero General Public License
18
+ * along with Advanced JSON forms (ajf).
19
+ * If not, see http://www.gnu.org/licenses/.
20
+ *
21
+ */
22
+ import { AjfFieldType, isFieldInstance, isRepeatingSlideInstance, nodeInstanceCompleteName, } from '@ajf/core/forms';
23
+ import { Pipe } from '@angular/core';
24
+ import * as i0 from "@angular/core";
25
+ /**
26
+ * The fields a slide header counts. `slideNodes` is indexed per repetition, and
27
+ * a non-repeating slide keeps its only set of nodes at index 0, so both kinds of
28
+ * slide are read the same way.
29
+ */
30
+ const countableFields = (slide, idx) => {
31
+ const nodes = (slide.slideNodes && slide.slideNodes[idx]) || slide.flatNodes || [];
32
+ return nodes.filter(n => n.visible && isFieldInstance(n) && n.node.fieldType !== AjfFieldType.Empty);
33
+ };
34
+ /**
35
+ * Whether a field holds anything.
36
+ *
37
+ * The value is read off the form group, not off `AjfFieldInstance.value`: the
38
+ * instance's own `value` is only written at initialisation and by formulas, so it
39
+ * does not follow what the user types. The group is flat and keyed by each
40
+ * instance's complete name, which is how `AjfFormRendererService.getControl`
41
+ * resolves a control too.
42
+ */
43
+ const isFilled = (field, formGroup) => {
44
+ const name = nodeInstanceCompleteName(field);
45
+ const control = formGroup != null && formGroup.contains(name) ? formGroup.controls[name] : null;
46
+ const value = control != null ? control.value : field.value;
47
+ if (value == null || value === '') {
48
+ return false;
49
+ }
50
+ if (Array.isArray(value)) {
51
+ return value.length > 0;
52
+ }
53
+ return true;
54
+ };
55
+ /**
56
+ * How many of a slide's fields carry a value, out of how many are on it. Notes
57
+ * (`AjfFieldType.Empty`) hold no value and are left out of both numbers.
58
+ *
59
+ * Impure because it reads mutable instance state, in the same way as
60
+ * `ajfValidSlide` and `ajfAsFieldInstanceErrors`. Returns a memoized object; see
61
+ * the note inside.
62
+ */
63
+ export class AjfSlideCompletionPipe {
64
+ constructor() {
65
+ this._last = null;
66
+ }
67
+ transform(slide, idx = 0, formGroup = null) {
68
+ const fields = countableFields(slide, idx);
69
+ const done = fields.filter(f => isFilled(f, formGroup)).length;
70
+ const total = fields.length;
71
+ // Hand back the same object while the counts hold, or the fresh identity on
72
+ // every check would trip Angular's "expression has changed" guard.
73
+ if (this._last != null && this._last.done === done && this._last.total === total) {
74
+ return this._last;
75
+ }
76
+ this._last = { done, total };
77
+ return this._last;
78
+ }
79
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfSlideCompletionPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
80
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AjfSlideCompletionPipe, name: "ajfSlideCompletion", pure: false }); }
81
+ }
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfSlideCompletionPipe, decorators: [{
83
+ type: Pipe,
84
+ args: [{ name: 'ajfSlideCompletion', pure: false }]
85
+ }] });
86
+ /**
87
+ * How many of a slide's visible fields are failing validation.
88
+ */
89
+ export class AjfSlideIssuesPipe {
90
+ transform(slide, idx = 0) {
91
+ return countableFields(slide, idx).filter(f => !f.valid).length;
92
+ }
93
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfSlideIssuesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
94
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AjfSlideIssuesPipe, name: "ajfSlideIssues", pure: false }); }
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfSlideIssuesPipe, decorators: [{
97
+ type: Pipe,
98
+ args: [{ name: 'ajfSlideIssues', pure: false }]
99
+ }] });
100
+ /**
101
+ * The form's outstanding work in one place. A per-slide count only tells the
102
+ * reader about the slide they are already looking at, which is the one place
103
+ * they can see the failing fields for themselves.
104
+ *
105
+ * Counted here rather than taken from `AjfFormRendererService.errors`, which
106
+ * counts invalid slide pages and says nothing about how many fields are behind
107
+ * them.
108
+ *
109
+ * Impure and memoized, like its neighbours above.
110
+ */
111
+ export class AjfFormIssuesPipe {
112
+ constructor() {
113
+ this._last = { fields: 0, slides: 0 };
114
+ }
115
+ transform(slides) {
116
+ let fields = 0;
117
+ let slideCount = 0;
118
+ (slides || [])
119
+ .filter(slide => slide.visible !== false)
120
+ .forEach(slide => {
121
+ // Every repetition of a repeating slide carries its own set of fields,
122
+ // and any of them can be the one failing.
123
+ const reps = isRepeatingSlideInstance(slide)
124
+ ? Math.max(1, slide.reps)
125
+ : 1;
126
+ let slideFields = 0;
127
+ for (let idx = 0; idx < reps; idx++) {
128
+ slideFields += countableFields(slide, idx).filter(f => !f.valid).length;
129
+ }
130
+ if (slideFields > 0) {
131
+ fields += slideFields;
132
+ slideCount++;
133
+ }
134
+ });
135
+ if (this._last.fields === fields && this._last.slides === slideCount) {
136
+ return this._last;
137
+ }
138
+ this._last = { fields, slides: slideCount };
139
+ return this._last;
140
+ }
141
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfFormIssuesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
142
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AjfFormIssuesPipe, name: "ajfFormIssues", pure: false }); }
143
+ }
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfFormIssuesPipe, decorators: [{
145
+ type: Pipe,
146
+ args: [{ name: 'ajfFormIssues', pure: false }]
147
+ }] });
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGUtc3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC9mb3Jtcy9zcmMvc2xpZGUtc3RhdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBRUgsT0FBTyxFQUdMLFlBQVksRUFJWixlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLHdCQUF3QixHQUN6QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDOztBQVNsRDs7OztHQUlHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUEyQixFQUFFLEdBQVcsRUFBc0IsRUFBRTtJQUN2RixNQUFNLEtBQUssR0FDVCxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO0lBQ3ZFLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FDakIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxZQUFZLENBQUMsS0FBSyxDQUMxRCxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUF1QixFQUFFLFNBQWtDLEVBQVcsRUFBRTtJQUN4RixNQUFNLElBQUksR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxTQUFTLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUks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QyxHQUFHLENBQUMsQ0FBQyxFQUFHLEtBQW1DLENBQUMsSUFBSSxDQUFDO2dCQUN4RCxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ04sSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztnQkFDcEMsV0FBVyxJQUFJLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzFFLENBQUM7WUFDRCxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxJQUFJLFdBQVcsQ0FBQztnQkFDdEIsVUFBVSxFQUFFLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBQyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDOytHQTVCVSxpQkFBaUI7NkdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsSUFBSTttQkFBQyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoQykgR251Y29vcCBzb2MuIGNvb3AuXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikuXG4gKlxuICogQWR2YW5jZWQgSlNPTiBmb3JtcyAoYWpmKSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcbiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhc1xuICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsXG4gKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIEFkdmFuY2VkIEpTT04gZm9ybXMgKGFqZikgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEFmZmVyb1xuICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCBBZHZhbmNlZCBKU09OIGZvcm1zIChhamYpLlxuICogSWYgbm90LCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy5cbiAqXG4gKi9cblxuaW1wb3J0IHtcbiAgQWpmQmFzZVNsaWRlSW5zdGFuY2UsXG4gIEFqZkZpZWxkSW5zdGFuY2UsXG4gIEFqZkZpZWxkVHlwZSxcbiAgQWpmTm9kZUluc3RhbmNlLFxuICBBamZSZXBlYXRpbmdTbGlkZUluc3RhbmNlLFxuICBBamZTbGlkZUluc3RhbmNlLFxuICBpc0ZpZWxkSW5zdGFuY2UsXG4gIGlzUmVwZWF0aW5nU2xpZGVJbnN0YW5jZSxcbiAgbm9kZUluc3RhbmNlQ29tcGxldGVOYW1lLFxufSBmcm9tICdAYWpmL2NvcmUvZm9ybXMnO1xuaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VW50eXBlZEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKiogVGhlIGZpbGxlZC90b3RhbCBjb3VudGVyIHNob3duIGFzIGEgY2hpcCBpbiB0aGUgc2xpZGUgaGVhZGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBamZTbGlkZUNvbXBsZXRpb24ge1xuICBkb25lOiBudW1iZXI7XG4gIHRvdGFsOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGZpZWxkcyBhIHNsaWRlIGhlYWRlciBjb3VudHMuIGBzbGlkZU5vZGVzYCBpcyBpbmRleGVkIHBlciByZXBldGl0aW9uLCBhbmRcbiAqIGEgbm9uLXJlcGVhdGluZyBzbGlkZSBrZWVwcyBpdHMgb25seSBzZXQgb2Ygbm9kZXMgYXQgaW5kZXggMCwgc28gYm90aCBraW5kcyBvZlxuICogc2xpZGUgYXJlIHJlYWQgdGhlIHNhbWUgd2F5LlxuICovXG5jb25zdCBjb3VudGFibGVGaWVsZHMgPSAoc2xpZGU6IEFqZkJhc2VTbGlkZUluc3RhbmNlLCBpZHg6IG51bWJlcik6IEFqZkZpZWxkSW5zdGFuY2VbXSA9PiB7XG4gIGNvbnN0IG5vZGVzOiBBamZOb2RlSW5zdGFuY2VbXSA9XG4gICAgKHNsaWRlLnNsaWRlTm9kZXMgJiYgc2xpZGUuc2xpZGVOb2Rlc1tpZHhdKSB8fCBzbGlkZS5mbGF0Tm9kZXMgfHwgW107XG4gIHJldHVybiBub2Rlcy5maWx0ZXIoXG4gICAgbiA9PiBuLnZpc2libGUgJiYgaXNGaWVsZEluc3RhbmNlKG4pICYmIG4ubm9kZS5maWVsZFR5cGUgIT09IEFqZkZpZWxkVHlwZS5FbXB0eSxcbiAgKSBhcyBBamZGaWVsZEluc3RhbmNlW107XG59O1xuXG4vKipcbiAqIFdoZXRoZXIgYSBmaWVsZCBob2xkcyBhbnl0aGluZy5cbiAqXG4gKiBUaGUgdmFsdWUgaXMgcmVhZCBvZmYgdGhlIGZvcm0gZ3JvdXAsIG5vdCBvZmYgYEFqZkZpZWxkSW5zdGFuY2UudmFsdWVgOiB0aGVcbiAqIGluc3RhbmNlJ3Mgb3duIGB2YWx1ZWAgaXMgb25seSB3cml0dGVuIGF0IGluaXRpYWxpc2F0aW9uIGFuZCBieSBmb3JtdWxhcywgc28gaXRcbiAqIGRvZXMgbm90IGZvbGxvdyB3aGF0IHRoZSB1c2VyIHR5cGVzLiBUaGUgZ3JvdXAgaXMgZmxhdCBhbmQga2V5ZWQgYnkgZWFjaFxuICogaW5zdGFuY2UncyBjb21wbGV0ZSBuYW1lLCB3aGljaCBpcyBob3cgYEFqZkZvcm1SZW5kZXJlclNlcnZpY2UuZ2V0Q29udHJvbGBcbiAqIHJlc29sdmVzIGEgY29udHJvbCB0b28uXG4gKi9cbmNvbnN0IGlzRmlsbGVkID0gKGZpZWxkOiBBamZGaWVsZEluc3RhbmNlLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAgfCBudWxsKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG5hbWUgPSBub2RlSW5zdGFuY2VDb21wbGV0ZU5hbWUoZmllbGQpO1xuICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwICE9IG51bGwgJiYgZm9ybUdyb3VwLmNvbnRhaW5zKG5hbWUpID8gZm9ybUdyb3VwLmNvbnRyb2xzW25hbWVdIDogbnVsbDtcbiAgY29uc3QgdmFsdWUgPSBjb250cm9sICE9IG51bGwgPyBjb250cm9sLnZhbHVlIDogZmllbGQudmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogSG93IG1hbnkgb2YgYSBzbGlkZSdzIGZpZWxkcyBjYXJyeSBhIHZhbHVlLCBvdXQgb2YgaG93IG1hbnkgYXJlIG9uIGl0LiBOb3Rlc1xuICogKGBBamZGaWVsZFR5cGUuRW1wdHlgKSBob2xkIG5vIHZhbHVlIGFuZCBhcmUgbGVmdCBvdXQgb2YgYm90aCBudW1iZXJzLlxuICpcbiAqIEltcHVyZSBiZWNhdXNlIGl0IHJlYWRzIG11dGFibGUgaW5zdGFuY2Ugc3RhdGUsIGluIHRoZSBzYW1lIHdheSBhc1xuICogYGFqZlZhbGlkU2xpZGVgIGFuZCBgYWpmQXNGaWVsZEluc3RhbmNlRXJyb3JzYC4gUmV0dXJucyBhIG1lbW9pemVkIG9iamVjdDsgc2VlXG4gKiB0aGUgbm90ZSBpbnNpZGUuXG4gKi9cbkBQaXBlKHtuYW1lOiAnYWpmU2xpZGVDb21wbGV0aW9uJywgcHVyZTogZmFsc2V9KVxuZXhwb3J0IGNsYXNzIEFqZlNsaWRlQ29tcGxldGlvblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSBfbGFzdDogQWpmU2xpZGVDb21wbGV0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgdHJhbnNmb3JtKFxuICAgIHNsaWRlOiBBamZCYXNlU2xpZGVJbnN0YW5jZSxcbiAgICBpZHg6IG51bWJlciA9IDAsXG4gICAgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwIHwgbnVsbCA9IG51bGwsXG4gICk6IEFqZlNsaWRlQ29tcGxldGlvbiB7XG4gICAgY29uc3QgZmllbGRzID0gY291bnRhYmxlRmllbGRzKHNsaWRlLCBpZHgpO1xuICAgIGNvbnN0IGRvbmUgPSBmaWVsZHMuZmlsdGVyKGYgPT4gaXNGaWxsZWQoZiwgZm9ybUdyb3VwKSkubGVuZ3RoO1xuICAgIGNvbnN0IHRvdGFsID0gZmllbGRzLmxlbmd0aDtcbiAgICAvLyBIYW5kIGJhY2sgdGhlIHNhbWUgb2JqZWN0IHdoaWxlIHRoZSBjb3VudHMgaG9sZCwgb3IgdGhlIGZyZXNoIGlkZW50aXR5IG9uXG4gICAgLy8gZXZlcnkgY2hlY2sgd291bGQgdHJpcCBBbmd1bGFyJ3MgXCJleHByZXNzaW9uIGhhcyBjaGFuZ2VkXCIgZ3VhcmQuXG4gICAgaWYgKHRoaXMuX2xhc3QgIT0gbnVsbCAmJiB0aGlzLl9sYXN0LmRvbmUgPT09IGRvbmUgJiYgdGhpcy5fbGFzdC50b3RhbCA9PT0gdG90YWwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sYXN0O1xuICAgIH1cbiAgICB0aGlzLl9sYXN0ID0ge2RvbmUsIHRvdGFsfTtcbiAgICByZXR1cm4gdGhpcy5fbGFzdDtcbiAgfVxufVxuXG4vKipcbiAqIEhvdyBtYW55IG9mIGEgc2xpZGUncyB2aXNpYmxlIGZpZWxkcyBhcmUgZmFpbGluZyB2YWxpZGF0aW9uLlxuICovXG5AUGlwZSh7bmFtZTogJ2FqZlNsaWRlSXNzdWVzJywgcHVyZTogZmFsc2V9KVxuZXhwb3J0IGNsYXNzIEFqZlNsaWRlSXNzdWVzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oc2xpZGU6IEFqZkJhc2VTbGlkZUluc3RhbmNlLCBpZHg6IG51bWJlciA9IDApOiBudW1iZXIge1xuICAgIHJldHVybiBjb3VudGFibGVGaWVsZHMoc2xpZGUsIGlkeCkuZmlsdGVyKGYgPT4gIWYudmFsaWQpLmxlbmd0aDtcbiAgfVxufVxuXG4vKiogV2hhdCBpcyBsZWZ0IHRvIGZpeCBpbiB0aGUgd2hvbGUgZm9ybSwgZm9yIHRoZSBoZWFkZXIgYW5kIGZvb3RlciBhbGVydHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEFqZkZvcm1Jc3N1ZXMge1xuICAvKiogVmlzaWJsZSBmaWVsZHMgZmFpbGluZyB2YWxpZGF0aW9uLCBhY3Jvc3MgZXZlcnkgc2xpZGUgYW5kIHJlcGV0aXRpb24uICovXG4gIGZpZWxkczogbnVtYmVyO1xuICAvKiogSG93IG1hbnkgc2xpZGVzIGhvbGQgYXQgbGVhc3Qgb25lIG9mIHRoZW0uICovXG4gIHNsaWRlczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBmb3JtJ3Mgb3V0c3RhbmRpbmcgd29yayBpbiBvbmUgcGxhY2UuIEEgcGVyLXNsaWRlIGNvdW50IG9ubHkgdGVsbHMgdGhlXG4gKiByZWFkZXIgYWJvdXQgdGhlIHNsaWRlIHRoZXkgYXJlIGFscmVhZHkgbG9va2luZyBhdCwgd2hpY2ggaXMgdGhlIG9uZSBwbGFjZVxuICogdGhleSBjYW4gc2VlIHRoZSBmYWlsaW5nIGZpZWxkcyBmb3IgdGhlbXNlbHZlcy5cbiAqXG4gKiBDb3VudGVkIGhlcmUgcmF0aGVyIHRoYW4gdGFrZW4gZnJvbSBgQWpmRm9ybVJlbmRlcmVyU2VydmljZS5lcnJvcnNgLCB3aGljaFxuICogY291bnRzIGludmFsaWQgc2xpZGUgcGFnZXMgYW5kIHNheXMgbm90aGluZyBhYm91dCBob3cgbWFueSBmaWVsZHMgYXJlIGJlaGluZFxuICogdGhlbS5cbiAqXG4gKiBJbXB1cmUgYW5kIG1lbW9pemVkLCBsaWtlIGl0cyBuZWlnaGJvdXJzIGFib3ZlLlxuICovXG5AUGlwZSh7bmFtZTogJ2FqZkZvcm1Jc3N1ZXMnLCBwdXJlOiBmYWxzZX0pXG5leHBvcnQgY2xhc3MgQWpmRm9ybUlzc3Vlc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSBfbGFzdDogQWpmRm9ybUlzc3VlcyA9IHtmaWVsZHM6IDAsIHNsaWRlczogMH07XG5cbiAgdHJhbnNmb3JtKHNsaWRlczogQWpmU2xpZGVJbnN0YW5jZVtdIHwgbnVsbCk6IEFqZkZvcm1Jc3N1ZXMge1xuICAgIGxldCBmaWVsZHMgPSAwO1xuICAgIGxldCBzbGlkZUNvdW50ID0gMDtcbiAgICAoc2xpZGVzIHx8IFtdKVxuICAgICAgLmZpbHRlcihzbGlkZSA9PiBzbGlkZS52aXNpYmxlICE9PSBmYWxzZSlcbiAgICAgIC5mb3JFYWNoKHNsaWRlID0+IHtcbiAgICAgICAgLy8gRXZlcnkgcmVwZXRpdGlvbiBvZiBhIHJlcGVhdGluZyBzbGlkZSBjYXJyaWVzIGl0cyBvd24gc2V0IG9mIGZpZWxkcyxcbiAgICAgICAgLy8gYW5kIGFueSBvZiB0aGVtIGNhbiBiZSB0aGUgb25lIGZhaWxpbmcuXG4gICAgICAgIGNvbnN0IHJlcHMgPSBpc1JlcGVhdGluZ1NsaWRlSW5zdGFuY2Uoc2xpZGUpXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCAoc2xpZGUgYXMgQWpmUmVwZWF0aW5nU2xpZGVJbnN0YW5jZSkucmVwcylcbiAgICAgICAgICA6IDE7XG4gICAgICAgIGxldCBzbGlkZUZpZWxkcyA9IDA7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHJlcHM7IGlkeCsrKSB7XG4gICAgICAgICAgc2xpZGVGaWVsZHMgKz0gY291bnRhYmxlRmllbGRzKHNsaWRlLCBpZHgpLmZpbHRlcihmID0+ICFmLnZhbGlkKS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNsaWRlRmllbGRzID4gMCkge1xuICAgICAgICAgIGZpZWxkcyArPSBzbGlkZUZpZWxkcztcbiAgICAgICAgICBzbGlkZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmICh0aGlzLl9sYXN0LmZpZWxkcyA9PT0gZmllbGRzICYmIHRoaXMuX2xhc3Quc2xpZGVzID09PSBzbGlkZUNvdW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGFzdDtcbiAgICB9XG4gICAgdGhpcy5fbGFzdCA9IHtmaWVsZHMsIHNsaWRlczogc2xpZGVDb3VudH07XG4gICAgcmV0dXJuIHRoaXMuX2xhc3Q7XG4gIH1cbn1cbiJdfQ==
@@ -32,11 +32,11 @@ export class AjfTableFieldComponent extends CoreTableFieldComponent {
32
32
  super(cdr, service, was);
33
33
  }
34
34
  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 }); }
35
- 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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i4.FormatIfNumber, name: "ajfFormatIfNumber" }, { kind: "pipe", type: i4.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 }); }
35
+ 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:1px solid var(--ajf-border);border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:13px}table.ajf-table-field .ajf-header-row{background:var(--ajf-band)}table.ajf-table-field .ajf-header-row td,table.ajf-table-field .ajf-header-row th{color:var(--ajf-text-muted);font-family:var(--ajf-font-mono);font-size:11px;letter-spacing:.09em;text-transform:uppercase}table.ajf-table-field th,table.ajf-table-field td{position:relative;padding:9px 12px;border-right:1px solid var(--ajf-border);border-bottom:1px solid var(--ajf-border);text-align:left}table.ajf-table-field th:last-child,table.ajf-table-field td:last-child{border-right:0}table.ajf-table-field tr:last-child td{border-bottom:0}table.ajf-table-field tbody tr:hover:not(.ajf-header-row){background:var(--ajf-band)}table.ajf-table-field td span{display:block;width:100%;min-height:1.4em;box-sizing:border-box;font:inherit;cursor:text;outline:none}table.ajf-table-field td input{position:absolute;inset:0;width:100%;box-sizing:border-box;padding:9px 12px;border:1px solid var(--ajf-accent);background:var(--ajf-surface);color:var(--ajf-text);font:inherit;cursor:text;outline:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i4.FormatIfNumber, name: "ajfFormatIfNumber" }, { kind: "pipe", type: i4.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 }); }
36
36
  }
37
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AjfTableFieldComponent, decorators: [{
38
38
  type: Component,
39
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, 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"] }]
39
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, 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:1px solid var(--ajf-border);border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:13px}table.ajf-table-field .ajf-header-row{background:var(--ajf-band)}table.ajf-table-field .ajf-header-row td,table.ajf-table-field .ajf-header-row th{color:var(--ajf-text-muted);font-family:var(--ajf-font-mono);font-size:11px;letter-spacing:.09em;text-transform:uppercase}table.ajf-table-field th,table.ajf-table-field td{position:relative;padding:9px 12px;border-right:1px solid var(--ajf-border);border-bottom:1px solid var(--ajf-border);text-align:left}table.ajf-table-field th:last-child,table.ajf-table-field td:last-child{border-right:0}table.ajf-table-field tr:last-child td{border-bottom:0}table.ajf-table-field tbody tr:hover:not(.ajf-header-row){background:var(--ajf-band)}table.ajf-table-field td span{display:block;width:100%;min-height:1.4em;box-sizing:border-box;font:inherit;cursor:text;outline:none}table.ajf-table-field td input{position:absolute;inset:0;width:100%;box-sizing:border-box;padding:9px 12px;border:1px solid var(--ajf-accent);background:var(--ajf-surface);color:var(--ajf-text);font:inherit;cursor:text;outline:none}\n"] }]
40
40
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.AjfFormRendererService }, { type: i5.AjfWarningAlertService, decorators: [{
41
41
  type: Inject,
42
42
  args: [AJF_WARNING_ALERT_SERVICE]