mmhglobal-dynamicform 2.7.2 → 2.8.0

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,6 +2,8 @@
2
2
  import { Component, ViewChild } from '@angular/core';
3
3
  /********** Component & Service **********/
4
4
  import { InputFieldBase } from '../components/inputfieldbase.component';
5
+ import { ZComponentHelper } from "mmhglobal-zcore";
6
+ import { Validators } from '@angular/forms';
5
7
  import * as i0 from "@angular/core";
6
8
  import * as i1 from "../services/zcomponent.service";
7
9
  import * as i2 from "@ionic/angular";
@@ -19,10 +21,12 @@ export class ZnumericComponent extends InputFieldBase {
19
21
  }
20
22
  ngOnInit() {
21
23
  super.setupInnerField();
22
- this.minValue = this.data.MinValue;
23
- this.maxValue = this.data.MaxValue;
24
+ this.setInitMinAndMaxValue();
24
25
  super.focusOnDefault(this.focus.bind(this));
25
26
  }
27
+ ngOnDestroy() {
28
+ this.removeMinAndMaxValidator();
29
+ }
26
30
  ngAfterViewInit() {
27
31
  this.componentService.decrementComponentCounterForField(this.data);
28
32
  }
@@ -45,6 +49,50 @@ export class ZnumericComponent extends InputFieldBase {
45
49
  }
46
50
  return false;
47
51
  }
52
+ setInitMinAndMaxValue() {
53
+ if (typeof this.data.MinValue == 'string' && this.data.MinValue.toString().startsWith('group.')) {
54
+ this.minValue = ZComponentHelper.getGroupValue(this.data.MinValue.toString(), this.group);
55
+ }
56
+ else {
57
+ this.minValue = this.data.MinValue;
58
+ }
59
+ if (typeof this.data.MaxValue == 'string' && this.data.MaxValue.toString().startsWith('group.')) {
60
+ this.maxValue = ZComponentHelper.getGroupValue(this.data.MaxValue.toString(), this.group);
61
+ }
62
+ else {
63
+ this.maxValue = this.data.MaxValue;
64
+ }
65
+ this.addMinAndMaxValidator();
66
+ }
67
+ addMinAndMaxValidator() {
68
+ // Setup form validator for ionic components only (Kendo component will be auto setup)
69
+ if (this.isMobileScreen()) {
70
+ const control = this.form.controls[this.data.Value];
71
+ if (this.minValue != undefined) {
72
+ this.minValidator = Validators.min(Number(this.minValue));
73
+ control.addValidators(this.minValidator);
74
+ }
75
+ if (this.maxValue != undefined) {
76
+ this.maxValidator = Validators.max(Number(this.maxValue));
77
+ control.addValidators(this.maxValidator);
78
+ }
79
+ control.updateValueAndValidity();
80
+ }
81
+ }
82
+ removeMinAndMaxValidator() {
83
+ this.minValue = null;
84
+ this.maxValue = null;
85
+ const control = this.form.controls[this.data.Value];
86
+ if (this.isMobileScreen()) {
87
+ if (control.hasValidator(this.minValidator)) {
88
+ control.removeValidators(this.minValidator);
89
+ }
90
+ if (control.hasValidator(this.maxValidator)) {
91
+ control.removeValidators(this.maxValidator);
92
+ }
93
+ }
94
+ control.updateValueAndValidity();
95
+ }
48
96
  }
49
97
  ZnumericComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZnumericComponent, deps: [{ token: i1.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
50
98
  ZnumericComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZnumericComponent, selector: "app-znumeric", viewQueries: [{ propertyName: "numeric", first: true, predicate: ["numeric"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"znumeric-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <ion-input *ngIf=\"isMobileScreen()\" #znumericField [id]=\"data.Value\" type=\"number\"\r\n [autocorrect]=\"data.AutoCorrect ? 'on' : 'off'\"\r\n [min]=\"minValue\"\r\n [max]=\"maxValue\"\r\n [step]=\"data.StepValue\"\r\n [inputmode]=\"inputMode\"\r\n [formControlName]=\"data.Value\"\r\n [attr.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [value]=\"0 | znumeric : form : data\"\r\n [class.left-aligned]=\"this.data.RightAlign === false\"\r\n [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n </ion-input>\r\n <kendo-numerictextbox *ngIf=\"!isMobileScreen()\"\r\n [spinners]=\"data.ShowSpinners\"\r\n [autoCorrect]=\"data.AutoCorrect\"\r\n [formControlName]=\"data.Value\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [min]=\"minValue\"\r\n [max]=\"maxValue\"\r\n [step]=\"data.StepValue\"\r\n [format]=\"data.FormatOptions\" [id]=\"data.Value\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n class=\"input-field e1tag-style1\"\r\n [value]=\"0 | znumeric : form : data\"\r\n (valueChange)=\"onChange(null, $event)\"\r\n [style]=\"componentProperties.style.style1\"\r\n [decimals]=\"data.DecimalPlace\"\r\n [class.left-aligned]=\"this.data.RightAlign === false\"\r\n #numeric>\r\n </kendo-numerictextbox>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-numerictextbox:focus-within{box-shadow:0 0 3px 1px var(--ion-color-primary)}:host ::ng-deep kendo-numerictextbox>input{text-align:right}:host ::ng-deep kendo-numerictextbox.left-aligned>input{text-align:left}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}.k-numerictextbox{color:var(--z-text-color)}\n"], components: [{ type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "size", "spellcheck", "step", "type", "value"] }, { type: i3.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NumericValueAccessor, selector: "ion-input[type=number]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "znumeric": i6.ZNumericParser } });
@@ -55,4 +103,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
55
103
  type: ViewChild,
56
104
  args: ["numeric"]
57
105
  }] } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem51bWVyaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem51bWVyaWMvem51bWVyaWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem51bWVyaWMvem51bWVyaWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTzdELDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7O0FBU3hFLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxjQUFjO0lBTW5ELFlBQ1MsZ0JBQW1DO1FBRTFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRmpCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUFMckMsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN0QixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsYUFBUSxHQUFHLENBQUMsQ0FBQztJQU1wQixDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDbkMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWdCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLHlEQUF5RDtRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWdCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLHlEQUF5RDtRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzhHQTlDVSxpQkFBaUI7a0dBQWpCLGlCQUFpQiwrS0NsQjlCLDJzRUFrQ0E7MkZEaEJhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxjQUFjO3dHQUtGLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOyBcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgTnVtZXJpY1RleHRCb3hDb21wb25lbnQgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1pbnB1dHMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJbnB1dEZpZWxkQmFzZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50IH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtem51bWVyaWMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96bnVtZXJpYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vem51bWVyaWMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFpudW1lcmljQ29tcG9uZW50IGV4dGVuZHMgSW5wdXRGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoXCJudW1lcmljXCIpIG51bWVyaWM6IE51bWVyaWNUZXh0Qm94Q29tcG9uZW50O1xyXG4gIHB1YmxpYyBpbnB1dE1vZGUgPSBcImRlY2ltYWxcIjtcclxuICBwdWJsaWMgbWluVmFsdWUgPSAwO1xyXG4gIHB1YmxpYyBtYXhWYWx1ZSA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuc2V0dXBJbm5lckZpZWxkKCk7XHJcblxyXG4gICAgdGhpcy5taW5WYWx1ZSA9IHRoaXMuZGF0YS5NaW5WYWx1ZTtcclxuICAgIHRoaXMubWF4VmFsdWUgPSB0aGlzLmRhdGEuTWF4VmFsdWU7XHJcbiAgICBzdXBlci5mb2N1c09uRGVmYXVsdCh0aGlzLmZvY3VzLmJpbmQodGhpcykpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2V0TWluVmFsdWUobmV3VmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5taW5WYWx1ZSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgIC8vIG1hcmsgdGhpcyBjb250cm9sIGFzIHRvdWNoZWQgdG8gdHJpZ2dlciBmb3IgdmFsaWRhdGlvblxyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmRhdGEuVmFsdWVdO1xyXG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBzZXRNYXhWYWx1ZShuZXdWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1heFZhbHVlID0gbmV3VmFsdWU7XHJcblxyXG4gICAgLy8gbWFyayB0aGlzIGNvbnRyb2wgYXMgdG91Y2hlZCB0byB0cmlnZ2VyIGZvciB2YWxpZGF0aW9uXHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuZGF0YS5WYWx1ZV07XHJcbiAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1cygpIHtcclxuICAgIGlmICh0aGlzLm51bWVyaWMpIHtcclxuICAgICAgdGhpcy5udW1lcmljLmZvY3VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiem51bWVyaWMtY29udGFpbmVyIGUxdGFnLXN0eWxlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGVcIj5cclxuICA8aW9uLWlucHV0ICpuZ0lmPVwiaXNNb2JpbGVTY3JlZW4oKVwiICN6bnVtZXJpY0ZpZWxkIFtpZF09XCJkYXRhLlZhbHVlXCIgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICBbYXV0b2NvcnJlY3RdPVwiZGF0YS5BdXRvQ29ycmVjdCA/ICdvbicgOiAnb2ZmJ1wiXHJcbiAgICAgICAgICAgICBbbWluXT1cIm1pblZhbHVlXCJcclxuICAgICAgICAgICAgIFttYXhdPVwibWF4VmFsdWVcIlxyXG4gICAgICAgICAgICAgW3N0ZXBdPVwiZGF0YS5TdGVwVmFsdWVcIlxyXG4gICAgICAgICAgICAgW2lucHV0bW9kZV09XCJpbnB1dE1vZGVcIlxyXG4gICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICBbdmFsdWVdPVwiMCB8IHpudW1lcmljIDogZm9ybSA6IGRhdGFcIlxyXG4gICAgICAgICAgICAgW2NsYXNzLmxlZnQtYWxpZ25lZF09XCJ0aGlzLmRhdGEuUmlnaHRBbGlnbiA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIj5cclxuICA8L2lvbi1pbnB1dD5cclxuICA8a2VuZG8tbnVtZXJpY3RleHRib3ggKm5nSWY9XCIhaXNNb2JpbGVTY3JlZW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcGlubmVyc109XCJkYXRhLlNob3dTcGlubmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ29ycmVjdF09XCJkYXRhLkF1dG9Db3JyZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cIm1pblZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCJtYXhWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwXT1cImRhdGEuU3RlcFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJkYXRhLkZvcm1hdE9wdGlvbnNcIiBbaWRdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1maWVsZCBlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiMCB8IHpudW1lcmljIDogZm9ybSA6IGRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2UobnVsbCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsc109XCJkYXRhLkRlY2ltYWxQbGFjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5sZWZ0LWFsaWduZWRdPVwidGhpcy5kYXRhLlJpZ2h0QWxpZ24gPT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgI251bWVyaWM+XHJcbiAgPC9rZW5kby1udW1lcmljdGV4dGJveD5cclxuPC9kaXY+XHJcbiJdfQ==
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem51bWVyaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem51bWVyaWMvem51bWVyaWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvem51bWVyaWMvem51bWVyaWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU94RSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXhFLE9BQU8sRUFBYyxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFPNUMsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGNBQWM7SUFRbkQsWUFDUyxnQkFBbUM7UUFFMUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFGakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQVByQyxjQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixhQUFRLEdBQUcsQ0FBQyxDQUFDO0lBUXBCLENBQUM7SUFFRCxRQUFRO1FBQ04sS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENB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QUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUMxQztZQUNELE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUVyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ3pCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzNDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDNUM7WUFFRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO2FBQzVDO1NBQ0Y7UUFDRCxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNuQyxDQUFDOzs4R0F0R1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsK0tDbkI5Qiwyc0VBa0NBOzJGRGZhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxjQUFjO3dHQUtGLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE51bWVyaWNUZXh0Qm94Q29tcG9uZW50IH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItaW5wdXRzJztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW5wdXRGaWVsZEJhc2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2lucHV0ZmllbGRiYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciB9IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXpudW1lcmljJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vem51bWVyaWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3pudW1lcmljLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBabnVtZXJpY0NvbXBvbmVudCBleHRlbmRzIElucHV0RmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoXCJudW1lcmljXCIpIG51bWVyaWM6IE51bWVyaWNUZXh0Qm94Q29tcG9uZW50O1xyXG4gIHB1YmxpYyBpbnB1dE1vZGUgPSBcImRlY2ltYWxcIjtcclxuICBwdWJsaWMgbWluVmFsdWUgPSAwO1xyXG4gIHB1YmxpYyBtYXhWYWx1ZSA9IDA7XHJcbiAgcHJpdmF0ZSBtaW5WYWxpZGF0b3I7XHJcbiAgcHJpdmF0ZSBtYXhWYWxpZGF0b3I7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuc2V0dXBJbm5lckZpZWxkKCk7XHJcbiAgICB0aGlzLnNldEluaXRNaW5BbmRNYXhWYWx1ZSgpO1xyXG4gICAgc3VwZXIuZm9jdXNPbkRlZmF1bHQodGhpcy5mb2N1cy5iaW5kKHRoaXMpKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5yZW1vdmVNaW5BbmRNYXhWYWxpZGF0b3IoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIHNldE1pblZhbHVlKG5ld1ZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMubWluVmFsdWUgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICAvLyBtYXJrIHRoaXMgY29udHJvbCBhcyB0b3VjaGVkIHRvIHRyaWdnZXIgZm9yIHZhbGlkYXRpb25cclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXTtcclxuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0TWF4VmFsdWUobmV3VmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5tYXhWYWx1ZSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgIC8vIG1hcmsgdGhpcyBjb250cm9sIGFzIHRvdWNoZWQgdG8gdHJpZ2dlciBmb3IgdmFsaWRhdGlvblxyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmRhdGEuVmFsdWVdO1xyXG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9jdXMoKSB7XHJcbiAgICBpZiAodGhpcy5udW1lcmljKSB7XHJcbiAgICAgIHRoaXMubnVtZXJpYy5mb2N1cygpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW5pdE1pbkFuZE1heFZhbHVlKCkge1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuTWluVmFsdWUgPT0gJ3N0cmluZycgJiYgKHRoaXMuZGF0YS5NaW5WYWx1ZSBhcyBhbnkpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgdGhpcy5taW5WYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSgodGhpcy5kYXRhLk1pblZhbHVlIGFzIGFueSkudG9TdHJpbmcoKSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5taW5WYWx1ZSA9IHRoaXMuZGF0YS5NaW5WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMuZGF0YS5NYXhWYWx1ZSA9PSAnc3RyaW5nJyAmJiAodGhpcy5kYXRhLk1heFZhbHVlIGFzIGFueSkudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICB0aGlzLm1heFZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKCh0aGlzLmRhdGEuTWF4VmFsdWUgYXMgYW55KS50b1N0cmluZygpLCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm1heFZhbHVlID0gdGhpcy5kYXRhLk1heFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWRkTWluQW5kTWF4VmFsaWRhdG9yKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZE1pbkFuZE1heFZhbGlkYXRvcigpIHtcclxuICAgIC8vIFNldHVwIGZvcm0gdmFsaWRhdG9yIGZvciBpb25pYyBjb21wb25lbnRzIG9ubHkgKEtlbmRvIGNvbXBvbmVudCB3aWxsIGJlIGF1dG8gc2V0dXApXHJcbiAgICBpZiAodGhpcy5pc01vYmlsZVNjcmVlbigpKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXTtcclxuICAgICAgaWYgKHRoaXMubWluVmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5taW5WYWxpZGF0b3IgPSBWYWxpZGF0b3JzLm1pbihOdW1iZXIodGhpcy5taW5WYWx1ZSkpO1xyXG4gICAgICAgIGNvbnRyb2wuYWRkVmFsaWRhdG9ycyh0aGlzLm1pblZhbGlkYXRvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1heFZhbHVlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMubWF4VmFsaWRhdG9yID0gVmFsaWRhdG9ycy5tYXgoTnVtYmVyKHRoaXMubWF4VmFsdWUpKTtcclxuICAgICAgICBjb250cm9sLmFkZFZhbGlkYXRvcnModGhpcy5tYXhWYWxpZGF0b3IpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVNaW5BbmRNYXhWYWxpZGF0b3IoKSB7XHJcbiAgICB0aGlzLm1pblZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMubWF4VmFsdWUgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXTtcclxuICAgIGlmICh0aGlzLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgaWYgKGNvbnRyb2wuaGFzVmFsaWRhdG9yKHRoaXMubWluVmFsaWRhdG9yKSkge1xyXG4gICAgICAgIGNvbnRyb2wucmVtb3ZlVmFsaWRhdG9ycyh0aGlzLm1pblZhbGlkYXRvcilcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbnRyb2wuaGFzVmFsaWRhdG9yKHRoaXMubWF4VmFsaWRhdG9yKSkge1xyXG4gICAgICAgIGNvbnRyb2wucmVtb3ZlVmFsaWRhdG9ycyh0aGlzLm1heFZhbGlkYXRvcilcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJ6bnVtZXJpYy1jb250YWluZXIgZTF0YWctc3R5bGVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiPlxyXG4gIDxpb24taW5wdXQgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpXCIgI3pudW1lcmljRmllbGQgW2lkXT1cImRhdGEuVmFsdWVcIiB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgIFthdXRvY29ycmVjdF09XCJkYXRhLkF1dG9Db3JyZWN0ID8gJ29uJyA6ICdvZmYnXCJcclxuICAgICAgICAgICAgIFttaW5dPVwibWluVmFsdWVcIlxyXG4gICAgICAgICAgICAgW21heF09XCJtYXhWYWx1ZVwiXHJcbiAgICAgICAgICAgICBbc3RlcF09XCJkYXRhLlN0ZXBWYWx1ZVwiXHJcbiAgICAgICAgICAgICBbaW5wdXRtb2RlXT1cImlucHV0TW9kZVwiXHJcbiAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgIFt2YWx1ZV09XCIwIHwgem51bWVyaWMgOiBmb3JtIDogZGF0YVwiXHJcbiAgICAgICAgICAgICBbY2xhc3MubGVmdC1hbGlnbmVkXT1cInRoaXMuZGF0YS5SaWdodEFsaWduID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG4gIDwvaW9uLWlucHV0PlxyXG4gIDxrZW5kby1udW1lcmljdGV4dGJveCAqbmdJZj1cIiFpc01vYmlsZVNjcmVlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NwaW5uZXJzXT1cImRhdGEuU2hvd1NwaW5uZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9Db3JyZWN0XT1cImRhdGEuQXV0b0NvcnJlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWluVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cIm1heFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBdPVwiZGF0YS5TdGVwVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImRhdGEuRm9ybWF0T3B0aW9uc1wiIFtpZF09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGEuUGxhY2VIb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWZpZWxkIGUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIwIHwgem51bWVyaWMgOiBmb3JtIDogZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZShudWxsLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxzXT1cImRhdGEuRGVjaW1hbFBsYWNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxlZnQtYWxpZ25lZF09XCJ0aGlzLmRhdGEuUmlnaHRBbGlnbiA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAjbnVtZXJpYz5cclxuICA8L2tlbmRvLW51bWVyaWN0ZXh0Ym94PlxyXG48L2Rpdj5cclxuIl19
@@ -164,16 +164,14 @@ class ComponentErrorHandlerService {
164
164
  errorMessage = `Enter a valid email address for {{T_FieldName}}`;
165
165
  break;
166
166
  case 'min':
167
- case 'max':
168
- errorMessage = '';
169
- break;
170
167
  case 'minError':
171
168
  errorMessage = `{{T_FieldName}} must be equal or more than {{T_MinValue}}`;
172
- Object.assign(translationVariables, { T_MinValue: errorDetail[errorType].minValue });
169
+ Object.assign(translationVariables, { T_MinValue: errorDetail[errorType].minValue || errorDetail[errorType].min });
173
170
  break;
171
+ case 'max':
174
172
  case 'maxError':
175
173
  errorMessage = `{{T_FieldName}} must be equal or less than {{T_MaxValue}}`;
176
- Object.assign(translationVariables, { T_MaxValue: errorDetail[errorType].maxValue });
174
+ Object.assign(translationVariables, { T_MaxValue: errorDetail[errorType].maxValue || errorDetail[errorType].max });
177
175
  break;
178
176
  default:
179
177
  console.warn(`Field Error is not properly handled : ${ZComponentHelper.getFieldLabel(fields, controlName)}`);
@@ -499,11 +497,13 @@ class FieldBase {
499
497
  }
500
498
  };
501
499
  }
502
- initComponent() {
500
+ initComponent(options) {
503
501
  this.isLoading = true;
504
502
  this.componentProperties = this.componentProperties || new ZComponentProperties();
505
503
  ZComponentHelper.setComponentProperties(this);
506
- ZComponentHelper.registerComponent(this);
504
+ if (!(options && options.isRegisterComponent == false)) {
505
+ ZComponentHelper.registerComponent(this);
506
+ }
507
507
  this.componentService.setComponentAdditionalProperties(this);
508
508
  this.componentService.setCompStylesByIndex(this);
509
509
  this.data.ComponentStyleType = this.data.ComponentStyleType || "style1";
@@ -5586,6 +5586,12 @@ class InputFieldBase extends FieldBase {
5586
5586
  setAddOnValue(addOns) {
5587
5587
  this.triggerContainerEvent.emit({ type: 'setAddOnValue', data: addOns });
5588
5588
  }
5589
+ setMinValue(newValue) {
5590
+ this.triggerContainerEvent.emit({ type: 'setMinValue', newValue: newValue });
5591
+ }
5592
+ setMaxValue(newValue) {
5593
+ this.triggerContainerEvent.emit({ type: 'setMaxValue', newValue: newValue });
5594
+ }
5589
5595
  triggerEvent(type, target, event, fieldValue) {
5590
5596
  if (target) {
5591
5597
  this.group.subject.next({
@@ -7471,10 +7477,12 @@ class ZnumericComponent extends InputFieldBase {
7471
7477
  }
7472
7478
  ngOnInit() {
7473
7479
  super.setupInnerField();
7474
- this.minValue = this.data.MinValue;
7475
- this.maxValue = this.data.MaxValue;
7480
+ this.setInitMinAndMaxValue();
7476
7481
  super.focusOnDefault(this.focus.bind(this));
7477
7482
  }
7483
+ ngOnDestroy() {
7484
+ this.removeMinAndMaxValidator();
7485
+ }
7478
7486
  ngAfterViewInit() {
7479
7487
  this.componentService.decrementComponentCounterForField(this.data);
7480
7488
  }
@@ -7497,6 +7505,50 @@ class ZnumericComponent extends InputFieldBase {
7497
7505
  }
7498
7506
  return false;
7499
7507
  }
7508
+ setInitMinAndMaxValue() {
7509
+ if (typeof this.data.MinValue == 'string' && this.data.MinValue.toString().startsWith('group.')) {
7510
+ this.minValue = ZComponentHelper.getGroupValue(this.data.MinValue.toString(), this.group);
7511
+ }
7512
+ else {
7513
+ this.minValue = this.data.MinValue;
7514
+ }
7515
+ if (typeof this.data.MaxValue == 'string' && this.data.MaxValue.toString().startsWith('group.')) {
7516
+ this.maxValue = ZComponentHelper.getGroupValue(this.data.MaxValue.toString(), this.group);
7517
+ }
7518
+ else {
7519
+ this.maxValue = this.data.MaxValue;
7520
+ }
7521
+ this.addMinAndMaxValidator();
7522
+ }
7523
+ addMinAndMaxValidator() {
7524
+ // Setup form validator for ionic components only (Kendo component will be auto setup)
7525
+ if (this.isMobileScreen()) {
7526
+ const control = this.form.controls[this.data.Value];
7527
+ if (this.minValue != undefined) {
7528
+ this.minValidator = Validators.min(Number(this.minValue));
7529
+ control.addValidators(this.minValidator);
7530
+ }
7531
+ if (this.maxValue != undefined) {
7532
+ this.maxValidator = Validators.max(Number(this.maxValue));
7533
+ control.addValidators(this.maxValidator);
7534
+ }
7535
+ control.updateValueAndValidity();
7536
+ }
7537
+ }
7538
+ removeMinAndMaxValidator() {
7539
+ this.minValue = null;
7540
+ this.maxValue = null;
7541
+ const control = this.form.controls[this.data.Value];
7542
+ if (this.isMobileScreen()) {
7543
+ if (control.hasValidator(this.minValidator)) {
7544
+ control.removeValidators(this.minValidator);
7545
+ }
7546
+ if (control.hasValidator(this.maxValidator)) {
7547
+ control.removeValidators(this.maxValidator);
7548
+ }
7549
+ }
7550
+ control.updateValueAndValidity();
7551
+ }
7500
7552
  }
7501
7553
  ZnumericComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZnumericComponent, deps: [{ token: ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
7502
7554
  ZnumericComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZnumericComponent, selector: "app-znumeric", viewQueries: [{ propertyName: "numeric", first: true, predicate: ["numeric"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"znumeric-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <ion-input *ngIf=\"isMobileScreen()\" #znumericField [id]=\"data.Value\" type=\"number\"\r\n [autocorrect]=\"data.AutoCorrect ? 'on' : 'off'\"\r\n [min]=\"minValue\"\r\n [max]=\"maxValue\"\r\n [step]=\"data.StepValue\"\r\n [inputmode]=\"inputMode\"\r\n [formControlName]=\"data.Value\"\r\n [attr.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [value]=\"0 | znumeric : form : data\"\r\n [class.left-aligned]=\"this.data.RightAlign === false\"\r\n [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n </ion-input>\r\n <kendo-numerictextbox *ngIf=\"!isMobileScreen()\"\r\n [spinners]=\"data.ShowSpinners\"\r\n [autoCorrect]=\"data.AutoCorrect\"\r\n [formControlName]=\"data.Value\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [min]=\"minValue\"\r\n [max]=\"maxValue\"\r\n [step]=\"data.StepValue\"\r\n [format]=\"data.FormatOptions\" [id]=\"data.Value\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n class=\"input-field e1tag-style1\"\r\n [value]=\"0 | znumeric : form : data\"\r\n (valueChange)=\"onChange(null, $event)\"\r\n [style]=\"componentProperties.style.style1\"\r\n [decimals]=\"data.DecimalPlace\"\r\n [class.left-aligned]=\"this.data.RightAlign === false\"\r\n #numeric>\r\n </kendo-numerictextbox>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-numerictextbox:focus-within{box-shadow:0 0 3px 1px var(--ion-color-primary)}:host ::ng-deep kendo-numerictextbox>input{text-align:right}:host ::ng-deep kendo-numerictextbox.left-aligned>input{text-align:left}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}.k-numerictextbox{color:var(--z-text-color)}\n"], components: [{ type: i2$1.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "size", "spellcheck", "step", "type", "value"] }, { type: i3$4.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$1.NumericValueAccessor, selector: "ion-input[type=number]" }, { type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "znumeric": ZNumericParser } });
@@ -8131,7 +8183,7 @@ class ZInputContainerComponent extends FieldBase {
8131
8183
  this.ztexteditor_type = ['ztexteditor'];
8132
8184
  }
8133
8185
  ngOnInit() {
8134
- super.initComponent().pipe(tap(() => {
8186
+ super.initComponent({ isRegisterComponent: false }).pipe(tap(() => {
8135
8187
  this.setAddOnValue();
8136
8188
  this.componentService.setEditMode(this);
8137
8189
  this.data.zlayout = this.data.zlayout || (this.containerField ? this.containerField.zlayout : "row");