tango-app-ui-manage-settings 3.7.52 → 3.7.53

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.
@@ -25,8 +25,6 @@ export class TraxConfigurationComponent {
25
25
  { pass: 'Compliant', fail: 'Non-Compliant' },
26
26
  { pass: 'Satisfactory', fail: 'Unsatisfactory' }
27
27
  ];
28
- /** Pass mark shown in the preview; per-audit pass marks live on each audit. */
29
- previewPassMark = 75;
30
28
  clientId = '';
31
29
  isDisabled = true;
32
30
  saving = false;
@@ -127,10 +125,10 @@ export class TraxConfigurationComponent {
127
125
  });
128
126
  }
129
127
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraxConfigurationComponent, deps: [{ token: i1.ClientApiService }, { token: i2.ToastService }], target: i0.ɵɵFactoryTarget.Component });
130
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TraxConfigurationComponent, selector: "lib-trax-configuration", ngImport: i0, template: "<div class=\"d-flex justify-content-end\">\r\n <button (click)=\"toggleForm()\" *ngIf=\"isDisabled\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M14.167 2.5a2.357 2.357 0 1 1 3.333 3.333L6.25 17.083 2.5 17.5l.417-3.75L14.167 2.5Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>Edit Details</button>\r\n</div>\r\n\r\n<div class=\"row trax-config\" [class.is-readonly]=\"isDisabled\">\r\n <!-- Audit Labels -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Audit Labels</div>\r\n <div class=\"tc-help\">Rename the two scoring outcomes. These labels replace Pass and Fail everywhere in the Audit\r\n module \u2014 dashboards, store lists, gallery filters, reports and exports.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label tc-label--pass\" for=\"traxPassLabel\">At or above the pass mark</label>\r\n <input id=\"traxPassLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.passLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Pass\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label tc-label--fail\" for=\"traxFailLabel\">Below the pass mark</label>\r\n <input id=\"traxFailLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.failLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Fail\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"tc-label\">Preview</div>\r\n <div class=\"tc-preview tc-preview--chips\">\r\n <span class=\"tc-chip tc-chip--pass\" [title]=\"(config.passLabel.trim() || 'Pass') + ' \u2265 ' + previewPassMark + '%'\">\r\n <span class=\"tc-chip-name\">{{ config.passLabel.trim() || 'Pass' }}</span>\r\n <span class=\"tc-chip-mark\">\u2265 {{ previewPassMark }}%</span>\r\n </span>\r\n <span class=\"tc-chip tc-chip--fail\" [title]=\"(config.failLabel.trim() || 'Fail') + ' < ' + previewPassMark + '%'\">\r\n <span class=\"tc-chip-name\">{{ config.failLabel.trim() || 'Fail' }}</span>\r\n <span class=\"tc-chip-mark\">&lt; {{ previewPassMark }}%</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tc-presets mt-4\">\r\n <span class=\"tc-presets-label\">Presets</span>\r\n <button type=\"button\" class=\"tc-preset\" *ngFor=\"let p of presets\" [class.is-on]=\"isPreset(p)\"\r\n [disabled]=\"isDisabled\" (click)=\"applyPreset(p)\">{{ p.pass }} / {{ p.fail }}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Remark Fields -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Remark Fields</div>\r\n <div class=\"tc-help\">Rename the two free-text fields auditors fill in the mobile app. The names apply to the mobile\r\n form, the Gallery, exports and CSV downloads.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxRemarksLabel\">Remarks field</label>\r\n <input id=\"traxRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.remarksLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Remarks\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxAdditionalRemarksLabel\">Additional Remarks field</label>\r\n <input id=\"traxAdditionalRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\"\r\n [(ngModel)]=\"config.additionalRemarksLabel\" [disabled]=\"isDisabled\" placeholder=\"Additional Remarks\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!isDisabled\">\r\n <div class=\"mb-5 w-100 footer-seperator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" [disabled]=\"!canSave\" (click)=\"onSubmit()\">\r\n <span>{{ saving ? 'Saving\u2026' : 'Save Changes' }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".trax-config .tc-block{margin-top:20px;margin-bottom:8px}.trax-config .tc-block+.tc-block{margin-top:36px}.trax-config .tc-title{color:#101828;font-size:16px;font-weight:600;line-height:24px}.trax-config .tc-help{color:#667085;font-size:14px;line-height:20px;margin-top:4px;max-width:760px}.trax-config .tc-label{display:block;color:#344054;font-size:14px;font-weight:500;line-height:20px;margin-bottom:6px}.trax-config .tc-label--pass{color:#027a48}.trax-config .tc-label--fail{color:#b42318}.trax-config .form-control{min-height:44px;border-radius:8px}.trax-config .tc-preview{display:flex;flex-wrap:wrap;gap:8px;align-items:center;min-height:44px}.trax-config .tc-preview--chips{flex-wrap:nowrap;height:44px;padding:0 8px;border-radius:8px;background:#f9fafb}.trax-config .tc-chip{display:inline-flex;align-items:center;gap:4px;flex:0 1 auto;min-width:0;padding:4px 12px;border-radius:999px;font-size:13px;font-weight:600;line-height:20px;white-space:nowrap}.trax-config .tc-chip--pass{background:#ecfdf3;color:#027a48}.trax-config .tc-chip--fail{background:#fef3f2;color:#b42318}.trax-config .tc-chip-name{min-width:0;overflow:hidden;text-overflow:ellipsis}.trax-config .tc-chip-mark{flex-shrink:0}.trax-config .tc-presets{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.trax-config .tc-presets-label{color:#667085;font-size:14px}.trax-config .tc-preset{padding:8px 16px;border-radius:999px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.trax-config .tc-preset.is-on{border-color:#b2ddff;background:#eff8ff;color:#175cd3}.trax-config .tc-preset:disabled{cursor:default;opacity:.7}.trax-config.is-readonly .form-control:disabled{background:#f9fafb;color:#344054}.trax-config .footer-seperator{border-top:1px solid #EAECF0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
128
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TraxConfigurationComponent, selector: "lib-trax-configuration", ngImport: i0, template: "<div class=\"d-flex justify-content-end\">\r\n <button (click)=\"toggleForm()\" *ngIf=\"isDisabled\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M14.167 2.5a2.357 2.357 0 1 1 3.333 3.333L6.25 17.083 2.5 17.5l.417-3.75L14.167 2.5Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>Edit Details</button>\r\n</div>\r\n\r\n<div class=\"row trax-config\" [class.is-readonly]=\"isDisabled\">\r\n <!-- Audit Labels -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Audit Labels</div>\r\n <div class=\"tc-help\">Rename the two scoring outcomes. These labels replace Pass and Fail everywhere in the Audit\r\n module \u2014 dashboards, store lists, gallery filters, reports and exports.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-6\">\r\n <label class=\"tc-label tc-label--pass\" for=\"traxPassLabel\">At or above the pass mark</label>\r\n <input id=\"traxPassLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.passLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Pass\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"tc-label tc-label--fail\" for=\"traxFailLabel\">Below the pass mark</label>\r\n <input id=\"traxFailLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.failLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Fail\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"tc-presets mt-4\">\r\n <span class=\"tc-presets-label\">Presets</span>\r\n <button type=\"button\" class=\"tc-preset\" *ngFor=\"let p of presets\" [class.is-on]=\"isPreset(p)\"\r\n [disabled]=\"isDisabled\" (click)=\"applyPreset(p)\">{{ p.pass }} / {{ p.fail }}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Remark Fields -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Remark Fields</div>\r\n <div class=\"tc-help\">Rename the two free-text fields auditors fill in the mobile app. The names apply to the mobile\r\n form, the Gallery, exports and CSV downloads.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxRemarksLabel\">Remarks field</label>\r\n <input id=\"traxRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.remarksLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Remarks\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxAdditionalRemarksLabel\">Additional Remarks field</label>\r\n <input id=\"traxAdditionalRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\"\r\n [(ngModel)]=\"config.additionalRemarksLabel\" [disabled]=\"isDisabled\" placeholder=\"Additional Remarks\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!isDisabled\">\r\n <div class=\"mb-5 w-100 footer-seperator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" [disabled]=\"!canSave\" (click)=\"onSubmit()\">\r\n <span>{{ saving ? 'Saving\u2026' : 'Save Changes' }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".trax-config .tc-block{margin-top:20px;margin-bottom:8px}.trax-config .tc-block+.tc-block{margin-top:36px}.trax-config .tc-title{color:#101828;font-size:16px;font-weight:600;line-height:24px}.trax-config .tc-help{color:#667085;font-size:14px;line-height:20px;margin-top:4px;max-width:760px}.trax-config .tc-label{display:block;color:#344054;font-size:14px;font-weight:500;line-height:20px;margin-bottom:6px}.trax-config .tc-label--pass{color:#027a48}.trax-config .tc-label--fail{color:#b42318}.trax-config .form-control{min-height:44px;border-radius:8px}.trax-config .tc-presets{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.trax-config .tc-presets-label{color:#667085;font-size:14px}.trax-config .tc-preset{padding:8px 16px;border-radius:999px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.trax-config .tc-preset.is-on{border-color:#b2ddff;background:#eff8ff;color:#175cd3}.trax-config .tc-preset:disabled{cursor:default;opacity:.7}.trax-config.is-readonly .form-control:disabled{background:#f9fafb;color:#344054}.trax-config .footer-seperator{border-top:1px solid #EAECF0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
131
129
  }
132
130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraxConfigurationComponent, decorators: [{
133
131
  type: Component,
134
- args: [{ selector: 'lib-trax-configuration', template: "<div class=\"d-flex justify-content-end\">\r\n <button (click)=\"toggleForm()\" *ngIf=\"isDisabled\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M14.167 2.5a2.357 2.357 0 1 1 3.333 3.333L6.25 17.083 2.5 17.5l.417-3.75L14.167 2.5Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>Edit Details</button>\r\n</div>\r\n\r\n<div class=\"row trax-config\" [class.is-readonly]=\"isDisabled\">\r\n <!-- Audit Labels -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Audit Labels</div>\r\n <div class=\"tc-help\">Rename the two scoring outcomes. These labels replace Pass and Fail everywhere in the Audit\r\n module \u2014 dashboards, store lists, gallery filters, reports and exports.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label tc-label--pass\" for=\"traxPassLabel\">At or above the pass mark</label>\r\n <input id=\"traxPassLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.passLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Pass\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label tc-label--fail\" for=\"traxFailLabel\">Below the pass mark</label>\r\n <input id=\"traxFailLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.failLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Fail\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"tc-label\">Preview</div>\r\n <div class=\"tc-preview tc-preview--chips\">\r\n <span class=\"tc-chip tc-chip--pass\" [title]=\"(config.passLabel.trim() || 'Pass') + ' \u2265 ' + previewPassMark + '%'\">\r\n <span class=\"tc-chip-name\">{{ config.passLabel.trim() || 'Pass' }}</span>\r\n <span class=\"tc-chip-mark\">\u2265 {{ previewPassMark }}%</span>\r\n </span>\r\n <span class=\"tc-chip tc-chip--fail\" [title]=\"(config.failLabel.trim() || 'Fail') + ' < ' + previewPassMark + '%'\">\r\n <span class=\"tc-chip-name\">{{ config.failLabel.trim() || 'Fail' }}</span>\r\n <span class=\"tc-chip-mark\">&lt; {{ previewPassMark }}%</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tc-presets mt-4\">\r\n <span class=\"tc-presets-label\">Presets</span>\r\n <button type=\"button\" class=\"tc-preset\" *ngFor=\"let p of presets\" [class.is-on]=\"isPreset(p)\"\r\n [disabled]=\"isDisabled\" (click)=\"applyPreset(p)\">{{ p.pass }} / {{ p.fail }}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Remark Fields -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Remark Fields</div>\r\n <div class=\"tc-help\">Rename the two free-text fields auditors fill in the mobile app. The names apply to the mobile\r\n form, the Gallery, exports and CSV downloads.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxRemarksLabel\">Remarks field</label>\r\n <input id=\"traxRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.remarksLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Remarks\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxAdditionalRemarksLabel\">Additional Remarks field</label>\r\n <input id=\"traxAdditionalRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\"\r\n [(ngModel)]=\"config.additionalRemarksLabel\" [disabled]=\"isDisabled\" placeholder=\"Additional Remarks\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!isDisabled\">\r\n <div class=\"mb-5 w-100 footer-seperator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" [disabled]=\"!canSave\" (click)=\"onSubmit()\">\r\n <span>{{ saving ? 'Saving\u2026' : 'Save Changes' }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".trax-config .tc-block{margin-top:20px;margin-bottom:8px}.trax-config .tc-block+.tc-block{margin-top:36px}.trax-config .tc-title{color:#101828;font-size:16px;font-weight:600;line-height:24px}.trax-config .tc-help{color:#667085;font-size:14px;line-height:20px;margin-top:4px;max-width:760px}.trax-config .tc-label{display:block;color:#344054;font-size:14px;font-weight:500;line-height:20px;margin-bottom:6px}.trax-config .tc-label--pass{color:#027a48}.trax-config .tc-label--fail{color:#b42318}.trax-config .form-control{min-height:44px;border-radius:8px}.trax-config .tc-preview{display:flex;flex-wrap:wrap;gap:8px;align-items:center;min-height:44px}.trax-config .tc-preview--chips{flex-wrap:nowrap;height:44px;padding:0 8px;border-radius:8px;background:#f9fafb}.trax-config .tc-chip{display:inline-flex;align-items:center;gap:4px;flex:0 1 auto;min-width:0;padding:4px 12px;border-radius:999px;font-size:13px;font-weight:600;line-height:20px;white-space:nowrap}.trax-config .tc-chip--pass{background:#ecfdf3;color:#027a48}.trax-config .tc-chip--fail{background:#fef3f2;color:#b42318}.trax-config .tc-chip-name{min-width:0;overflow:hidden;text-overflow:ellipsis}.trax-config .tc-chip-mark{flex-shrink:0}.trax-config .tc-presets{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.trax-config .tc-presets-label{color:#667085;font-size:14px}.trax-config .tc-preset{padding:8px 16px;border-radius:999px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.trax-config .tc-preset.is-on{border-color:#b2ddff;background:#eff8ff;color:#175cd3}.trax-config .tc-preset:disabled{cursor:default;opacity:.7}.trax-config.is-readonly .form-control:disabled{background:#f9fafb;color:#344054}.trax-config .footer-seperator{border-top:1px solid #EAECF0}\n"] }]
132
+ args: [{ selector: 'lib-trax-configuration', template: "<div class=\"d-flex justify-content-end\">\r\n <button (click)=\"toggleForm()\" *ngIf=\"isDisabled\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M14.167 2.5a2.357 2.357 0 1 1 3.333 3.333L6.25 17.083 2.5 17.5l.417-3.75L14.167 2.5Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>Edit Details</button>\r\n</div>\r\n\r\n<div class=\"row trax-config\" [class.is-readonly]=\"isDisabled\">\r\n <!-- Audit Labels -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Audit Labels</div>\r\n <div class=\"tc-help\">Rename the two scoring outcomes. These labels replace Pass and Fail everywhere in the Audit\r\n module \u2014 dashboards, store lists, gallery filters, reports and exports.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-6\">\r\n <label class=\"tc-label tc-label--pass\" for=\"traxPassLabel\">At or above the pass mark</label>\r\n <input id=\"traxPassLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.passLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Pass\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"tc-label tc-label--fail\" for=\"traxFailLabel\">Below the pass mark</label>\r\n <input id=\"traxFailLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.failLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Fail\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"tc-presets mt-4\">\r\n <span class=\"tc-presets-label\">Presets</span>\r\n <button type=\"button\" class=\"tc-preset\" *ngFor=\"let p of presets\" [class.is-on]=\"isPreset(p)\"\r\n [disabled]=\"isDisabled\" (click)=\"applyPreset(p)\">{{ p.pass }} / {{ p.fail }}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Remark Fields -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Remark Fields</div>\r\n <div class=\"tc-help\">Rename the two free-text fields auditors fill in the mobile app. The names apply to the mobile\r\n form, the Gallery, exports and CSV downloads.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxRemarksLabel\">Remarks field</label>\r\n <input id=\"traxRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.remarksLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Remarks\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxAdditionalRemarksLabel\">Additional Remarks field</label>\r\n <input id=\"traxAdditionalRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\"\r\n [(ngModel)]=\"config.additionalRemarksLabel\" [disabled]=\"isDisabled\" placeholder=\"Additional Remarks\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!isDisabled\">\r\n <div class=\"mb-5 w-100 footer-seperator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" [disabled]=\"!canSave\" (click)=\"onSubmit()\">\r\n <span>{{ saving ? 'Saving\u2026' : 'Save Changes' }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".trax-config .tc-block{margin-top:20px;margin-bottom:8px}.trax-config .tc-block+.tc-block{margin-top:36px}.trax-config .tc-title{color:#101828;font-size:16px;font-weight:600;line-height:24px}.trax-config .tc-help{color:#667085;font-size:14px;line-height:20px;margin-top:4px;max-width:760px}.trax-config .tc-label{display:block;color:#344054;font-size:14px;font-weight:500;line-height:20px;margin-bottom:6px}.trax-config .tc-label--pass{color:#027a48}.trax-config .tc-label--fail{color:#b42318}.trax-config .form-control{min-height:44px;border-radius:8px}.trax-config .tc-presets{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.trax-config .tc-presets-label{color:#667085;font-size:14px}.trax-config .tc-preset{padding:8px 16px;border-radius:999px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.trax-config .tc-preset.is-on{border-color:#b2ddff;background:#eff8ff;color:#175cd3}.trax-config .tc-preset:disabled{cursor:default;opacity:.7}.trax-config.is-readonly .form-control:disabled{background:#f9fafb;color:#344054}.trax-config .footer-seperator{border-top:1px solid #EAECF0}\n"] }]
135
133
  }], ctorParameters: () => [{ type: i1.ClientApiService }, { type: i2.ToastService }] });
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJheC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbnMvdHJheC1jb25maWd1cmF0aW9uL3RyYXgtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3RyYXgtY29uZmlndXJhdGlvbi90cmF4LWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBVzFDLE1BQU0sUUFBUSxHQUFlO0lBQzNCLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFlBQVksRUFBRSxTQUFTO0lBQ3ZCLHNCQUFzQixFQUFFLG9CQUFvQjtDQUM3QyxDQUFDO0FBRUY7Ozs7R0FJRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUFrQmpCO0lBQW1DO0lBakJ2RCxNQUFNLEdBQWUsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQzVCLE9BQU8sR0FBMEM7UUFDeEQsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7UUFDOUIsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUU7UUFDNUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtLQUNqRCxDQUFDO0lBQ0YsK0VBQStFO0lBQ3RFLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFFOUIsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFUixLQUFLLEdBQWUsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQzNCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRWhELFlBQW9CLE9BQXlCLEVBQVUsRUFBZ0I7UUFBbkQsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFjO1FBQ3JFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUMzQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDYjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLElBQUk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDakYsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksRUFBRTtvQkFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNqQztnQkFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN2QixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN2QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLElBQUksQ0FBQyxHQUFRO1FBQ25CLE9BQU87WUFDTCxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsSUFBSSxRQUFRLENBQUMsU0FBUztZQUMvQyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsSUFBSSxRQUFRLENBQUMsU0FBUztZQUMvQyxZQUFZLEVBQUUsR0FBRyxFQUFFLFlBQVksSUFBSSxRQUFRLENBQUMsWUFBWTtZQUN4RCxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsc0JBQXNCLElBQUksUUFBUSxDQUFDLHNCQUFzQjtTQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQsV0FBVyxDQUFDLENBQWlDO1FBQzNDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVEsQ0FBQyxDQUFpQztRQUN4QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQzthQUN4RixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQ2hELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE1BQU0sT0FBTyxHQUFHO1lBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtZQUN2QyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO1lBQzdDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFO1NBQ2xFLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM1RSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLElBQUksR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDO29CQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2lCQUNyRDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFJLHVDQUF1QyxDQUFDLENBQUM7aUJBQ2hGO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLHVDQUF1QyxDQUFDLENBQUM7WUFDM0ksQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBOUdVLDBCQUEwQjs0RkFBMUIsMEJBQTBCLDhEQzdCdkMsczJJQStFQTs7NEZEbERhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IENsaWVudEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jbGllbnQtYXBpLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUcmF4Q29uZmlnIHtcclxuICBwYXNzTGFiZWw6IHN0cmluZztcclxuICBmYWlsTGFiZWw6IHN0cmluZztcclxuICByZW1hcmtzTGFiZWw6IHN0cmluZztcclxuICBhZGRpdGlvbmFsUmVtYXJrc0xhYmVsOiBzdHJpbmc7XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRTOiBUcmF4Q29uZmlnID0ge1xyXG4gIHBhc3NMYWJlbDogJ1Bhc3MnLFxyXG4gIGZhaWxMYWJlbDogJ0ZhaWwnLFxyXG4gIHJlbWFya3NMYWJlbDogJ1JlbWFya3MnLFxyXG4gIGFkZGl0aW9uYWxSZW1hcmtzTGFiZWw6ICdBZGRpdGlvbmFsIFJlbWFya3MnXHJcbn07XHJcblxyXG4vKipcclxuICogTWFuYWdlIC0+IFNldHRpbmdzIC0+IFRyYXggQ29uZmlndXJhdGlvbi4gUmVuYW1lcyB0aGUgdHdvIHNjb3Jpbmcgb3V0Y29tZXMgKFBhc3MgLyBGYWlsKVxyXG4gKiBhbmQgdGhlIHR3byBmcmVlLXRleHQgcmVtYXJrIGZpZWxkcyBmb3IgdGhlIHdob2xlIGNsaWVudC4gUmVhZCBhbmQgc2F2ZWQgdGhyb3VnaCB0aGVcclxuICogVHJheCBBUEkgKC90cmF4L2F1ZGl0L3NldHRpbmdzKTsgdGhlIEF1ZGl0IG1vZHVsZSByZWFkcyB0aGUgc2FtZSBkb2N1bWVudC5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRyYXgtY29uZmlndXJhdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyYXgtY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RyYXgtY29uZmlndXJhdGlvbi5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyYXhDb25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBjb25maWc6IFRyYXhDb25maWcgPSB7IC4uLkRFRkFVTFRTIH07XHJcbiAgcmVhZG9ubHkgcHJlc2V0czogQXJyYXk8eyBwYXNzOiBzdHJpbmc7IGZhaWw6IHN0cmluZyB9PiA9IFtcclxuICAgIHsgcGFzczogJ1Bhc3MnLCBmYWlsOiAnRmFpbCcgfSxcclxuICAgIHsgcGFzczogJ0NvbXBsaWFudCcsIGZhaWw6ICdOb24tQ29tcGxpYW50JyB9LFxyXG4gICAgeyBwYXNzOiAnU2F0aXNmYWN0b3J5JywgZmFpbDogJ1Vuc2F0aXNmYWN0b3J5JyB9XHJcbiAgXTtcclxuICAvKiogUGFzcyBtYXJrIHNob3duIGluIHRoZSBwcmV2aWV3OyBwZXItYXVkaXQgcGFzcyBtYXJrcyBsaXZlIG9uIGVhY2ggYXVkaXQuICovXHJcbiAgcmVhZG9ubHkgcHJldmlld1Bhc3NNYXJrID0gNzU7XHJcblxyXG4gIGNsaWVudElkID0gJyc7XHJcbiAgaXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgc2F2aW5nID0gZmFsc2U7XHJcbiAgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHNhdmVkOiBUcmF4Q29uZmlnID0geyAuLi5ERUZBVUxUUyB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IENsaWVudEFwaVNlcnZpY2UsIHByaXZhdGUgdHM6IFRvYXN0U2VydmljZSkge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmNsaWVudERhdGEucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZT8uY2xpZW50SWQgJiYgZS5jbGllbnRJZCAhPT0gdGhpcy5jbGllbnRJZCkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50SWQgPSBlLmNsaWVudElkO1xyXG4gICAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2xpZW50SWQpIHsgcmV0dXJuOyB9XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXJ2aWNlLmdldFRyYXhDb25maWcodGhpcy5jbGllbnRJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LmNvZGUgPT09IDIwMCAmJiByZXM/LmRhdGEpIHtcclxuICAgICAgICAgIHRoaXMuc2F2ZWQgPSB0aGlzLnBpY2socmVzLmRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuc2F2ZWQgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwaWNrKHNyYzogYW55KTogVHJheENvbmZpZyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwYXNzTGFiZWw6IHNyYz8ucGFzc0xhYmVsIHx8IERFRkFVTFRTLnBhc3NMYWJlbCxcclxuICAgICAgZmFpbExhYmVsOiBzcmM/LmZhaWxMYWJlbCB8fCBERUZBVUxUUy5mYWlsTGFiZWwsXHJcbiAgICAgIHJlbWFya3NMYWJlbDogc3JjPy5yZW1hcmtzTGFiZWwgfHwgREVGQVVMVFMucmVtYXJrc0xhYmVsLFxyXG4gICAgICBhZGRpdGlvbmFsUmVtYXJrc0xhYmVsOiBzcmM/LmFkZGl0aW9uYWxSZW1hcmtzTGFiZWwgfHwgREVGQVVMVFMuYWRkaXRpb25hbFJlbWFya3NMYWJlbFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSAhdGhpcy5pc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgb25DYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5zYXZlZCB9O1xyXG4gICAgdGhpcy5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFwcGx5UHJlc2V0KHA6IHsgcGFzczogc3RyaW5nOyBmYWlsOiBzdHJpbmcgfSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkgeyByZXR1cm47IH1cclxuICAgIHRoaXMuY29uZmlnLnBhc3NMYWJlbCA9IHAucGFzcztcclxuICAgIHRoaXMuY29uZmlnLmZhaWxMYWJlbCA9IHAuZmFpbDtcclxuICB9XHJcblxyXG4gIGlzUHJlc2V0KHA6IHsgcGFzczogc3RyaW5nOyBmYWlsOiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnBhc3NMYWJlbC50cmltKCkgPT09IHAucGFzcyAmJiB0aGlzLmNvbmZpZy5mYWlsTGFiZWwudHJpbSgpID09PSBwLmZhaWw7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FuU2F2ZSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGMgPSB0aGlzLmNvbmZpZztcclxuICAgIHJldHVybiAhdGhpcy5zYXZpbmcgJiYgW2MucGFzc0xhYmVsLCBjLmZhaWxMYWJlbCwgYy5yZW1hcmtzTGFiZWwsIGMuYWRkaXRpb25hbFJlbWFya3NMYWJlbF1cclxuICAgICAgLmV2ZXJ5KHYgPT4gdi50cmltKCkubGVuZ3RoID4gMCAmJiB2LnRyaW0oKS5sZW5ndGggPD0gNDApO1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2FuU2F2ZSB8fCAhdGhpcy5jbGllbnRJZCkgeyByZXR1cm47IH1cclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICBwYXNzTGFiZWw6IHRoaXMuY29uZmlnLnBhc3NMYWJlbC50cmltKCksXHJcbiAgICAgIGZhaWxMYWJlbDogdGhpcy5jb25maWcuZmFpbExhYmVsLnRyaW0oKSxcclxuICAgICAgcmVtYXJrc0xhYmVsOiB0aGlzLmNvbmZpZy5yZW1hcmtzTGFiZWwudHJpbSgpLFxyXG4gICAgICBhZGRpdGlvbmFsUmVtYXJrc0xhYmVsOiB0aGlzLmNvbmZpZy5hZGRpdGlvbmFsUmVtYXJrc0xhYmVsLnRyaW0oKVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2VydmljZS5zYXZlVHJheENvbmZpZyhwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzPy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc2F2ZWQgPSB0aGlzLnBpY2socmVzLmRhdGEgfHwgcGF5bG9hZCk7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5zYXZlZCB9O1xyXG4gICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudHMuZ2V0U3VjY2Vzc1RvYXN0KCdUcmF4IGNvbmZpZ3VyYXRpb24gc2F2ZWQnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KHJlcz8ubWVzc2FnZSB8fCAnQ291bGQgbm90IHNhdmUgdGhlIFRyYXggY29uZmlndXJhdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8uZXJyb3I/LmVycm9yIHx8IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0NvdWxkIG5vdCBzYXZlIHRoZSBUcmF4IGNvbmZpZ3VyYXRpb24nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gIDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZUZvcm0oKVwiICpuZ0lmPVwiaXNEaXNhYmxlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBhbGlnbi1pdGVtcy1lbmRcIj48c3BhbiBjbGFzcz1cIm1lLTJcIj48c3ZnXHJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTE0LjE2NyAyLjVhMi4zNTcgMi4zNTcgMCAxIDEgMy4zMzMgMy4zMzNMNi4yNSAxNy4wODMgMi41IDE3LjVsLjQxNy0zLjc1TDE0LjE2NyAyLjVaXCJcclxuICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgPC9zdmc+PC9zcGFuPkVkaXQgRGV0YWlsczwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJyb3cgdHJheC1jb25maWdcIiBbY2xhc3MuaXMtcmVhZG9ubHldPVwiaXNEaXNhYmxlZFwiPlxyXG4gIDwhLS0gQXVkaXQgTGFiZWxzIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgdGMtYmxvY2tcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0Yy10aXRsZVwiPkF1ZGl0IExhYmVsczwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRjLWhlbHBcIj5SZW5hbWUgdGhlIHR3byBzY29yaW5nIG91dGNvbWVzLiBUaGVzZSBsYWJlbHMgcmVwbGFjZSBQYXNzIGFuZCBGYWlsIGV2ZXJ5d2hlcmUgaW4gdGhlIEF1ZGl0XHJcbiAgICAgIG1vZHVsZSDigJQgZGFzaGJvYXJkcywgc3RvcmUgbGlzdHMsIGdhbGxlcnkgZmlsdGVycywgcmVwb3J0cyBhbmQgZXhwb3J0cy48L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGctNCBtdC0xXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRjLWxhYmVsIHRjLWxhYmVsLS1wYXNzXCIgZm9yPVwidHJheFBhc3NMYWJlbFwiPkF0IG9yIGFib3ZlIHRoZSBwYXNzIG1hcms8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBpZD1cInRyYXhQYXNzTGFiZWxcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbWF4bGVuZ3RoPVwiNDBcIiBbKG5nTW9kZWwpXT1cImNvbmZpZy5wYXNzTGFiZWxcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBwbGFjZWhvbGRlcj1cIlBhc3NcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRjLWxhYmVsIHRjLWxhYmVsLS1mYWlsXCIgZm9yPVwidHJheEZhaWxMYWJlbFwiPkJlbG93IHRoZSBwYXNzIG1hcms8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBpZD1cInRyYXhGYWlsTGFiZWxcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbWF4bGVuZ3RoPVwiNDBcIiBbKG5nTW9kZWwpXT1cImNvbmZpZy5mYWlsTGFiZWxcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBwbGFjZWhvbGRlcj1cIkZhaWxcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0Yy1sYWJlbFwiPlByZXZpZXc8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGMtcHJldmlldyB0Yy1wcmV2aWV3LS1jaGlwc1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Yy1jaGlwIHRjLWNoaXAtLXBhc3NcIiBbdGl0bGVdPVwiKGNvbmZpZy5wYXNzTGFiZWwudHJpbSgpIHx8ICdQYXNzJykgKyAnIOKJpSAnICsgcHJldmlld1Bhc3NNYXJrICsgJyUnXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGMtY2hpcC1uYW1lXCI+e3sgY29uZmlnLnBhc3NMYWJlbC50cmltKCkgfHwgJ1Bhc3MnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRjLWNoaXAtbWFya1wiPuKJpSB7eyBwcmV2aWV3UGFzc01hcmsgfX0lPC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Yy1jaGlwIHRjLWNoaXAtLWZhaWxcIiBbdGl0bGVdPVwiKGNvbmZpZy5mYWlsTGFiZWwudHJpbSgpIHx8ICdGYWlsJykgKyAnIDwgJyArIHByZXZpZXdQYXNzTWFyayArICclJ1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRjLWNoaXAtbmFtZVwiPnt7IGNvbmZpZy5mYWlsTGFiZWwudHJpbSgpIHx8ICdGYWlsJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Yy1jaGlwLW1hcmtcIj4mbHQ7IHt7IHByZXZpZXdQYXNzTWFyayB9fSU8L3NwYW4+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInRjLXByZXNldHMgbXQtNFwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInRjLXByZXNldHMtbGFiZWxcIj5QcmVzZXRzPC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRjLXByZXNldFwiICpuZ0Zvcj1cImxldCBwIG9mIHByZXNldHNcIiBbY2xhc3MuaXMtb25dPVwiaXNQcmVzZXQocClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KHApXCI+e3sgcC5wYXNzIH19IC8ge3sgcC5mYWlsIH19PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBSZW1hcmsgRmllbGRzIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgdGMtYmxvY2tcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0Yy10aXRsZVwiPlJlbWFyayBGaWVsZHM8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0Yy1oZWxwXCI+UmVuYW1lIHRoZSB0d28gZnJlZS10ZXh0IGZpZWxkcyBhdWRpdG9ycyBmaWxsIGluIHRoZSBtb2JpbGUgYXBwLiBUaGUgbmFtZXMgYXBwbHkgdG8gdGhlIG1vYmlsZVxyXG4gICAgICBmb3JtLCB0aGUgR2FsbGVyeSwgZXhwb3J0cyBhbmQgQ1NWIGRvd25sb2Fkcy48L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGctNCBtdC0xXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRjLWxhYmVsXCIgZm9yPVwidHJheFJlbWFya3NMYWJlbFwiPlJlbWFya3MgZmllbGQ8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBpZD1cInRyYXhSZW1hcmtzTGFiZWxcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbWF4bGVuZ3RoPVwiNDBcIiBbKG5nTW9kZWwpXT1cImNvbmZpZy5yZW1hcmtzTGFiZWxcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBwbGFjZWhvbGRlcj1cIlJlbWFya3NcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRjLWxhYmVsXCIgZm9yPVwidHJheEFkZGl0aW9uYWxSZW1hcmtzTGFiZWxcIj5BZGRpdGlvbmFsIFJlbWFya3MgZmllbGQ8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBpZD1cInRyYXhBZGRpdGlvbmFsUmVtYXJrc0xhYmVsXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG1heGxlbmd0aD1cIjQwXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZmlnLmFkZGl0aW9uYWxSZW1hcmtzTGFiZWxcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIHBsYWNlaG9sZGVyPVwiQWRkaXRpb25hbCBSZW1hcmtzXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCIhaXNEaXNhYmxlZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTUgdy0xMDAgZm9vdGVyLXNlcGVyYXRvclwiPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxhIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBtdC0xIG1lLTRcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNFwiIFtkaXNhYmxlZF09XCIhY2FuU2F2ZVwiIChjbGljayk9XCJvblN1Ym1pdCgpXCI+XHJcbiAgICAgICAgPHNwYW4+e3sgc2F2aW5nID8gJ1NhdmluZ+KApicgOiAnU2F2ZSBDaGFuZ2VzJyB9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJheC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbnMvdHJheC1jb25maWd1cmF0aW9uL3RyYXgtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3RyYXgtY29uZmlndXJhdGlvbi90cmF4LWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBVzFDLE1BQU0sUUFBUSxHQUFlO0lBQzNCLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFlBQVksRUFBRSxTQUFTO0lBQ3ZCLHNCQUFzQixFQUFFLG9CQUFvQjtDQUM3QyxDQUFDO0FBRUY7Ozs7R0FJRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUFnQmpCO0lBQW1DO0lBZnZELE1BQU0sR0FBZSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7SUFDNUIsT0FBTyxHQUEwQztRQUN4RCxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtRQUM5QixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtRQUM1QyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO0tBQ2pELENBQUM7SUFFRixRQUFRLEdBQUcsRUFBRSxDQUFDO0lB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Qzt3R0E1R1UsMEJBQTBCOzRGQUExQiwwQkFBMEIsOERDN0J2Qyw0aUhBa0VBOzs0RkRyQ2EsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgQ2xpZW50QXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NsaWVudC1hcGkuc2VydmljZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRyYXhDb25maWcge1xyXG4gIHBhc3NMYWJlbDogc3RyaW5nO1xyXG4gIGZhaWxMYWJlbDogc3RyaW5nO1xyXG4gIHJlbWFya3NMYWJlbDogc3RyaW5nO1xyXG4gIGFkZGl0aW9uYWxSZW1hcmtzTGFiZWw6IHN0cmluZztcclxufVxyXG5cclxuY29uc3QgREVGQVVMVFM6IFRyYXhDb25maWcgPSB7XHJcbiAgcGFzc0xhYmVsOiAnUGFzcycsXHJcbiAgZmFpbExhYmVsOiAnRmFpbCcsXHJcbiAgcmVtYXJrc0xhYmVsOiAnUmVtYXJrcycsXHJcbiAgYWRkaXRpb25hbFJlbWFya3NMYWJlbDogJ0FkZGl0aW9uYWwgUmVtYXJrcydcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNYW5hZ2UgLT4gU2V0dGluZ3MgLT4gVHJheCBDb25maWd1cmF0aW9uLiBSZW5hbWVzIHRoZSB0d28gc2NvcmluZyBvdXRjb21lcyAoUGFzcyAvIEZhaWwpXHJcbiAqIGFuZCB0aGUgdHdvIGZyZWUtdGV4dCByZW1hcmsgZmllbGRzIGZvciB0aGUgd2hvbGUgY2xpZW50LiBSZWFkIGFuZCBzYXZlZCB0aHJvdWdoIHRoZVxyXG4gKiBUcmF4IEFQSSAoL3RyYXgvYXVkaXQvc2V0dGluZ3MpOyB0aGUgQXVkaXQgbW9kdWxlIHJlYWRzIHRoZSBzYW1lIGRvY3VtZW50LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdHJheC1jb25maWd1cmF0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJheC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdHJheC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJheENvbmZpZ3VyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIGNvbmZpZzogVHJheENvbmZpZyA9IHsgLi4uREVGQVVMVFMgfTtcclxuICByZWFkb25seSBwcmVzZXRzOiBBcnJheTx7IHBhc3M6IHN0cmluZzsgZmFpbDogc3RyaW5nIH0+ID0gW1xyXG4gICAgeyBwYXNzOiAnUGFzcycsIGZhaWw6ICdGYWlsJyB9LFxyXG4gICAgeyBwYXNzOiAnQ29tcGxpYW50JywgZmFpbDogJ05vbi1Db21wbGlhbnQnIH0sXHJcbiAgICB7IHBhc3M6ICdTYXRpc2ZhY3RvcnknLCBmYWlsOiAnVW5zYXRpc2ZhY3RvcnknIH1cclxuICBdO1xyXG5cclxuICBjbGllbnRJZCA9ICcnO1xyXG4gIGlzRGlzYWJsZWQgPSB0cnVlO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBzYXZlZDogVHJheENvbmZpZyA9IHsgLi4uREVGQVVMVFMgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBDbGllbnRBcGlTZXJ2aWNlLCBwcml2YXRlIHRzOiBUb2FzdFNlcnZpY2UpIHtcclxuICAgIHRoaXMuc2VydmljZS5jbGllbnREYXRhLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgaWYgKGU/LmNsaWVudElkICYmIGUuY2xpZW50SWQgIT09IHRoaXMuY2xpZW50SWQpIHtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gZS5jbGllbnRJZDtcclxuICAgICAgICB0aGlzLmxvYWQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNsaWVudElkKSB7IHJldHVybjsgfVxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZS5nZXRUcmF4Q29uZmlnKHRoaXMuY2xpZW50SWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5jb2RlID09PSAyMDAgJiYgcmVzPy5kYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVkID0gdGhpcy5waWNrKHJlcy5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLnNhdmVkIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGljayhzcmM6IGFueSk6IFRyYXhDb25maWcge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcGFzc0xhYmVsOiBzcmM/LnBhc3NMYWJlbCB8fCBERUZBVUxUUy5wYXNzTGFiZWwsXHJcbiAgICAgIGZhaWxMYWJlbDogc3JjPy5mYWlsTGFiZWwgfHwgREVGQVVMVFMuZmFpbExhYmVsLFxyXG4gICAgICByZW1hcmtzTGFiZWw6IHNyYz8ucmVtYXJrc0xhYmVsIHx8IERFRkFVTFRTLnJlbWFya3NMYWJlbCxcclxuICAgICAgYWRkaXRpb25hbFJlbWFya3NMYWJlbDogc3JjPy5hZGRpdGlvbmFsUmVtYXJrc0xhYmVsIHx8IERFRkFVTFRTLmFkZGl0aW9uYWxSZW1hcmtzTGFiZWxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB0b2dnbGVGb3JtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0Rpc2FibGVkID0gIXRoaXMuaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuc2F2ZWQgfTtcclxuICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBhcHBseVByZXNldChwOiB7IHBhc3M6IHN0cmluZzsgZmFpbDogc3RyaW5nIH0pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHsgcmV0dXJuOyB9XHJcbiAgICB0aGlzLmNvbmZpZy5wYXNzTGFiZWwgPSBwLnBhc3M7XHJcbiAgICB0aGlzLmNvbmZpZy5mYWlsTGFiZWwgPSBwLmZhaWw7XHJcbiAgfVxyXG5cclxuICBpc1ByZXNldChwOiB7IHBhc3M6IHN0cmluZzsgZmFpbDogc3RyaW5nIH0pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wYXNzTGFiZWwudHJpbSgpID09PSBwLnBhc3MgJiYgdGhpcy5jb25maWcuZmFpbExhYmVsLnRyaW0oKSA9PT0gcC5mYWlsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhblNhdmUoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjID0gdGhpcy5jb25maWc7XHJcbiAgICByZXR1cm4gIXRoaXMuc2F2aW5nICYmIFtjLnBhc3NMYWJlbCwgYy5mYWlsTGFiZWwsIGMucmVtYXJrc0xhYmVsLCBjLmFkZGl0aW9uYWxSZW1hcmtzTGFiZWxdXHJcbiAgICAgIC5ldmVyeSh2ID0+IHYudHJpbSgpLmxlbmd0aCA+IDAgJiYgdi50cmltKCkubGVuZ3RoIDw9IDQwKTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNhblNhdmUgfHwgIXRoaXMuY2xpZW50SWQpIHsgcmV0dXJuOyB9XHJcbiAgICB0aGlzLnNhdmluZyA9IHRydWU7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgcGFzc0xhYmVsOiB0aGlzLmNvbmZpZy5wYXNzTGFiZWwudHJpbSgpLFxyXG4gICAgICBmYWlsTGFiZWw6IHRoaXMuY29uZmlnLmZhaWxMYWJlbC50cmltKCksXHJcbiAgICAgIHJlbWFya3NMYWJlbDogdGhpcy5jb25maWcucmVtYXJrc0xhYmVsLnRyaW0oKSxcclxuICAgICAgYWRkaXRpb25hbFJlbWFya3NMYWJlbDogdGhpcy5jb25maWcuYWRkaXRpb25hbFJlbWFya3NMYWJlbC50cmltKClcclxuICAgIH07XHJcbiAgICB0aGlzLnNlcnZpY2Uuc2F2ZVRyYXhDb25maWcocGF5bG9hZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlcz8uY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVkID0gdGhpcy5waWNrKHJlcy5kYXRhIHx8IHBheWxvYWQpO1xyXG4gICAgICAgICAgdGhpcy5jb25maWcgPSB7IC4uLnRoaXMuc2F2ZWQgfTtcclxuICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnRzLmdldFN1Y2Nlc3NUb2FzdCgnVHJheCBjb25maWd1cmF0aW9uIHNhdmVkJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChyZXM/Lm1lc3NhZ2UgfHwgJ0NvdWxkIG5vdCBzYXZlIHRoZSBUcmF4IGNvbmZpZ3VyYXRpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/LmVycm9yPy5lcnJvciB8fCBlcnI/LmVycm9yPy5tZXNzYWdlIHx8ICdDb3VsZCBub3Qgc2F2ZSB0aGUgVHJheCBjb25maWd1cmF0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVGb3JtKClcIiAqbmdJZj1cImlzRGlzYWJsZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgYWxpZ24taXRlbXMtZW5kXCI+PHNwYW4gY2xhc3M9XCJtZS0yXCI+PHN2Z1xyXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgZD1cIk0xNC4xNjcgMi41YTIuMzU3IDIuMzU3IDAgMSAxIDMuMzMzIDMuMzMzTDYuMjUgMTcuMDgzIDIuNSAxNy41bC40MTctMy43NUwxNC4xNjcgMi41WlwiXHJcbiAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgIDwvc3ZnPjwvc3Bhbj5FZGl0IERldGFpbHM8L2J1dHRvbj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwicm93IHRyYXgtY29uZmlnXCIgW2NsYXNzLmlzLXJlYWRvbmx5XT1cImlzRGlzYWJsZWRcIj5cclxuICA8IS0tIEF1ZGl0IExhYmVscyAtLT5cclxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIHRjLWJsb2NrXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGMtdGl0bGVcIj5BdWRpdCBMYWJlbHM8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0Yy1oZWxwXCI+UmVuYW1lIHRoZSB0d28gc2NvcmluZyBvdXRjb21lcy4gVGhlc2UgbGFiZWxzIHJlcGxhY2UgUGFzcyBhbmQgRmFpbCBldmVyeXdoZXJlIGluIHRoZSBBdWRpdFxyXG4gICAgICBtb2R1bGUg4oCUIGRhc2hib2FyZHMsIHN0b3JlIGxpc3RzLCBnYWxsZXJ5IGZpbHRlcnMsIHJlcG9ydHMgYW5kIGV4cG9ydHMuPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBnLTQgbXQtMVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0Yy1sYWJlbCB0Yy1sYWJlbC0tcGFzc1wiIGZvcj1cInRyYXhQYXNzTGFiZWxcIj5BdCBvciBhYm92ZSB0aGUgcGFzcyBtYXJrPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXQgaWQ9XCJ0cmF4UGFzc0xhYmVsXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG1heGxlbmd0aD1cIjQwXCIgWyhuZ01vZGVsKV09XCJjb25maWcucGFzc0xhYmVsXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgcGxhY2Vob2xkZXI9XCJQYXNzXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0Yy1sYWJlbCB0Yy1sYWJlbC0tZmFpbFwiIGZvcj1cInRyYXhGYWlsTGFiZWxcIj5CZWxvdyB0aGUgcGFzcyBtYXJrPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXQgaWQ9XCJ0cmF4RmFpbExhYmVsXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG1heGxlbmd0aD1cIjQwXCIgWyhuZ01vZGVsKV09XCJjb25maWcuZmFpbExhYmVsXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgcGxhY2Vob2xkZXI9XCJGYWlsXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInRjLXByZXNldHMgbXQtNFwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInRjLXByZXNldHMtbGFiZWxcIj5QcmVzZXRzPC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInRjLXByZXNldFwiICpuZ0Zvcj1cImxldCBwIG9mIHByZXNldHNcIiBbY2xhc3MuaXMtb25dPVwiaXNQcmVzZXQocClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KHApXCI+e3sgcC5wYXNzIH19IC8ge3sgcC5mYWlsIH19PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBSZW1hcmsgRmllbGRzIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgdGMtYmxvY2tcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0Yy10aXRsZVwiPlJlbWFyayBGaWVsZHM8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0Yy1oZWxwXCI+UmVuYW1lIHRoZSB0d28gZnJlZS10ZXh0IGZpZWxkcyBhdWRpdG9ycyBmaWxsIGluIHRoZSBtb2JpbGUgYXBwLiBUaGUgbmFtZXMgYXBwbHkgdG8gdGhlIG1vYmlsZVxyXG4gICAgICBmb3JtLCB0aGUgR2FsbGVyeSwgZXhwb3J0cyBhbmQgQ1NWIGRvd25sb2Fkcy48L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGctNCBtdC0xXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRjLWxhYmVsXCIgZm9yPVwidHJheFJlbWFya3NMYWJlbFwiPlJlbWFya3MgZmllbGQ8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBpZD1cInRyYXhSZW1hcmtzTGFiZWxcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbWF4bGVuZ3RoPVwiNDBcIiBbKG5nTW9kZWwpXT1cImNvbmZpZy5yZW1hcmtzTGFiZWxcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBwbGFjZWhvbGRlcj1cIlJlbWFya3NcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRjLWxhYmVsXCIgZm9yPVwidHJheEFkZGl0aW9uYWxSZW1hcmtzTGFiZWxcIj5BZGRpdGlvbmFsIFJlbWFya3MgZmllbGQ8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBpZD1cInRyYXhBZGRpdGlvbmFsUmVtYXJrc0xhYmVsXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG1heGxlbmd0aD1cIjQwXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZmlnLmFkZGl0aW9uYWxSZW1hcmtzTGFiZWxcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIHBsYWNlaG9sZGVyPVwiQWRkaXRpb25hbCBSZW1hcmtzXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCIhaXNEaXNhYmxlZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTUgdy0xMDAgZm9vdGVyLXNlcGVyYXRvclwiPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxhIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBtdC0xIG1lLTRcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNFwiIFtkaXNhYmxlZF09XCIhY2FuU2F2ZVwiIChjbGljayk9XCJvblN1Ym1pdCgpXCI+XHJcbiAgICAgICAgPHNwYW4+e3sgc2F2aW5nID8gJ1NhdmluZ+KApicgOiAnU2F2ZSBDaGFuZ2VzJyB9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -11918,8 +11918,6 @@ class TraxConfigurationComponent {
11918
11918
  { pass: 'Compliant', fail: 'Non-Compliant' },
11919
11919
  { pass: 'Satisfactory', fail: 'Unsatisfactory' }
11920
11920
  ];
11921
- /** Pass mark shown in the preview; per-audit pass marks live on each audit. */
11922
- previewPassMark = 75;
11923
11921
  clientId = '';
11924
11922
  isDisabled = true;
11925
11923
  saving = false;
@@ -12020,11 +12018,11 @@ class TraxConfigurationComponent {
12020
12018
  });
12021
12019
  }
12022
12020
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraxConfigurationComponent, deps: [{ token: ClientApiService }, { token: i4.ToastService }], target: i0.ɵɵFactoryTarget.Component });
12023
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TraxConfigurationComponent, selector: "lib-trax-configuration", ngImport: i0, template: "<div class=\"d-flex justify-content-end\">\r\n <button (click)=\"toggleForm()\" *ngIf=\"isDisabled\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M14.167 2.5a2.357 2.357 0 1 1 3.333 3.333L6.25 17.083 2.5 17.5l.417-3.75L14.167 2.5Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>Edit Details</button>\r\n</div>\r\n\r\n<div class=\"row trax-config\" [class.is-readonly]=\"isDisabled\">\r\n <!-- Audit Labels -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Audit Labels</div>\r\n <div class=\"tc-help\">Rename the two scoring outcomes. These labels replace Pass and Fail everywhere in the Audit\r\n module \u2014 dashboards, store lists, gallery filters, reports and exports.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label tc-label--pass\" for=\"traxPassLabel\">At or above the pass mark</label>\r\n <input id=\"traxPassLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.passLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Pass\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label tc-label--fail\" for=\"traxFailLabel\">Below the pass mark</label>\r\n <input id=\"traxFailLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.failLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Fail\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"tc-label\">Preview</div>\r\n <div class=\"tc-preview tc-preview--chips\">\r\n <span class=\"tc-chip tc-chip--pass\" [title]=\"(config.passLabel.trim() || 'Pass') + ' \u2265 ' + previewPassMark + '%'\">\r\n <span class=\"tc-chip-name\">{{ config.passLabel.trim() || 'Pass' }}</span>\r\n <span class=\"tc-chip-mark\">\u2265 {{ previewPassMark }}%</span>\r\n </span>\r\n <span class=\"tc-chip tc-chip--fail\" [title]=\"(config.failLabel.trim() || 'Fail') + ' < ' + previewPassMark + '%'\">\r\n <span class=\"tc-chip-name\">{{ config.failLabel.trim() || 'Fail' }}</span>\r\n <span class=\"tc-chip-mark\">&lt; {{ previewPassMark }}%</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tc-presets mt-4\">\r\n <span class=\"tc-presets-label\">Presets</span>\r\n <button type=\"button\" class=\"tc-preset\" *ngFor=\"let p of presets\" [class.is-on]=\"isPreset(p)\"\r\n [disabled]=\"isDisabled\" (click)=\"applyPreset(p)\">{{ p.pass }} / {{ p.fail }}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Remark Fields -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Remark Fields</div>\r\n <div class=\"tc-help\">Rename the two free-text fields auditors fill in the mobile app. The names apply to the mobile\r\n form, the Gallery, exports and CSV downloads.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxRemarksLabel\">Remarks field</label>\r\n <input id=\"traxRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.remarksLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Remarks\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxAdditionalRemarksLabel\">Additional Remarks field</label>\r\n <input id=\"traxAdditionalRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\"\r\n [(ngModel)]=\"config.additionalRemarksLabel\" [disabled]=\"isDisabled\" placeholder=\"Additional Remarks\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!isDisabled\">\r\n <div class=\"mb-5 w-100 footer-seperator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" [disabled]=\"!canSave\" (click)=\"onSubmit()\">\r\n <span>{{ saving ? 'Saving\u2026' : 'Save Changes' }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".trax-config .tc-block{margin-top:20px;margin-bottom:8px}.trax-config .tc-block+.tc-block{margin-top:36px}.trax-config .tc-title{color:#101828;font-size:16px;font-weight:600;line-height:24px}.trax-config .tc-help{color:#667085;font-size:14px;line-height:20px;margin-top:4px;max-width:760px}.trax-config .tc-label{display:block;color:#344054;font-size:14px;font-weight:500;line-height:20px;margin-bottom:6px}.trax-config .tc-label--pass{color:#027a48}.trax-config .tc-label--fail{color:#b42318}.trax-config .form-control{min-height:44px;border-radius:8px}.trax-config .tc-preview{display:flex;flex-wrap:wrap;gap:8px;align-items:center;min-height:44px}.trax-config .tc-preview--chips{flex-wrap:nowrap;height:44px;padding:0 8px;border-radius:8px;background:#f9fafb}.trax-config .tc-chip{display:inline-flex;align-items:center;gap:4px;flex:0 1 auto;min-width:0;padding:4px 12px;border-radius:999px;font-size:13px;font-weight:600;line-height:20px;white-space:nowrap}.trax-config .tc-chip--pass{background:#ecfdf3;color:#027a48}.trax-config .tc-chip--fail{background:#fef3f2;color:#b42318}.trax-config .tc-chip-name{min-width:0;overflow:hidden;text-overflow:ellipsis}.trax-config .tc-chip-mark{flex-shrink:0}.trax-config .tc-presets{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.trax-config .tc-presets-label{color:#667085;font-size:14px}.trax-config .tc-preset{padding:8px 16px;border-radius:999px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.trax-config .tc-preset.is-on{border-color:#b2ddff;background:#eff8ff;color:#175cd3}.trax-config .tc-preset:disabled{cursor:default;opacity:.7}.trax-config.is-readonly .form-control:disabled{background:#f9fafb;color:#344054}.trax-config .footer-seperator{border-top:1px solid #EAECF0}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
12021
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TraxConfigurationComponent, selector: "lib-trax-configuration", ngImport: i0, template: "<div class=\"d-flex justify-content-end\">\r\n <button (click)=\"toggleForm()\" *ngIf=\"isDisabled\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M14.167 2.5a2.357 2.357 0 1 1 3.333 3.333L6.25 17.083 2.5 17.5l.417-3.75L14.167 2.5Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>Edit Details</button>\r\n</div>\r\n\r\n<div class=\"row trax-config\" [class.is-readonly]=\"isDisabled\">\r\n <!-- Audit Labels -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Audit Labels</div>\r\n <div class=\"tc-help\">Rename the two scoring outcomes. These labels replace Pass and Fail everywhere in the Audit\r\n module \u2014 dashboards, store lists, gallery filters, reports and exports.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-6\">\r\n <label class=\"tc-label tc-label--pass\" for=\"traxPassLabel\">At or above the pass mark</label>\r\n <input id=\"traxPassLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.passLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Pass\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"tc-label tc-label--fail\" for=\"traxFailLabel\">Below the pass mark</label>\r\n <input id=\"traxFailLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.failLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Fail\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"tc-presets mt-4\">\r\n <span class=\"tc-presets-label\">Presets</span>\r\n <button type=\"button\" class=\"tc-preset\" *ngFor=\"let p of presets\" [class.is-on]=\"isPreset(p)\"\r\n [disabled]=\"isDisabled\" (click)=\"applyPreset(p)\">{{ p.pass }} / {{ p.fail }}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Remark Fields -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Remark Fields</div>\r\n <div class=\"tc-help\">Rename the two free-text fields auditors fill in the mobile app. The names apply to the mobile\r\n form, the Gallery, exports and CSV downloads.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxRemarksLabel\">Remarks field</label>\r\n <input id=\"traxRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.remarksLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Remarks\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxAdditionalRemarksLabel\">Additional Remarks field</label>\r\n <input id=\"traxAdditionalRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\"\r\n [(ngModel)]=\"config.additionalRemarksLabel\" [disabled]=\"isDisabled\" placeholder=\"Additional Remarks\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!isDisabled\">\r\n <div class=\"mb-5 w-100 footer-seperator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" [disabled]=\"!canSave\" (click)=\"onSubmit()\">\r\n <span>{{ saving ? 'Saving\u2026' : 'Save Changes' }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".trax-config .tc-block{margin-top:20px;margin-bottom:8px}.trax-config .tc-block+.tc-block{margin-top:36px}.trax-config .tc-title{color:#101828;font-size:16px;font-weight:600;line-height:24px}.trax-config .tc-help{color:#667085;font-size:14px;line-height:20px;margin-top:4px;max-width:760px}.trax-config .tc-label{display:block;color:#344054;font-size:14px;font-weight:500;line-height:20px;margin-bottom:6px}.trax-config .tc-label--pass{color:#027a48}.trax-config .tc-label--fail{color:#b42318}.trax-config .form-control{min-height:44px;border-radius:8px}.trax-config .tc-presets{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.trax-config .tc-presets-label{color:#667085;font-size:14px}.trax-config .tc-preset{padding:8px 16px;border-radius:999px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.trax-config .tc-preset.is-on{border-color:#b2ddff;background:#eff8ff;color:#175cd3}.trax-config .tc-preset:disabled{cursor:default;opacity:.7}.trax-config.is-readonly .form-control:disabled{background:#f9fafb;color:#344054}.trax-config .footer-seperator{border-top:1px solid #EAECF0}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
12024
12022
  }
12025
12023
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraxConfigurationComponent, decorators: [{
12026
12024
  type: Component,
12027
- args: [{ selector: 'lib-trax-configuration', template: "<div class=\"d-flex justify-content-end\">\r\n <button (click)=\"toggleForm()\" *ngIf=\"isDisabled\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M14.167 2.5a2.357 2.357 0 1 1 3.333 3.333L6.25 17.083 2.5 17.5l.417-3.75L14.167 2.5Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>Edit Details</button>\r\n</div>\r\n\r\n<div class=\"row trax-config\" [class.is-readonly]=\"isDisabled\">\r\n <!-- Audit Labels -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Audit Labels</div>\r\n <div class=\"tc-help\">Rename the two scoring outcomes. These labels replace Pass and Fail everywhere in the Audit\r\n module \u2014 dashboards, store lists, gallery filters, reports and exports.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label tc-label--pass\" for=\"traxPassLabel\">At or above the pass mark</label>\r\n <input id=\"traxPassLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.passLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Pass\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label tc-label--fail\" for=\"traxFailLabel\">Below the pass mark</label>\r\n <input id=\"traxFailLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.failLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Fail\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"tc-label\">Preview</div>\r\n <div class=\"tc-preview tc-preview--chips\">\r\n <span class=\"tc-chip tc-chip--pass\" [title]=\"(config.passLabel.trim() || 'Pass') + ' \u2265 ' + previewPassMark + '%'\">\r\n <span class=\"tc-chip-name\">{{ config.passLabel.trim() || 'Pass' }}</span>\r\n <span class=\"tc-chip-mark\">\u2265 {{ previewPassMark }}%</span>\r\n </span>\r\n <span class=\"tc-chip tc-chip--fail\" [title]=\"(config.failLabel.trim() || 'Fail') + ' < ' + previewPassMark + '%'\">\r\n <span class=\"tc-chip-name\">{{ config.failLabel.trim() || 'Fail' }}</span>\r\n <span class=\"tc-chip-mark\">&lt; {{ previewPassMark }}%</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tc-presets mt-4\">\r\n <span class=\"tc-presets-label\">Presets</span>\r\n <button type=\"button\" class=\"tc-preset\" *ngFor=\"let p of presets\" [class.is-on]=\"isPreset(p)\"\r\n [disabled]=\"isDisabled\" (click)=\"applyPreset(p)\">{{ p.pass }} / {{ p.fail }}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Remark Fields -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Remark Fields</div>\r\n <div class=\"tc-help\">Rename the two free-text fields auditors fill in the mobile app. The names apply to the mobile\r\n form, the Gallery, exports and CSV downloads.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxRemarksLabel\">Remarks field</label>\r\n <input id=\"traxRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.remarksLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Remarks\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxAdditionalRemarksLabel\">Additional Remarks field</label>\r\n <input id=\"traxAdditionalRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\"\r\n [(ngModel)]=\"config.additionalRemarksLabel\" [disabled]=\"isDisabled\" placeholder=\"Additional Remarks\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!isDisabled\">\r\n <div class=\"mb-5 w-100 footer-seperator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" [disabled]=\"!canSave\" (click)=\"onSubmit()\">\r\n <span>{{ saving ? 'Saving\u2026' : 'Save Changes' }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".trax-config .tc-block{margin-top:20px;margin-bottom:8px}.trax-config .tc-block+.tc-block{margin-top:36px}.trax-config .tc-title{color:#101828;font-size:16px;font-weight:600;line-height:24px}.trax-config .tc-help{color:#667085;font-size:14px;line-height:20px;margin-top:4px;max-width:760px}.trax-config .tc-label{display:block;color:#344054;font-size:14px;font-weight:500;line-height:20px;margin-bottom:6px}.trax-config .tc-label--pass{color:#027a48}.trax-config .tc-label--fail{color:#b42318}.trax-config .form-control{min-height:44px;border-radius:8px}.trax-config .tc-preview{display:flex;flex-wrap:wrap;gap:8px;align-items:center;min-height:44px}.trax-config .tc-preview--chips{flex-wrap:nowrap;height:44px;padding:0 8px;border-radius:8px;background:#f9fafb}.trax-config .tc-chip{display:inline-flex;align-items:center;gap:4px;flex:0 1 auto;min-width:0;padding:4px 12px;border-radius:999px;font-size:13px;font-weight:600;line-height:20px;white-space:nowrap}.trax-config .tc-chip--pass{background:#ecfdf3;color:#027a48}.trax-config .tc-chip--fail{background:#fef3f2;color:#b42318}.trax-config .tc-chip-name{min-width:0;overflow:hidden;text-overflow:ellipsis}.trax-config .tc-chip-mark{flex-shrink:0}.trax-config .tc-presets{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.trax-config .tc-presets-label{color:#667085;font-size:14px}.trax-config .tc-preset{padding:8px 16px;border-radius:999px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.trax-config .tc-preset.is-on{border-color:#b2ddff;background:#eff8ff;color:#175cd3}.trax-config .tc-preset:disabled{cursor:default;opacity:.7}.trax-config.is-readonly .form-control:disabled{background:#f9fafb;color:#344054}.trax-config .footer-seperator{border-top:1px solid #EAECF0}\n"] }]
12025
+ args: [{ selector: 'lib-trax-configuration', template: "<div class=\"d-flex justify-content-end\">\r\n <button (click)=\"toggleForm()\" *ngIf=\"isDisabled\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M14.167 2.5a2.357 2.357 0 1 1 3.333 3.333L6.25 17.083 2.5 17.5l.417-3.75L14.167 2.5Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>Edit Details</button>\r\n</div>\r\n\r\n<div class=\"row trax-config\" [class.is-readonly]=\"isDisabled\">\r\n <!-- Audit Labels -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Audit Labels</div>\r\n <div class=\"tc-help\">Rename the two scoring outcomes. These labels replace Pass and Fail everywhere in the Audit\r\n module \u2014 dashboards, store lists, gallery filters, reports and exports.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-6\">\r\n <label class=\"tc-label tc-label--pass\" for=\"traxPassLabel\">At or above the pass mark</label>\r\n <input id=\"traxPassLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.passLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Pass\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"tc-label tc-label--fail\" for=\"traxFailLabel\">Below the pass mark</label>\r\n <input id=\"traxFailLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.failLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Fail\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"tc-presets mt-4\">\r\n <span class=\"tc-presets-label\">Presets</span>\r\n <button type=\"button\" class=\"tc-preset\" *ngFor=\"let p of presets\" [class.is-on]=\"isPreset(p)\"\r\n [disabled]=\"isDisabled\" (click)=\"applyPreset(p)\">{{ p.pass }} / {{ p.fail }}</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Remark Fields -->\r\n <div class=\"col-12 tc-block\">\r\n <div class=\"tc-title\">Remark Fields</div>\r\n <div class=\"tc-help\">Rename the two free-text fields auditors fill in the mobile app. The names apply to the mobile\r\n form, the Gallery, exports and CSV downloads.</div>\r\n\r\n <div class=\"row g-4 mt-1\">\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxRemarksLabel\">Remarks field</label>\r\n <input id=\"traxRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\" [(ngModel)]=\"config.remarksLabel\"\r\n [disabled]=\"isDisabled\" placeholder=\"Remarks\">\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"tc-label\" for=\"traxAdditionalRemarksLabel\">Additional Remarks field</label>\r\n <input id=\"traxAdditionalRemarksLabel\" type=\"text\" class=\"form-control\" maxlength=\"40\"\r\n [(ngModel)]=\"config.additionalRemarksLabel\" [disabled]=\"isDisabled\" placeholder=\"Additional Remarks\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!isDisabled\">\r\n <div class=\"mb-5 w-100 footer-seperator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" [disabled]=\"!canSave\" (click)=\"onSubmit()\">\r\n <span>{{ saving ? 'Saving\u2026' : 'Save Changes' }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".trax-config .tc-block{margin-top:20px;margin-bottom:8px}.trax-config .tc-block+.tc-block{margin-top:36px}.trax-config .tc-title{color:#101828;font-size:16px;font-weight:600;line-height:24px}.trax-config .tc-help{color:#667085;font-size:14px;line-height:20px;margin-top:4px;max-width:760px}.trax-config .tc-label{display:block;color:#344054;font-size:14px;font-weight:500;line-height:20px;margin-bottom:6px}.trax-config .tc-label--pass{color:#027a48}.trax-config .tc-label--fail{color:#b42318}.trax-config .form-control{min-height:44px;border-radius:8px}.trax-config .tc-presets{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.trax-config .tc-presets-label{color:#667085;font-size:14px}.trax-config .tc-preset{padding:8px 16px;border-radius:999px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.trax-config .tc-preset.is-on{border-color:#b2ddff;background:#eff8ff;color:#175cd3}.trax-config .tc-preset:disabled{cursor:default;opacity:.7}.trax-config.is-readonly .form-control:disabled{background:#f9fafb;color:#344054}.trax-config .footer-seperator{border-top:1px solid #EAECF0}\n"] }]
12028
12026
  }], ctorParameters: () => [{ type: ClientApiService }, { type: i4.ToastService }] });
12029
12027
 
12030
12028
  class ConfigurationsComponent {