ngx-dynamic-entity 1.0.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.
- package/README.md +129 -139
- package/esm2022/lib/field-types/array-field.component.mjs +112 -104
- package/esm2022/lib/field-types/boolean-field.component.mjs +62 -61
- package/esm2022/lib/field-types/checkbox-field.component.mjs +48 -47
- package/esm2022/lib/field-types/currency-field.component.mjs +54 -53
- package/esm2022/lib/field-types/date-field.component.mjs +46 -45
- package/esm2022/lib/field-types/dropdown-field.component.mjs +89 -87
- package/esm2022/lib/field-types/email-field.component.mjs +64 -63
- package/esm2022/lib/field-types/entity-ref-field.component.mjs +85 -71
- package/esm2022/lib/field-types/field-component.contract.mjs +2 -0
- package/esm2022/lib/field-types/file-field.component.mjs +88 -87
- package/esm2022/lib/field-types/group-field.component.mjs +50 -50
- package/esm2022/lib/field-types/image-field.component.mjs +92 -91
- package/esm2022/lib/field-types/month-year-field.component.mjs +80 -79
- package/esm2022/lib/field-types/multi-select-field.component.mjs +66 -65
- package/esm2022/lib/field-types/number-field.component.mjs +71 -75
- package/esm2022/lib/field-types/password-field.component.mjs +68 -67
- package/esm2022/lib/field-types/radio-field.component.mjs +66 -65
- package/esm2022/lib/field-types/text-field.component.mjs +81 -74
- package/esm2022/lib/field-types/textarea-field.component.mjs +48 -47
- package/esm2022/lib/form/dynamic-field/dynamic-field.component.mjs +53 -6
- package/esm2022/lib/form/dynamic-form.component.mjs +309 -20
- package/esm2022/lib/form/dynamic-record-form.component.mjs +36 -11
- package/esm2022/lib/providers/provide-field-types.mjs +1 -1
- package/esm2022/lib/providers/provide-ngx-dynamic-entity.mjs +8 -2
- package/esm2022/lib/services/cascade-data.service.mjs +2 -2
- package/esm2022/lib/services/entity-ref-cache.mjs +1 -1
- package/esm2022/lib/services/entity-ref-registry.service.mjs +2 -2
- package/esm2022/lib/services/entity-ref-selection.service.mjs +1 -1
- package/esm2022/lib/services/entity-reference.service.mjs +1 -1
- package/esm2022/lib/services/field-registry.service.mjs +1 -1
- package/esm2022/lib/services/file-upload.service.mjs +1 -1
- package/esm2022/lib/services/lookup-registry.service.mjs +2 -2
- package/esm2022/lib/services/rbac.service.mjs +1 -1
- package/esm2022/lib/services/validation-messages.service.mjs +56 -0
- package/esm2022/lib/services/validator-registry.service.mjs +35 -2
- package/esm2022/lib/tokens/injection-tokens.mjs +35 -6
- package/esm2022/public-api.mjs +23 -2
- package/fesm2022/ngx-dynamic-entity.mjs +1754 -1236
- package/fesm2022/ngx-dynamic-entity.mjs.map +1 -1
- package/lib/field-types/array-field.component.d.ts +7 -1
- package/lib/field-types/dropdown-field.component.d.ts +2 -1
- package/lib/field-types/entity-ref-field.component.d.ts +12 -2
- package/lib/field-types/field-component.contract.d.ts +49 -0
- package/lib/field-types/group-field.component.d.ts +1 -1
- package/lib/field-types/multi-select-field.component.d.ts +1 -1
- package/lib/field-types/number-field.component.d.ts +1 -0
- package/lib/field-types/radio-field.component.d.ts +1 -1
- package/lib/field-types/text-field.component.d.ts +10 -2
- package/lib/form/dynamic-field/dynamic-field.component.d.ts +39 -4
- package/lib/form/dynamic-form.component.d.ts +155 -8
- package/lib/form/dynamic-record-form.component.d.ts +13 -2
- package/lib/providers/provide-ngx-dynamic-entity.d.ts +25 -3
- package/lib/services/cascade-data.service.d.ts +1 -1
- package/lib/services/entity-ref-registry.service.d.ts +1 -1
- package/lib/services/lookup-registry.service.d.ts +1 -1
- package/lib/services/validation-messages.service.d.ts +43 -0
- package/lib/services/validator-registry.service.d.ts +13 -1
- package/lib/tokens/injection-tokens.d.ts +42 -7
- package/package.json +17 -18
- package/public-api.d.ts +12 -0
- package/styles.css +579 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { Component, Input, inject, signal } from '@angular/core';
|
|
1
|
+
import { Component, Input, inject, signal, ChangeDetectionStrategy } from '@angular/core';
|
|
2
2
|
import { ReactiveFormsModule } from '@angular/forms';
|
|
3
3
|
import { getOptionStoredValue, resolveLabel, resolveOptionLabel, valuesMatch, } from '@dynamic-entity/core';
|
|
4
4
|
import { LookupRegistryService, refreshChoiceOptions } from '../services/lookup-registry.service';
|
|
5
|
+
import { ValidationMessagesService } from '../services/validation-messages.service';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "@angular/forms";
|
|
7
8
|
export class DropdownFieldComponent {
|
|
8
9
|
lookups = inject(LookupRegistryService);
|
|
10
|
+
messages = inject(ValidationMessagesService);
|
|
9
11
|
_field;
|
|
10
12
|
_language = 'en';
|
|
11
13
|
/** Setter-based so options resolve however the input is set — see `refreshChoiceOptions`. */
|
|
@@ -64,100 +66,100 @@ export class DropdownFieldComponent {
|
|
|
64
66
|
get errorMessage() {
|
|
65
67
|
if (!this.control || !this.control.errors || !this.control.touched)
|
|
66
68
|
return '';
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return 'Invalid selection.';
|
|
69
|
+
// `requiredSelection` rather than `required`: "Please select an option" reads better on a
|
|
70
|
+
// dropdown than "This field is required", and both stay independently overridable.
|
|
71
|
+
return this.messages.resolve(this.control.errors, this.language, [['required', 'requiredSelection']], 'invalidSelection');
|
|
71
72
|
}
|
|
72
73
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
73
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DropdownFieldComponent, isStandalone: true, selector: "ngx-dropdown-field", inputs: { field: "field", language: "language", control: "control", readonly: "readonly", masked: "masked" }, ngImport: i0, template: `
|
|
74
|
-
<div
|
|
75
|
-
class="ngx-field ngx-field--dropdown"
|
|
76
|
-
[attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type"
|
|
77
|
-
[class.ngx-field--readonly]="readonly"
|
|
78
|
-
[class.ngx-field--masked]="masked"
|
|
79
|
-
[class.ngx-field--invalid]="control && control.invalid && control.touched"
|
|
80
|
-
>
|
|
81
|
-
<label class="ngx-field__label" [attr.for]="field.id">
|
|
82
|
-
{{ label }}
|
|
83
|
-
@if (field.validators?.required) { <span class="ngx-field__req">*</span> }
|
|
84
|
-
</label>
|
|
85
|
-
@if (masked) {
|
|
86
|
-
<span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
|
|
87
|
-
} @else if (readonly) {
|
|
88
|
-
<span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ getLabel(control.value) }}</span>
|
|
89
|
-
} @else {
|
|
90
|
-
<select
|
|
91
|
-
[id]="field.id"
|
|
92
|
-
class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
|
|
93
|
-
[formControl]="$any(control)"
|
|
94
|
-
[compareWith]="compareFn"
|
|
95
|
-
[attr.disabled]="field.disabled ? true : null"
|
|
96
|
-
[attr.aria-invalid]="control.invalid && control.touched"
|
|
97
|
-
[attr.aria-describedby]="errorMessage ? field.id + '-error' : null"
|
|
98
|
-
>
|
|
99
|
-
<option [value]="''">{{ placeholder || 'Select...' }}</option>
|
|
100
|
-
@for (option of options(); track getOptLabel(option)) {
|
|
101
|
-
@if (isObjectVal(option)) {
|
|
102
|
-
<option [ngValue]="getOptStoredVal(option)">{{ getOptLabel(option) }}</option>
|
|
103
|
-
} @else {
|
|
104
|
-
<option [value]="getOptStoredVal(option)">{{ getOptLabel(option) }}</option>
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
</select>
|
|
108
|
-
@if (errorMessage) {
|
|
109
|
-
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'" [id]="field.id + '-error'" role="alert">{{ errorMessage }}</span>
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
</div>
|
|
113
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
|
|
74
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DropdownFieldComponent, isStandalone: true, selector: "ngx-dropdown-field", inputs: { field: "field", language: "language", control: "control", readonly: "readonly", masked: "masked" }, ngImport: i0, template: `
|
|
75
|
+
<div
|
|
76
|
+
class="ngx-field ngx-field--dropdown"
|
|
77
|
+
[attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type"
|
|
78
|
+
[class.ngx-field--readonly]="readonly"
|
|
79
|
+
[class.ngx-field--masked]="masked"
|
|
80
|
+
[class.ngx-field--invalid]="control && control.invalid && control.touched"
|
|
81
|
+
>
|
|
82
|
+
<label class="ngx-field__label" [attr.for]="field.id">
|
|
83
|
+
{{ label }}
|
|
84
|
+
@if (field.validators?.required) { <span class="ngx-field__req">*</span> }
|
|
85
|
+
</label>
|
|
86
|
+
@if (masked) {
|
|
87
|
+
<span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
|
|
88
|
+
} @else if (readonly) {
|
|
89
|
+
<span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ getLabel(control.value) }}</span>
|
|
90
|
+
} @else {
|
|
91
|
+
<select
|
|
92
|
+
[id]="field.id"
|
|
93
|
+
class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
|
|
94
|
+
[formControl]="$any(control)"
|
|
95
|
+
[compareWith]="compareFn"
|
|
96
|
+
[attr.disabled]="field.disabled ? true : null"
|
|
97
|
+
[attr.aria-invalid]="control.invalid && control.touched"
|
|
98
|
+
[attr.aria-describedby]="errorMessage ? field.id + '-error' : null"
|
|
99
|
+
>
|
|
100
|
+
<option [value]="''">{{ placeholder || 'Select...' }}</option>
|
|
101
|
+
@for (option of options(); track getOptLabel(option)) {
|
|
102
|
+
@if (isObjectVal(option)) {
|
|
103
|
+
<option [ngValue]="getOptStoredVal(option)">{{ getOptLabel(option) }}</option>
|
|
104
|
+
} @else {
|
|
105
|
+
<option [value]="getOptStoredVal(option)">{{ getOptLabel(option) }}</option>
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
</select>
|
|
109
|
+
@if (errorMessage) {
|
|
110
|
+
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'" [id]="field.id + '-error'" role="alert">{{ errorMessage }}</span>
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
</div>
|
|
114
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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 });
|
|
114
115
|
}
|
|
115
116
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownFieldComponent, decorators: [{
|
|
116
117
|
type: Component,
|
|
117
118
|
args: [{
|
|
119
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
118
120
|
selector: 'ngx-dropdown-field',
|
|
119
121
|
standalone: true,
|
|
120
122
|
imports: [ReactiveFormsModule],
|
|
121
|
-
template: `
|
|
122
|
-
<div
|
|
123
|
-
class="ngx-field ngx-field--dropdown"
|
|
124
|
-
[attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type"
|
|
125
|
-
[class.ngx-field--readonly]="readonly"
|
|
126
|
-
[class.ngx-field--masked]="masked"
|
|
127
|
-
[class.ngx-field--invalid]="control && control.invalid && control.touched"
|
|
128
|
-
>
|
|
129
|
-
<label class="ngx-field__label" [attr.for]="field.id">
|
|
130
|
-
{{ label }}
|
|
131
|
-
@if (field.validators?.required) { <span class="ngx-field__req">*</span> }
|
|
132
|
-
</label>
|
|
133
|
-
@if (masked) {
|
|
134
|
-
<span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
|
|
135
|
-
} @else if (readonly) {
|
|
136
|
-
<span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ getLabel(control.value) }}</span>
|
|
137
|
-
} @else {
|
|
138
|
-
<select
|
|
139
|
-
[id]="field.id"
|
|
140
|
-
class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
|
|
141
|
-
[formControl]="$any(control)"
|
|
142
|
-
[compareWith]="compareFn"
|
|
143
|
-
[attr.disabled]="field.disabled ? true : null"
|
|
144
|
-
[attr.aria-invalid]="control.invalid && control.touched"
|
|
145
|
-
[attr.aria-describedby]="errorMessage ? field.id + '-error' : null"
|
|
146
|
-
>
|
|
147
|
-
<option [value]="''">{{ placeholder || 'Select...' }}</option>
|
|
148
|
-
@for (option of options(); track getOptLabel(option)) {
|
|
149
|
-
@if (isObjectVal(option)) {
|
|
150
|
-
<option [ngValue]="getOptStoredVal(option)">{{ getOptLabel(option) }}</option>
|
|
151
|
-
} @else {
|
|
152
|
-
<option [value]="getOptStoredVal(option)">{{ getOptLabel(option) }}</option>
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
</select>
|
|
156
|
-
@if (errorMessage) {
|
|
157
|
-
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'" [id]="field.id + '-error'" role="alert">{{ errorMessage }}</span>
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
</div>
|
|
123
|
+
template: `
|
|
124
|
+
<div
|
|
125
|
+
class="ngx-field ngx-field--dropdown"
|
|
126
|
+
[attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type"
|
|
127
|
+
[class.ngx-field--readonly]="readonly"
|
|
128
|
+
[class.ngx-field--masked]="masked"
|
|
129
|
+
[class.ngx-field--invalid]="control && control.invalid && control.touched"
|
|
130
|
+
>
|
|
131
|
+
<label class="ngx-field__label" [attr.for]="field.id">
|
|
132
|
+
{{ label }}
|
|
133
|
+
@if (field.validators?.required) { <span class="ngx-field__req">*</span> }
|
|
134
|
+
</label>
|
|
135
|
+
@if (masked) {
|
|
136
|
+
<span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
|
|
137
|
+
} @else if (readonly) {
|
|
138
|
+
<span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">{{ getLabel(control.value) }}</span>
|
|
139
|
+
} @else {
|
|
140
|
+
<select
|
|
141
|
+
[id]="field.id"
|
|
142
|
+
class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
|
|
143
|
+
[formControl]="$any(control)"
|
|
144
|
+
[compareWith]="compareFn"
|
|
145
|
+
[attr.disabled]="field.disabled ? true : null"
|
|
146
|
+
[attr.aria-invalid]="control.invalid && control.touched"
|
|
147
|
+
[attr.aria-describedby]="errorMessage ? field.id + '-error' : null"
|
|
148
|
+
>
|
|
149
|
+
<option [value]="''">{{ placeholder || 'Select...' }}</option>
|
|
150
|
+
@for (option of options(); track getOptLabel(option)) {
|
|
151
|
+
@if (isObjectVal(option)) {
|
|
152
|
+
<option [ngValue]="getOptStoredVal(option)">{{ getOptLabel(option) }}</option>
|
|
153
|
+
} @else {
|
|
154
|
+
<option [value]="getOptStoredVal(option)">{{ getOptLabel(option) }}</option>
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
</select>
|
|
158
|
+
@if (errorMessage) {
|
|
159
|
+
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'" [id]="field.id + '-error'" role="alert">{{ errorMessage }}</span>
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
</div>
|
|
161
163
|
`,
|
|
162
164
|
}]
|
|
163
165
|
}], propDecorators: { field: [{
|
|
@@ -171,4 +173,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
171
173
|
}], masked: [{
|
|
172
174
|
type: Input
|
|
173
175
|
}] } });
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9maWVsZC10eXBlcy9kcm9wZG93bi1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQW1CLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLFdBQVcsR0FDWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFnRGxHLE1BQU0sT0FBTyxzQkFBc0I7SUFDaEIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRWpELE1BQU0sQ0FBcUI7SUFDM0IsU0FBUyxHQUFHLElBQUksQ0FBQztJQUV6Qiw2RkFBNkY7SUFDN0YsSUFBYSxLQUFLLENBQUMsS0FBd0I7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsb0JBQW9CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFhLFFBQVEsQ0FBQyxLQUFhO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQztRQUMvQixvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENB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LE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO29CQUM5QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q1Q7aUJBQ0Y7OEJBUWMsS0FBSztzQkFBakIsS0FBSztnQkFRTyxRQUFRO3NCQUFwQixLQUFLO2dCQVFHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHR5cGUgeyBEcm9wZG93bk9wdGlvbiwgTmVzdGVkRmllbGRDb25maWcgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgZ2V0T3B0aW9uU3RvcmVkVmFsdWUsXHJcbiAgcmVzb2x2ZUxhYmVsLFxyXG4gIHJlc29sdmVPcHRpb25MYWJlbCxcclxuICB2YWx1ZXNNYXRjaCxcclxufSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XHJcbmltcG9ydCB7IExvb2t1cFJlZ2lzdHJ5U2VydmljZSwgcmVmcmVzaENob2ljZU9wdGlvbnMgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb29rdXAtcmVnaXN0cnkuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1kcm9wZG93bi1maWVsZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZV0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJuZ3gtZmllbGQgbmd4LWZpZWxkLS1kcm9wZG93blwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWRcIiBbYXR0ci5kYXRhLWZpZWxkLXR5cGVdPVwiZmllbGQudHlwZVwiXHJcbiAgICAgIFtjbGFzcy5uZ3gtZmllbGQtLXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgW2NsYXNzLm5neC1maWVsZC0tbWFza2VkXT1cIm1hc2tlZFwiXHJcbiAgICAgIFtjbGFzcy5uZ3gtZmllbGQtLWludmFsaWRdPVwiY29udHJvbCAmJiBjb250cm9sLmludmFsaWQgJiYgY29udHJvbC50b3VjaGVkXCJcclxuICAgID5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwibmd4LWZpZWxkX19sYWJlbFwiIFthdHRyLmZvcl09XCJmaWVsZC5pZFwiPlxyXG4gICAgICAgIHt7IGxhYmVsIH19XHJcbiAgICAgICAgQGlmIChmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZCkgeyA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fcmVxXCI+Kjwvc3Bhbj4gfVxyXG4gICAgICA8L2xhYmVsPlxyXG4gICAgICBAaWYgKG1hc2tlZCkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmd4LWZpZWxkX192YWx1ZSBuZ3gtZmllbGRfX3ZhbHVlLS1tYXNrZWRcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy1tYXNrZWQnXCI+WFhYWFhYWFhYPC9zcGFuPlxyXG4gICAgICB9IEBlbHNlIGlmIChyZWFkb25seSkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmd4LWZpZWxkX192YWx1ZVwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLXZhbHVlJ1wiPnt7IGdldExhYmVsKGNvbnRyb2wudmFsdWUpIH19PC9zcGFuPlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8c2VsZWN0XHJcbiAgICAgICAgICBbaWRdPVwiZmllbGQuaWRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJuZ3gtZmllbGRfX2lucHV0XCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZCArICctaW5wdXQnXCJcclxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCIkYW55KGNvbnRyb2wpXCJcclxuICAgICAgICAgIFtjb21wYXJlV2l0aF09XCJjb21wYXJlRm5cIlxyXG4gICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZmllbGQuZGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiY29udHJvbC5pbnZhbGlkICYmIGNvbnRyb2wudG91Y2hlZFwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImVycm9yTWVzc2FnZSA/IGZpZWxkLmlkICsgJy1lcnJvcicgOiBudWxsXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCInJ1wiPnt7IHBsYWNlaG9sZGVyIHx8ICdTZWxlY3QuLi4nIH19PC9vcHRpb24+XHJcbiAgICAgICAgICBAZm9yIChvcHRpb24gb2Ygb3B0aW9ucygpOyB0cmFjayBnZXRPcHRMYWJlbChvcHRpb24pKSB7XHJcbiAgICAgICAgICAgIEBpZiAoaXNPYmplY3RWYWwob3B0aW9uKSkge1xyXG4gICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiZ2V0T3B0U3RvcmVkVmFsKG9wdGlvbilcIj57eyBnZXRPcHRMYWJlbChvcHRpb24pIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImdldE9wdFN0b3JlZFZhbChvcHRpb24pXCI+e3sgZ2V0T3B0TGFiZWwob3B0aW9uKSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgQGlmIChlcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmd4LWZpZWxkX19lcnJvclwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLWVycm9yJ1wiIFtpZF09XCJmaWVsZC5pZCArICctZXJyb3InXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3Bkb3duRmllbGRDb21wb25lbnQge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9va3VwcyA9IGluamVjdChMb29rdXBSZWdpc3RyeVNlcnZpY2UpO1xyXG5cclxuICBwcml2YXRlIF9maWVsZCE6IE5lc3RlZEZpZWxkQ29uZmlnO1xyXG4gIHByaXZhdGUgX2xhbmd1YWdlID0gJ2VuJztcclxuXHJcbiAgLyoqIFNldHRlci1iYXNlZCBzbyBvcHRpb25zIHJlc29sdmUgaG93ZXZlciB0aGUgaW5wdXQgaXMgc2V0IOKAlCBzZWUgYHJlZnJlc2hDaG9pY2VPcHRpb25zYC4gKi9cclxuICBASW5wdXQoKSBzZXQgZmllbGQodmFsdWU6IE5lc3RlZEZpZWxkQ29uZmlnKSB7XHJcbiAgICB0aGlzLl9maWVsZCA9IHZhbHVlO1xyXG4gICAgcmVmcmVzaENob2ljZU9wdGlvbnModGhpcywgdGhpcy5sb29rdXBzKTtcclxuICB9XHJcbiAgZ2V0IGZpZWxkKCk6IE5lc3RlZEZpZWxkQ29uZmlnIHtcclxuICAgIHJldHVybiB0aGlzLl9maWVsZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBsYW5ndWFnZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9sYW5ndWFnZSA9IHZhbHVlIHx8ICdlbic7XHJcbiAgICByZWZyZXNoQ2hvaWNlT3B0aW9ucyh0aGlzLCB0aGlzLmxvb2t1cHMpO1xyXG4gIH1cclxuICBnZXQgbGFuZ3VhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtYXNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIElubGluZSBgb3B0aW9uc2AsIG9yIHRoZSBmaWVsZCdzIG5hbWVkIGxpc3QgcmVzb2x2ZWQgdGhyb3VnaCB0aGUgcmVnaXN0cnkgKMKnNi4zKS4gKi9cclxuICByZWFkb25seSBvcHRpb25zID0gc2lnbmFsPERyb3Bkb3duT3B0aW9uW10+KFtdKTtcclxuXHJcbiAgcmVhZG9ubHkgY29tcGFyZUZuID0gKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuID0+IHZhbHVlc01hdGNoKG8xLCBvMiwgdGhpcy5sYW5ndWFnZSk7XHJcblxyXG4gIGlzT2JqZWN0VmFsKG9wdGlvbjogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB2YWwgPSBnZXRPcHRpb25TdG9yZWRWYWx1ZShvcHRpb24pO1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCBsYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHJlc29sdmVMYWJlbCh0aGlzLmZpZWxkPy5sYWJlbCwgdGhpcy5sYW5ndWFnZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiByZXNvbHZlTGFiZWwodGhpcy5maWVsZD8ucGxhY2Vob2xkZXIsIHRoaXMubGFuZ3VhZ2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3B0U3RvcmVkVmFsKG9wdGlvbjogYW55KTogYW55IHtcclxuICAgIHJldHVybiBnZXRPcHRpb25TdG9yZWRWYWx1ZShvcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3B0TGFiZWwob3B0aW9uOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHJlc29sdmVPcHRpb25MYWJlbChvcHRpb24sIHRoaXMubGFuZ3VhZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVhZC1vbmx5IGRpc3BsYXkuIE5ldmVyIGF3YWl0cyAowqc2LjIpOiBhIHdhcm0gbGlzdCByZXNvbHZlcyB0aGUgbGFiZWwsIGEgY29sZCBvbmUgZmFsbHNcclxuICAgKiBiYWNrIHRvIHRoZSBzdG9yZWQgdGV4dCDigJQgd2hpY2ggdW5kZXIgdGhlIMKnMiBjb250cmFjdCAqaXMqIHRoZSBkaXNwbGF5IHZhbHVlLCBzbyBpdCBpc1xyXG4gICAqIG5ldmVyIHdyb25nLCBvbmx5IHVubG9jYWxpc2VkLlxyXG4gICAqL1xyXG4gIGdldExhYmVsKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gJ+KAlCc7XHJcbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLm9wdGlvbnMoKS5maW5kKG8gPT4gdmFsdWVzTWF0Y2goZ2V0T3B0aW9uU3RvcmVkVmFsdWUobyksIHZhbHVlLCB0aGlzLmxhbmd1YWdlKSk7XHJcbiAgICBpZiAob3B0aW9uKSByZXR1cm4gdGhpcy5nZXRPcHRMYWJlbChvcHRpb24pO1xyXG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5sb29rdXBzLmxhYmVsRm9yKHRoaXMuZmllbGQ/Lmxpc3ROYW1lLCB2YWx1ZSwgdGhpcy5sYW5ndWFnZSk7XHJcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyByZXNvbHZlTGFiZWwodmFsdWUsIHRoaXMubGFuZ3VhZ2UpIDogKHZhbHVlID8/ICfigJQnKTtcclxuICB9XHJcblxyXG4gIGdldCBlcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5jb250cm9sIHx8ICF0aGlzLmNvbnRyb2wuZXJyb3JzIHx8ICF0aGlzLmNvbnRyb2wudG91Y2hlZCkgcmV0dXJuICcnO1xyXG4gICAgY29uc3QgZXJycyA9IHRoaXMuY29udHJvbC5lcnJvcnM7XHJcbiAgICBpZiAoZXJyc1sncmVxdWlyZWQnXSkgcmV0dXJuICdQbGVhc2Ugc2VsZWN0IGFuIG9wdGlvbi4nO1xyXG4gICAgcmV0dXJuICdJbnZhbGlkIHNlbGVjdGlvbi4nO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9maWVsZC10eXBlcy9kcm9wZG93bi1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQW1CLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLFdBQVcsR0FDWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7QUFpRHBGLE1BQU0sT0FBTyxzQkFBc0I7SUFDaEIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUV0RCxNQUFNLENBQXFCO0lBQzNCLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFFekIsNkZBQTZGO0lBQzdGLElBQWEsS0FBSyxDQUFDLEtBQXdCO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBYSxRQUFRLENBQUMsS0FBYTtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDL0Is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TEExQ3ZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NULDJEQXpDUyxtQkFBbUI7OzRGQTJDbEIsc0JBQXNCO2tCQS9DbEMsU0FBUzttQkFBQztvQkFDVCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO29CQUM5QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q1Q7aUJBQ0Y7OEJBU2MsS0FBSztzQkFBakIsS0FBSztnQkFRTyxRQUFRO3NCQUFwQixLQUFLO2dCQVFHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGluamVjdCwgc2lnbmFsLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHR5cGUgeyBEcm9wZG93bk9wdGlvbiwgTmVzdGVkRmllbGRDb25maWcgfSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQge1xuICBnZXRPcHRpb25TdG9yZWRWYWx1ZSxcbiAgcmVzb2x2ZUxhYmVsLFxuICByZXNvbHZlT3B0aW9uTGFiZWwsXG4gIHZhbHVlc01hdGNoLFxufSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5pbXBvcnQgeyBMb29rdXBSZWdpc3RyeVNlcnZpY2UsIHJlZnJlc2hDaG9pY2VPcHRpb25zIH0gZnJvbSAnLi4vc2VydmljZXMvbG9va3VwLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24tbWVzc2FnZXMuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc2VsZWN0b3I6ICduZ3gtZHJvcGRvd24tZmllbGQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJuZ3gtZmllbGQgbmd4LWZpZWxkLS1kcm9wZG93blwiXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkXCIgW2F0dHIuZGF0YS1maWVsZC10eXBlXT1cImZpZWxkLnR5cGVcIlxuICAgICAgW2NsYXNzLm5neC1maWVsZC0tcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgW2NsYXNzLm5neC1maWVsZC0tbWFza2VkXT1cIm1hc2tlZFwiXG4gICAgICBbY2xhc3Mubmd4LWZpZWxkLS1pbnZhbGlkXT1cImNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICYmIGNvbnRyb2wudG91Y2hlZFwiXG4gICAgPlxuICAgICAgPGxhYmVsIGNsYXNzPVwibmd4LWZpZWxkX19sYWJlbFwiIFthdHRyLmZvcl09XCJmaWVsZC5pZFwiPlxuICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgICBAaWYgKGZpZWxkLnZhbGlkYXRvcnM/LnJlcXVpcmVkKSB7IDxzcGFuIGNsYXNzPVwibmd4LWZpZWxkX19yZXFcIj4qPC9zcGFuPiB9XG4gICAgICA8L2xhYmVsPlxuICAgICAgQGlmIChtYXNrZWQpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX3ZhbHVlIG5neC1maWVsZF9fdmFsdWUtLW1hc2tlZFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLW1hc2tlZCdcIj5YWFhYWFhYWFg8L3NwYW4+XG4gICAgICB9IEBlbHNlIGlmIChyZWFkb25seSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fdmFsdWVcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy12YWx1ZSdcIj57eyBnZXRMYWJlbChjb250cm9sLnZhbHVlKSB9fTwvc3Bhbj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgW2lkXT1cImZpZWxkLmlkXCJcbiAgICAgICAgICBjbGFzcz1cIm5neC1maWVsZF9faW5wdXRcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy1pbnB1dCdcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCIkYW55KGNvbnRyb2wpXCJcbiAgICAgICAgICBbY29tcGFyZVdpdGhdPVwiY29tcGFyZUZuXCJcbiAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJmaWVsZC5kaXNhYmxlZCA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiY29udHJvbC5pbnZhbGlkICYmIGNvbnRyb2wudG91Y2hlZFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJlcnJvck1lc3NhZ2UgPyBmaWVsZC5pZCArICctZXJyb3InIDogbnVsbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCInJ1wiPnt7IHBsYWNlaG9sZGVyIHx8ICdTZWxlY3QuLi4nIH19PC9vcHRpb24+XG4gICAgICAgICAgQGZvciAob3B0aW9uIG9mIG9wdGlvbnMoKTsgdHJhY2sgZ2V0T3B0TGFiZWwob3B0aW9uKSkge1xuICAgICAgICAgICAgQGlmIChpc09iamVjdFZhbChvcHRpb24pKSB7XG4gICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiZ2V0T3B0U3RvcmVkVmFsKG9wdGlvbilcIj57eyBnZXRPcHRMYWJlbChvcHRpb24pIH19PC9vcHRpb24+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiZ2V0T3B0U3RvcmVkVmFsKG9wdGlvbilcIj57eyBnZXRPcHRMYWJlbChvcHRpb24pIH19PC9vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgQGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5neC1maWVsZF9fZXJyb3JcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy1lcnJvcidcIiBbaWRdPVwiZmllbGQuaWQgKyAnLWVycm9yJ1wiIHJvbGU9XCJhbGVydFwiPnt7IGVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkZpZWxkQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBsb29rdXBzID0gaW5qZWN0KExvb2t1cFJlZ2lzdHJ5U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZXMgPSBpbmplY3QoVmFsaWRhdGlvbk1lc3NhZ2VzU2VydmljZSk7XG5cbiAgcHJpdmF0ZSBfZmllbGQhOiBOZXN0ZWRGaWVsZENvbmZpZztcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSAnZW4nO1xuXG4gIC8qKiBTZXR0ZXItYmFzZWQgc28gb3B0aW9ucyByZXNvbHZlIGhvd2V2ZXIgdGhlIGlucHV0IGlzIHNldCDigJQgc2VlIGByZWZyZXNoQ2hvaWNlT3B0aW9uc2AuICovXG4gIEBJbnB1dCgpIHNldCBmaWVsZCh2YWx1ZTogTmVzdGVkRmllbGRDb25maWcpIHtcbiAgICB0aGlzLl9maWVsZCA9IHZhbHVlO1xuICAgIHJlZnJlc2hDaG9pY2VPcHRpb25zKHRoaXMsIHRoaXMubG9va3Vwcyk7XG4gIH1cbiAgZ2V0IGZpZWxkKCk6IE5lc3RlZEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGQ7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgbGFuZ3VhZ2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2xhbmd1YWdlID0gdmFsdWUgfHwgJ2VuJztcbiAgICByZWZyZXNoQ2hvaWNlT3B0aW9ucyh0aGlzLCB0aGlzLmxvb2t1cHMpO1xuICB9XG4gIGdldCBsYW5ndWFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZTtcbiAgfVxuXG4gIEBJbnB1dCgpIGNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1hc2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBJbmxpbmUgYG9wdGlvbnNgLCBvciB0aGUgZmllbGQncyBuYW1lZCBsaXN0IHJlc29sdmVkIHRocm91Z2ggdGhlIHJlZ2lzdHJ5ICjCpzYuMykuICovXG4gIHJlYWRvbmx5IG9wdGlvbnMgPSBzaWduYWw8RHJvcGRvd25PcHRpb25bXT4oW10pO1xuXG4gIHJlYWRvbmx5IGNvbXBhcmVGbiA9IChvMTogYW55LCBvMjogYW55KTogYm9vbGVhbiA9PiB2YWx1ZXNNYXRjaChvMSwgbzIsIHRoaXMubGFuZ3VhZ2UpO1xuXG4gIGlzT2JqZWN0VmFsKG9wdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsID0gZ2V0T3B0aW9uU3RvcmVkVmFsdWUob3B0aW9uKTtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsO1xuICB9XG5cbiAgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVMYWJlbCh0aGlzLmZpZWxkPy5sYWJlbCwgdGhpcy5sYW5ndWFnZSk7XG4gIH1cblxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUxhYmVsKHRoaXMuZmllbGQ/LnBsYWNlaG9sZGVyLCB0aGlzLmxhbmd1YWdlKTtcbiAgfVxuXG4gIGdldE9wdFN0b3JlZFZhbChvcHRpb246IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGdldE9wdGlvblN0b3JlZFZhbHVlKG9wdGlvbik7XG4gIH1cblxuICBnZXRPcHRMYWJlbChvcHRpb246IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVPcHRpb25MYWJlbChvcHRpb24sIHRoaXMubGFuZ3VhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQtb25seSBkaXNwbGF5LiBOZXZlciBhd2FpdHMgKMKnNi4yKTogYSB3YXJtIGxpc3QgcmVzb2x2ZXMgdGhlIGxhYmVsLCBhIGNvbGQgb25lIGZhbGxzXG4gICAqIGJhY2sgdG8gdGhlIHN0b3JlZCB0ZXh0IOKAlCB3aGljaCB1bmRlciB0aGUgwqcyIGNvbnRyYWN0ICppcyogdGhlIGRpc3BsYXkgdmFsdWUsIHNvIGl0IGlzXG4gICAqIG5ldmVyIHdyb25nLCBvbmx5IHVubG9jYWxpc2VkLlxuICAgKi9cbiAgZ2V0TGFiZWwodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gJ+KAlCc7XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5vcHRpb25zKCkuZmluZChvID0+IHZhbHVlc01hdGNoKGdldE9wdGlvblN0b3JlZFZhbHVlKG8pLCB2YWx1ZSwgdGhpcy5sYW5ndWFnZSkpO1xuICAgIGlmIChvcHRpb24pIHJldHVybiB0aGlzLmdldE9wdExhYmVsKG9wdGlvbik7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5sb29rdXBzLmxhYmVsRm9yKHRoaXMuZmllbGQ/Lmxpc3ROYW1lLCB2YWx1ZSwgdGhpcy5sYW5ndWFnZSk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHJlc29sdmVMYWJlbCh2YWx1ZSwgdGhpcy5sYW5ndWFnZSkgOiAodmFsdWUgPz8gJ+KAlCcpO1xuICB9XG5cbiAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jb250cm9sIHx8ICF0aGlzLmNvbnRyb2wuZXJyb3JzIHx8ICF0aGlzLmNvbnRyb2wudG91Y2hlZCkgcmV0dXJuICcnO1xuICAgIC8vIGByZXF1aXJlZFNlbGVjdGlvbmAgcmF0aGVyIHRoYW4gYHJlcXVpcmVkYDogXCJQbGVhc2Ugc2VsZWN0IGFuIG9wdGlvblwiIHJlYWRzIGJldHRlciBvbiBhXG4gICAgLy8gZHJvcGRvd24gdGhhbiBcIlRoaXMgZmllbGQgaXMgcmVxdWlyZWRcIiwgYW5kIGJvdGggc3RheSBpbmRlcGVuZGVudGx5IG92ZXJyaWRhYmxlLlxuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzLnJlc29sdmUoXG4gICAgICB0aGlzLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgdGhpcy5sYW5ndWFnZSxcbiAgICAgIFtbJ3JlcXVpcmVkJywgJ3JlcXVpcmVkU2VsZWN0aW9uJ11dLFxuICAgICAgJ2ludmFsaWRTZWxlY3Rpb24nLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -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";
|
|
@@ -17,74 +17,75 @@ export class EmailFieldComponent {
|
|
|
17
17
|
return resolveLabel(this.field?.placeholder, this.language);
|
|
18
18
|
}
|
|
19
19
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EmailFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
20
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: EmailFieldComponent, isStandalone: true, selector: "ngx-email-field", inputs: { field: "field", control: "control", language: "language", readonly: "readonly", masked: "masked" }, ngImport: i0, template: `
|
|
21
|
-
<div class="ngx-field ngx-field--email"
|
|
22
|
-
[attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type" [class.ngx-field--readonly]="readonly" [class.ngx-field--masked]="masked">
|
|
23
|
-
<label class="ngx-field__label">{{ label }}</label>
|
|
24
|
-
@if (masked) {
|
|
25
|
-
<span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
|
|
26
|
-
} @else if (readonly) {
|
|
27
|
-
<span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">
|
|
28
|
-
<a [href]="'mailto:' + control.value" class="ngx-field__email-link">{{ control.value || '—' }}</a>
|
|
29
|
-
</span>
|
|
30
|
-
} @else {
|
|
31
|
-
<input
|
|
32
|
-
class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
|
|
33
|
-
type="email"
|
|
34
|
-
autocomplete="email"
|
|
35
|
-
[formControl]="$any(control)"
|
|
36
|
-
[placeholder]="placeholder || 'you@example.com'"
|
|
37
|
-
[attr.disabled]="field.disabled ? true : null"
|
|
38
|
-
/>
|
|
39
|
-
@if (control.invalid && control.touched) {
|
|
40
|
-
@if (control.errors?.['required']) {
|
|
41
|
-
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">Email is required</span>
|
|
42
|
-
} @else if (control.errors?.['email']) {
|
|
43
|
-
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">Enter a valid email address</span>
|
|
44
|
-
} @else {
|
|
45
|
-
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">This field has an error</span>
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
</div>
|
|
50
|
-
`, 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"] }] });
|
|
20
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: EmailFieldComponent, isStandalone: true, selector: "ngx-email-field", inputs: { field: "field", control: "control", language: "language", readonly: "readonly", masked: "masked" }, ngImport: i0, template: `
|
|
21
|
+
<div class="ngx-field ngx-field--email"
|
|
22
|
+
[attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type" [class.ngx-field--readonly]="readonly" [class.ngx-field--masked]="masked">
|
|
23
|
+
<label class="ngx-field__label">{{ label }}</label>
|
|
24
|
+
@if (masked) {
|
|
25
|
+
<span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
|
|
26
|
+
} @else if (readonly) {
|
|
27
|
+
<span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">
|
|
28
|
+
<a [href]="'mailto:' + control.value" class="ngx-field__email-link">{{ control.value || '—' }}</a>
|
|
29
|
+
</span>
|
|
30
|
+
} @else {
|
|
31
|
+
<input
|
|
32
|
+
class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
|
|
33
|
+
type="email"
|
|
34
|
+
autocomplete="email"
|
|
35
|
+
[formControl]="$any(control)"
|
|
36
|
+
[placeholder]="placeholder || 'you@example.com'"
|
|
37
|
+
[attr.disabled]="field.disabled ? true : null"
|
|
38
|
+
/>
|
|
39
|
+
@if (control.invalid && control.touched) {
|
|
40
|
+
@if (control.errors?.['required']) {
|
|
41
|
+
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">Email is required</span>
|
|
42
|
+
} @else if (control.errors?.['email']) {
|
|
43
|
+
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">Enter a valid email address</span>
|
|
44
|
+
} @else {
|
|
45
|
+
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">This field has an error</span>
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
</div>
|
|
50
|
+
`, 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 });
|
|
51
51
|
}
|
|
52
52
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EmailFieldComponent, decorators: [{
|
|
53
53
|
type: Component,
|
|
54
54
|
args: [{
|
|
55
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
55
56
|
selector: 'ngx-email-field',
|
|
56
57
|
standalone: true,
|
|
57
58
|
imports: [ReactiveFormsModule],
|
|
58
|
-
template: `
|
|
59
|
-
<div class="ngx-field ngx-field--email"
|
|
60
|
-
[attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type" [class.ngx-field--readonly]="readonly" [class.ngx-field--masked]="masked">
|
|
61
|
-
<label class="ngx-field__label">{{ label }}</label>
|
|
62
|
-
@if (masked) {
|
|
63
|
-
<span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
|
|
64
|
-
} @else if (readonly) {
|
|
65
|
-
<span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">
|
|
66
|
-
<a [href]="'mailto:' + control.value" class="ngx-field__email-link">{{ control.value || '—' }}</a>
|
|
67
|
-
</span>
|
|
68
|
-
} @else {
|
|
69
|
-
<input
|
|
70
|
-
class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
|
|
71
|
-
type="email"
|
|
72
|
-
autocomplete="email"
|
|
73
|
-
[formControl]="$any(control)"
|
|
74
|
-
[placeholder]="placeholder || 'you@example.com'"
|
|
75
|
-
[attr.disabled]="field.disabled ? true : null"
|
|
76
|
-
/>
|
|
77
|
-
@if (control.invalid && control.touched) {
|
|
78
|
-
@if (control.errors?.['required']) {
|
|
79
|
-
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">Email is required</span>
|
|
80
|
-
} @else if (control.errors?.['email']) {
|
|
81
|
-
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">Enter a valid email address</span>
|
|
82
|
-
} @else {
|
|
83
|
-
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">This field has an error</span>
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
</div>
|
|
59
|
+
template: `
|
|
60
|
+
<div class="ngx-field ngx-field--email"
|
|
61
|
+
[attr.data-testid]="'field-' + field.id" [attr.data-field-type]="field.type" [class.ngx-field--readonly]="readonly" [class.ngx-field--masked]="masked">
|
|
62
|
+
<label class="ngx-field__label">{{ label }}</label>
|
|
63
|
+
@if (masked) {
|
|
64
|
+
<span class="ngx-field__value ngx-field__value--masked" [attr.data-testid]="'field-' + field.id + '-masked'">XXXXXXXXX</span>
|
|
65
|
+
} @else if (readonly) {
|
|
66
|
+
<span class="ngx-field__value" [attr.data-testid]="'field-' + field.id + '-value'">
|
|
67
|
+
<a [href]="'mailto:' + control.value" class="ngx-field__email-link">{{ control.value || '—' }}</a>
|
|
68
|
+
</span>
|
|
69
|
+
} @else {
|
|
70
|
+
<input
|
|
71
|
+
class="ngx-field__input" [attr.data-testid]="'field-' + field.id + '-input'"
|
|
72
|
+
type="email"
|
|
73
|
+
autocomplete="email"
|
|
74
|
+
[formControl]="$any(control)"
|
|
75
|
+
[placeholder]="placeholder || 'you@example.com'"
|
|
76
|
+
[attr.disabled]="field.disabled ? true : null"
|
|
77
|
+
/>
|
|
78
|
+
@if (control.invalid && control.touched) {
|
|
79
|
+
@if (control.errors?.['required']) {
|
|
80
|
+
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">Email is required</span>
|
|
81
|
+
} @else if (control.errors?.['email']) {
|
|
82
|
+
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">Enter a valid email address</span>
|
|
83
|
+
} @else {
|
|
84
|
+
<span class="ngx-field__error" [attr.data-testid]="'field-' + field.id + '-error'">This field has an error</span>
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
</div>
|
|
88
89
|
`,
|
|
89
90
|
}]
|
|
90
91
|
}], propDecorators: { field: [{
|
|
@@ -98,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
98
99
|
}], masked: [{
|
|
99
100
|
type: Input
|
|
100
101
|
}] } });
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9maWVsZC10eXBlcy9lbWFpbC1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFtQixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBRXBELG1FQUFtRTtBQXNDbkUsTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixLQUFLLENBQXFCO0lBQzFCLE9BQU8sQ0FBbUI7SUFDMUIsUUFBUSxHQUFXLElBQUksQ0FBQztJQUN4QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFFakMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUQsQ0FBQzt3R0FiVSxtQkFBbUI7NEZBQW5CLG1CQUFtQix5TEFoQ3BCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4QlQsMkRBL0JTLG1CQUFtQjs7NEZBaUNsQixtQkFBbUI7a0JBckMvQixTQUFTO21CQUFDO29CQUNULGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQzlCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJUO2lCQUNGOzhCQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7IE5lc3RlZEZpZWxkQ29uZmlnIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgcmVzb2x2ZUxhYmVsIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuXG4vKiogRW1haWwgZmllbGQ6IHR5cGU9XCJlbWFpbFwiIGlucHV0IHdpdGggaW5saW5lIHZhbGlkYXRpb24gaGludC4gKi9cbkBDb21wb25lbnQoe1xuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc2VsZWN0b3I6ICduZ3gtZW1haWwtZmllbGQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cIm5neC1maWVsZCBuZ3gtZmllbGQtLWVtYWlsXCJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWRcIiBbYXR0ci5kYXRhLWZpZWxkLXR5cGVdPVwiZmllbGQudHlwZVwiIFtjbGFzcy5uZ3gtZmllbGQtLXJlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2NsYXNzLm5neC1maWVsZC0tbWFza2VkXT1cIm1hc2tlZFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwibmd4LWZpZWxkX19sYWJlbFwiPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgICAgIEBpZiAobWFza2VkKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmd4LWZpZWxkX192YWx1ZSBuZ3gtZmllbGRfX3ZhbHVlLS1tYXNrZWRcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCInZmllbGQtJyArIGZpZWxkLmlkICsgJy1tYXNrZWQnXCI+WFhYWFhYWFhYPC9zcGFuPlxuICAgICAgfSBAZWxzZSBpZiAocmVhZG9ubHkpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX3ZhbHVlXCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZCArICctdmFsdWUnXCI+XG4gICAgICAgICAgPGEgW2hyZWZdPVwiJ21haWx0bzonICsgY29udHJvbC52YWx1ZVwiIGNsYXNzPVwibmd4LWZpZWxkX19lbWFpbC1saW5rXCI+e3sgY29udHJvbC52YWx1ZSB8fCAn4oCUJyB9fTwvYT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwibmd4LWZpZWxkX19pbnB1dFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cIidmaWVsZC0nICsgZmllbGQuaWQgKyAnLWlucHV0J1wiXG4gICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICBhdXRvY29tcGxldGU9XCJlbWFpbFwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cIiRhbnkoY29udHJvbClcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCAneW91QGV4YW1wbGUuY29tJ1wiXG4gICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZmllbGQuZGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiXG4gICAgICAgIC8+XG4gICAgICAgIEBpZiAoY29udHJvbC5pbnZhbGlkICYmIGNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgICAgIEBpZiAoY29udHJvbC5lcnJvcnM/LlsncmVxdWlyZWQnXSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX2Vycm9yXCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZCArICctZXJyb3InXCI+RW1haWwgaXMgcmVxdWlyZWQ8L3NwYW4+XG4gICAgICAgICAgfSBAZWxzZSBpZiAoY29udHJvbC5lcnJvcnM/LlsnZW1haWwnXSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX2Vycm9yXCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZCArICctZXJyb3InXCI+RW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzPC9zcGFuPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtZmllbGRfX2Vycm9yXCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2ZpZWxkLScgKyBmaWVsZC5pZCArICctZXJyb3InXCI+VGhpcyBmaWVsZCBoYXMgYW4gZXJyb3I8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIEVtYWlsRmllbGRDb21wb25lbnQge1xuICBASW5wdXQoKSBmaWVsZCE6IE5lc3RlZEZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBjb250cm9sITogQWJzdHJhY3RDb250cm9sO1xuICBASW5wdXQoKSBsYW5ndWFnZTogc3RyaW5nID0gJ2VuJztcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbWFza2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVMYWJlbCh0aGlzLmZpZWxkPy5sYWJlbCwgdGhpcy5sYW5ndWFnZSk7XG4gIH1cblxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUxhYmVsKHRoaXMuZmllbGQ/LnBsYWNlaG9sZGVyLCB0aGlzLmxhbmd1YWdlKTtcbiAgfVxufVxuIl19
|