ngx-dynamic-entity 1.1.0 → 1.2.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.
Files changed (51) hide show
  1. package/esm2022/lib/field-types/array-field.component.mjs +13 -5
  2. package/esm2022/lib/field-types/boolean-field.component.mjs +4 -3
  3. package/esm2022/lib/field-types/checkbox-field.component.mjs +4 -3
  4. package/esm2022/lib/field-types/currency-field.component.mjs +4 -3
  5. package/esm2022/lib/field-types/date-field.component.mjs +4 -3
  6. package/esm2022/lib/field-types/dropdown-field.component.mjs +9 -7
  7. package/esm2022/lib/field-types/email-field.component.mjs +4 -3
  8. package/esm2022/lib/field-types/entity-ref-field.component.mjs +21 -7
  9. package/esm2022/lib/field-types/field-component.contract.mjs +2 -0
  10. package/esm2022/lib/field-types/file-field.component.mjs +4 -3
  11. package/esm2022/lib/field-types/group-field.component.mjs +5 -5
  12. package/esm2022/lib/field-types/image-field.component.mjs +4 -3
  13. package/esm2022/lib/field-types/month-year-field.component.mjs +4 -3
  14. package/esm2022/lib/field-types/multi-select-field.component.mjs +4 -3
  15. package/esm2022/lib/field-types/number-field.component.mjs +7 -11
  16. package/esm2022/lib/field-types/password-field.component.mjs +4 -3
  17. package/esm2022/lib/field-types/radio-field.component.mjs +4 -3
  18. package/esm2022/lib/field-types/text-field.component.mjs +25 -18
  19. package/esm2022/lib/field-types/textarea-field.component.mjs +4 -3
  20. package/esm2022/lib/form/dynamic-field/dynamic-field.component.mjs +53 -6
  21. package/esm2022/lib/form/dynamic-form.component.mjs +131 -15
  22. package/esm2022/lib/form/dynamic-record-form.component.mjs +2 -2
  23. package/esm2022/lib/providers/provide-ngx-dynamic-entity.mjs +7 -2
  24. package/esm2022/lib/services/cascade-data.service.mjs +2 -2
  25. package/esm2022/lib/services/entity-ref-registry.service.mjs +2 -2
  26. package/esm2022/lib/services/lookup-registry.service.mjs +2 -2
  27. package/esm2022/lib/services/validation-messages.service.mjs +56 -0
  28. package/esm2022/lib/services/validator-registry.service.mjs +24 -2
  29. package/esm2022/lib/tokens/injection-tokens.mjs +19 -6
  30. package/esm2022/public-api.mjs +6 -1
  31. package/fesm2022/ngx-dynamic-entity.mjs +373 -81
  32. package/fesm2022/ngx-dynamic-entity.mjs.map +1 -1
  33. package/lib/field-types/array-field.component.d.ts +7 -1
  34. package/lib/field-types/dropdown-field.component.d.ts +1 -0
  35. package/lib/field-types/entity-ref-field.component.d.ts +11 -1
  36. package/lib/field-types/field-component.contract.d.ts +49 -0
  37. package/lib/field-types/group-field.component.d.ts +1 -1
  38. package/lib/field-types/number-field.component.d.ts +1 -0
  39. package/lib/field-types/text-field.component.d.ts +10 -2
  40. package/lib/form/dynamic-field/dynamic-field.component.d.ts +39 -4
  41. package/lib/form/dynamic-form.component.d.ts +62 -2
  42. package/lib/providers/provide-ngx-dynamic-entity.d.ts +17 -1
  43. package/lib/services/cascade-data.service.d.ts +1 -1
  44. package/lib/services/entity-ref-registry.service.d.ts +1 -1
  45. package/lib/services/lookup-registry.service.d.ts +1 -1
  46. package/lib/services/validation-messages.service.d.ts +43 -0
  47. package/lib/services/validator-registry.service.d.ts +13 -1
  48. package/lib/tokens/injection-tokens.d.ts +18 -5
  49. package/package.json +2 -2
  50. package/public-api.d.ts +2 -0
  51. package/styles.css +579 -0
@@ -1,14 +1,31 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, Input, inject, ChangeDetectionStrategy, signal } from '@angular/core';
2
2
  import { ReactiveFormsModule } from '@angular/forms';
3
3
  import { resolveLabel } from '@dynamic-entity/core';
4
+ import { ValidationMessagesService } from '../services/validation-messages.service';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/forms";
6
7
  export class TextFieldComponent {
8
+ messages = inject(ValidationMessagesService);
9
+ displaySub;
7
10
  field;
8
- control;
11
+ set control(value) {
12
+ this._control = value;
13
+ this.displaySub?.unsubscribe();
14
+ this.displayValue.set(value?.value ?? null);
15
+ this.displaySub = value?.valueChanges.subscribe(v => this.displayValue.set(v));
16
+ }
17
+ get control() {
18
+ return this._control;
19
+ }
20
+ _control;
9
21
  language = 'en';
10
22
  readonly = false;
11
23
  masked = false;
24
+ /** Readonly markup reads this signal so an external patch (autoPatch) is visible under OnPush. */
25
+ displayValue = signal(null);
26
+ ngOnDestroy() {
27
+ this.displaySub?.unsubscribe();
28
+ }
12
29
  get label() {
13
30
  return resolveLabel(this.field?.label, this.language);
14
31
  }
@@ -18,18 +35,7 @@ export class TextFieldComponent {
18
35
  get errorMessage() {
19
36
  if (!this.control || !this.control.errors || !this.control.touched)
20
37
  return '';
21
- const errs = this.control.errors;
22
- if (errs['required'])
23
- return 'This field is required.';
24
- if (errs['email'])
25
- return 'Please enter a valid email address.';
26
- if (errs['minlength'])
27
- return `Minimum ${errs['minlength'].requiredLength} characters required.`;
28
- if (errs['maxlength'])
29
- return `Maximum ${errs['maxlength'].requiredLength} characters allowed.`;
30
- if (errs['pattern'])
31
- return 'Invalid format.';
32
- return 'Invalid value.';
38
+ return this.messages.resolve(this.control.errors, this.language, ['required', 'email', 'minlength', 'maxlength', 'pattern']);
33
39
  }
34
40
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
41
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TextFieldComponent, isStandalone: true, selector: "ngx-text-field", inputs: { field: "field", control: "control", language: "language", readonly: "readonly", masked: "masked" }, ngImport: i0, template: `
@@ -44,7 +50,7 @@ export class TextFieldComponent {
44
50
  @if (masked) {
45
51
  <span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
46
52
  } @else if (readonly) {
47
- <span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ control.value ?? '—' }}</span>
53
+ <span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ displayValue() ?? '—' }}</span>
48
54
  } @else {
49
55
  <input
50
56
  [id]="field.id"
@@ -61,11 +67,12 @@ export class TextFieldComponent {
61
67
  }
62
68
  }
63
69
  </div>
64
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
70
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
65
71
  }
66
72
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextFieldComponent, decorators: [{
67
73
  type: Component,
68
74
  args: [{
75
+ changeDetection: ChangeDetectionStrategy.OnPush,
69
76
  selector: 'ngx-text-field',
70
77
  standalone: true,
71
78
  imports: [ReactiveFormsModule],
@@ -81,7 +88,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
81
88
  @if (masked) {
82
89
  <span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
83
90
  } @else if (readonly) {
84
- <span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ control.value ?? '—' }}</span>
91
+ <span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ displayValue() ?? '—' }}</span>
85
92
  } @else {
86
93
  <input
87
94
  [id]="field.id"
@@ -111,4 +118,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
111
118
  }], masked: [{
112
119
  type: Input
113
120
  }] } });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2ZpZWxkLXR5cGVzL3RleHQtZmllbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBbUIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQXFDcEQsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixLQUFLLENBQXFCO0lBQzFCLE9BQU8sQ0FBbUI7SUFDMUIsUUFBUSxHQUFXLElBQUksQ0FBQztJQUN4QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFFakMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM5RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPLHlCQUF5QixDQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8scUNBQXFDLENBQUM7UUFDaEUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxjQUFjLHVCQUF1QixDQUFDO1FBQ2pHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsY0FBYyxzQkFBc0IsQ0FBQztRQUNoRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLGlCQUFpQixDQUFDO1FBQzlDLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQzt3R0F4QlUsa0JBQWtCOzRGQUFsQixrQkFBa0Isd0xBL0JuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2QlQsMkRBOUJTLG1CQUFtQjs7NEZBZ0NsQixrQkFBa0I7a0JBbkM5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDOUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCVDtpQkFDRjs4QkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IE5lc3RlZEZpZWxkQ29uZmlnIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgcmVzb2x2ZUxhYmVsIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtdGV4dC1maWVsZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm5neC1maWVsZCBuZ3gtZmllbGQtLXRleHRcIlxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZFwiIFthdHRyLmRhdGEtZmllbGQtdHlwZV09XCJmaWVsZC50eXBlXCJcbiAgICAgIFtjbGFzcy5uZ3gtZmllbGQtLXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgIFtjbGFzcy5uZ3gtZmllbGQtLW1hc2tlZF09XCJtYXNrZWRcIlxuICAgICAgW2NsYXNzLm5neC1maWVsZC0taW52YWxpZF09XCJjb250cm9sICYmIGNvbnRyb2wuaW52YWxpZCAmJiBjb250cm9sLnRvdWNoZWRcIlxuICAgID5cbiAgICAgIDxsYWJlbCBjbGFzcz1cIm5neC1maWVsZF9fbGFiZWxcIiBbYXR0ci5mb3JdPVwiZmllbGQuaWRcIj57eyBsYWJlbCB9fUBpZiAoZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWQpIHsgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX3JlcVwiPio8L3NwYW4+IH08L2xhYmVsPlxuICAgICAgQGlmIChtYXNrZWQpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX3ZhbHVlIG5neC1maWVsZF9fdmFsdWUtLW1hc2tlZFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLW1hc2tlZCdcIj5YWFhYWFhYWFg8L3NwYW4+XG4gICAgICB9IEBlbHNlIGlmIChyZWFkb25seSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fdmFsdWVcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy12YWx1ZSdcIj57eyBjb250cm9sLnZhbHVlID8/ICfigJQnIH19PC9zcGFuPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFtpZF09XCJmaWVsZC5pZFwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGNsYXNzPVwibmd4LWZpZWxkX19pbnB1dFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLWlucHV0J1wiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cIiRhbnkoY29udHJvbClcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZmllbGQuZGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImNvbnRyb2wuaW52YWxpZCAmJiBjb250cm9sLnRvdWNoZWRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZXJyb3JNZXNzYWdlID8gZmllbGQuaWQgKyAnLWVycm9yJyA6IG51bGxcIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmd4LWZpZWxkX19lcnJvclwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLWVycm9yJ1wiIFtpZF09XCJmaWVsZC5pZCArICctZXJyb3InXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFRleHRGaWVsZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGZpZWxkITogTmVzdGVkRmllbGRDb25maWc7XG4gIEBJbnB1dCgpIGNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XG4gIEBJbnB1dCgpIGxhbmd1YWdlOiBzdHJpbmcgPSAnZW4nO1xuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBtYXNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBnZXQgbGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUxhYmVsKHRoaXMuZmllbGQ/LmxhYmVsLCB0aGlzLmxhbmd1YWdlKTtcbiAgfVxuXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlTGFiZWwodGhpcy5maWVsZD8ucGxhY2Vob2xkZXIsIHRoaXMubGFuZ3VhZ2UpO1xuICB9XG5cbiAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jb250cm9sIHx8ICF0aGlzLmNvbnRyb2wuZXJyb3JzIHx8ICF0aGlzLmNvbnRyb2wudG91Y2hlZCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGVycnMgPSB0aGlzLmNvbnRyb2wuZXJyb3JzO1xuICAgIGlmIChlcnJzWydyZXF1aXJlZCddKSByZXR1cm4gJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJztcbiAgICBpZiAoZXJyc1snZW1haWwnXSkgcmV0dXJuICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLic7XG4gICAgaWYgKGVycnNbJ21pbmxlbmd0aCddKSByZXR1cm4gYE1pbmltdW0gJHtlcnJzWydtaW5sZW5ndGgnXS5yZXF1aXJlZExlbmd0aH0gY2hhcmFjdGVycyByZXF1aXJlZC5gO1xuICAgIGlmIChlcnJzWydtYXhsZW5ndGgnXSkgcmV0dXJuIGBNYXhpbXVtICR7ZXJyc1snbWF4bGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGh9IGNoYXJhY3RlcnMgYWxsb3dlZC5gO1xuICAgIGlmIChlcnJzWydwYXR0ZXJuJ10pIHJldHVybiAnSW52YWxpZCBmb3JtYXQuJztcbiAgICByZXR1cm4gJ0ludmFsaWQgdmFsdWUuJztcbiAgfVxufVxuIl19
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2ZpZWxkLXR5cGVzL3RleHQtZmllbGQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFtQixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7O0FBc0NwRixNQUFNLE9BQU8sa0JBQWtCO0lBQ1osUUFBUSxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3RELFVBQVUsQ0FBZ0I7SUFFekIsS0FBSyxDQUFxQjtJQUNuQyxJQUNJLE9BQU8sQ0FBQyxLQUFzQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ08sUUFBUSxDQUFtQjtJQUUxQixRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQ3hCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUVqQyxrR0FBa0c7SUFDekYsWUFBWSxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUU5QyxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM5RSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFDbkIsSUFBSSxDQUFDLFFBQVEsRUFDYixDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FDM0QsQ0FBQztJQUNKLENBQUM7d0dBM0NVLGtCQUFrQjs0RkFBbEIsa0JBQWtCLHdMQS9CbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJULDJEQTlCUyxtQkFBbUI7OzRGQWdDbEIsa0JBQWtCO2tCQXBDOUIsU0FBUzttQkFBQztvQkFDVCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO29CQUM5QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJUO2lCQUNGOzhCQUtVLEtBQUs7c0JBQWIsS0FBSztnQkFFRixPQUFPO3NCQURWLEtBQUs7Z0JBWUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgaW5qZWN0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB0eXBlIHsgTmVzdGVkRmllbGRDb25maWcgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyByZXNvbHZlTGFiZWwgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdmFsaWRhdGlvbi1tZXNzYWdlcy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzZWxlY3RvcjogJ25neC10ZXh0LWZpZWxkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibmd4LWZpZWxkIG5neC1maWVsZC0tdGV4dFwiXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkXCIgW2F0dHIuZGF0YS1maWVsZC10eXBlXT1cImZpZWxkLnR5cGVcIlxuICAgICAgW2NsYXNzLm5neC1maWVsZC0tcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgW2NsYXNzLm5neC1maWVsZC0tbWFza2VkXT1cIm1hc2tlZFwiXG4gICAgICBbY2xhc3Mubmd4LWZpZWxkLS1pbnZhbGlkXT1cImNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICYmIGNvbnRyb2wudG91Y2hlZFwiXG4gICAgPlxuICAgICAgPGxhYmVsIGNsYXNzPVwibmd4LWZpZWxkX19sYWJlbFwiIFthdHRyLmZvcl09XCJmaWVsZC5pZFwiPnt7IGxhYmVsIH19QGlmIChmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZCkgeyA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fcmVxXCI+Kjwvc3Bhbj4gfTwvbGFiZWw+XG4gICAgICBAaWYgKG1hc2tlZCkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fdmFsdWUgbmd4LWZpZWxkX192YWx1ZS0tbWFza2VkXCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZCArICctbWFza2VkJ1wiPlhYWFhYWFhYWDwvc3Bhbj5cbiAgICAgIH0gQGVsc2UgaWYgKHJlYWRvbmx5KSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmd4LWZpZWxkX192YWx1ZVwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLXZhbHVlJ1wiPnt7IGRpc3BsYXlWYWx1ZSgpID8/ICfigJQnIH19PC9zcGFuPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFtpZF09XCJmaWVsZC5pZFwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGNsYXNzPVwibmd4LWZpZWxkX19pbnB1dFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLWlucHV0J1wiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cIiRhbnkoY29udHJvbClcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZmllbGQuZGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImNvbnRyb2wuaW52YWxpZCAmJiBjb250cm9sLnRvdWNoZWRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZXJyb3JNZXNzYWdlID8gZmllbGQuaWQgKyAnLWVycm9yJyA6IG51bGxcIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmd4LWZpZWxkX19lcnJvclwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLWVycm9yJ1wiIFtpZF09XCJmaWVsZC5pZCArICctZXJyb3InXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFRleHRGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZXMgPSBpbmplY3QoVmFsaWRhdGlvbk1lc3NhZ2VzU2VydmljZSk7XG4gIHByaXZhdGUgZGlzcGxheVN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICBASW5wdXQoKSBmaWVsZCE6IE5lc3RlZEZpZWxkQ29uZmlnO1xuICBASW5wdXQoKVxuICBzZXQgY29udHJvbCh2YWx1ZTogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgdGhpcy5fY29udHJvbCA9IHZhbHVlO1xuICAgIHRoaXMuZGlzcGxheVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQodmFsdWU/LnZhbHVlID8/IG51bGwpO1xuICAgIHRoaXMuZGlzcGxheVN1YiA9IHZhbHVlPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHYgPT4gdGhpcy5kaXNwbGF5VmFsdWUuc2V0KHYpKTtcbiAgfVxuICBnZXQgY29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLl9jb250cm9sO1xuICB9XG4gIHByaXZhdGUgX2NvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XG5cbiAgQElucHV0KCkgbGFuZ3VhZ2U6IHN0cmluZyA9ICdlbic7XG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1hc2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBSZWFkb25seSBtYXJrdXAgcmVhZHMgdGhpcyBzaWduYWwgc28gYW4gZXh0ZXJuYWwgcGF0Y2ggKGF1dG9QYXRjaCkgaXMgdmlzaWJsZSB1bmRlciBPblB1c2guICovXG4gIHJlYWRvbmx5IGRpc3BsYXlWYWx1ZSA9IHNpZ25hbDx1bmtub3duPihudWxsKTtcblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnZXQgbGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUxhYmVsKHRoaXMuZmllbGQ/LmxhYmVsLCB0aGlzLmxhbmd1YWdlKTtcbiAgfVxuXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlTGFiZWwodGhpcy5maWVsZD8ucGxhY2Vob2xkZXIsIHRoaXMubGFuZ3VhZ2UpO1xuICB9XG5cbiAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jb250cm9sIHx8ICF0aGlzLmNvbnRyb2wuZXJyb3JzIHx8ICF0aGlzLmNvbnRyb2wudG91Y2hlZCkgcmV0dXJuICcnO1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzLnJlc29sdmUoXG4gICAgICB0aGlzLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgdGhpcy5sYW5ndWFnZSxcbiAgICAgIFsncmVxdWlyZWQnLCAnZW1haWwnLCAnbWlubGVuZ3RoJywgJ21heGxlbmd0aCcsICdwYXR0ZXJuJ10sXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
2
2
  import { ReactiveFormsModule } from '@angular/forms';
3
3
  import { resolveLabel } from '@dynamic-entity/core';
4
4
  import * as i0 from "@angular/core";
@@ -38,11 +38,12 @@ export class TextareaFieldComponent {
38
38
  }
39
39
  }
40
40
  </div>
41
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
41
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
42
42
  }
43
43
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextareaFieldComponent, decorators: [{
44
44
  type: Component,
45
45
  args: [{
46
+ changeDetection: ChangeDetectionStrategy.OnPush,
46
47
  selector: 'ngx-textarea-field',
47
48
  standalone: true,
48
49
  imports: [ReactiveFormsModule],
@@ -81,4 +82,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
81
82
  }], masked: [{
82
83
  type: Input
83
84
  }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9maWVsZC10eXBlcy90ZXh0YXJlYS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFtQixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBOEJwRCxNQUFNLE9BQU8sc0JBQXNCO0lBQ3hCLEtBQUssQ0FBcUI7SUFDMUIsT0FBTyxDQUFtQjtJQUMxQixRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQ3hCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUVqQyxJQUFJLEtBQUs7UUFDUCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO3dHQWJVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLDRMQXhCdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlQsMkRBdkJTLG1CQUFtQjs7NEZBeUJsQixzQkFBc0I7a0JBNUJsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDOUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JUO2lCQUNGOzhCQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgTmVzdGVkRmllbGRDb25maWcgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyByZXNvbHZlTGFiZWwgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC10ZXh0YXJlYS1maWVsZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibmd4LWZpZWxkIG5neC1maWVsZC0tdGV4dGFyZWFcIlxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZFwiIFthdHRyLmRhdGEtZmllbGQtdHlwZV09XCJmaWVsZC50eXBlXCIgW2NsYXNzLm5neC1maWVsZC0tcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbY2xhc3Mubmd4LWZpZWxkLS1tYXNrZWRdPVwibWFza2VkXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJuZ3gtZmllbGRfX2xhYmVsXCIgW2F0dHIuZm9yXT1cImZpZWxkLmlkXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICAgICAgQGlmIChtYXNrZWQpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX3ZhbHVlIG5neC1maWVsZF9fdmFsdWUtLW1hc2tlZFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLW1hc2tlZCdcIj5YWFhYWFhYWFg8L3NwYW4+XG4gICAgICB9IEBlbHNlIGlmIChyZWFkb25seSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fdmFsdWVcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy12YWx1ZSdcIj57eyBjb250cm9sLnZhbHVlIH19PC9zcGFuPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgIFtpZF09XCJmaWVsZC5pZFwiXG4gICAgICAgICAgY2xhc3M9XCJuZ3gtZmllbGRfX2lucHV0XCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZCArICctaW5wdXQnXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiJGFueShjb250cm9sKVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJmaWVsZC5kaXNhYmxlZCA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgICByb3dzPVwiM1wiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICBAaWYgKGNvbnRyb2wuaW52YWxpZCAmJiBjb250cm9sLnRvdWNoZWQpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fZXJyb3JcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy1lcnJvcidcIj5UaGlzIGZpZWxkIGhhcyBhbiBlcnJvcjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBUZXh0YXJlYUZpZWxkQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZmllbGQhOiBOZXN0ZWRGaWVsZENvbmZpZztcbiAgQElucHV0KCkgY29udHJvbCE6IEFic3RyYWN0Q29udHJvbDtcbiAgQElucHV0KCkgbGFuZ3VhZ2U6IHN0cmluZyA9ICdlbic7XG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1hc2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldCBsYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlTGFiZWwodGhpcy5maWVsZD8ubGFiZWwsIHRoaXMubGFuZ3VhZ2UpO1xuICB9XG5cbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVMYWJlbCh0aGlzLmZpZWxkPy5wbGFjZWhvbGRlciwgdGhpcy5sYW5ndWFnZSk7XG4gIH1cbn1cbiJdfQ==
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9maWVsZC10eXBlcy90ZXh0YXJlYS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFtQixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBK0JwRCxNQUFNLE9BQU8sc0JBQXNCO0lBQ3hCLEtBQUssQ0FBcUI7SUFDMUIsT0FBTyxDQUFtQjtJQUMxQixRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQ3hCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUVqQyxJQUFJLEtBQUs7UUFDUCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO3dHQWJVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLDRMQXhCdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlQsMkRBdkJTLG1CQUFtQjs7NEZBeUJsQixzQkFBc0I7a0JBN0JsQyxTQUFTO21CQUFDO29CQUNULGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQzlCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVDtpQkFDRjs4QkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBOZXN0ZWRGaWVsZENvbmZpZyB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbmltcG9ydCB7IHJlc29sdmVMYWJlbCB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzZWxlY3RvcjogJ25neC10ZXh0YXJlYS1maWVsZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibmd4LWZpZWxkIG5neC1maWVsZC0tdGV4dGFyZWFcIlxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZFwiIFthdHRyLmRhdGEtZmllbGQtdHlwZV09XCJmaWVsZC50eXBlXCIgW2NsYXNzLm5neC1maWVsZC0tcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbY2xhc3Mubmd4LWZpZWxkLS1tYXNrZWRdPVwibWFza2VkXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJuZ3gtZmllbGRfX2xhYmVsXCIgW2F0dHIuZm9yXT1cImZpZWxkLmlkXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICAgICAgQGlmIChtYXNrZWQpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX3ZhbHVlIG5neC1maWVsZF9fdmFsdWUtLW1hc2tlZFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLW1hc2tlZCdcIj5YWFhYWFhYWFg8L3NwYW4+XG4gICAgICB9IEBlbHNlIGlmIChyZWFkb25seSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fdmFsdWVcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy12YWx1ZSdcIj57eyBjb250cm9sLnZhbHVlIH19PC9zcGFuPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgIFtpZF09XCJmaWVsZC5pZFwiXG4gICAgICAgICAgY2xhc3M9XCJuZ3gtZmllbGRfX2lucHV0XCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZCArICctaW5wdXQnXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiJGFueShjb250cm9sKVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJmaWVsZC5kaXNhYmxlZCA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgICByb3dzPVwiM1wiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICBAaWYgKGNvbnRyb2wuaW52YWxpZCAmJiBjb250cm9sLnRvdWNoZWQpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fZXJyb3JcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy1lcnJvcidcIj5UaGlzIGZpZWxkIGhhcyBhbiBlcnJvcjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBUZXh0YXJlYUZpZWxkQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZmllbGQhOiBOZXN0ZWRGaWVsZENvbmZpZztcbiAgQElucHV0KCkgY29udHJvbCE6IEFic3RyYWN0Q29udHJvbDtcbiAgQElucHV0KCkgbGFuZ3VhZ2U6IHN0cmluZyA9ICdlbic7XG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1hc2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldCBsYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlTGFiZWwodGhpcy5maWVsZD8ubGFiZWwsIHRoaXMubGFuZ3VhZ2UpO1xuICB9XG5cbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVMYWJlbCh0aGlzLmZpZWxkPy5wbGFjZWhvbGRlciwgdGhpcy5sYW5ndWFnZSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,11 +1,12 @@
1
- import { Component, Input, ViewChild, ViewContainerRef, inject, isDevMode, } from '@angular/core';
1
+ import { Component, Injector, Input, ViewChild, ViewContainerRef, inject, isDevMode, } from '@angular/core';
2
2
  import { findTab } from '@dynamic-entity/core';
3
3
  import { FieldRegistryService } from '../../services/field-registry.service';
4
4
  import { RbacService } from '../../services/rbac.service';
5
5
  import * as i0 from "@angular/core";
6
6
  /**
7
7
  * DynamicFieldComponent — mounts the correct field component for a given NestedFieldConfig.
8
- * Uses ViewContainerRef.createComponent() and passes inputs via setInput() (ADR-008).
8
+ * Uses ViewContainerRef.createComponent() and passes inputs via setInput(); see
9
+ * DynamicFieldComponentContract for the five inputs every field component receives.
9
10
  * Never add field-type-specific logic here — this component must remain generic.
10
11
  *
11
12
  * The 5 inputs (field, control, language, readonly, masked) are passed to every mounted
@@ -22,6 +23,12 @@ export class DynamicFieldComponent {
22
23
  fieldHost;
23
24
  fieldRegistry = inject(FieldRegistryService);
24
25
  rbacService = inject(RbacService);
26
+ /**
27
+ * Passed into `createComponent` so a hosted field sees this host's injector — including
28
+ * `DynamicFormComponent`'s scoped `EntityRefSelectionService`. Without it, a standalone
29
+ * field resolves the root bus and `autoPatch` never runs.
30
+ */
31
+ injector = inject(Injector);
25
32
  componentRef = null;
26
33
  ngOnChanges(_changes) {
27
34
  this.mountField();
@@ -43,9 +50,12 @@ export class DynamicFieldComponent {
43
50
  return;
44
51
  }
45
52
  this.fieldHost.clear();
46
- this.componentRef = this.fieldHost.createComponent(ComponentClass);
53
+ this.componentRef = this.fieldHost.createComponent(ComponentClass, {
54
+ injector: this.injector,
55
+ });
47
56
  this.setInputs(this.componentRef, masked);
48
- this.componentRef.changeDetectorRef.markForCheck();
57
+ this.watchControl();
58
+ this.componentRef.changeDetectorRef.detectChanges();
49
59
  }
50
60
  /**
51
61
  * Field types are opt-in (see `provideFieldTypes` / `provideBuiltInFieldTypes`), so an
@@ -61,7 +71,44 @@ export class DynamicFieldComponent {
61
71
  }
62
72
  static warnedTypes = new Set();
63
73
  /**
64
- * Pass all 5 contract inputs via ComponentRef.setInput() — uniform for all types (ADR-008).
74
+ * Re-check the hosted field component.
75
+ *
76
+ * The field components are OnPush, so they re-render on an input change, an event from
77
+ * their own template, or a signal they read. `form.markAllAsTouched()` is none of those —
78
+ * it flips `touched` from outside, and every field's error message depends on it. Without
79
+ * this, a blocked submit would mark the form touched and no error would appear.
80
+ */
81
+ refresh() {
82
+ this.componentRef?.changeDetectorRef.detectChanges();
83
+ }
84
+ /**
85
+ * Re-check the hosted component whenever its control changes from outside.
86
+ *
87
+ * The field components are OnPush, so they re-render on an input change or an event from
88
+ * their own template. A control mutated externally is neither — and that is not an edge
89
+ * case: patchForm, reset, autoPatch and patchOnTrue all do exactly that. Without this, a
90
+ * field patched from a record would keep rendering its previous value.
91
+ *
92
+ * `detectChanges()` rather than `markForCheck()`: a selection that arrives from a native
93
+ * `change` event (or Playwright) may not be followed by another Angular tick, so a dirty
94
+ * flag would never be flushed. Running CD on the hosted component now is the copy showing up.
95
+ *
96
+ * Done here rather than in each of the eighteen field components: the host owns the
97
+ * component reference, so one subscription covers every type including custom ones.
98
+ */
99
+ watchControl() {
100
+ this.controlSub?.unsubscribe();
101
+ if (!this.control)
102
+ return;
103
+ this.controlSub = this.control.valueChanges.subscribe(() => this.refresh());
104
+ }
105
+ controlSub;
106
+ ngOnDestroy() {
107
+ this.controlSub?.unsubscribe();
108
+ }
109
+ /**
110
+ * Pass all 5 contract inputs via ComponentRef.setInput() — uniform for all types.
111
+ * The public shape is DynamicFieldComponentContract.
65
112
  * Must use setInput(), not property assignment: the field components declare inputs with
66
113
  * definite assignment and no initializer, and the lib compiles with
67
114
  * useDefineForClassFields:false, so `'field' in instance` is false until first set.
@@ -101,4 +148,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
101
148
  type: ViewChild,
102
149
  args: ['fieldHost', { read: ViewContainerRef, static: true }]
103
150
  }] } });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Zvcm0vZHluYW1pYy1maWVsZC9keW5hbWljLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFHTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFFMUQ7Ozs7Ozs7R0FPRztBQU1ILE1BQU0sT0FBTyxxQkFBcUI7SUFDdkIsS0FBSyxDQUFxQjtJQUMxQixPQUFPLENBQW1CO0lBQzFCLE1BQU0sQ0FBb0I7SUFDMUIsWUFBWSxDQUFVO0lBQ3RCLFFBQVEsR0FBVyxJQUFJLENBQUM7SUFDeEIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixTQUFTLEdBQWEsRUFBRSxDQUFDO0lBR2pCLFNBQVMsQ0FBb0I7SUFFN0IsYUFBYSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFM0MsWUFBWSxHQUFpQyxJQUFJLENBQUM7SUFFMUQsV0FBVyxDQUFDLFFBQXVCO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUV6QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJ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SztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFHVyxTQUFTO3NCQUR6QixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgaW5qZWN0LFxuICBpc0Rldk1vZGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBOZXN0ZWRGaWVsZENvbmZpZywgRW50aXR5Rm9ybUNvbmZpZywgTmVzdGVkVGFiQ29uZmlnIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgZmluZFRhYiB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbmltcG9ydCB7IEZpZWxkUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmllbGQtcmVnaXN0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBSYmFjU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JiYWMuc2VydmljZSc7XG5cbi8qKlxuICogRHluYW1pY0ZpZWxkQ29tcG9uZW50IOKAlCBtb3VudHMgdGhlIGNvcnJlY3QgZmllbGQgY29tcG9uZW50IGZvciBhIGdpdmVuIE5lc3RlZEZpZWxkQ29uZmlnLlxuICogVXNlcyBWaWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudCgpIGFuZCBwYXNzZXMgaW5wdXRzIHZpYSBzZXRJbnB1dCgpIChBRFItMDA4KS5cbiAqIE5ldmVyIGFkZCBmaWVsZC10eXBlLXNwZWNpZmljIGxvZ2ljIGhlcmUg4oCUIHRoaXMgY29tcG9uZW50IG11c3QgcmVtYWluIGdlbmVyaWMuXG4gKlxuICogVGhlIDUgaW5wdXRzIChmaWVsZCwgY29udHJvbCwgbGFuZ3VhZ2UsIHJlYWRvbmx5LCBtYXNrZWQpIGFyZSBwYXNzZWQgdG8gZXZlcnkgbW91bnRlZFxuICogY29tcG9uZW50IHVuaWZvcm1seSDigJQgbm8gc3BlY2lhbC1jYXNpbmcgcGVyIHR5cGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1keW5hbWljLWZpZWxkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGA8bmctY29udGFpbmVyICNmaWVsZEhvc3Q+PC9uZy1jb250YWluZXI+YCxcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0ZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZmllbGQhOiBOZXN0ZWRGaWVsZENvbmZpZztcbiAgQElucHV0KCkgY29udHJvbCE6IEFic3RyYWN0Q29udHJvbDtcbiAgQElucHV0KCkgY29uZmlnITogRW50aXR5Rm9ybUNvbmZpZztcbiAgQElucHV0KCkgY3VycmVudFRhYklkPzogc3RyaW5nO1xuICBASW5wdXQoKSBsYW5ndWFnZTogc3RyaW5nID0gJ2VuJztcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdXNlclJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpZWxkSG9zdCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgcmVhZG9ubHkgZmllbGRIb3N0ITogVmlld0NvbnRhaW5lclJlZjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZpZWxkUmVnaXN0cnkgPSBpbmplY3QoRmllbGRSZWdpc3RyeVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJiYWNTZXJ2aWNlID0gaW5qZWN0KFJiYWNTZXJ2aWNlKTtcblxuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPHVua25vd24+IHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkNoYW5nZXMoX2NoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLm1vdW50RmllbGQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbW91bnRGaWVsZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmllbGQgfHwgIXRoaXMuY29udHJvbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgQ29tcG9uZW50Q2xhc3MgPSB0aGlzLmZpZWxkUmVnaXN0cnkucmVzb2x2ZSh0aGlzLmZpZWxkLnR5cGUpO1xuICAgIGlmICghQ29tcG9uZW50Q2xhc3MpIHtcbiAgICAgIHRoaXMud2FyblVucmVzb2x2ZWQodGhpcy5maWVsZC50eXBlKTtcbiAgICAgIHJldHVybjsgLy8gVW5rbm93biBmaWVsZCB0eXBlIOKAlCByZW5kZXIgbm90aGluZ1xuICAgIH1cblxuICAgIC8vIERldGVybWluZSBtYXNraW5nIGZvciB0aGlzIHNwZWNpZmljIGZpZWxkXG4gICAgY29uc3QgdGFiOiBOZXN0ZWRUYWJDb25maWcgfCBudWxsID0gdGhpcy5jdXJyZW50VGFiSWQgPyBmaW5kVGFiKHRoaXMuY29uZmlnPy50YWJzLCB0aGlzLmN1cnJlbnRUYWJJZCkgOiBudWxsO1xuICAgIGNvbnN0IG1hc2tlZCA9IHRoaXMucmJhY1NlcnZpY2Uuc2hvdWxkTWFza0ZpZWxkKHRoaXMuZmllbGQsIHRhYiA/PyB1bmRlZmluZWQsIHRoaXMuY29uZmlnLCB0aGlzLnVzZXJSb2xlcyk7XG5cbiAgICAvLyBSZS11c2UgZXhpc3RpbmcgY29tcG9uZW50IGlmIHNhbWUgdHlwZSwgb3RoZXJ3aXNlIHJlY3JlYXRlXG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICYmIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGluc3RhbmNlb2YgQ29tcG9uZW50Q2xhc3MpIHtcbiAgICAgIHRoaXMuc2V0SW5wdXRzKHRoaXMuY29tcG9uZW50UmVmLCBtYXNrZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmllbGRIb3N0LmNsZWFyKCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmZpZWxkSG9zdC5jcmVhdGVDb21wb25lbnQoQ29tcG9uZW50Q2xhc3MpO1xuICAgIHRoaXMuc2V0SW5wdXRzKHRoaXMuY29tcG9uZW50UmVmLCBtYXNrZWQpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpZWxkIHR5cGVzIGFyZSBvcHQtaW4gKHNlZSBgcHJvdmlkZUZpZWxkVHlwZXNgIC8gYHByb3ZpZGVCdWlsdEluRmllbGRUeXBlc2ApLCBzbyBhblxuICAgKiB1bnJlZ2lzdGVyZWQgdHlwZSByZW5kZXJzIG5vdGhpbmcuIFNheSBzbyBvbmNlIHBlciB0eXBlIGluIGRldiBidWlsZHMgcmF0aGVyIHRoYW5cbiAgICogbGVhdmluZyBhIHNpbGVudGx5IGJsYW5rIHNsb3QuXG4gICAqL1xuICBwcml2YXRlIHdhcm5VbnJlc29sdmVkKHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghaXNEZXZNb2RlKCkgfHwgRHluYW1pY0ZpZWxkQ29tcG9uZW50Lndhcm5lZFR5cGVzLmhhcyh0eXBlKSkgcmV0dXJuO1xuICAgIER5bmFtaWNGaWVsZENvbXBvbmVudC53YXJuZWRUeXBlcy5hZGQodHlwZSk7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYFtuZ3gtZHluYW1pYy1lbnRpdHldIE5vIGNvbXBvbmVudCByZWdpc3RlcmVkIGZvciBmaWVsZCB0eXBlIFwiJHt0eXBlfVwiIOKAlCB0aGUgZmllbGQgd2FzIG5vdCByZW5kZXJlZC4gYCArXG4gICAgICAgIGBSZWdpc3RlciBpdCB3aXRoIHByb3ZpZGVGaWVsZFR5cGVzKHsgJyR7dHlwZX0nOiBNeUNvbXBvbmVudCB9KSBvciBwcm92aWRlQnVpbHRJbkZpZWxkVHlwZXMoKS5gLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSB3YXJuZWRUeXBlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBQYXNzIGFsbCA1IGNvbnRyYWN0IGlucHV0cyB2aWEgQ29tcG9uZW50UmVmLnNldElucHV0KCkg4oCUIHVuaWZvcm0gZm9yIGFsbCB0eXBlcyAoQURSLTAwOCkuXG4gICAqIE11c3QgdXNlIHNldElucHV0KCksIG5vdCBwcm9wZXJ0eSBhc3NpZ25tZW50OiB0aGUgZmllbGQgY29tcG9uZW50cyBkZWNsYXJlIGlucHV0cyB3aXRoXG4gICAqIGRlZmluaXRlIGFzc2lnbm1lbnQgYW5kIG5vIGluaXRpYWxpemVyLCBhbmQgdGhlIGxpYiBjb21waWxlcyB3aXRoXG4gICAqIHVzZURlZmluZUZvckNsYXNzRmllbGRzOmZhbHNlLCBzbyBgJ2ZpZWxkJyBpbiBpbnN0YW5jZWAgaXMgZmFsc2UgdW50aWwgZmlyc3Qgc2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbnB1dHMocmVmOiBDb21wb25lbnRSZWY8dW5rbm93bj4sIG1hc2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHJlZi5zZXRJbnB1dCgnZmllbGQnLCB0aGlzLmZpZWxkKTtcbiAgICByZWYuc2V0SW5wdXQoJ2NvbnRyb2wnLCB0aGlzLmNvbnRyb2wpO1xuICAgIHJlZi5zZXRJbnB1dCgnbGFuZ3VhZ2UnLCB0aGlzLmxhbmd1YWdlKTtcbiAgICByZWYuc2V0SW5wdXQoJ3JlYWRvbmx5JywgdGhpcy5yZWFkb25seSB8fCAhIXRoaXMuZmllbGQucmVhZG9ubHkpO1xuICAgIHJlZi5zZXRJbnB1dCgnbWFza2VkJywgbWFza2VkKTtcbiAgfVxufVxuIl19
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Zvcm0vZHluYW1pYy1maWVsZC9keW5hbWljLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFFBQVEsRUFDUixLQUFLLEVBR0wsU0FBUyxFQUNULGdCQUFnQixFQUNoQixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBRTFEOzs7Ozs7OztHQVFHO0FBTUgsTUFBTSxPQUFPLHFCQUFxQjtJQUN2QixLQUFLLENBQXFCO0lBQzFCLE9BQU8sQ0FBbUI7SUFDMUIsTUFBTSxDQUFvQjtJQUMxQixZQUFZLENBQVU7SUFDdEIsUUFBUSxHQUFXLElBQUksQ0FBQztJQUN4QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFNBQVMsR0FBYSxFQUFFLENBQUM7SUFHakIsU0FBUyxDQUFvQjtJQUU3QixhQUFhLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDN0MsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRDs7OztPQUlHO0lBQ2MsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVyQyxZQUFZLEdBQWlDLElBQUksQ0FBQztJQUUxRCxXQUFXLENBQUMsUUFBdUI7UUFDakMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9B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LENBQUM7UUFDbEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7d0dBNUhVLHFCQUFxQjs0RkFBckIscUJBQXFCLG9VQVNBLGdCQUFnQixnRUFYdEMsMENBQTBDOzs0RkFFekMscUJBQXFCO2tCQUxqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsMENBQTBDO2lCQUNyRDs4QkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdXLFNBQVM7c0JBRHpCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsIE9uRGVzdHJveSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB0eXBlIHsgTmVzdGVkRmllbGRDb25maWcsIEVudGl0eUZvcm1Db25maWcsIE5lc3RlZFRhYkNvbmZpZyB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbmltcG9ydCB7IGZpbmRUYWIgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpZWxkLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmJhY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yYmFjLnNlcnZpY2UnO1xuXG4vKipcbiAqIER5bmFtaWNGaWVsZENvbXBvbmVudCDigJQgbW91bnRzIHRoZSBjb3JyZWN0IGZpZWxkIGNvbXBvbmVudCBmb3IgYSBnaXZlbiBOZXN0ZWRGaWVsZENvbmZpZy5cbiAqIFVzZXMgVmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoKSBhbmQgcGFzc2VzIGlucHV0cyB2aWEgc2V0SW5wdXQoKTsgc2VlXG4gKiBEeW5hbWljRmllbGRDb21wb25lbnRDb250cmFjdCBmb3IgdGhlIGZpdmUgaW5wdXRzIGV2ZXJ5IGZpZWxkIGNvbXBvbmVudCByZWNlaXZlcy5cbiAqIE5ldmVyIGFkZCBmaWVsZC10eXBlLXNwZWNpZmljIGxvZ2ljIGhlcmUg4oCUIHRoaXMgY29tcG9uZW50IG11c3QgcmVtYWluIGdlbmVyaWMuXG4gKlxuICogVGhlIDUgaW5wdXRzIChmaWVsZCwgY29udHJvbCwgbGFuZ3VhZ2UsIHJlYWRvbmx5LCBtYXNrZWQpIGFyZSBwYXNzZWQgdG8gZXZlcnkgbW91bnRlZFxuICogY29tcG9uZW50IHVuaWZvcm1seSDigJQgbm8gc3BlY2lhbC1jYXNpbmcgcGVyIHR5cGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1keW5hbWljLWZpZWxkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGA8bmctY29udGFpbmVyICNmaWVsZEhvc3Q+PC9uZy1jb250YWluZXI+YCxcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0ZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBmaWVsZCE6IE5lc3RlZEZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBjb250cm9sITogQWJzdHJhY3RDb250cm9sO1xuICBASW5wdXQoKSBjb25maWchOiBFbnRpdHlGb3JtQ29uZmlnO1xuICBASW5wdXQoKSBjdXJyZW50VGFiSWQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhbmd1YWdlOiBzdHJpbmcgPSAnZW4nO1xuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB1c2VyUm9sZXM6IHN0cmluZ1tdID0gW107XG5cbiAgQFZpZXdDaGlsZCgnZmllbGRIb3N0JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSByZWFkb25seSBmaWVsZEhvc3QhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZmllbGRSZWdpc3RyeSA9IGluamVjdChGaWVsZFJlZ2lzdHJ5U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmJhY1NlcnZpY2UgPSBpbmplY3QoUmJhY1NlcnZpY2UpO1xuICAvKipcbiAgICogUGFzc2VkIGludG8gYGNyZWF0ZUNvbXBvbmVudGAgc28gYSBob3N0ZWQgZmllbGQgc2VlcyB0aGlzIGhvc3QncyBpbmplY3RvciDigJQgaW5jbHVkaW5nXG4gICAqIGBEeW5hbWljRm9ybUNvbXBvbmVudGAncyBzY29wZWQgYEVudGl0eVJlZlNlbGVjdGlvblNlcnZpY2VgLiBXaXRob3V0IGl0LCBhIHN0YW5kYWxvbmVcbiAgICogZmllbGQgcmVzb2x2ZXMgdGhlIHJvb3QgYnVzIGFuZCBgYXV0b1BhdGNoYCBuZXZlciBydW5zLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjx1bmtub3duPiB8IG51bGwgPSBudWxsO1xuXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5tb3VudEZpZWxkKCk7XG4gIH1cblxuICBwcml2YXRlIG1vdW50RmllbGQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkIHx8ICF0aGlzLmNvbnRyb2wpIHJldHVybjtcblxuICAgIGNvbnN0IENvbXBvbmVudENsYXNzID0gdGhpcy5maWVsZFJlZ2lzdHJ5LnJlc29sdmUodGhpcy5maWVsZC50eXBlKTtcbiAgICBpZiAoIUNvbXBvbmVudENsYXNzKSB7XG4gICAgICB0aGlzLndhcm5VbnJlc29sdmVkKHRoaXMuZmllbGQudHlwZSk7XG4gICAgICByZXR1cm47IC8vIFVua25vd24gZmllbGQgdHlwZSDigJQgcmVuZGVyIG5vdGhpbmdcbiAgICB9XG5cbiAgICAvLyBEZXRlcm1pbmUgbWFza2luZyBmb3IgdGhpcyBzcGVjaWZpYyBmaWVsZFxuICAgIGNvbnN0IHRhYjogTmVzdGVkVGFiQ29uZmlnIHwgbnVsbCA9IHRoaXMuY3VycmVudFRhYklkID8gZmluZFRhYih0aGlzLmNvbmZpZz8udGFicywgdGhpcy5jdXJyZW50VGFiSWQpIDogbnVsbDtcbiAgICBjb25zdCBtYXNrZWQgPSB0aGlzLnJiYWNTZXJ2aWNlLnNob3VsZE1hc2tGaWVsZCh0aGlzLmZpZWxkLCB0YWIgPz8gdW5kZWZpbmVkLCB0aGlzLmNvbmZpZywgdGhpcy51c2VyUm9sZXMpO1xuXG4gICAgLy8gUmUtdXNlIGV4aXN0aW5nIGNvbXBvbmVudCBpZiBzYW1lIHR5cGUsIG90aGVyd2lzZSByZWNyZWF0ZVxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAmJiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBpbnN0YW5jZW9mIENvbXBvbmVudENsYXNzKSB7XG4gICAgICB0aGlzLnNldElucHV0cyh0aGlzLmNvbXBvbmVudFJlZiwgbWFza2VkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpZWxkSG9zdC5jbGVhcigpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5maWVsZEhvc3QuY3JlYXRlQ29tcG9uZW50KENvbXBvbmVudENsYXNzLCB7XG4gICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcbiAgICB0aGlzLnNldElucHV0cyh0aGlzLmNvbXBvbmVudFJlZiwgbWFza2VkKTtcbiAgICB0aGlzLndhdGNoQ29udHJvbCgpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWVsZCB0eXBlcyBhcmUgb3B0LWluIChzZWUgYHByb3ZpZGVGaWVsZFR5cGVzYCAvIGBwcm92aWRlQnVpbHRJbkZpZWxkVHlwZXNgKSwgc28gYW5cbiAgICogdW5yZWdpc3RlcmVkIHR5cGUgcmVuZGVycyBub3RoaW5nLiBTYXkgc28gb25jZSBwZXIgdHlwZSBpbiBkZXYgYnVpbGRzIHJhdGhlciB0aGFuXG4gICAqIGxlYXZpbmcgYSBzaWxlbnRseSBibGFuayBzbG90LlxuICAgKi9cbiAgcHJpdmF0ZSB3YXJuVW5yZXNvbHZlZCh0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWlzRGV2TW9kZSgpIHx8IER5bmFtaWNGaWVsZENvbXBvbmVudC53YXJuZWRUeXBlcy5oYXModHlwZSkpIHJldHVybjtcbiAgICBEeW5hbWljRmllbGRDb21wb25lbnQud2FybmVkVHlwZXMuYWRkKHR5cGUpO1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBbbmd4LWR5bmFtaWMtZW50aXR5XSBObyBjb21wb25lbnQgcmVnaXN0ZXJlZCBmb3IgZmllbGQgdHlwZSBcIiR7dHlwZX1cIiDigJQgdGhlIGZpZWxkIHdhcyBub3QgcmVuZGVyZWQuIGAgK1xuICAgICAgICBgUmVnaXN0ZXIgaXQgd2l0aCBwcm92aWRlRmllbGRUeXBlcyh7ICcke3R5cGV9JzogTXlDb21wb25lbnQgfSkgb3IgcHJvdmlkZUJ1aWx0SW5GaWVsZFR5cGVzKCkuYCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgd2FybmVkVHlwZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKipcbiAgICogUmUtY2hlY2sgdGhlIGhvc3RlZCBmaWVsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoZSBmaWVsZCBjb21wb25lbnRzIGFyZSBPblB1c2gsIHNvIHRoZXkgcmUtcmVuZGVyIG9uIGFuIGlucHV0IGNoYW5nZSwgYW4gZXZlbnQgZnJvbVxuICAgKiB0aGVpciBvd24gdGVtcGxhdGUsIG9yIGEgc2lnbmFsIHRoZXkgcmVhZC4gYGZvcm0ubWFya0FsbEFzVG91Y2hlZCgpYCBpcyBub25lIG9mIHRob3NlIOKAlFxuICAgKiBpdCBmbGlwcyBgdG91Y2hlZGAgZnJvbSBvdXRzaWRlLCBhbmQgZXZlcnkgZmllbGQncyBlcnJvciBtZXNzYWdlIGRlcGVuZHMgb24gaXQuIFdpdGhvdXRcbiAgICogdGhpcywgYSBibG9ja2VkIHN1Ym1pdCB3b3VsZCBtYXJrIHRoZSBmb3JtIHRvdWNoZWQgYW5kIG5vIGVycm9yIHdvdWxkIGFwcGVhci5cbiAgICovXG4gIHJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRSZWY/LmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1jaGVjayB0aGUgaG9zdGVkIGNvbXBvbmVudCB3aGVuZXZlciBpdHMgY29udHJvbCBjaGFuZ2VzIGZyb20gb3V0c2lkZS5cbiAgICpcbiAgICogVGhlIGZpZWxkIGNvbXBvbmVudHMgYXJlIE9uUHVzaCwgc28gdGhleSByZS1yZW5kZXIgb24gYW4gaW5wdXQgY2hhbmdlIG9yIGFuIGV2ZW50IGZyb21cbiAgICogdGhlaXIgb3duIHRlbXBsYXRlLiBBIGNvbnRyb2wgbXV0YXRlZCBleHRlcm5hbGx5IGlzIG5laXRoZXIg4oCUIGFuZCB0aGF0IGlzIG5vdCBhbiBlZGdlXG4gICAqIGNhc2U6IHBhdGNoRm9ybSwgcmVzZXQsIGF1dG9QYXRjaCBhbmQgcGF0Y2hPblRydWUgYWxsIGRvIGV4YWN0bHkgdGhhdC4gV2l0aG91dCB0aGlzLCBhXG4gICAqIGZpZWxkIHBhdGNoZWQgZnJvbSBhIHJlY29yZCB3b3VsZCBrZWVwIHJlbmRlcmluZyBpdHMgcHJldmlvdXMgdmFsdWUuXG4gICAqXG4gICAqIGBkZXRlY3RDaGFuZ2VzKClgIHJhdGhlciB0aGFuIGBtYXJrRm9yQ2hlY2soKWA6IGEgc2VsZWN0aW9uIHRoYXQgYXJyaXZlcyBmcm9tIGEgbmF0aXZlXG4gICAqIGBjaGFuZ2VgIGV2ZW50IChvciBQbGF5d3JpZ2h0KSBtYXkgbm90IGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIgQW5ndWxhciB0aWNrLCBzbyBhIGRpcnR5XG4gICAqIGZsYWcgd291bGQgbmV2ZXIgYmUgZmx1c2hlZC4gUnVubmluZyBDRCBvbiB0aGUgaG9zdGVkIGNvbXBvbmVudCBub3cgaXMgdGhlIGNvcHkgc2hvd2luZyB1cC5cbiAgICpcbiAgICogRG9uZSBoZXJlIHJhdGhlciB0aGFuIGluIGVhY2ggb2YgdGhlIGVpZ2h0ZWVuIGZpZWxkIGNvbXBvbmVudHM6IHRoZSBob3N0IG93bnMgdGhlXG4gICAqIGNvbXBvbmVudCByZWZlcmVuY2UsIHNvIG9uZSBzdWJzY3JpcHRpb24gY292ZXJzIGV2ZXJ5IHR5cGUgaW5jbHVkaW5nIGN1c3RvbSBvbmVzLlxuICAgKi9cbiAgcHJpdmF0ZSB3YXRjaENvbnRyb2woKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIGlmICghdGhpcy5jb250cm9sKSByZXR1cm47XG5cbiAgICB0aGlzLmNvbnRyb2xTdWIgPSB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2goKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnRyb2xTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhc3MgYWxsIDUgY29udHJhY3QgaW5wdXRzIHZpYSBDb21wb25lbnRSZWYuc2V0SW5wdXQoKSDigJQgdW5pZm9ybSBmb3IgYWxsIHR5cGVzLlxuICAgKiBUaGUgcHVibGljIHNoYXBlIGlzIER5bmFtaWNGaWVsZENvbXBvbmVudENvbnRyYWN0LlxuICAgKiBNdXN0IHVzZSBzZXRJbnB1dCgpLCBub3QgcHJvcGVydHkgYXNzaWdubWVudDogdGhlIGZpZWxkIGNvbXBvbmVudHMgZGVjbGFyZSBpbnB1dHMgd2l0aFxuICAgKiBkZWZpbml0ZSBhc3NpZ25tZW50IGFuZCBubyBpbml0aWFsaXplciwgYW5kIHRoZSBsaWIgY29tcGlsZXMgd2l0aFxuICAgKiB1c2VEZWZpbmVGb3JDbGFzc0ZpZWxkczpmYWxzZSwgc28gYCdmaWVsZCcgaW4gaW5zdGFuY2VgIGlzIGZhbHNlIHVudGlsIGZpcnN0IHNldC5cbiAgICovXG4gIHByaXZhdGUgc2V0SW5wdXRzKHJlZjogQ29tcG9uZW50UmVmPHVua25vd24+LCBtYXNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICByZWYuc2V0SW5wdXQoJ2ZpZWxkJywgdGhpcy5maWVsZCk7XG4gICAgcmVmLnNldElucHV0KCdjb250cm9sJywgdGhpcy5jb250cm9sKTtcbiAgICByZWYuc2V0SW5wdXQoJ2xhbmd1YWdlJywgdGhpcy5sYW5ndWFnZSk7XG4gICAgcmVmLnNldElucHV0KCdyZWFkb25seScsIHRoaXMucmVhZG9ubHkgfHwgISF0aGlzLmZpZWxkLnJlYWRvbmx5KTtcbiAgICByZWYuc2V0SW5wdXQoJ21hc2tlZCcsIG1hc2tlZCk7XG4gIH1cbn1cbiJdfQ==