@muraai/mnl-form 0.0.1-alpha-f274a13 → 0.0.1-alpha-53c07ff

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.
@@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common';
2
2
  import { Component, EventEmitter, Input, Output } from '@angular/core';
3
3
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
4
  import { CommonsModule } from '@muraai/mnl-commons';
5
- import { FormlyModule, } from '@ngx-formly/core';
5
+ import { FormlyModule } from '@ngx-formly/core';
6
6
  import { FormlyMatCheckboxModule } from '@ngx-formly/material/checkbox';
7
7
  import { FormlyMatInputModule } from '@ngx-formly/material/input';
8
8
  import { FormlyMatTextAreaModule } from '@ngx-formly/material/textarea';
@@ -37,6 +37,7 @@ export class MnlFormLibComponent {
37
37
  ...this.options.formState,
38
38
  showOldValues: this.showOldValues,
39
39
  oldValues: this.oldValues,
40
+ helperModel: this.helperModel,
40
41
  },
41
42
  };
42
43
  }
@@ -142,7 +143,7 @@ export class MnlFormLibComponent {
142
143
  });
143
144
  }
144
145
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormLibComponent, deps: [{ token: i1.TranslateService }, { token: i2.ScoringService }], target: i0.ɵɵFactoryTarget.Component }); }
145
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MnlFormLibComponent, isStandalone: true, selector: "mnl-form", inputs: { readonly: "readonly", form: "form", fields: "fields", model: "model", options: "options", userRoles: "userRoles", userCountries: "userCountries", oldValues: "oldValues", showOldValues: "showOldValues" }, outputs: { noOfTabs: "noOfTabs", scoreChange: "scoreChange" }, ngImport: i0, template: "@if(formPrepared) {\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n (modelChange)=\"onModelChange($event)\"\n class=\"mnl-formly-form\"\n></formly-form>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: CommonsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i3.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: FormlyMatTextAreaModule }, { kind: "ngmodule", type: FormlyMatInputModule }, { kind: "ngmodule", type: FormlyMatCheckboxModule }, { kind: "ngmodule", type: FormlyMatRadioModule }] }); }
146
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MnlFormLibComponent, isStandalone: true, selector: "mnl-form", inputs: { readonly: "readonly", form: "form", fields: "fields", model: "model", helperModel: "helperModel", options: "options", userRoles: "userRoles", userCountries: "userCountries", oldValues: "oldValues", showOldValues: "showOldValues" }, outputs: { noOfTabs: "noOfTabs", scoreChange: "scoreChange" }, ngImport: i0, template: "@if(formPrepared) {\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n (modelChange)=\"onModelChange($event)\"\n class=\"mnl-formly-form\"\n></formly-form>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: CommonsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i3.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: FormlyMatTextAreaModule }, { kind: "ngmodule", type: FormlyMatInputModule }, { kind: "ngmodule", type: FormlyMatCheckboxModule }, { kind: "ngmodule", type: FormlyMatRadioModule }] }); }
146
147
  }
147
148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormLibComponent, decorators: [{
148
149
  type: Component,
@@ -166,6 +167,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
166
167
  type: Input
167
168
  }], model: [{
168
169
  type: Input
170
+ }], helperModel: [{
171
+ type: Input
169
172
  }], options: [{
170
173
  type: Input
171
174
  }], userRoles: [{
@@ -181,4 +184,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
181
184
  }], scoreChange: [{
182
185
  type: Output
183
186
  }] } });
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWxpYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLWxpYi9zcmMvbGliL2Zvcm1seS1saWIvZm9ybWx5LWxpYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLWxpYi9zcmMvbGliL2Zvcm1seS1saWIvZm9ybWx5LWxpYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWEsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFFTCxZQUFZLEdBQ2IsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0FBcUJsRSxNQUFNLE9BQU8sbUJBQW1CO0lBb0M5QixZQUNVLGdCQUFrQyxFQUNsQyxPQUF1QjtRQUR2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FB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QUFhO3NCQURaLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxNQUFNO2dCQUlQLFNBQVM7c0JBRFIsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25zTW9kdWxlIH0gZnJvbSAnQG11cmFhaS9tbmwtY29tbW9ucyc7XG5pbXBvcnQge1xuICBGb3JtbHlGb3JtT3B0aW9ucyxcbiAgRm9ybWx5TW9kdWxlLFxufSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZvcm1seU1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgRm9ybWx5TWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBGb3JtbHlNYXRUZXh0QXJlYU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsL3RleHRhcmVhJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2N1c3RvbS1mb3JtLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEZvcm1seU1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvbWF0ZXJpYWwvcmFkaW8nO1xuaW1wb3J0IHsgU2NvcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY29yaW5nLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtbmwtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQ29tbW9uc01vZHVsZSxcbiAgICBGb3JtbHlNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgRm9ybWx5TWF0VGV4dEFyZWFNb2R1bGUsXG4gICAgRm9ybWx5TWF0SW5wdXRNb2R1bGUsXG4gICAgRm9ybWx5TWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgRm9ybWx5TWF0UmFkaW9Nb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtbHktbGliLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Zvcm1seS1saWIuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBNbmxGb3JtTGliQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBmb3JtITogRm9ybUdyb3VwO1xuXG4gIEBJbnB1dCgpXG4gIGZpZWxkcyE6IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnW107XG5cbiAgQElucHV0KClcbiAgbW9kZWw6IGFueTtcblxuICBASW5wdXQoKVxuICBvcHRpb25zITogRm9ybWx5Rm9ybU9wdGlvbnM7XG5cbiAgQElucHV0KClcbiAgdXNlclJvbGVzITogc3RyaW5nW107XG5cbiAgQElucHV0KClcbiAgdXNlckNvdW50cmllcyE6IHN0cmluZ1tdO1xuXG4gIEBPdXRwdXQoKVxuICBub09mVGFicyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKVxuICBvbGRWYWx1ZXM6IGFueTtcblxuICBASW5wdXQoKVxuICBzaG93T2xkVmFsdWVzITogYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgXG4gIHNjb3JlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZm9ybVByZXBhcmVkID0gZmFsc2U7XG4gIHRvdGFsVGFicyA9IDA7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHNjb3Jpbmc6IFNjb3JpbmdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXREZWZhdWx0TGFuZygnZW4nKTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWVsZHMpIHtcbiAgICAgIHRoaXMuYXBwbHlSZWFkb25seVRvRmllbGRzKHRoaXMuZmllbGRzKTtcbiAgICAgIHRoaXMuZmlsdGVyRmllbGRHcm91cHNCeVJvbGVzQW5kQ291bnRyaWVzKHRoaXMuZmllbGRzKTtcbiAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB0aGlzLmZvcm1QcmVwYXJlZCA9IHRydWU7XG4gICAgICB0aGlzLmdldE51bWJlck9mQWN0aXZlVGFicyh0aGlzLmZpZWxkcyk7XG4gICAgICB0aGlzLnNldEF1dG9jb21wbGV0ZVNpbmdsZU9wdGlvbkJ5RGVmYXVsdCh0aGlzLmZpZWxkcyk7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgIGZvcm1TdGF0ZToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy5mb3JtU3RhdGUsXG4gICAgICAgICAgc2hvd09sZFZhbHVlczogdGhpcy5zaG93T2xkVmFsdWVzLFxuICAgICAgICAgIG9sZFZhbHVlczogdGhpcy5vbGRWYWx1ZXMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG9uTW9kZWxDaGFuZ2UobW9kZWw6IGFueSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2NvcmluZy51cGRhdGVTY29yZShtb2RlbCwgdGhpcy5maWVsZHMpO1xuICAgIHRoaXMuc2NvcmVDaGFuZ2UuZW1pdChyZXN1bHQpO1xuICB9XG5cbiAgc2V0QXV0b2NvbXBsZXRlU2luZ2xlT3B0aW9uQnlEZWZhdWx0KGZpZWxkczogYW55KSB7XG4gICAgZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbXUtc2VsZWN0LWF1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgZmllbGQuaG9va3MgPSB7XG4gICAgICAgICAgb25Jbml0OiAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBmaWVsZC5mb3JtQ29udHJvbDtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBmaWVsZC5wcm9wcz8ub3B0aW9ucyB8fCBbXTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25CeURlZmF1bHQoZm9ybUNvbnRyb2wsIGZpZWxkLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIChvcHRpb25zIHx8IG9mKFtdKSkuc3Vic2NyaWJlKChvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbkJ5RGVmYXVsdChmb3JtQ29udHJvbCwgZmllbGQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVTaW5nbGVPcHRpb25CeURlZmF1bHQoZmllbGQuZmllbGRHcm91cCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRPcHRpb25CeURlZmF1bHQoZm9ybUNvbnRyb2w6IGFueSwgZmllbGQ6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgaWYgKGZvcm1Db250cm9sICYmIGZpZWxkLnByb3BzICYmIGZpZWxkLnByb3BzLm9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShvcHRpb25zWzBdLnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZmllbGQucHJvcHMub3B0aW9uc0NoYW5nZT8uc3Vic2NyaWJlKCh1cGRhdGVkT3B0aW9uczogYW55W10pID0+IHtcbiAgICAgICAgaWYgKHVwZGF0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSAmJiBmb3JtQ29udHJvbCkge1xuICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHVwZGF0ZWRPcHRpb25zWzBdLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGdldE51bWJlck9mQWN0aXZlVGFicyhmaWVsZHM6IGFueSkge1xuICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ211LXRhYnMnKSB7XG4gICAgICAgIHRoaXMudG90YWxUYWJzID0gZmllbGQuZmllbGRHcm91cD8ubGVuZ3RoIHx8IDA7XG4gICAgICAgIHRoaXMubm9PZlRhYnMuZW1pdCh0aGlzLnRvdGFsVGFicyk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICB0aGlzLmdldE51bWJlck9mQWN0aXZlVGFicyhmaWVsZC5maWVsZEdyb3VwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UmVhZG9ubHlUb0ZpZWxkcyhcbiAgICBmaWVsZHM6IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnW11cbiAgKTogQ3VzdG9tRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICB0aGlzLmFwcGx5UmVhZG9ubHlUb0ZpZWxkcyhmaWVsZC5maWVsZEdyb3VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkLnByb3BzID0ge1xuICAgICAgICAgIC4uLihmaWVsZC5wcm9wcyB8fCB7fSksXG4gICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfSk7XG4gIH1cblxuICBmaWx0ZXJGaWVsZEdyb3Vwc0J5Um9sZXNBbmRDb3VudHJpZXMoZmllbGRzOiBDdXN0b21Gb3JtbHlGaWVsZENvbmZpZ1tdKSB7XG4gICAgcmV0dXJuIGZpZWxkc1xuICAgICAgLm1hcCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZmllbGQuZmllbGRHcm91cCAmJiAhZmllbGQudmlzc2libGVDb3VudHJpZXMpIHtcbiAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwID0gdGhpcy5maWx0ZXJGaWVsZEdyb3Vwc0J5Um9sZXNBbmRDb3VudHJpZXMoXG4gICAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zdCBoYXNWYWxpZFJvbGUgPSBmaWVsZC52aXNzaWJsZVJvbGVzXG4gICAgICAgIC8vICAgPyBmaWVsZC52aXNzaWJsZVJvbGVzLnNvbWUoKHJvbGU6IGFueSkgPT4gdGhpcy51c2VyUm9sZXM/LmluY2x1ZGVzKHJvbGUpKVxuICAgICAgICAvLyAgIDogdHJ1ZTtcbiAgICAgICAgLy8gY29uc3QgaGFzVmFsaWRDb3VudHJ5ID0gZmllbGQudmlzc2libGVDb3VudHJpZXNcbiAgICAgICAgLy8gICA/IGZpZWxkLnZpc3NpYmxlQ291bnRyaWVzLnNvbWUoKGNvdW50cnk6IGFueSkgPT4gdGhpcy51c2VyQ291bnRyaWVzPy5pbmNsdWRlcyhjb3VudHJ5KSlcbiAgICAgICAgLy8gICA6IHRydWU7XG5cbiAgICAgICAgY29uc3QgdmFsaWRHcm91cCA9IGZpZWxkO1xuICAgICAgICBpZiAodmFsaWRHcm91cCAmJiBmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgZmllbGQuZmllbGRHcm91cCA9IHRoaXMuZmlsdGVyRmllbGRHcm91cHNCeVJvbGVzQW5kQ291bnRyaWVzKFxuICAgICAgICAgICAgZmllbGQuZmllbGRHcm91cFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkR3JvdXAgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlVmFsaWRhdGlvbnNGb3JGaWx0ZXJlZEZpZWxkcyhmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZEdyb3VwICYmIGZpZWxkLnByb3BzPy5yZXF1aXJlZCkge1xuICAgICAgICAgIGZpZWxkLnByb3BzLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkR3JvdXA7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZmllbGQ6IGFueSkgPT4gZmllbGQgIT09IG51bGwpO1xuICB9XG5cbiAgcmVtb3ZlVmFsaWRhdGlvbnNGb3JGaWx0ZXJlZEZpZWxkcyhmaWVsZHM6IGFueSkge1xuICAgIGZpZWxkcz8uZmllbGRHcm91cD8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgdGhpcy5yZW1vdmVWYWxpZGF0aW9uc0ZvckZpbHRlcmVkRmllbGRzKGZpZWxkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvcm0uZ2V0KGZpZWxkLmtleSkpIHtcbiAgICAgICAgdGhpcy5mb3JtLnJlbW92ZUNvbnRyb2woZmllbGQua2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiQGlmKGZvcm1QcmVwYXJlZCkge1xuPGZvcm1seS1mb3JtXG4gIFtmb3JtXT1cImZvcm1cIlxuICBbZmllbGRzXT1cImZpZWxkc1wiXG4gIFttb2RlbF09XCJtb2RlbFwiXG4gIFtvcHRpb25zXT1cIm9wdGlvbnNcIlxuICAobW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgY2xhc3M9XCJtbmwtZm9ybWx5LWZvcm1cIlxuPjwvZm9ybWx5LWZvcm0+XG59XG4iXX0=
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWxpYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLWxpYi9zcmMvbGliL2Zvcm1seS1saWIvZm9ybWx5LWxpYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLWxpYi9zcmMvbGliL2Zvcm1seS1saWIvZm9ybWx5LWxpYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWEsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBcUIsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQXFCbEUsTUFBTSxPQUFPLG1CQUFtQjtJQXVDOUIsWUFDVSxnQkFBa0MsRUFDbEMsT0FBdUI7UUFEdkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtR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QUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsTUFBTTtnQkFJUCxTQUFTO3NCQURSLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLFdBQVc7c0JBRFYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uc01vZHVsZSB9IGZyb20gJ0BtdXJhYWkvbW5sLWNvbW1vbnMnO1xuaW1wb3J0IHsgRm9ybWx5Rm9ybU9wdGlvbnMsIEZvcm1seU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5TWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBGb3JtbHlNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEZvcm1seU1hdFRleHRBcmVhTW9kdWxlIH0gZnJvbSAnQG5neC1mb3JtbHkvbWF0ZXJpYWwvdGV4dGFyZWEnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ3VzdG9tRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvY3VzdG9tLWZvcm0tZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRm9ybWx5TWF0UmFkaW9Nb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbC9yYWRpbyc7XG5pbXBvcnQgeyBTY29yaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Njb3Jpbmcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ubC1mb3JtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDb21tb25zTW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBGb3JtbHlNYXRUZXh0QXJlYU1vZHVsZSxcbiAgICBGb3JtbHlNYXRJbnB1dE1vZHVsZSxcbiAgICBGb3JtbHlNYXRDaGVja2JveE1vZHVsZSxcbiAgICBGb3JtbHlNYXRSYWRpb01vZHVsZSxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS1saWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZm9ybWx5LWxpYi5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIE1ubEZvcm1MaWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgQElucHV0KClcbiAgZmllbGRzITogQ3VzdG9tRm9ybWx5RmllbGRDb25maWdbXTtcblxuICBASW5wdXQoKVxuICBtb2RlbDogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGhlbHBlck1vZGVsOiBhbnk7XG5cbiAgQElucHV0KClcbiAgb3B0aW9ucyE6IEZvcm1seUZvcm1PcHRpb25zO1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJSb2xlcyE6IHN0cmluZ1tdO1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJDb3VudHJpZXMhOiBzdHJpbmdbXTtcblxuICBAT3V0cHV0KClcbiAgbm9PZlRhYnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KClcbiAgb2xkVmFsdWVzOiBhbnk7XG5cbiAgQElucHV0KClcbiAgc2hvd09sZFZhbHVlcyE6IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpXG4gIHNjb3JlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZm9ybVByZXBhcmVkID0gZmFsc2U7XG4gIHRvdGFsVGFicyA9IDA7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHNjb3Jpbmc6IFNjb3JpbmdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXREZWZhdWx0TGFuZygnZW4nKTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWVsZHMpIHtcbiAgICAgIHRoaXMuYXBwbHlSZWFkb25seVRvRmllbGRzKHRoaXMuZmllbGRzKTtcbiAgICAgIHRoaXMuZmlsdGVyRmllbGRHcm91cHNCeVJvbGVzQW5kQ291bnRyaWVzKHRoaXMuZmllbGRzKTtcbiAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB0aGlzLmZvcm1QcmVwYXJlZCA9IHRydWU7XG4gICAgICB0aGlzLmdldE51bWJlck9mQWN0aXZlVGFicyh0aGlzLmZpZWxkcyk7XG4gICAgICB0aGlzLnNldEF1dG9jb21wbGV0ZVNpbmdsZU9wdGlvbkJ5RGVmYXVsdCh0aGlzLmZpZWxkcyk7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgIGZvcm1TdGF0ZToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy5mb3JtU3RhdGUsXG4gICAgICAgICAgc2hvd09sZFZhbHVlczogdGhpcy5zaG93T2xkVmFsdWVzLFxuICAgICAgICAgIG9sZFZhbHVlczogdGhpcy5vbGRWYWx1ZXMsXG4gICAgICAgICAgaGVscGVyTW9kZWw6IHRoaXMuaGVscGVyTW9kZWwsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG9uTW9kZWxDaGFuZ2UobW9kZWw6IGFueSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2NvcmluZy51cGRhdGVTY29yZShtb2RlbCwgdGhpcy5maWVsZHMpO1xuICAgIHRoaXMuc2NvcmVDaGFuZ2UuZW1pdChyZXN1bHQpO1xuICB9XG5cbiAgc2V0QXV0b2NvbXBsZXRlU2luZ2xlT3B0aW9uQnlEZWZhdWx0KGZpZWxkczogYW55KSB7XG4gICAgZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbXUtc2VsZWN0LWF1dG9jb21wbGV0ZScpIHtcbiAgICAgICAgZmllbGQuaG9va3MgPSB7XG4gICAgICAgICAgb25Jbml0OiAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBmaWVsZC5mb3JtQ29udHJvbDtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBmaWVsZC5wcm9wcz8ub3B0aW9ucyB8fCBbXTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25CeURlZmF1bHQoZm9ybUNvbnRyb2wsIGZpZWxkLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIChvcHRpb25zIHx8IG9mKFtdKSkuc3Vic2NyaWJlKChvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbkJ5RGVmYXVsdChmb3JtQ29udHJvbCwgZmllbGQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVTaW5nbGVPcHRpb25CeURlZmF1bHQoZmllbGQuZmllbGRHcm91cCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRPcHRpb25CeURlZmF1bHQoZm9ybUNvbnRyb2w6IGFueSwgZmllbGQ6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgaWYgKGZvcm1Db250cm9sICYmIGZpZWxkLnByb3BzICYmIGZpZWxkLnByb3BzLm9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShvcHRpb25zWzBdLnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZmllbGQucHJvcHMub3B0aW9uc0NoYW5nZT8uc3Vic2NyaWJlKCh1cGRhdGVkT3B0aW9uczogYW55W10pID0+IHtcbiAgICAgICAgaWYgKHVwZGF0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSAmJiBmb3JtQ29udHJvbCkge1xuICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHVwZGF0ZWRPcHRpb25zWzBdLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGdldE51bWJlck9mQWN0aXZlVGFicyhmaWVsZHM6IGFueSkge1xuICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ211LXRhYnMnKSB7XG4gICAgICAgIHRoaXMudG90YWxUYWJzID0gZmllbGQuZmllbGRHcm91cD8ubGVuZ3RoIHx8IDA7XG4gICAgICAgIHRoaXMubm9PZlRhYnMuZW1pdCh0aGlzLnRvdGFsVGFicyk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICB0aGlzLmdldE51bWJlck9mQWN0aXZlVGFicyhmaWVsZC5maWVsZEdyb3VwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UmVhZG9ubHlUb0ZpZWxkcyhcbiAgICBmaWVsZHM6IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnW11cbiAgKTogQ3VzdG9tRm9ybWx5RmllbGRDb25maWdbXSB7XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICB0aGlzLmFwcGx5UmVhZG9ubHlUb0ZpZWxkcyhmaWVsZC5maWVsZEdyb3VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkLnByb3BzID0ge1xuICAgICAgICAgIC4uLihmaWVsZC5wcm9wcyB8fCB7fSksXG4gICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfSk7XG4gIH1cblxuICBmaWx0ZXJGaWVsZEdyb3Vwc0J5Um9sZXNBbmRDb3VudHJpZXMoZmllbGRzOiBDdXN0b21Gb3JtbHlGaWVsZENvbmZpZ1tdKSB7XG4gICAgcmV0dXJuIGZpZWxkc1xuICAgICAgLm1hcCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZmllbGQuZmllbGRHcm91cCAmJiAhZmllbGQudmlzc2libGVDb3VudHJpZXMpIHtcbiAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwID0gdGhpcy5maWx0ZXJGaWVsZEdyb3Vwc0J5Um9sZXNBbmRDb3VudHJpZXMoXG4gICAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zdCBoYXNWYWxpZFJvbGUgPSBmaWVsZC52aXNzaWJsZVJvbGVzXG4gICAgICAgIC8vICAgPyBmaWVsZC52aXNzaWJsZVJvbGVzLnNvbWUoKHJvbGU6IGFueSkgPT4gdGhpcy51c2VyUm9sZXM/LmluY2x1ZGVzKHJvbGUpKVxuICAgICAgICAvLyAgIDogdHJ1ZTtcbiAgICAgICAgLy8gY29uc3QgaGFzVmFsaWRDb3VudHJ5ID0gZmllbGQudmlzc2libGVDb3VudHJpZXNcbiAgICAgICAgLy8gICA/IGZpZWxkLnZpc3NpYmxlQ291bnRyaWVzLnNvbWUoKGNvdW50cnk6IGFueSkgPT4gdGhpcy51c2VyQ291bnRyaWVzPy5pbmNsdWRlcyhjb3VudHJ5KSlcbiAgICAgICAgLy8gICA6IHRydWU7XG5cbiAgICAgICAgY29uc3QgdmFsaWRHcm91cCA9IGZpZWxkO1xuICAgICAgICBpZiAodmFsaWRHcm91cCAmJiBmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgZmllbGQuZmllbGRHcm91cCA9IHRoaXMuZmlsdGVyRmllbGRHcm91cHNCeVJvbGVzQW5kQ291bnRyaWVzKFxuICAgICAgICAgICAgZmllbGQuZmllbGRHcm91cFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkR3JvdXAgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlVmFsaWRhdGlvbnNGb3JGaWx0ZXJlZEZpZWxkcyhmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZEdyb3VwICYmIGZpZWxkLnByb3BzPy5yZXF1aXJlZCkge1xuICAgICAgICAgIGZpZWxkLnByb3BzLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkR3JvdXA7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZmllbGQ6IGFueSkgPT4gZmllbGQgIT09IG51bGwpO1xuICB9XG5cbiAgcmVtb3ZlVmFsaWRhdGlvbnNGb3JGaWx0ZXJlZEZpZWxkcyhmaWVsZHM6IGFueSkge1xuICAgIGZpZWxkcz8uZmllbGRHcm91cD8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgdGhpcy5yZW1vdmVWYWxpZGF0aW9uc0ZvckZpbHRlcmVkRmllbGRzKGZpZWxkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvcm0uZ2V0KGZpZWxkLmtleSkpIHtcbiAgICAgICAgdGhpcy5mb3JtLnJlbW92ZUNvbnRyb2woZmllbGQua2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiQGlmKGZvcm1QcmVwYXJlZCkge1xuPGZvcm1seS1mb3JtXG4gIFtmb3JtXT1cImZvcm1cIlxuICBbZmllbGRzXT1cImZpZWxkc1wiXG4gIFttb2RlbF09XCJtb2RlbFwiXG4gIFtvcHRpb25zXT1cIm9wdGlvbnNcIlxuICAobW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgY2xhc3M9XCJtbmwtZm9ybWx5LWZvcm1cIlxuPjwvZm9ybWx5LWZvcm0+XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { Component } from '@angular/core';
3
- import { FormsModule, ReactiveFormsModule } from '@angular/forms';
3
+ import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
4
  import { MatNativeDateModule } from '@angular/material/core';
5
5
  import { MatDatepickerModule } from '@angular/material/datepicker';
6
6
  import { MatFormFieldModule } from '@angular/material/form-field';
@@ -23,27 +23,63 @@ export class MnlFormHelperTextInputComponent extends FieldType {
23
23
  get defaultHelperText() {
24
24
  return this.to['helperProps']?.['defaultHelperText'] || '';
25
25
  }
26
- get currentValue() {
26
+ // Get value from primary model (answers)
27
+ get originalValue() {
27
28
  const fieldKey = this.field.key;
28
29
  return this.field.model?.[fieldKey];
29
30
  }
31
+ // Get/Set value from secondary model (helper)
32
+ get helperModel() {
33
+ return (this.to['helperModel'] ||
34
+ this.props['helperModel'] ||
35
+ this.options?.formState?.['helperModel']);
36
+ }
37
+ get helperKey() {
38
+ return this.to['helperKey'] || this.field.key;
39
+ }
40
+ get currentHelperValue() {
41
+ if (this.helperModel && this.helperKey) {
42
+ return this.helperModel[this.helperKey];
43
+ }
44
+ return '';
45
+ }
46
+ set currentHelperValue(value) {
47
+ if (this.helperModel && this.helperKey) {
48
+ this.helperModel[this.helperKey] = value;
49
+ }
50
+ }
30
51
  constructor(cdr) {
31
52
  super();
32
53
  this.cdr = cdr;
33
54
  this.checked = false;
34
55
  }
35
56
  ngOnInit() {
36
- this.originalValue = this.currentValue;
57
+ // Initialize helper form control with value from helper model
58
+ this.helperFormControl = new FormControl(this.currentHelperValue || '');
59
+ // Subscribe to changes in helper form control and update helper model
60
+ this.helperFormControl.valueChanges.subscribe((value) => {
61
+ this.currentHelperValue = value;
62
+ });
37
63
  this.setupDefaultField();
38
64
  if (this.to['enableHelper']) {
39
65
  this.setCorrectValue();
40
66
  this.determineInitialState();
41
67
  }
68
+ if (this.currentHelperValue && this.currentHelperValue.trim() !== '') {
69
+ this.checked = true;
70
+ }
42
71
  }
43
72
  toggleSlide() {
44
73
  this.checked = !this.checked;
45
74
  if (this.checked) {
46
- this.formControl?.setValue(this.defaultHelperText);
75
+ // When toggle is opened, check if helper field is empty
76
+ const currenthelper = this.helperFormControl.value;
77
+ if (!currenthelper || currenthelper.trim() === '') {
78
+ this.helperFormControl.setValue(this.defaultHelperText);
79
+ }
80
+ }
81
+ else {
82
+ this.helperFormControl.setValue('');
47
83
  }
48
84
  this.cdr.detectChanges();
49
85
  }
@@ -54,7 +90,6 @@ export class MnlFormHelperTextInputComponent extends FieldType {
54
90
  ...fieldConfig,
55
91
  key: this.field.key || fieldConfig.key || 'defaultKey',
56
92
  formControl: this.formControl,
57
- // Add required properties that formly expects
58
93
  modelOptions: fieldConfig.modelOptions || this.field.modelOptions || {},
59
94
  validators: fieldConfig.validators || this.field.validators || {},
60
95
  asyncValidators: fieldConfig.asyncValidators || this.field.asyncValidators || {},
@@ -65,7 +100,6 @@ export class MnlFormHelperTextInputComponent extends FieldType {
65
100
  fieldGroupClassName: fieldConfig.fieldGroupClassName ||
66
101
  this.field.fieldGroupClassName ||
67
102
  '',
68
- // Inherit parent field's form and model
69
103
  parent: this.field.parent,
70
104
  options: this.field.options,
71
105
  model: this.field.model,
@@ -78,12 +112,12 @@ export class MnlFormHelperTextInputComponent extends FieldType {
78
112
  switch (this.to['scoring']?.['criteria']) {
79
113
  case 'exactMatch':
80
114
  if (Array.isArray(this.to['scoring']?.['answer']) &&
81
- !this.to['scoring']?.['answer'].includes(this.currentValue)) {
115
+ !this.to['scoring']?.['answer'].includes(this.originalValue)) {
82
116
  this.checked = true;
83
117
  }
84
118
  break;
85
119
  case 'range':
86
- const answer = this.currentValue;
120
+ const answer = this.originalValue;
87
121
  const num = typeof answer === 'number' ? answer : Number(answer);
88
122
  const correct = Number.isFinite(num) &&
89
123
  num >= this.to['scoring']?.['answer'].min &&
@@ -95,24 +129,41 @@ export class MnlFormHelperTextInputComponent extends FieldType {
95
129
  }
96
130
  }
97
131
  setCorrectValue() {
132
+ const currentHelperValue = this.currentHelperValue;
133
+ // If helper already has a value (user edited), don't override
134
+ if (currentHelperValue && currentHelperValue.trim() !== '') {
135
+ return;
136
+ }
98
137
  switch (this.to['scoring']?.['criteria']) {
99
138
  case 'attempted':
100
- this.formControl?.setValue(this.defaultHelperText);
139
+ // For attempted, set defaultHelperText
140
+ this.helperFormControl.setValue('');
101
141
  break;
102
142
  case 'exactMatch':
103
- if (Array.isArray(this.to['scoring']?.['answer']) &&
104
- !this.to['scoring']?.['answer'].includes(this.originalValue)) {
105
- this.formControl?.setValue(this.defaultHelperText);
143
+ if (Array.isArray(this.to['scoring']?.['answer'])) {
144
+ if (this.to['scoring']?.['answer'].includes(this.originalValue)) {
145
+ // Answer is correct - set empty value in helper
146
+ this.helperFormControl.setValue('');
147
+ }
148
+ else {
149
+ // Answer is incorrect - set defaultHelperText in helper
150
+ this.helperFormControl.setValue(this.defaultHelperText);
151
+ }
106
152
  }
107
153
  break;
108
154
  case 'range':
109
- const answer = this.currentValue;
155
+ const answer = this.originalValue;
110
156
  const num = typeof answer === 'number' ? answer : Number(answer);
111
157
  const correct = Number.isFinite(num) &&
112
158
  num >= this.to['scoring']?.['answer'].min &&
113
159
  num <= this.to['scoring']?.['answer'].max;
114
- if (!correct) {
115
- this.formControl?.setValue(this.defaultHelperText);
160
+ if (correct) {
161
+ // Answer is correct - set empty value in helper
162
+ this.helperFormControl.setValue('');
163
+ }
164
+ else {
165
+ // Answer is incorrect - set defaultHelperText in helper
166
+ this.helperFormControl.setValue(this.defaultHelperText);
116
167
  }
117
168
  break;
118
169
  default:
@@ -137,8 +188,7 @@ export class MnlFormHelperTextInputComponent extends FieldType {
137
188
  <mat-form-field class="textarea" appearance="outline" *ngIf="checked">
138
189
  <textarea
139
190
  matInput
140
- [formControl]="formControl"
141
- [formlyAttributes]="field"
191
+ [formControl]="helperFormControl"
142
192
  [readonly]="to['readonly']"
143
193
  >
144
194
  </textarea>
@@ -151,7 +201,7 @@ export class MnlFormHelperTextInputComponent extends FieldType {
151
201
  </formly-field>
152
202
  </div>
153
203
  </div>
154
- `, isInline: true, styles: [".helper-text-container{display:flex;flex-direction:column}.answer{font-size:12px}.textarea{margin:0!important;width:100%}.flex-row{display:flex;flex-direction:row;justify-content:space-between}.w-full{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "directive", type: i4.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
204
+ `, isInline: true, styles: [".helper-text-container{display:flex;flex-direction:column}.answer{font-size:12px}.textarea{margin:0!important;width:100%}.flex-row{display:flex;flex-direction:row;justify-content:space-between}.w-full{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
155
205
  }
156
206
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormHelperTextInputComponent, decorators: [{
157
207
  type: Component,
@@ -183,8 +233,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
183
233
  <mat-form-field class="textarea" appearance="outline" *ngIf="checked">
184
234
  <textarea
185
235
  matInput
186
- [formControl]="formControl"
187
- [formlyAttributes]="field"
236
+ [formControl]="helperFormControl"
188
237
  [readonly]="to['readonly']"
189
238
  >
190
239
  </textarea>
@@ -199,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
199
248
  </div>
200
249
  `, styles: [".helper-text-container{display:flex;flex-direction:column}.answer{font-size:12px}.textarea{margin:0!important;width:100%}.flex-row{display:flex;flex-direction:row;justify-content:space-between}.w-full{width:100%}\n"] }]
201
250
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXUtaGVscGVyLXRleHQudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tbGliL3NyYy9saWIvdHlwZXMvbXUtaGVscGVyLXRleHQudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUdMLFlBQVksR0FDYixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7QUF1RWpELE1BQU0sT0FBTywrQkFDWCxTQUFRLFNBQTBCO0lBSWxDLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFlBQVksQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7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Q0FBQzsrR0FoSVUsK0JBQStCO21HQUEvQiwrQkFBK0IsaUdBdERoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCVCwrUkExQ0MsWUFBWSxrSUFDWixjQUFjLHNuQkFDZCxZQUFZLCtPQUNaLG1CQUFtQix5a0JBQ25CLFdBQVcsc1BBQ1gsa0JBQWtCLDhCQUNsQixvQkFBb0IseVhBQ3BCLGVBQWUsOEJBQ2YsbUJBQW1CLDhCQUNuQixtQkFBbUI7OzRGQXdEViwrQkFBK0I7a0JBckUzQyxTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixtQkFBbUI7cUJBQ3BCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHtcbiAgRmllbGRUeXBlQ29uZmlnLFxuICBGb3JtbHlGaWVsZENvbmZpZyxcbiAgRm9ybWx5TW9kdWxlLFxufSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXUtaGVscGVyLXRleHQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJoZWxwZXItdGV4dC1jb250YWluZXJcIj5cbiAgICAgIDwhLS0gSGVscGVyIE1vZGUgLSBTaG93IHRvZ2dsZSBhbmQgY29uZGl0aW9uYWwgY29udGVudCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJ0b1snZW5hYmxlSGVscGVyJ11cIj5cbiAgICAgICAgPG1hdC1sYWJlbD57eyB0by5sYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwib3JpZ2luYWxWYWx1ZVwiIGNsYXNzPVwiZmxleC1yb3dcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFuc3dlclwiPnt7IG9yaWdpbmFsVmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2hlY2tlZFwiXG4gICAgICAgICAgICAodG9nZ2xlQ2hhbmdlKT1cInRvZ2dsZVNsaWRlKClcIlxuICAgICAgICAgICAgPnt7IGhlbHBlckxhYmVsIH19PC9tYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ0ZXh0YXJlYVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKm5nSWY9XCJjaGVja2VkXCI+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgIFtmb3JtbHlBdHRyaWJ1dGVzXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJ0b1sncmVhZG9ubHknXVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEZWZhdWx0IE1vZGUgLSBTaG93IGZpZWxkIGRpcmVjdGx5IC0tPlxuICAgICAgPGRpdiAqbmdJZj1cIiF0b1snZW5hYmxlSGVscGVyJ11cIj5cbiAgICAgICAgPGZvcm1seS1maWVsZCAqbmdJZj1cImRlZmF1bHRGaWVsZENvbmZpZ1wiIFtmaWVsZF09XCJkZWZhdWx0RmllbGRDb25maWdcIj5cbiAgICAgICAgPC9mb3JtbHktZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBgXG4gICAgIC5oZWxwZXItdGV4dC1jb250YWluZXJ7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgfVxuICAgICAuYW5zd2Vye1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICB9XG4gICAgICAudGV4dGFyZWF7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgIH1cbiAgICAgLmZsZXgtcm93e1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgIH1cbiAgICAgLnctZnVsbHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIE1ubEZvcm1IZWxwZXJUZXh0SW5wdXRDb21wb25lbnRcbiAgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBjaGVja2VkID0gZmFsc2U7XG4gIGdldCBoZWxwZXJMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy50b1snaGVscGVyUHJvcHMnXT8uWydoZWxwZXJMYWJlbCddIHx8ICdOZWVkIGhlbHA/JztcbiAgfVxuICBnZXQgZGVmYXVsdEhlbHBlclRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9bJ2hlbHBlclByb3BzJ10/LlsnZGVmYXVsdEhlbHBlclRleHQnXSB8fCAnJztcbiAgfVxuICBnZXQgY3VycmVudFZhbHVlKCkge1xuICAgIGNvbnN0IGZpZWxkS2V5ID0gdGhpcy5maWVsZC5rZXkgYXMgc3RyaW5nO1xuICAgIHJldHVybiB0aGlzLmZpZWxkLm1vZGVsPy5bZmllbGRLZXldO1xuICB9XG4gIG9yaWdpbmFsVmFsdWU6IGFueTtcbiAgZGVmYXVsdEZpZWxkQ29uZmlnPzogRm9ybWx5RmllbGRDb25maWc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3JpZ2luYWxWYWx1ZSA9IHRoaXMuY3VycmVudFZhbHVlOyAgICBcbiAgICB0aGlzLnNldHVwRGVmYXVsdEZpZWxkKCk7XG4gICAgaWYgKHRoaXMudG9bJ2VuYWJsZUhlbHBlciddKSB7XG4gICAgICB0aGlzLnNldENvcnJlY3RWYWx1ZSgpO1xuICAgICAgdGhpcy5kZXRlcm1pbmVJbml0aWFsU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTbGlkZSgpIHtcbiAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgIGlmKHRoaXMuY2hlY2tlZCkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsdWUodGhpcy5kZWZhdWx0SGVscGVyVGV4dCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNldHVwRGVmYXVsdEZpZWxkKCkge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy50b1snZGVmYXVsdEZpZWxkQ29uZmlnJ107XG4gICAgaWYgKGZpZWxkQ29uZmlnKSB7XG4gICAgICB0aGlzLmRlZmF1bHRGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgLi4uZmllbGRDb25maWcsXG4gICAgICAgIGtleTogdGhpcy5maWVsZC5rZXkgfHwgZmllbGRDb25maWcua2V5IHx8ICdkZWZhdWx0S2V5JyxcbiAgICAgICAgZm9ybUNvbnRyb2w6IHRoaXMuZm9ybUNvbnRyb2wsXG4gICAgICAgIC8vIEFkZCByZXF1aXJlZCBwcm9wZXJ0aWVzIHRoYXQgZm9ybWx5IGV4cGVjdHNcbiAgICAgICAgbW9kZWxPcHRpb25zOiBmaWVsZENvbmZpZy5tb2RlbE9wdGlvbnMgfHwgdGhpcy5maWVsZC5tb2RlbE9wdGlvbnMgfHwge30sXG4gICAgICAgIHZhbGlkYXRvcnM6IGZpZWxkQ29uZmlnLnZhbGlkYXRvcnMgfHwgdGhpcy5maWVsZC52YWxpZGF0b3JzIHx8IHt9LFxuICAgICAgICBhc3luY1ZhbGlkYXRvcnM6XG4gICAgICAgICAgZmllbGRDb25maWcuYXN5bmNWYWxpZGF0b3JzIHx8IHRoaXMuZmllbGQuYXN5bmNWYWxpZGF0b3JzIHx8IHt9LFxuICAgICAgICBob29rczogZmllbGRDb25maWcuaG9va3MgfHwgdGhpcy5maWVsZC5ob29rcyB8fCB7fSxcbiAgICAgICAgZXhwcmVzc2lvbnM6IGZpZWxkQ29uZmlnLmV4cHJlc3Npb25zIHx8IHRoaXMuZmllbGQuZXhwcmVzc2lvbnMgfHwge30sXG4gICAgICAgIGhpZGU6IGZpZWxkQ29uZmlnLmhpZGUgIT09IHVuZGVmaW5lZCA/IGZpZWxkQ29uZmlnLmhpZGUgOiBmYWxzZSxcbiAgICAgICAgY2xhc3NOYW1lOiBmaWVsZENvbmZpZy5jbGFzc05hbWUgfHwgdGhpcy5maWVsZC5jbGFzc05hbWUgfHwgJycsXG4gICAgICAgIGZpZWxkR3JvdXBDbGFzc05hbWU6XG4gICAgICAgICAgZmllbGRDb25maWcuZmllbGRHcm91cENsYXNzTmFtZSB8fFxuICAgICAgICAgIHRoaXMuZmllbGQuZmllbGRHcm91cENsYXNzTmFtZSB8fFxuICAgICAgICAgICcnLFxuICAgICAgICAvLyBJbmhlcml0IHBhcmVudCBmaWVsZCdzIGZvcm0gYW5kIG1vZGVsXG4gICAgICAgIHBhcmVudDogdGhpcy5maWVsZC5wYXJlbnQsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZmllbGQub3B0aW9ucyxcbiAgICAgICAgbW9kZWw6IHRoaXMuZmllbGQubW9kZWwsXG4gICAgICAgIGZvcm06IHRoaXMuZmllbGQuZm9ybSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZGV0ZXJtaW5lSW5pdGlhbFN0YXRlKCkge1xuICAgIC8vIEF1dG8tb3BlbiBoZWxwZXIgYmFzZWQgb24gc2NvcmluZyBjcml0ZXJpYVxuICAgIHN3aXRjaCAodGhpcy50b1snc2NvcmluZyddPy5bJ2NyaXRlcmlhJ10pIHtcbiAgICAgIGNhc2UgJ2V4YWN0TWF0Y2gnOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10pICYmXG4gICAgICAgICAgIXRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmFuZ2UnOlxuICAgICAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgY29uc3QgbnVtID0gdHlwZW9mIGFuc3dlciA9PT0gJ251bWJlcicgPyBhbnN3ZXIgOiBOdW1iZXIoYW5zd2VyKTtcblxuICAgICAgICBjb25zdCBjb3JyZWN0ID1cbiAgICAgICAgICBOdW1iZXIuaXNGaW5pdGUobnVtKSAmJlxuICAgICAgICAgIG51bSA+PSB0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10ubWluICYmXG4gICAgICAgICAgbnVtIDw9IHRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5tYXg7XG5cbiAgICAgICAgaWYgKCFjb3JyZWN0KSB7XG4gICAgICAgICAgdGhpcy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXRDb3JyZWN0VmFsdWUoKSB7XG4gICAgc3dpdGNoICh0aGlzLnRvWydzY29yaW5nJ10/LlsnY3JpdGVyaWEnXSkge1xuICAgICAgY2FzZSAnYXR0ZW1wdGVkJzpcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsdWUodGhpcy5kZWZhdWx0SGVscGVyVGV4dCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdleGFjdE1hdGNoJzpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy50b1snc2NvcmluZyddPy5bJ2Fuc3dlciddKSAmJlxuICAgICAgICAgICF0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10uaW5jbHVkZXModGhpcy5vcmlnaW5hbFZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sPy5zZXRWYWx1ZSh0aGlzLmRlZmF1bHRIZWxwZXJUZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmFuZ2UnOlxuICAgICAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgY29uc3QgbnVtID0gdHlwZW9mIGFuc3dlciA9PT0gJ251bWJlcicgPyBhbnN3ZXIgOiBOdW1iZXIoYW5zd2VyKTtcblxuICAgICAgICBjb25zdCBjb3JyZWN0ID1cbiAgICAgICAgICBOdW1iZXIuaXNGaW5pdGUobnVtKSAmJlxuICAgICAgICAgIG51bSA+PSB0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10ubWluICYmXG4gICAgICAgICAgbnVtIDw9IHRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5tYXg7XG5cbiAgICAgICAgaWYgKCFjb3JyZWN0KSB7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbD8uc2V0VmFsdWUodGhpcy5kZWZhdWx0SGVscGVyVGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIl19
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXUtaGVscGVyLXRleHQudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tbGliL3NyYy9saWIvdHlwZXMvbXUtaGVscGVyLXRleHQudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFHTCxZQUFZLEdBQ2IsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7O0FBc0VqRCxNQUFNLE9BQU8sK0JBQ1gsU0FBUSxTQUEwQjtJQU1sQyxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxZQUFZLENBQUM7SUFDakUsQ0FBQztJQUNELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUks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LGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixtQkFBbUI7cUJBQ3BCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHtcbiAgRmllbGRUeXBlQ29uZmlnLFxuICBGb3JtbHlGaWVsZENvbmZpZyxcbiAgRm9ybWx5TW9kdWxlLFxufSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXUtaGVscGVyLXRleHQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIEZvcm1seU1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJoZWxwZXItdGV4dC1jb250YWluZXJcIj5cbiAgICAgIDwhLS0gSGVscGVyIE1vZGUgLSBTaG93IHRvZ2dsZSBhbmQgY29uZGl0aW9uYWwgY29udGVudCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJ0b1snZW5hYmxlSGVscGVyJ11cIj5cbiAgICAgICAgPG1hdC1sYWJlbD57eyB0by5sYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwib3JpZ2luYWxWYWx1ZVwiIGNsYXNzPVwiZmxleC1yb3dcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFuc3dlclwiPnt7IG9yaWdpbmFsVmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2hlY2tlZFwiXG4gICAgICAgICAgICAodG9nZ2xlQ2hhbmdlKT1cInRvZ2dsZVNsaWRlKClcIlxuICAgICAgICAgICAgPnt7IGhlbHBlckxhYmVsIH19PC9tYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ0ZXh0YXJlYVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKm5nSWY9XCJjaGVja2VkXCI+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImhlbHBlckZvcm1Db250cm9sXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJ0b1sncmVhZG9ubHknXVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEZWZhdWx0IE1vZGUgLSBTaG93IGZpZWxkIGRpcmVjdGx5IC0tPlxuICAgICAgPGRpdiAqbmdJZj1cIiF0b1snZW5hYmxlSGVscGVyJ11cIj5cbiAgICAgICAgPGZvcm1seS1maWVsZCAqbmdJZj1cImRlZmF1bHRGaWVsZENvbmZpZ1wiIFtmaWVsZF09XCJkZWZhdWx0RmllbGRDb25maWdcIj5cbiAgICAgICAgPC9mb3JtbHktZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBgXG4gICAgIC5oZWxwZXItdGV4dC1jb250YWluZXJ7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgfVxuICAgICAuYW5zd2Vye1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICB9XG4gICAgICAudGV4dGFyZWF7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgIH1cbiAgICAgLmZsZXgtcm93e1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgIH1cbiAgICAgLnctZnVsbHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIE1ubEZvcm1IZWxwZXJUZXh0SW5wdXRDb21wb25lbnRcbiAgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBjaGVja2VkID0gZmFsc2U7XG4gIGhlbHBlckZvcm1Db250cm9sITogRm9ybUNvbnRyb2w7IC8vIFNlcGFyYXRlIGZvcm0gY29udHJvbCBmb3IgaGVscGVyIG1vZGVsXG5cbiAgZ2V0IGhlbHBlckxhYmVsKCkge1xuICAgIHJldHVybiB0aGlzLnRvWydoZWxwZXJQcm9wcyddPy5bJ2hlbHBlckxhYmVsJ10gfHwgJ05lZWQgaGVscD8nO1xuICB9XG4gIGdldCBkZWZhdWx0SGVscGVyVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy50b1snaGVscGVyUHJvcHMnXT8uWydkZWZhdWx0SGVscGVyVGV4dCddIHx8ICcnO1xuICB9XG5cbiAgLy8gR2V0IHZhbHVlIGZyb20gcHJpbWFyeSBtb2RlbCAoYW5zd2VycylcbiAgZ2V0IG9yaWdpbmFsVmFsdWUoKSB7XG4gICAgY29uc3QgZmllbGRLZXkgPSB0aGlzLmZpZWxkLmtleSBhcyBzdHJpbmc7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQubW9kZWw/LltmaWVsZEtleV07XG4gIH1cblxuICAvLyBHZXQvU2V0IHZhbHVlIGZyb20gc2Vjb25kYXJ5IG1vZGVsIChoZWxwZXIpXG4gIGdldCBoZWxwZXJNb2RlbCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy50b1snaGVscGVyTW9kZWwnXSB8fFxuICAgICAgdGhpcy5wcm9wc1snaGVscGVyTW9kZWwnXSB8fFxuICAgICAgdGhpcy5vcHRpb25zPy5mb3JtU3RhdGU/LlsnaGVscGVyTW9kZWwnXVxuICAgICk7XG4gIH1cblxuICBnZXQgaGVscGVyS2V5KCkge1xuICAgIHJldHVybiB0aGlzLnRvWydoZWxwZXJLZXknXSB8fCB0aGlzLmZpZWxkLmtleTtcbiAgfVxuXG4gIGdldCBjdXJyZW50SGVscGVyVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuaGVscGVyTW9kZWwgJiYgdGhpcy5oZWxwZXJLZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhlbHBlck1vZGVsW3RoaXMuaGVscGVyS2V5IGFzIHN0cmluZ107XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHNldCBjdXJyZW50SGVscGVyVmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmhlbHBlck1vZGVsICYmIHRoaXMuaGVscGVyS2V5KSB7XG4gICAgICB0aGlzLmhlbHBlck1vZGVsW3RoaXMuaGVscGVyS2V5IGFzIHN0cmluZ10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBkZWZhdWx0RmllbGRDb25maWc/OiBGb3JtbHlGaWVsZENvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBoZWxwZXIgZm9ybSBjb250cm9sIHdpdGggdmFsdWUgZnJvbSBoZWxwZXIgbW9kZWxcbiAgICB0aGlzLmhlbHBlckZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKHRoaXMuY3VycmVudEhlbHBlclZhbHVlIHx8ICcnKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBjaGFuZ2VzIGluIGhlbHBlciBmb3JtIGNvbnRyb2wgYW5kIHVwZGF0ZSBoZWxwZXIgbW9kZWxcbiAgICB0aGlzLmhlbHBlckZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRIZWxwZXJWYWx1ZSA9IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZXR1cERlZmF1bHRGaWVsZCgpO1xuXG4gICAgaWYgKHRoaXMudG9bJ2VuYWJsZUhlbHBlciddKSB7XG4gICAgICB0aGlzLnNldENvcnJlY3RWYWx1ZSgpO1xuICAgICAgdGhpcy5kZXRlcm1pbmVJbml0aWFsU3RhdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY3VycmVudEhlbHBlclZhbHVlICYmIHRoaXMuY3VycmVudEhlbHBlclZhbHVlLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlU2xpZGUoKSB7XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAvLyBXaGVuIHRvZ2dsZSBpcyBvcGVuZWQsIGNoZWNrIGlmIGhlbHBlciBmaWVsZCBpcyBlbXB0eVxuICAgICAgY29uc3QgY3VycmVudGhlbHBlciA9IHRoaXMuaGVscGVyRm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoIWN1cnJlbnRoZWxwZXIgfHwgY3VycmVudGhlbHBlci50cmltKCkgPT09ICcnKSB7XG4gICAgICAgIHRoaXMuaGVscGVyRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5kZWZhdWx0SGVscGVyVGV4dCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVscGVyRm9ybUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBzZXR1cERlZmF1bHRGaWVsZCgpIHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMudG9bJ2RlZmF1bHRGaWVsZENvbmZpZyddO1xuICAgIGlmIChmaWVsZENvbmZpZykge1xuICAgICAgdGhpcy5kZWZhdWx0RmllbGRDb25maWcgPSB7XG4gICAgICAgIC4uLmZpZWxkQ29uZmlnLFxuICAgICAgICBrZXk6IHRoaXMuZmllbGQua2V5IHx8IGZpZWxkQ29uZmlnLmtleSB8fCAnZGVmYXVsdEtleScsXG4gICAgICAgIGZvcm1Db250cm9sOiB0aGlzLmZvcm1Db250cm9sLFxuICAgICAgICBtb2RlbE9wdGlvbnM6IGZpZWxkQ29uZmlnLm1vZGVsT3B0aW9ucyB8fCB0aGlzLmZpZWxkLm1vZGVsT3B0aW9ucyB8fCB7fSxcbiAgICAgICAgdmFsaWRhdG9yczogZmllbGRDb25maWcudmFsaWRhdG9ycyB8fCB0aGlzLmZpZWxkLnZhbGlkYXRvcnMgfHwge30sXG4gICAgICAgIGFzeW5jVmFsaWRhdG9yczpcbiAgICAgICAgICBmaWVsZENvbmZpZy5hc3luY1ZhbGlkYXRvcnMgfHwgdGhpcy5maWVsZC5hc3luY1ZhbGlkYXRvcnMgfHwge30sXG4gICAgICAgIGhvb2tzOiBmaWVsZENvbmZpZy5ob29rcyB8fCB0aGlzLmZpZWxkLmhvb2tzIHx8IHt9LFxuICAgICAgICBleHByZXNzaW9uczogZmllbGRDb25maWcuZXhwcmVzc2lvbnMgfHwgdGhpcy5maWVsZC5leHByZXNzaW9ucyB8fCB7fSxcbiAgICAgICAgaGlkZTogZmllbGRDb25maWcuaGlkZSAhPT0gdW5kZWZpbmVkID8gZmllbGRDb25maWcuaGlkZSA6IGZhbHNlLFxuICAgICAgICBjbGFzc05hbWU6IGZpZWxkQ29uZmlnLmNsYXNzTmFtZSB8fCB0aGlzLmZpZWxkLmNsYXNzTmFtZSB8fCAnJyxcbiAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTpcbiAgICAgICAgICBmaWVsZENvbmZpZy5maWVsZEdyb3VwQ2xhc3NOYW1lIHx8XG4gICAgICAgICAgdGhpcy5maWVsZC5maWVsZEdyb3VwQ2xhc3NOYW1lIHx8XG4gICAgICAgICAgJycsXG4gICAgICAgIHBhcmVudDogdGhpcy5maWVsZC5wYXJlbnQsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZmllbGQub3B0aW9ucyxcbiAgICAgICAgbW9kZWw6IHRoaXMuZmllbGQubW9kZWwsXG4gICAgICAgIGZvcm06IHRoaXMuZmllbGQuZm9ybSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZGV0ZXJtaW5lSW5pdGlhbFN0YXRlKCkge1xuICAgIC8vIEF1dG8tb3BlbiBoZWxwZXIgYmFzZWQgb24gc2NvcmluZyBjcml0ZXJpYVxuICAgIHN3aXRjaCAodGhpcy50b1snc2NvcmluZyddPy5bJ2NyaXRlcmlhJ10pIHtcbiAgICAgIGNhc2UgJ2V4YWN0TWF0Y2gnOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10pICYmXG4gICAgICAgICAgIXRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5pbmNsdWRlcyh0aGlzLm9yaWdpbmFsVmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgY29uc3QgYW5zd2VyID0gdGhpcy5vcmlnaW5hbFZhbHVlO1xuICAgICAgICBjb25zdCBudW0gPSB0eXBlb2YgYW5zd2VyID09PSAnbnVtYmVyJyA/IGFuc3dlciA6IE51bWJlcihhbnN3ZXIpO1xuXG4gICAgICAgIGNvbnN0IGNvcnJlY3QgPVxuICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShudW0pICYmXG4gICAgICAgICAgbnVtID49IHRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5taW4gJiZcbiAgICAgICAgICBudW0gPD0gdGhpcy50b1snc2NvcmluZyddPy5bJ2Fuc3dlciddLm1heDtcblxuICAgICAgICBpZiAoIWNvcnJlY3QpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldENvcnJlY3RWYWx1ZSgpIHtcbiAgICBjb25zdCBjdXJyZW50SGVscGVyVmFsdWUgPSB0aGlzLmN1cnJlbnRIZWxwZXJWYWx1ZTtcblxuICAgIC8vIElmIGhlbHBlciBhbHJlYWR5IGhhcyBhIHZhbHVlICh1c2VyIGVkaXRlZCksIGRvbid0IG92ZXJyaWRlXG4gICAgaWYgKGN1cnJlbnRIZWxwZXJWYWx1ZSAmJiBjdXJyZW50SGVscGVyVmFsdWUudHJpbSgpICE9PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy50b1snc2NvcmluZyddPy5bJ2NyaXRlcmlhJ10pIHtcbiAgICAgIGNhc2UgJ2F0dGVtcHRlZCc6XG4gICAgICAgIC8vIEZvciBhdHRlbXB0ZWQsIHNldCBkZWZhdWx0SGVscGVyVGV4dFxuICAgICAgICB0aGlzLmhlbHBlckZvcm1Db250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2V4YWN0TWF0Y2gnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnRvWydzY29yaW5nJ10/LlsnYW5zd2VyJ10pKSB7XG4gICAgICAgICAgaWYgKHRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5pbmNsdWRlcyh0aGlzLm9yaWdpbmFsVmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBBbnN3ZXIgaXMgY29ycmVjdCAtIHNldCBlbXB0eSB2YWx1ZSBpbiBoZWxwZXJcbiAgICAgICAgICAgIHRoaXMuaGVscGVyRm9ybUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBbnN3ZXIgaXMgaW5jb3JyZWN0IC0gc2V0IGRlZmF1bHRIZWxwZXJUZXh0IGluIGhlbHBlclxuICAgICAgICAgICAgdGhpcy5oZWxwZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmRlZmF1bHRIZWxwZXJUZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgY29uc3QgYW5zd2VyID0gdGhpcy5vcmlnaW5hbFZhbHVlO1xuICAgICAgICBjb25zdCBudW0gPSB0eXBlb2YgYW5zd2VyID09PSAnbnVtYmVyJyA/IGFuc3dlciA6IE51bWJlcihhbnN3ZXIpO1xuXG4gICAgICAgIGNvbnN0IGNvcnJlY3QgPVxuICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShudW0pICYmXG4gICAgICAgICAgbnVtID49IHRoaXMudG9bJ3Njb3JpbmcnXT8uWydhbnN3ZXInXS5taW4gJiZcbiAgICAgICAgICBudW0gPD0gdGhpcy50b1snc2NvcmluZyddPy5bJ2Fuc3dlciddLm1heDtcblxuICAgICAgICBpZiAoY29ycmVjdCkge1xuICAgICAgICAgIC8vIEFuc3dlciBpcyBjb3JyZWN0IC0gc2V0IGVtcHR5IHZhbHVlIGluIGhlbHBlclxuICAgICAgICAgIHRoaXMuaGVscGVyRm9ybUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFuc3dlciBpcyBpbmNvcnJlY3QgLSBzZXQgZGVmYXVsdEhlbHBlclRleHQgaW4gaGVscGVyXG4gICAgICAgICAgdGhpcy5oZWxwZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmRlZmF1bHRIZWxwZXJUZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -4524,27 +4524,63 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4524
4524
  get defaultHelperText() {
4525
4525
  return this.to['helperProps']?.['defaultHelperText'] || '';
4526
4526
  }
4527
- get currentValue() {
4527
+ // Get value from primary model (answers)
4528
+ get originalValue() {
4528
4529
  const fieldKey = this.field.key;
4529
4530
  return this.field.model?.[fieldKey];
4530
4531
  }
4532
+ // Get/Set value from secondary model (helper)
4533
+ get helperModel() {
4534
+ return (this.to['helperModel'] ||
4535
+ this.props['helperModel'] ||
4536
+ this.options?.formState?.['helperModel']);
4537
+ }
4538
+ get helperKey() {
4539
+ return this.to['helperKey'] || this.field.key;
4540
+ }
4541
+ get currentHelperValue() {
4542
+ if (this.helperModel && this.helperKey) {
4543
+ return this.helperModel[this.helperKey];
4544
+ }
4545
+ return '';
4546
+ }
4547
+ set currentHelperValue(value) {
4548
+ if (this.helperModel && this.helperKey) {
4549
+ this.helperModel[this.helperKey] = value;
4550
+ }
4551
+ }
4531
4552
  constructor(cdr) {
4532
4553
  super();
4533
4554
  this.cdr = cdr;
4534
4555
  this.checked = false;
4535
4556
  }
4536
4557
  ngOnInit() {
4537
- this.originalValue = this.currentValue;
4558
+ // Initialize helper form control with value from helper model
4559
+ this.helperFormControl = new FormControl(this.currentHelperValue || '');
4560
+ // Subscribe to changes in helper form control and update helper model
4561
+ this.helperFormControl.valueChanges.subscribe((value) => {
4562
+ this.currentHelperValue = value;
4563
+ });
4538
4564
  this.setupDefaultField();
4539
4565
  if (this.to['enableHelper']) {
4540
4566
  this.setCorrectValue();
4541
4567
  this.determineInitialState();
4542
4568
  }
4569
+ if (this.currentHelperValue && this.currentHelperValue.trim() !== '') {
4570
+ this.checked = true;
4571
+ }
4543
4572
  }
4544
4573
  toggleSlide() {
4545
4574
  this.checked = !this.checked;
4546
4575
  if (this.checked) {
4547
- this.formControl?.setValue(this.defaultHelperText);
4576
+ // When toggle is opened, check if helper field is empty
4577
+ const currenthelper = this.helperFormControl.value;
4578
+ if (!currenthelper || currenthelper.trim() === '') {
4579
+ this.helperFormControl.setValue(this.defaultHelperText);
4580
+ }
4581
+ }
4582
+ else {
4583
+ this.helperFormControl.setValue('');
4548
4584
  }
4549
4585
  this.cdr.detectChanges();
4550
4586
  }
@@ -4555,7 +4591,6 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4555
4591
  ...fieldConfig,
4556
4592
  key: this.field.key || fieldConfig.key || 'defaultKey',
4557
4593
  formControl: this.formControl,
4558
- // Add required properties that formly expects
4559
4594
  modelOptions: fieldConfig.modelOptions || this.field.modelOptions || {},
4560
4595
  validators: fieldConfig.validators || this.field.validators || {},
4561
4596
  asyncValidators: fieldConfig.asyncValidators || this.field.asyncValidators || {},
@@ -4566,7 +4601,6 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4566
4601
  fieldGroupClassName: fieldConfig.fieldGroupClassName ||
4567
4602
  this.field.fieldGroupClassName ||
4568
4603
  '',
4569
- // Inherit parent field's form and model
4570
4604
  parent: this.field.parent,
4571
4605
  options: this.field.options,
4572
4606
  model: this.field.model,
@@ -4579,12 +4613,12 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4579
4613
  switch (this.to['scoring']?.['criteria']) {
4580
4614
  case 'exactMatch':
4581
4615
  if (Array.isArray(this.to['scoring']?.['answer']) &&
4582
- !this.to['scoring']?.['answer'].includes(this.currentValue)) {
4616
+ !this.to['scoring']?.['answer'].includes(this.originalValue)) {
4583
4617
  this.checked = true;
4584
4618
  }
4585
4619
  break;
4586
4620
  case 'range':
4587
- const answer = this.currentValue;
4621
+ const answer = this.originalValue;
4588
4622
  const num = typeof answer === 'number' ? answer : Number(answer);
4589
4623
  const correct = Number.isFinite(num) &&
4590
4624
  num >= this.to['scoring']?.['answer'].min &&
@@ -4596,24 +4630,41 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4596
4630
  }
4597
4631
  }
4598
4632
  setCorrectValue() {
4633
+ const currentHelperValue = this.currentHelperValue;
4634
+ // If helper already has a value (user edited), don't override
4635
+ if (currentHelperValue && currentHelperValue.trim() !== '') {
4636
+ return;
4637
+ }
4599
4638
  switch (this.to['scoring']?.['criteria']) {
4600
4639
  case 'attempted':
4601
- this.formControl?.setValue(this.defaultHelperText);
4640
+ // For attempted, set defaultHelperText
4641
+ this.helperFormControl.setValue('');
4602
4642
  break;
4603
4643
  case 'exactMatch':
4604
- if (Array.isArray(this.to['scoring']?.['answer']) &&
4605
- !this.to['scoring']?.['answer'].includes(this.originalValue)) {
4606
- this.formControl?.setValue(this.defaultHelperText);
4644
+ if (Array.isArray(this.to['scoring']?.['answer'])) {
4645
+ if (this.to['scoring']?.['answer'].includes(this.originalValue)) {
4646
+ // Answer is correct - set empty value in helper
4647
+ this.helperFormControl.setValue('');
4648
+ }
4649
+ else {
4650
+ // Answer is incorrect - set defaultHelperText in helper
4651
+ this.helperFormControl.setValue(this.defaultHelperText);
4652
+ }
4607
4653
  }
4608
4654
  break;
4609
4655
  case 'range':
4610
- const answer = this.currentValue;
4656
+ const answer = this.originalValue;
4611
4657
  const num = typeof answer === 'number' ? answer : Number(answer);
4612
4658
  const correct = Number.isFinite(num) &&
4613
4659
  num >= this.to['scoring']?.['answer'].min &&
4614
4660
  num <= this.to['scoring']?.['answer'].max;
4615
- if (!correct) {
4616
- this.formControl?.setValue(this.defaultHelperText);
4661
+ if (correct) {
4662
+ // Answer is correct - set empty value in helper
4663
+ this.helperFormControl.setValue('');
4664
+ }
4665
+ else {
4666
+ // Answer is incorrect - set defaultHelperText in helper
4667
+ this.helperFormControl.setValue(this.defaultHelperText);
4617
4668
  }
4618
4669
  break;
4619
4670
  default:
@@ -4638,8 +4689,7 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4638
4689
  <mat-form-field class="textarea" appearance="outline" *ngIf="checked">
4639
4690
  <textarea
4640
4691
  matInput
4641
- [formControl]="formControl"
4642
- [formlyAttributes]="field"
4692
+ [formControl]="helperFormControl"
4643
4693
  [readonly]="to['readonly']"
4644
4694
  >
4645
4695
  </textarea>
@@ -4652,7 +4702,7 @@ class MnlFormHelperTextInputComponent extends FieldType$1 {
4652
4702
  </formly-field>
4653
4703
  </div>
4654
4704
  </div>
4655
- `, isInline: true, styles: [".helper-text-container{display:flex;flex-direction:column}.answer{font-size:12px}.textarea{margin:0!important;width:100%}.flex-row{display:flex;flex-direction:row;justify-content:space-between}.w-full{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2$1.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "directive", type: i2$1.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6$3.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
4705
+ `, isInline: true, styles: [".helper-text-container{display:flex;flex-direction:column}.answer{font-size:12px}.textarea{margin:0!important;width:100%}.flex-row{display:flex;flex-direction:row;justify-content:space-between}.w-full{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2$1.FormlyField, selector: "formly-field", inputs: ["field"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6$3.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }] }); }
4656
4706
  }
4657
4707
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormHelperTextInputComponent, decorators: [{
4658
4708
  type: Component,
@@ -4684,8 +4734,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
4684
4734
  <mat-form-field class="textarea" appearance="outline" *ngIf="checked">
4685
4735
  <textarea
4686
4736
  matInput
4687
- [formControl]="formControl"
4688
- [formlyAttributes]="field"
4737
+ [formControl]="helperFormControl"
4689
4738
  [readonly]="to['readonly']"
4690
4739
  >
4691
4740
  </textarea>
@@ -4918,6 +4967,7 @@ class MnlFormLibComponent {
4918
4967
  ...this.options.formState,
4919
4968
  showOldValues: this.showOldValues,
4920
4969
  oldValues: this.oldValues,
4970
+ helperModel: this.helperModel,
4921
4971
  },
4922
4972
  };
4923
4973
  }
@@ -5023,7 +5073,7 @@ class MnlFormLibComponent {
5023
5073
  });
5024
5074
  }
5025
5075
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormLibComponent, deps: [{ token: i1$2.TranslateService }, { token: ScoringService }], target: i0.ɵɵFactoryTarget.Component }); }
5026
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MnlFormLibComponent, isStandalone: true, selector: "mnl-form", inputs: { readonly: "readonly", form: "form", fields: "fields", model: "model", options: "options", userRoles: "userRoles", userCountries: "userCountries", oldValues: "oldValues", showOldValues: "showOldValues" }, outputs: { noOfTabs: "noOfTabs", scoreChange: "scoreChange" }, ngImport: i0, template: "@if(formPrepared) {\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n (modelChange)=\"onModelChange($event)\"\n class=\"mnl-formly-form\"\n></formly-form>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: CommonsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2$1.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: FormlyMatTextAreaModule }, { kind: "ngmodule", type: FormlyMatInputModule }, { kind: "ngmodule", type: FormlyMatCheckboxModule }, { kind: "ngmodule", type: FormlyMatRadioModule }] }); }
5076
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MnlFormLibComponent, isStandalone: true, selector: "mnl-form", inputs: { readonly: "readonly", form: "form", fields: "fields", model: "model", helperModel: "helperModel", options: "options", userRoles: "userRoles", userCountries: "userCountries", oldValues: "oldValues", showOldValues: "showOldValues" }, outputs: { noOfTabs: "noOfTabs", scoreChange: "scoreChange" }, ngImport: i0, template: "@if(formPrepared) {\n<formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n [options]=\"options\"\n (modelChange)=\"onModelChange($event)\"\n class=\"mnl-formly-form\"\n></formly-form>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: CommonsModule }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i2$1.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: FormlyMatTextAreaModule }, { kind: "ngmodule", type: FormlyMatInputModule }, { kind: "ngmodule", type: FormlyMatCheckboxModule }, { kind: "ngmodule", type: FormlyMatRadioModule }] }); }
5027
5077
  }
5028
5078
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MnlFormLibComponent, decorators: [{
5029
5079
  type: Component,
@@ -5047,6 +5097,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5047
5097
  type: Input
5048
5098
  }], model: [{
5049
5099
  type: Input
5100
+ }], helperModel: [{
5101
+ type: Input
5050
5102
  }], options: [{
5051
5103
  type: Input
5052
5104
  }], userRoles: [{