valtech-components 4.0.135 → 4.0.137
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/esm2022/lib/components/molecules/request-form/request-form.component.mjs +57 -55
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +57 -54
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/request-form/request-form.component.d.ts +0 -3
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,6 @@ import { FeedbackService } from '../../../services/feedback/feedback.service';
|
|
|
10
10
|
import { I18nService } from '../../../services/i18n';
|
|
11
11
|
import { ComponentStates, InputType } from '../../types';
|
|
12
12
|
import { FormComponent } from '../../organisms/form/form.component';
|
|
13
|
-
import { AttachmentUploaderComponent } from '../../organisms/attachment-uploader/attachment-uploader.component';
|
|
14
13
|
import * as i0 from "@angular/core";
|
|
15
14
|
import * as i1 from "@angular/common";
|
|
16
15
|
const REQUEST_FORM_I18N = {
|
|
@@ -22,6 +21,8 @@ const REQUEST_FORM_I18N = {
|
|
|
22
21
|
descriptionPlaceholder: 'Añade más detalles aquí',
|
|
23
22
|
descriptionValidation: 'La descripción es demasiado larga',
|
|
24
23
|
submit: 'Enviar',
|
|
24
|
+
attachmentsLabel: 'Archivos adjuntos (opcional)',
|
|
25
|
+
attachmentsHint: 'Imágenes (JPG/PNG/WebP) o PDF, máx 5 MB cada uno. Hasta 5 archivos.',
|
|
25
26
|
success: 'Solicitud enviada exitosamente',
|
|
26
27
|
error: 'Error al enviar la solicitud',
|
|
27
28
|
},
|
|
@@ -33,6 +34,8 @@ const REQUEST_FORM_I18N = {
|
|
|
33
34
|
descriptionPlaceholder: 'Add more details here',
|
|
34
35
|
descriptionValidation: 'Description is too long',
|
|
35
36
|
submit: 'Submit',
|
|
37
|
+
attachmentsLabel: 'Attachments (optional)',
|
|
38
|
+
attachmentsHint: 'Images (JPG/PNG/WebP) or PDF, max 5 MB each. Up to 5 files.',
|
|
36
39
|
success: 'Request submitted successfully',
|
|
37
40
|
error: 'Error submitting the request',
|
|
38
41
|
},
|
|
@@ -48,7 +51,6 @@ export class RequestFormComponent {
|
|
|
48
51
|
this.isSubmitting = signal(false);
|
|
49
52
|
this.isSuccess = signal(false);
|
|
50
53
|
this.error = signal(null);
|
|
51
|
-
this.currentAttachments = [];
|
|
52
54
|
addIcons({ checkmarkCircleOutline, closeCircleOutline });
|
|
53
55
|
if (!this.i18n.hasNamespace('RequestForm')) {
|
|
54
56
|
this.i18n.registerDefaults('RequestForm', REQUEST_FORM_I18N);
|
|
@@ -58,44 +60,57 @@ export class RequestFormComponent {
|
|
|
58
60
|
this.formProps = this.buildFormProps();
|
|
59
61
|
}
|
|
60
62
|
buildFormProps() {
|
|
63
|
+
const fields = [
|
|
64
|
+
{
|
|
65
|
+
token: 'request-title',
|
|
66
|
+
name: 'title',
|
|
67
|
+
label: this.props.titleLabel ?? this.t('title'),
|
|
68
|
+
hint: '',
|
|
69
|
+
placeholder: this.props.titlePlaceholder ?? this.t('titlePlaceholder'),
|
|
70
|
+
type: InputType.TEXT,
|
|
71
|
+
order: 1,
|
|
72
|
+
validators: [Validators.required, Validators.minLength(3), Validators.maxLength(300)],
|
|
73
|
+
errors: {
|
|
74
|
+
required: this.t('titleValidation'),
|
|
75
|
+
minlength: this.t('titleValidation'),
|
|
76
|
+
maxlength: this.t('titleValidation'),
|
|
77
|
+
},
|
|
78
|
+
state: ComponentStates.ENABLED,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
token: 'request-description',
|
|
82
|
+
name: 'description',
|
|
83
|
+
label: this.props.descriptionLabel ?? this.t('description'),
|
|
84
|
+
hint: '',
|
|
85
|
+
placeholder: this.props.descriptionPlaceholder ?? this.t('descriptionPlaceholder'),
|
|
86
|
+
type: InputType.TEXTAREA,
|
|
87
|
+
order: 2,
|
|
88
|
+
validators: [Validators.maxLength(5000)],
|
|
89
|
+
errors: { maxlength: this.t('descriptionValidation') },
|
|
90
|
+
state: ComponentStates.ENABLED,
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
// Adjuntos como CAMPO del val-form (igual que feedback-form) — así respetan
|
|
94
|
+
// el orden y el separador del formulario, en vez de proyectarse como
|
|
95
|
+
// ng-content suelto después del separador.
|
|
96
|
+
if (this.props.showAttachments !== false) {
|
|
97
|
+
fields.push({
|
|
98
|
+
token: 'request-attachments',
|
|
99
|
+
name: 'attachments',
|
|
100
|
+
label: this.t('attachmentsLabel'),
|
|
101
|
+
hint: this.t('attachmentsHint'),
|
|
102
|
+
placeholder: '',
|
|
103
|
+
type: InputType.ATTACHMENT,
|
|
104
|
+
order: 3,
|
|
105
|
+
validators: [],
|
|
106
|
+
errors: {},
|
|
107
|
+
state: ComponentStates.ENABLED,
|
|
108
|
+
uploadFn: (file) => this.feedbackService.uploadAttachment(file),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
61
111
|
return {
|
|
62
112
|
name: '',
|
|
63
|
-
sections: [
|
|
64
|
-
{
|
|
65
|
-
name: '',
|
|
66
|
-
order: 0,
|
|
67
|
-
fields: [
|
|
68
|
-
{
|
|
69
|
-
token: 'request-title',
|
|
70
|
-
name: 'title',
|
|
71
|
-
label: this.props.titleLabel ?? this.t('title'),
|
|
72
|
-
hint: '',
|
|
73
|
-
placeholder: this.props.titlePlaceholder ?? this.t('titlePlaceholder'),
|
|
74
|
-
type: InputType.TEXT,
|
|
75
|
-
order: 1,
|
|
76
|
-
validators: [Validators.required, Validators.minLength(3), Validators.maxLength(300)],
|
|
77
|
-
errors: {
|
|
78
|
-
required: this.t('titleValidation'),
|
|
79
|
-
minlength: this.t('titleValidation'),
|
|
80
|
-
maxlength: this.t('titleValidation'),
|
|
81
|
-
},
|
|
82
|
-
state: ComponentStates.ENABLED,
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
token: 'request-description',
|
|
86
|
-
name: 'description',
|
|
87
|
-
label: this.props.descriptionLabel ?? this.t('description'),
|
|
88
|
-
hint: '',
|
|
89
|
-
placeholder: this.props.descriptionPlaceholder ?? this.t('descriptionPlaceholder'),
|
|
90
|
-
type: InputType.TEXTAREA,
|
|
91
|
-
order: 2,
|
|
92
|
-
validators: [Validators.maxLength(5000)],
|
|
93
|
-
errors: { maxlength: this.t('descriptionValidation') },
|
|
94
|
-
state: ComponentStates.ENABLED,
|
|
95
|
-
},
|
|
96
|
-
],
|
|
97
|
-
},
|
|
98
|
-
],
|
|
113
|
+
sections: [{ name: '', order: 0, fields }],
|
|
99
114
|
actions: {
|
|
100
115
|
type: 'submit',
|
|
101
116
|
color: 'dark',
|
|
@@ -111,8 +126,6 @@ export class RequestFormComponent {
|
|
|
111
126
|
async handleFormSubmit(submitted) {
|
|
112
127
|
if (this.isSubmitting())
|
|
113
128
|
return;
|
|
114
|
-
if (this.currentAttachments.some(a => a.status === 'uploading'))
|
|
115
|
-
return;
|
|
116
129
|
this.isSubmitting.set(true);
|
|
117
130
|
this.error.set(null);
|
|
118
131
|
this.isSuccess.set(false);
|
|
@@ -121,7 +134,7 @@ export class RequestFormComponent {
|
|
|
121
134
|
try {
|
|
122
135
|
const title = submitted.fields['title'].trim();
|
|
123
136
|
const description = submitted.fields['description']?.trim() ?? '';
|
|
124
|
-
const attachmentUrls =
|
|
137
|
+
const attachmentUrls = submitted.fields['attachments'] ?? [];
|
|
125
138
|
const result = await firstValueFrom(this.requestService.createRequest({
|
|
126
139
|
type: this.props.type,
|
|
127
140
|
title,
|
|
@@ -148,9 +161,6 @@ export class RequestFormComponent {
|
|
|
148
161
|
this.formProps.actions.state = ComponentStates.ENABLED;
|
|
149
162
|
}
|
|
150
163
|
}
|
|
151
|
-
onAttachmentsChange(items) {
|
|
152
|
-
this.currentAttachments = items;
|
|
153
|
-
}
|
|
154
164
|
onCancelClick() {
|
|
155
165
|
this.onCancel.emit();
|
|
156
166
|
}
|
|
@@ -161,10 +171,6 @@ export class RequestFormComponent {
|
|
|
161
171
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RequestFormComponent, isStandalone: true, selector: "val-request-form", inputs: { props: "props" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: `
|
|
162
172
|
<div class="request-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
|
|
163
173
|
<val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
|
|
164
|
-
@if (props.showAttachments !== false) {
|
|
165
|
-
<val-attachment-uploader [props]="{ maxFiles: 5 }" (attachmentsChange)="onAttachmentsChange($event)" />
|
|
166
|
-
}
|
|
167
|
-
|
|
168
174
|
@if (error()) {
|
|
169
175
|
<div class="request-alert error">
|
|
170
176
|
<ion-icon name="close-circle-outline" aria-hidden="true" />
|
|
@@ -186,17 +192,13 @@ export class RequestFormComponent {
|
|
|
186
192
|
</ion-button>
|
|
187
193
|
}
|
|
188
194
|
</div>
|
|
189
|
-
`, isInline: true, styles: [".request-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.request-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:1.25rem}}.cancel-button{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type:
|
|
195
|
+
`, isInline: true, styles: [".request-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.request-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:1.25rem}}.cancel-button{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
190
196
|
}
|
|
191
197
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestFormComponent, decorators: [{
|
|
192
198
|
type: Component,
|
|
193
|
-
args: [{ selector: 'val-request-form', standalone: true, imports: [CommonModule, FormComponent,
|
|
199
|
+
args: [{ selector: 'val-request-form', standalone: true, imports: [CommonModule, FormComponent, IonButton, IonIcon], template: `
|
|
194
200
|
<div class="request-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
|
|
195
201
|
<val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
|
|
196
|
-
@if (props.showAttachments !== false) {
|
|
197
|
-
<val-attachment-uploader [props]="{ maxFiles: 5 }" (attachmentsChange)="onAttachmentsChange($event)" />
|
|
198
|
-
}
|
|
199
|
-
|
|
200
202
|
@if (error()) {
|
|
201
203
|
<div class="request-alert error">
|
|
202
204
|
<ion-icon name="close-circle-outline" aria-hidden="true" />
|
|
@@ -226,4 +228,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
226
228
|
}], onCancel: [{
|
|
227
229
|
type: Output
|
|
228
230
|
}] } });
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvcmVxdWVzdC1mb3JtL3JlcXVlc3QtZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBMkMsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQzs7O0FBSWhILE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsRUFBRSxFQUFFO1FBQ0YsS0FBSyxFQUFFLFFBQVE7UUFDZixnQkFBZ0Is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Q0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDekMsQ0FBQzsrR0F0SVUsb0JBQW9CO21HQUFwQixvQkFBb0IsaUtBdEVyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCVCwyZkE3QlMsWUFBWSw2SEFBRSxhQUFhLDhIQUFFLDJCQUEyQix1SEFBRSxTQUFTLG9QQUFFLE9BQU87OzRGQXVFM0Usb0JBQW9CO2tCQTFFaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQzdFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJUO3dEQTJDUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNoZWNrbWFya0NpcmNsZU91dGxpbmUsIGNsb3NlQ2lyY2xlT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVxdWVzdHMvcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEZlZWRiYWNrU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZlZWRiYWNrL2ZlZWRiYWNrLnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlcywgRm9ybU1ldGFkYXRhLCBGb3JtU3VibWl0LCBJbnB1dE1ldGFkYXRhLCBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXR0YWNobWVudFVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXR0YWNobWVudEl0ZW0gfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvYXR0YWNobWVudC11cGxvYWRlci90eXBlcyc7XG5pbXBvcnQgeyBSZXF1ZXN0Rm9ybU1ldGFkYXRhLCBSZXF1ZXN0U3VibWl0RXZlbnQgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgUkVRVUVTVF9GT1JNX0kxOE4gPSB7XG4gIGVzOiB7XG4gICAgdGl0bGU6ICdUw610dWxvJyxcbiAgICB0aXRsZVBsYWNlaG9sZGVyOiAnRGVzY3JpYmUgYnJldmVtZW50ZSB0dSBzb2xpY2l0dWQnLFxuICAgIHRpdGxlVmFsaWRhdGlvbjogJ0VsIHTDrXR1bG8gZGViZSB0ZW5lciBhbCBtZW5vcyAzIGNhcmFjdGVyZXMnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGVzY3JpcGNpw7NuJyxcbiAgICBkZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnQcOxYWRlIG3DoXMgZGV0YWxsZXMgYXF1w60nLFxuICAgIGRlc2NyaXB0aW9uVmFsaWRhdGlvbjogJ0xhIGRlc2NyaXBjacOzbiBlcyBkZW1hc2lhZG8gbGFyZ2EnLFxuICAgIHN1Ym1pdDogJ0VudmlhcicsXG4gICAgc3VjY2VzczogJ1NvbGljaXR1ZCBlbnZpYWRhIGV4aXRvc2FtZW50ZScsXG4gICAgZXJyb3I6ICdFcnJvciBhbCBlbnZpYXIgbGEgc29saWNpdHVkJyxcbiAgfSxcbiAgZW46IHtcbiAgICB0aXRsZTogJ1RpdGxlJyxcbiAgICB0aXRsZVBsYWNlaG9sZGVyOiAnQnJpZWZseSBkZXNjcmliZSB5b3VyIHJlcXVlc3QnLFxuICAgIHRpdGxlVmFsaWRhdGlvbjogJ1RpdGxlIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uJyxcbiAgICBkZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnQWRkIG1vcmUgZGV0YWlscyBoZXJlJyxcbiAgICBkZXNjcmlwdGlvblZhbGlkYXRpb246ICdEZXNjcmlwdGlvbiBpcyB0b28gbG9uZycsXG4gICAgc3VibWl0OiAnU3VibWl0JyxcbiAgICBzdWNjZXNzOiAnUmVxdWVzdCBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICBlcnJvcjogJ0Vycm9yIHN1Ym1pdHRpbmcgdGhlIHJlcXVlc3QnLFxuICB9LFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXJlcXVlc3QtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1Db21wb25lbnQsIEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCwgSW9uQnV0dG9uLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicmVxdWVzdC1mb3JtLXdyYXBwZXJcIiBbY2xhc3MuY29tcGFjdF09XCJwcm9wcy5jb21wYWN0XCIgW25nQ2xhc3NdPVwicHJvcHMuY3NzQ2xhc3NcIj5cbiAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwiZm9ybVByb3BzXCIgKG9uU3VibWl0KT1cImhhbmRsZUZvcm1TdWJtaXQoJGV2ZW50KVwiPlxuICAgICAgICBAaWYgKHByb3BzLnNob3dBdHRhY2htZW50cyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICA8dmFsLWF0dGFjaG1lbnQtdXBsb2FkZXIgW3Byb3BzXT1cInsgbWF4RmlsZXM6IDUgfVwiIChhdHRhY2htZW50c0NoYW5nZSk9XCJvbkF0dGFjaG1lbnRzQ2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChlcnJvcigpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlcXVlc3QtYWxlcnQgZXJyb3JcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2UtY2lyY2xlLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgPHNwYW4+e3sgZXJyb3IoKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVxdWVzdC1hbGVydCBzdWNjZXNzXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZWNrbWFyay1jaXJjbGUtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8c3Bhbj57eyBwcm9wcy5zdWNjZXNzTWVzc2FnZSB8fCB0KCdzdWNjZXNzJykgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvdmFsLWZvcm0+XG5cbiAgICAgIEBpZiAocHJvcHMuY2FuY2VsQnV0dG9uVGV4dCkge1xuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwibWVkaXVtXCIgZXhwYW5kPVwiYmxvY2tcIiBjbGFzcz1cImNhbmNlbC1idXR0b25cIiAoY2xpY2spPVwib25DYW5jZWxDbGljaygpXCI+XG4gICAgICAgICAge3sgcHJvcHMuY2FuY2VsQnV0dG9uVGV4dCB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5yZXF1ZXN0LWZvcm0td3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuXG4gICAgICAgICYuY29tcGFjdCB7XG4gICAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLnJlcXVlc3QtYWxlcnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcblxuICAgICAgICAmLmVycm9yIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXRpbnQpO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuc3VjY2VzcyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MtdGludCk7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1zdWNjZXNzLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlvbi1pY29uIHtcbiAgICAgICAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNhbmNlbC1idXR0b24ge1xuICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUmVxdWVzdEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwcm9wczogUmVxdWVzdEZvcm1NZXRhZGF0YSA9IHsgdHlwZTogJycgfTtcblxuICBAT3V0cHV0KCkgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFJlcXVlc3RTdWJtaXRFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHByb3RlY3RlZCBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZXF1ZXN0U2VydmljZSA9IGluamVjdChSZXF1ZXN0U2VydmljZSk7XG4gIHByaXZhdGUgZmVlZGJhY2tTZXJ2aWNlID0gaW5qZWN0KEZlZWRiYWNrU2VydmljZSk7XG5cbiAgZm9ybVByb3BzITogRm9ybU1ldGFkYXRhO1xuXG4gIGlzU3VibWl0dGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIGlzU3VjY2VzcyA9IHNpZ25hbChmYWxzZSk7XG4gIGVycm9yID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgY3VycmVudEF0dGFjaG1lbnRzOiBBdHRhY2htZW50SXRlbVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgYWRkSWNvbnMoeyBjaGVja21hcmtDaXJjbGVPdXRsaW5lLCBjbG9zZUNpcmNsZU91dGxpbmUgfSk7XG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKCdSZXF1ZXN0Rm9ybScpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnUmVxdWVzdEZvcm0nLCBSRVFVRVNUX0ZPUk1fSTE4Tik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtUHJvcHMgPSB0aGlzLmJ1aWxkRm9ybVByb3BzKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybVByb3BzKCk6IEZvcm1NZXRhZGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0b2tlbjogJ3JlcXVlc3QtdGl0bGUnLFxuICAgICAgICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy50aXRsZUxhYmVsID8/IHRoaXMudCgndGl0bGUnKSxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLnRpdGxlUGxhY2Vob2xkZXIgPz8gdGhpcy50KCd0aXRsZVBsYWNlaG9sZGVyJyksXG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5URVhULFxuICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgzMDApXSxcbiAgICAgICAgICAgICAgZXJyb3JzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRoaXMudCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiB0aGlzLnQoJ3RpdGxlVmFsaWRhdGlvbicpLFxuICAgICAgICAgICAgICAgIG1heGxlbmd0aDogdGhpcy50KCd0aXRsZVZhbGlkYXRpb24nKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSBhcyBJbnB1dE1ldGFkYXRhLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0b2tlbjogJ3JlcXVlc3QtZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgICBuYW1lOiAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy5kZXNjcmlwdGlvbkxhYmVsID8/IHRoaXMudCgnZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLmRlc2NyaXB0aW9uUGxhY2Vob2xkZXIgPz8gdGhpcy50KCdkZXNjcmlwdGlvblBsYWNlaG9sZGVyJyksXG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5URVhUQVJFQSxcbiAgICAgICAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1heExlbmd0aCg1MDAwKV0sXG4gICAgICAgICAgICAgIGVycm9yczogeyBtYXhsZW5ndGg6IHRoaXMudCgnZGVzY3JpcHRpb25WYWxpZGF0aW9uJykgfSxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSBhcyBJbnB1dE1ldGFkYXRhLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgICAgdGV4dDogdGhpcy5wcm9wcy5zdWJtaXRCdXR0b25UZXh0ID8/IHRoaXMudCgnc3VibWl0JyksXG4gICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUZvcm1TdWJtaXQoc3VibWl0dGVkOiBGb3JtU3VibWl0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5jdXJyZW50QXR0YWNobWVudHMuc29tZShhID0+IGEuc3RhdHVzID09PSAndXBsb2FkaW5nJykpIHJldHVybjtcblxuICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLmlzU3VjY2Vzcy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG4gICAgdGhpcy5mb3JtUHJvcHMuYWN0aW9ucy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpdGxlID0gKHN1Ym1pdHRlZC5maWVsZHNbJ3RpdGxlJ10gYXMgc3RyaW5nKS50cmltKCk7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IChzdWJtaXR0ZWQuZmllbGRzWydkZXNjcmlwdGlvbiddIGFzIHN0cmluZyk/LnRyaW0oKSA/PyAnJztcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRVcmxzID0gdGhpcy5jdXJyZW50QXR0YWNobWVudHMuZmlsdGVyKGEgPT4gYS5zdGF0dXMgPT09ICdyZWFkeScpLm1hcChhID0+IGEudXJsISk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlLmNyZWF0ZVJlcXVlc3Qoe1xuICAgICAgICAgIHR5cGU6IHRoaXMucHJvcHMudHlwZSxcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb24gfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihhdHRhY2htZW50VXJscy5sZW5ndGggPyB7IGF0dGFjaG1lbnRVcmxzIH0gOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaXNTdWNjZXNzLnNldCh0cnVlKTtcbiAgICAgIHRoaXMub25TdWJtaXQuZW1pdCh7XG4gICAgICAgIHJlcXVlc3RJZDogcmVzdWx0LnJlcXVlc3RJZCxcbiAgICAgICAgcmVxdWVzdDogcmVzdWx0LnJlcXVlc3QsXG4gICAgICAgIHR5cGU6IHRoaXMucHJvcHMudHlwZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGF0dGFjaG1lbnRVcmxzLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KGVyci5lcnJvcj8ubWVzc2FnZSB8fCBlcnIubWVzc2FnZSB8fCB0aGlzLnQoJ2Vycm9yJykpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzU3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5mb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgIHRoaXMuZm9ybVByb3BzLmFjdGlvbnMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICB9XG4gIH1cblxuICBvbkF0dGFjaG1lbnRzQ2hhbmdlKGl0ZW1zOiBBdHRhY2htZW50SXRlbVtdKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50QXR0YWNobWVudHMgPSBpdGVtcztcbiAgfVxuXG4gIG9uQ2FuY2VsQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgJ1JlcXVlc3RGb3JtJyk7XG4gIH1cbn1cbiJdfQ==
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvcmVxdWVzdC1mb3JtL3JlcXVlc3QtZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBMkMsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBR3BFLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsRUFBRSxFQUFFO1FBQ0YsS0FBSyxFQUFFLFFBQVE7UUFDZixnQkFBZ0IsRUFBRSxrQ0FBa0M7UUFDcEQsZUFBZSxFQUFFLDRDQUE0QztRQUM3RCxXQUFX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QUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztZQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxDQUFDLENBQUMsR0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN6QyxDQUFDOytHQTlJVSxvQkFBb0I7bUdBQXBCLG9CQUFvQixpS0FsRXJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3QlQsMmZBekJTLFlBQVksNkhBQUUsYUFBYSw4SEFBRSxTQUFTLG9QQUFFLE9BQU87OzRGQW1FOUMsb0JBQW9CO2tCQXRFaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQ2hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3QlQ7d0RBMkNRLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJb25CdXR0b24sIElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2hlY2ttYXJrQ2lyY2xlT3V0bGluZSwgY2xvc2VDaXJjbGVPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXF1ZXN0cy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRmVlZGJhY2tTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmVlZGJhY2svZmVlZGJhY2suc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RhdGVzLCBGb3JtTWV0YWRhdGEsIEZvcm1TdWJtaXQsIElucHV0TWV0YWRhdGEsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXF1ZXN0Rm9ybU1ldGFkYXRhLCBSZXF1ZXN0U3VibWl0RXZlbnQgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgUkVRVUVTVF9GT1JNX0kxOE4gPSB7XG4gIGVzOiB7XG4gICAgdGl0bGU6ICdUw610dWxvJyxcbiAgICB0aXRsZVBsYWNlaG9sZGVyOiAnRGVzY3JpYmUgYnJldmVtZW50ZSB0dSBzb2xpY2l0dWQnLFxuICAgIHRpdGxlVmFsaWRhdGlvbjogJ0VsIHTDrXR1bG8gZGViZSB0ZW5lciBhbCBtZW5vcyAzIGNhcmFjdGVyZXMnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGVzY3JpcGNpw7NuJyxcbiAgICBkZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnQcOxYWRlIG3DoXMgZGV0YWxsZXMgYXF1w60nLFxuICAgIGRlc2NyaXB0aW9uVmFsaWRhdGlvbjogJ0xhIGRlc2NyaXBjacOzbiBlcyBkZW1hc2lhZG8gbGFyZ2EnLFxuICAgIHN1Ym1pdDogJ0VudmlhcicsXG4gICAgYXR0YWNobWVudHNMYWJlbDogJ0FyY2hpdm9zIGFkanVudG9zIChvcGNpb25hbCknLFxuICAgIGF0dGFjaG1lbnRzSGludDogJ0ltw6FnZW5lcyAoSlBHL1BORy9XZWJQKSBvIFBERiwgbcOheCA1IE1CIGNhZGEgdW5vLiBIYXN0YSA1IGFyY2hpdm9zLicsXG4gICAgc3VjY2VzczogJ1NvbGljaXR1ZCBlbnZpYWRhIGV4aXRvc2FtZW50ZScsXG4gICAgZXJyb3I6ICdFcnJvciBhbCBlbnZpYXIgbGEgc29saWNpdHVkJyxcbiAgfSxcbiAgZW46IHtcbiAgICB0aXRsZTogJ1RpdGxlJyxcbiAgICB0aXRsZVBsYWNlaG9sZGVyOiAnQnJpZWZseSBkZXNjcmliZSB5b3VyIHJlcXVlc3QnLFxuICAgIHRpdGxlVmFsaWRhdGlvbjogJ1RpdGxlIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uJyxcbiAgICBkZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnQWRkIG1vcmUgZGV0YWlscyBoZXJlJyxcbiAgICBkZXNjcmlwdGlvblZhbGlkYXRpb246ICdEZXNjcmlwdGlvbiBpcyB0b28gbG9uZycsXG4gICAgc3VibWl0OiAnU3VibWl0JyxcbiAgICBhdHRhY2htZW50c0xhYmVsOiAnQXR0YWNobWVudHMgKG9wdGlvbmFsKScsXG4gICAgYXR0YWNobWVudHNIaW50OiAnSW1hZ2VzIChKUEcvUE5HL1dlYlApIG9yIFBERiwgbWF4IDUgTUIgZWFjaC4gVXAgdG8gNSBmaWxlcy4nLFxuICAgIHN1Y2Nlc3M6ICdSZXF1ZXN0IHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknLFxuICAgIGVycm9yOiAnRXJyb3Igc3VibWl0dGluZyB0aGUgcmVxdWVzdCcsXG4gIH0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtcmVxdWVzdC1mb3JtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybUNvbXBvbmVudCwgSW9uQnV0dG9uLCBJb25JY29uXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicmVxdWVzdC1mb3JtLXdyYXBwZXJcIiBbY2xhc3MuY29tcGFjdF09XCJwcm9wcy5jb21wYWN0XCIgW25nQ2xhc3NdPVwicHJvcHMuY3NzQ2xhc3NcIj5cbiAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwiZm9ybVByb3BzXCIgKG9uU3VibWl0KT1cImhhbmRsZUZvcm1TdWJtaXQoJGV2ZW50KVwiPlxuICAgICAgICBAaWYgKGVycm9yKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVxdWVzdC1hbGVydCBlcnJvclwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGUtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8c3Bhbj57eyBlcnJvcigpIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChpc1N1Y2Nlc3MoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXF1ZXN0LWFsZXJ0IHN1Y2Nlc3NcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hlY2ttYXJrLWNpcmNsZS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPnt7IHByb3BzLnN1Y2Nlc3NNZXNzYWdlIHx8IHQoJ3N1Y2Nlc3MnKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC92YWwtZm9ybT5cblxuICAgICAgQGlmIChwcm9wcy5jYW5jZWxCdXR0b25UZXh0KSB7XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJvdXRsaW5lXCIgY29sb3I9XCJtZWRpdW1cIiBleHBhbmQ9XCJibG9ja1wiIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbENsaWNrKClcIj5cbiAgICAgICAgICB7eyBwcm9wcy5jYW5jZWxCdXR0b25UZXh0IH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLnJlcXVlc3QtZm9ybS13cmFwcGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG5cbiAgICAgICAgJi5jb21wYWN0IHtcbiAgICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAucmVxdWVzdC1hbGVydCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuXG4gICAgICAgICYuZXJyb3Ige1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYW5nZXItdGludCk7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYW5nZXItc2hhZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5zdWNjZXNzIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pb24tY29sb3Itc3VjY2Vzcy10aW50KTtcbiAgICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3Mtc2hhZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW9uLWljb24ge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY2FuY2VsLWJ1dHRvbiB7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHByb3BzOiBSZXF1ZXN0Rm9ybU1ldGFkYXRhID0geyB0eXBlOiAnJyB9O1xuXG4gIEBPdXRwdXQoKSBvblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8UmVxdWVzdFN1Ym1pdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJvdGVjdGVkIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIHJlcXVlc3RTZXJ2aWNlID0gaW5qZWN0KFJlcXVlc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBmZWVkYmFja1NlcnZpY2UgPSBpbmplY3QoRmVlZGJhY2tTZXJ2aWNlKTtcblxuICBmb3JtUHJvcHMhOiBGb3JtTWV0YWRhdGE7XG5cbiAgaXNTdWJtaXR0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgaXNTdWNjZXNzID0gc2lnbmFsKGZhbHNlKTtcbiAgZXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgYWRkSWNvbnMoeyBjaGVja21hcmtDaXJjbGVPdXRsaW5lLCBjbG9zZUNpcmNsZU91dGxpbmUgfSk7XG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKCdSZXF1ZXN0Rm9ybScpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnUmVxdWVzdEZvcm0nLCBSRVFVRVNUX0ZPUk1fSTE4Tik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtUHJvcHMgPSB0aGlzLmJ1aWxkRm9ybVByb3BzKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybVByb3BzKCk6IEZvcm1NZXRhZGF0YSB7XG4gICAgY29uc3QgZmllbGRzOiBJbnB1dE1ldGFkYXRhW10gPSBbXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAncmVxdWVzdC10aXRsZScsXG4gICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgIGxhYmVsOiB0aGlzLnByb3BzLnRpdGxlTGFiZWwgPz8gdGhpcy50KCd0aXRsZScpLFxuICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMudGl0bGVQbGFjZWhvbGRlciA/PyB0aGlzLnQoJ3RpdGxlUGxhY2Vob2xkZXInKSxcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlLlRFWFQsXG4gICAgICAgIG9yZGVyOiAxLFxuICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDMwMCldLFxuICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICByZXF1aXJlZDogdGhpcy50KCd0aXRsZVZhbGlkYXRpb24nKSxcbiAgICAgICAgICBtaW5sZW5ndGg6IHRoaXMudCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgICAgbWF4bGVuZ3RoOiB0aGlzLnQoJ3RpdGxlVmFsaWRhdGlvbicpLFxuICAgICAgICB9LFxuICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICB9IGFzIElucHV0TWV0YWRhdGEsXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAncmVxdWVzdC1kZXNjcmlwdGlvbicsXG4gICAgICAgIG5hbWU6ICdkZXNjcmlwdGlvbicsXG4gICAgICAgIGxhYmVsOiB0aGlzLnByb3BzLmRlc2NyaXB0aW9uTGFiZWwgPz8gdGhpcy50KCdkZXNjcmlwdGlvbicpLFxuICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlciA/PyB0aGlzLnQoJ2Rlc2NyaXB0aW9uUGxhY2Vob2xkZXInKSxcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlLlRFWFRBUkVBLFxuICAgICAgICBvcmRlcjogMixcbiAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwMDApXSxcbiAgICAgICAgZXJyb3JzOiB7IG1heGxlbmd0aDogdGhpcy50KCdkZXNjcmlwdGlvblZhbGlkYXRpb24nKSB9LFxuICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICB9IGFzIElucHV0TWV0YWRhdGEsXG4gICAgXTtcblxuICAgIC8vIEFkanVudG9zIGNvbW8gQ0FNUE8gZGVsIHZhbC1mb3JtIChpZ3VhbCBxdWUgZmVlZGJhY2stZm9ybSkg4oCUIGFzw60gcmVzcGV0YW5cbiAgICAvLyBlbCBvcmRlbiB5IGVsIHNlcGFyYWRvciBkZWwgZm9ybXVsYXJpbywgZW4gdmV6IGRlIHByb3llY3RhcnNlIGNvbW9cbiAgICAvLyBuZy1jb250ZW50IHN1ZWx0byBkZXNwdcOpcyBkZWwgc2VwYXJhZG9yLlxuICAgIGlmICh0aGlzLnByb3BzLnNob3dBdHRhY2htZW50cyAhPT0gZmFsc2UpIHtcbiAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgdG9rZW46ICdyZXF1ZXN0LWF0dGFjaG1lbnRzJyxcbiAgICAgICAgbmFtZTogJ2F0dGFjaG1lbnRzJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudCgnYXR0YWNobWVudHNMYWJlbCcpLFxuICAgICAgICBoaW50OiB0aGlzLnQoJ2F0dGFjaG1lbnRzSGludCcpLFxuICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgIHR5cGU6IElucHV0VHlwZS5BVFRBQ0hNRU5ULFxuICAgICAgICBvcmRlcjogMyxcbiAgICAgICAgdmFsaWRhdG9yczogW10sXG4gICAgICAgIGVycm9yczoge30sXG4gICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgdXBsb2FkRm46IChmaWxlOiBGaWxlKSA9PiB0aGlzLmZlZWRiYWNrU2VydmljZS51cGxvYWRBdHRhY2htZW50KGZpbGUpLFxuICAgICAgfSBhcyBJbnB1dE1ldGFkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJycsXG4gICAgICBzZWN0aW9uczogW3sgbmFtZTogJycsIG9yZGVyOiAwLCBmaWVsZHMgfV0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBmaWxsOiAnc29saWQnLFxuICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgZXhwYW5kOiAnYmxvY2snLFxuICAgICAgICB0ZXh0OiB0aGlzLnByb3BzLnN1Ym1pdEJ1dHRvblRleHQgPz8gdGhpcy50KCdzdWJtaXQnKSxcbiAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlRm9ybVN1Ym1pdChzdWJtaXR0ZWQ6IEZvcm1TdWJtaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcoKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuZXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuaXNTdWNjZXNzLnNldChmYWxzZSk7XG4gICAgdGhpcy5mb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuV09SS0lORztcbiAgICB0aGlzLmZvcm1Qcm9wcy5hY3Rpb25zLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGl0bGUgPSAoc3VibWl0dGVkLmZpZWxkc1sndGl0bGUnXSBhcyBzdHJpbmcpLnRyaW0oKTtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gKHN1Ym1pdHRlZC5maWVsZHNbJ2Rlc2NyaXB0aW9uJ10gYXMgc3RyaW5nKT8udHJpbSgpID8/ICcnO1xuICAgICAgY29uc3QgYXR0YWNobWVudFVybHMgPSAoc3VibWl0dGVkLmZpZWxkc1snYXR0YWNobWVudHMnXSBhcyBzdHJpbmdbXSkgPz8gW107XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlLmNyZWF0ZVJlcXVlc3Qoe1xuICAgICAgICAgIHR5cGU6IHRoaXMucHJvcHMudHlwZSxcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb24gfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihhdHRhY2htZW50VXJscy5sZW5ndGggPyB7IGF0dGFjaG1lbnRVcmxzIH0gOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaXNTdWNjZXNzLnNldCh0cnVlKTtcbiAgICAgIHRoaXMub25TdWJtaXQuZW1pdCh7XG4gICAgICAgIHJlcXVlc3RJZDogcmVzdWx0LnJlcXVlc3RJZCxcbiAgICAgICAgcmVxdWVzdDogcmVzdWx0LnJlcXVlc3QsXG4gICAgICAgIHR5cGU6IHRoaXMucHJvcHMudHlwZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGF0dGFjaG1lbnRVcmxzLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KGVyci5lcnJvcj8ubWVzc2FnZSB8fCBlcnIubWVzc2FnZSB8fCB0aGlzLnQoJ2Vycm9yJykpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzU3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5mb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgIHRoaXMuZm9ybVByb3BzLmFjdGlvbnMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdSZXF1ZXN0Rm9ybScpO1xuICB9XG59XG4iXX0=
|
package/esm2022/lib/version.mjs
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Current version of valtech-components.
|
|
3
3
|
* This is automatically updated during the publish process.
|
|
4
4
|
*/
|
|
5
|
-
export const VERSION = '4.0.
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
export const VERSION = '4.0.137';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xMzcnO1xuIl19
|
|
@@ -56,7 +56,7 @@ import { BrowserMultiFormatReader } from '@zxing/browser';
|
|
|
56
56
|
* Current version of valtech-components.
|
|
57
57
|
* This is automatically updated during the publish process.
|
|
58
58
|
*/
|
|
59
|
-
const VERSION = '4.0.
|
|
59
|
+
const VERSION = '4.0.137';
|
|
60
60
|
|
|
61
61
|
// Control de estado de refresco (singleton a nivel de módulo)
|
|
62
62
|
let isRefreshing = false;
|
|
@@ -35466,6 +35466,8 @@ const REQUEST_FORM_I18N = {
|
|
|
35466
35466
|
descriptionPlaceholder: 'Añade más detalles aquí',
|
|
35467
35467
|
descriptionValidation: 'La descripción es demasiado larga',
|
|
35468
35468
|
submit: 'Enviar',
|
|
35469
|
+
attachmentsLabel: 'Archivos adjuntos (opcional)',
|
|
35470
|
+
attachmentsHint: 'Imágenes (JPG/PNG/WebP) o PDF, máx 5 MB cada uno. Hasta 5 archivos.',
|
|
35469
35471
|
success: 'Solicitud enviada exitosamente',
|
|
35470
35472
|
error: 'Error al enviar la solicitud',
|
|
35471
35473
|
},
|
|
@@ -35477,6 +35479,8 @@ const REQUEST_FORM_I18N = {
|
|
|
35477
35479
|
descriptionPlaceholder: 'Add more details here',
|
|
35478
35480
|
descriptionValidation: 'Description is too long',
|
|
35479
35481
|
submit: 'Submit',
|
|
35482
|
+
attachmentsLabel: 'Attachments (optional)',
|
|
35483
|
+
attachmentsHint: 'Images (JPG/PNG/WebP) or PDF, max 5 MB each. Up to 5 files.',
|
|
35480
35484
|
success: 'Request submitted successfully',
|
|
35481
35485
|
error: 'Error submitting the request',
|
|
35482
35486
|
},
|
|
@@ -35492,7 +35496,6 @@ class RequestFormComponent {
|
|
|
35492
35496
|
this.isSubmitting = signal(false);
|
|
35493
35497
|
this.isSuccess = signal(false);
|
|
35494
35498
|
this.error = signal(null);
|
|
35495
|
-
this.currentAttachments = [];
|
|
35496
35499
|
addIcons({ checkmarkCircleOutline, closeCircleOutline });
|
|
35497
35500
|
if (!this.i18n.hasNamespace('RequestForm')) {
|
|
35498
35501
|
this.i18n.registerDefaults('RequestForm', REQUEST_FORM_I18N);
|
|
@@ -35502,44 +35505,57 @@ class RequestFormComponent {
|
|
|
35502
35505
|
this.formProps = this.buildFormProps();
|
|
35503
35506
|
}
|
|
35504
35507
|
buildFormProps() {
|
|
35508
|
+
const fields = [
|
|
35509
|
+
{
|
|
35510
|
+
token: 'request-title',
|
|
35511
|
+
name: 'title',
|
|
35512
|
+
label: this.props.titleLabel ?? this.t('title'),
|
|
35513
|
+
hint: '',
|
|
35514
|
+
placeholder: this.props.titlePlaceholder ?? this.t('titlePlaceholder'),
|
|
35515
|
+
type: InputType.TEXT,
|
|
35516
|
+
order: 1,
|
|
35517
|
+
validators: [Validators.required, Validators.minLength(3), Validators.maxLength(300)],
|
|
35518
|
+
errors: {
|
|
35519
|
+
required: this.t('titleValidation'),
|
|
35520
|
+
minlength: this.t('titleValidation'),
|
|
35521
|
+
maxlength: this.t('titleValidation'),
|
|
35522
|
+
},
|
|
35523
|
+
state: ComponentStates.ENABLED,
|
|
35524
|
+
},
|
|
35525
|
+
{
|
|
35526
|
+
token: 'request-description',
|
|
35527
|
+
name: 'description',
|
|
35528
|
+
label: this.props.descriptionLabel ?? this.t('description'),
|
|
35529
|
+
hint: '',
|
|
35530
|
+
placeholder: this.props.descriptionPlaceholder ?? this.t('descriptionPlaceholder'),
|
|
35531
|
+
type: InputType.TEXTAREA,
|
|
35532
|
+
order: 2,
|
|
35533
|
+
validators: [Validators.maxLength(5000)],
|
|
35534
|
+
errors: { maxlength: this.t('descriptionValidation') },
|
|
35535
|
+
state: ComponentStates.ENABLED,
|
|
35536
|
+
},
|
|
35537
|
+
];
|
|
35538
|
+
// Adjuntos como CAMPO del val-form (igual que feedback-form) — así respetan
|
|
35539
|
+
// el orden y el separador del formulario, en vez de proyectarse como
|
|
35540
|
+
// ng-content suelto después del separador.
|
|
35541
|
+
if (this.props.showAttachments !== false) {
|
|
35542
|
+
fields.push({
|
|
35543
|
+
token: 'request-attachments',
|
|
35544
|
+
name: 'attachments',
|
|
35545
|
+
label: this.t('attachmentsLabel'),
|
|
35546
|
+
hint: this.t('attachmentsHint'),
|
|
35547
|
+
placeholder: '',
|
|
35548
|
+
type: InputType.ATTACHMENT,
|
|
35549
|
+
order: 3,
|
|
35550
|
+
validators: [],
|
|
35551
|
+
errors: {},
|
|
35552
|
+
state: ComponentStates.ENABLED,
|
|
35553
|
+
uploadFn: (file) => this.feedbackService.uploadAttachment(file),
|
|
35554
|
+
});
|
|
35555
|
+
}
|
|
35505
35556
|
return {
|
|
35506
35557
|
name: '',
|
|
35507
|
-
sections: [
|
|
35508
|
-
{
|
|
35509
|
-
name: '',
|
|
35510
|
-
order: 0,
|
|
35511
|
-
fields: [
|
|
35512
|
-
{
|
|
35513
|
-
token: 'request-title',
|
|
35514
|
-
name: 'title',
|
|
35515
|
-
label: this.props.titleLabel ?? this.t('title'),
|
|
35516
|
-
hint: '',
|
|
35517
|
-
placeholder: this.props.titlePlaceholder ?? this.t('titlePlaceholder'),
|
|
35518
|
-
type: InputType.TEXT,
|
|
35519
|
-
order: 1,
|
|
35520
|
-
validators: [Validators.required, Validators.minLength(3), Validators.maxLength(300)],
|
|
35521
|
-
errors: {
|
|
35522
|
-
required: this.t('titleValidation'),
|
|
35523
|
-
minlength: this.t('titleValidation'),
|
|
35524
|
-
maxlength: this.t('titleValidation'),
|
|
35525
|
-
},
|
|
35526
|
-
state: ComponentStates.ENABLED,
|
|
35527
|
-
},
|
|
35528
|
-
{
|
|
35529
|
-
token: 'request-description',
|
|
35530
|
-
name: 'description',
|
|
35531
|
-
label: this.props.descriptionLabel ?? this.t('description'),
|
|
35532
|
-
hint: '',
|
|
35533
|
-
placeholder: this.props.descriptionPlaceholder ?? this.t('descriptionPlaceholder'),
|
|
35534
|
-
type: InputType.TEXTAREA,
|
|
35535
|
-
order: 2,
|
|
35536
|
-
validators: [Validators.maxLength(5000)],
|
|
35537
|
-
errors: { maxlength: this.t('descriptionValidation') },
|
|
35538
|
-
state: ComponentStates.ENABLED,
|
|
35539
|
-
},
|
|
35540
|
-
],
|
|
35541
|
-
},
|
|
35542
|
-
],
|
|
35558
|
+
sections: [{ name: '', order: 0, fields }],
|
|
35543
35559
|
actions: {
|
|
35544
35560
|
type: 'submit',
|
|
35545
35561
|
color: 'dark',
|
|
@@ -35555,8 +35571,6 @@ class RequestFormComponent {
|
|
|
35555
35571
|
async handleFormSubmit(submitted) {
|
|
35556
35572
|
if (this.isSubmitting())
|
|
35557
35573
|
return;
|
|
35558
|
-
if (this.currentAttachments.some(a => a.status === 'uploading'))
|
|
35559
|
-
return;
|
|
35560
35574
|
this.isSubmitting.set(true);
|
|
35561
35575
|
this.error.set(null);
|
|
35562
35576
|
this.isSuccess.set(false);
|
|
@@ -35565,7 +35579,7 @@ class RequestFormComponent {
|
|
|
35565
35579
|
try {
|
|
35566
35580
|
const title = submitted.fields['title'].trim();
|
|
35567
35581
|
const description = submitted.fields['description']?.trim() ?? '';
|
|
35568
|
-
const attachmentUrls =
|
|
35582
|
+
const attachmentUrls = submitted.fields['attachments'] ?? [];
|
|
35569
35583
|
const result = await firstValueFrom(this.requestService.createRequest({
|
|
35570
35584
|
type: this.props.type,
|
|
35571
35585
|
title,
|
|
@@ -35592,9 +35606,6 @@ class RequestFormComponent {
|
|
|
35592
35606
|
this.formProps.actions.state = ComponentStates.ENABLED;
|
|
35593
35607
|
}
|
|
35594
35608
|
}
|
|
35595
|
-
onAttachmentsChange(items) {
|
|
35596
|
-
this.currentAttachments = items;
|
|
35597
|
-
}
|
|
35598
35609
|
onCancelClick() {
|
|
35599
35610
|
this.onCancel.emit();
|
|
35600
35611
|
}
|
|
@@ -35605,10 +35616,6 @@ class RequestFormComponent {
|
|
|
35605
35616
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RequestFormComponent, isStandalone: true, selector: "val-request-form", inputs: { props: "props" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: `
|
|
35606
35617
|
<div class="request-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
|
|
35607
35618
|
<val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
|
|
35608
|
-
@if (props.showAttachments !== false) {
|
|
35609
|
-
<val-attachment-uploader [props]="{ maxFiles: 5 }" (attachmentsChange)="onAttachmentsChange($event)" />
|
|
35610
|
-
}
|
|
35611
|
-
|
|
35612
35619
|
@if (error()) {
|
|
35613
35620
|
<div class="request-alert error">
|
|
35614
35621
|
<ion-icon name="close-circle-outline" aria-hidden="true" />
|
|
@@ -35630,17 +35637,13 @@ class RequestFormComponent {
|
|
|
35630
35637
|
</ion-button>
|
|
35631
35638
|
}
|
|
35632
35639
|
</div>
|
|
35633
|
-
`, isInline: true, styles: [".request-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.request-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:1.25rem}}.cancel-button{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type:
|
|
35640
|
+
`, isInline: true, styles: [".request-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.request-alert{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-top:8px;&.error{background-color:var(--ion-color-danger-tint);color:var(--ion-color-danger-shade)}&.success{background-color:var(--ion-color-success-tint);color:var(--ion-color-success-shade)}ion-icon{font-size:1.25rem}}.cancel-button{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
|
|
35634
35641
|
}
|
|
35635
35642
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestFormComponent, decorators: [{
|
|
35636
35643
|
type: Component,
|
|
35637
|
-
args: [{ selector: 'val-request-form', standalone: true, imports: [CommonModule, FormComponent,
|
|
35644
|
+
args: [{ selector: 'val-request-form', standalone: true, imports: [CommonModule, FormComponent, IonButton, IonIcon], template: `
|
|
35638
35645
|
<div class="request-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
|
|
35639
35646
|
<val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
|
|
35640
|
-
@if (props.showAttachments !== false) {
|
|
35641
|
-
<val-attachment-uploader [props]="{ maxFiles: 5 }" (attachmentsChange)="onAttachmentsChange($event)" />
|
|
35642
|
-
}
|
|
35643
|
-
|
|
35644
35647
|
@if (error()) {
|
|
35645
35648
|
<div class="request-alert error">
|
|
35646
35649
|
<ion-icon name="close-circle-outline" aria-hidden="true" />
|