valtech-components 4.0.84 → 4.0.85

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.
@@ -8,7 +8,6 @@ import { ToastService } from '../../../services/toast.service';
8
8
  import { ValtechErrorService } from '../../../services/errors';
9
9
  import { ComponentStates, InputType } from '../../types';
10
10
  import { FormComponent } from '../../organisms/form/form.component';
11
- import { AttachmentUploaderComponent } from '../../organisms/attachment-uploader/attachment-uploader.component';
12
11
  import { DisplayComponent } from '../../atoms/display/display.component';
13
12
  import { TitleComponent } from '../../atoms/title/title.component';
14
13
  import * as i0 from "@angular/core";
@@ -26,6 +25,8 @@ const FEEDBACK_FORM_I18N = {
26
25
  descriptionHint: 'Capturamos automáticamente tu navegador, SO y URL actual.',
27
26
  descriptionValidation: 'La descripción debe tener entre 10 y 2000 caracteres',
28
27
  submit: 'Enviar',
28
+ attachmentsLabel: 'Archivos adjuntos (opcional)',
29
+ attachmentsHint: 'Imágenes (JPG/PNG/WebP) o PDF, máx 5 MB cada uno. Hasta 5 archivos.',
29
30
  feedbackSuccess: '¡Gracias por tu feedback!',
30
31
  feedbackError: 'No se pudo enviar el feedback. Inténtalo de nuevo.',
31
32
  },
@@ -41,6 +42,8 @@ const FEEDBACK_FORM_I18N = {
41
42
  descriptionHint: 'We automatically capture your browser, OS and current URL.',
42
43
  descriptionValidation: 'Description must be between 10 and 2000 characters',
43
44
  submit: 'Send',
45
+ attachmentsLabel: 'Attachments (optional)',
46
+ attachmentsHint: 'Images (JPG/PNG/WebP) or PDF, max 5 MB each. Up to 5 files.',
44
47
  feedbackSuccess: 'Thanks for your feedback!',
45
48
  feedbackError: 'Could not send feedback. Please try again.',
46
49
  },
@@ -57,8 +60,6 @@ export class FeedbackFormComponent {
57
60
  this.errors = inject(ValtechErrorService);
58
61
  this.typeOptions = DEFAULT_FEEDBACK_TYPE_OPTIONS;
59
62
  this.isSubmitting = signal(false);
60
- this.uploadFn = (file) => this.feedbackService.uploadAttachment(file);
61
- this.currentAttachments = [];
62
63
  this.i18n.registerDefaults('FeedbackForm', FEEDBACK_FORM_I18N);
63
64
  }
64
65
  ngOnInit() {
@@ -109,7 +110,8 @@ export class FeedbackFormComponent {
109
110
  maxlength: this.tt('titleValidation'),
110
111
  },
111
112
  state: ComponentStates.ENABLED,
112
- }, {
113
+ });
114
+ fields.push({
113
115
  token: 'feedback-description',
114
116
  name: 'description',
115
117
  label: this.props.descriptionLabel ?? this.tt('description'),
@@ -126,6 +128,21 @@ export class FeedbackFormComponent {
126
128
  },
127
129
  state: ComponentStates.ENABLED,
128
130
  });
131
+ if (this.props.showAttachments !== false) {
132
+ fields.push({
133
+ token: 'feedback-attachments',
134
+ name: 'attachments',
135
+ label: this.props.attachmentsLabel ?? this.tt('attachmentsLabel'),
136
+ hint: this.tt('attachmentsHint'),
137
+ placeholder: '',
138
+ type: InputType.ATTACHMENT,
139
+ order: 4,
140
+ validators: [],
141
+ errors: {},
142
+ state: ComponentStates.ENABLED,
143
+ uploadFn: (file) => this.feedbackService.uploadAttachment(file),
144
+ });
145
+ }
129
146
  return {
130
147
  name: '',
131
148
  sections: [{ name: '', order: 0, fields }],
@@ -143,8 +160,6 @@ export class FeedbackFormComponent {
143
160
  async handleFormSubmit(submitted) {
144
161
  if (this.isSubmitting())
145
162
  return;
146
- if (this.currentAttachments.some(a => a.status === 'uploading'))
147
- return;
148
163
  this.isSubmitting.set(true);
149
164
  this.formProps.state = ComponentStates.WORKING;
150
165
  this.formProps.actions.state = ComponentStates.WORKING;
@@ -152,7 +167,7 @@ export class FeedbackFormComponent {
152
167
  const type = submitted.fields['type'] ?? this.props.defaultType ?? 'feedback';
153
168
  const title = submitted.fields['title'];
154
169
  const description = submitted.fields['description'];
155
- const attachmentUrls = this.currentAttachments.filter(a => a.status === 'ready').map(a => a.url);
170
+ const attachmentUrls = submitted.fields['attachments'] ?? [];
156
171
  const response = await this.feedbackService.createAsync(type, title, description, attachmentUrls, this.props.contentRef);
157
172
  this.toast.show({
158
173
  message: this.props.successMessage ?? this.tt('feedbackSuccess'),
@@ -176,9 +191,6 @@ export class FeedbackFormComponent {
176
191
  this.formProps.actions.state = ComponentStates.ENABLED;
177
192
  }
178
193
  }
179
- onAttachmentsChange(items) {
180
- this.currentAttachments = items;
181
- }
182
194
  onCancelClick() {
183
195
  this.onCancel.emit();
184
196
  }
@@ -196,14 +208,7 @@ export class FeedbackFormComponent {
196
208
  />
197
209
  </div>
198
210
  }
199
- <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
200
- @if (props.showAttachments !== false) {
201
- <val-attachment-uploader
202
- [props]="{ maxFiles: 5, uploadFn: uploadFn }"
203
- (attachmentsChange)="onAttachmentsChange($event)"
204
- ></val-attachment-uploader>
205
- }
206
- </val-form>
211
+ <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)" />
207
212
 
208
213
  @if (props.cancelButtonText) {
209
214
  <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
@@ -211,11 +216,11 @@ export class FeedbackFormComponent {
211
216
  </ion-button>
212
217
  }
213
218
  </div>
214
- `, isInline: true, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-header{margin-bottom:8px}val-attachment-uploader{display:block;margin-top:16px;margin-bottom:8px}.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: AttachmentUploaderComponent, selector: "val-attachment-uploader", inputs: ["props"], outputs: ["attachmentsChange"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { 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"] }] }); }
219
+ `, isInline: true, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-header{margin-bottom:8px}.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: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { 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"] }] }); }
215
220
  }
216
221
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackFormComponent, decorators: [{
217
222
  type: Component,
218
- args: [{ selector: 'val-feedback-form', standalone: true, imports: [CommonModule, FormComponent, AttachmentUploaderComponent, DisplayComponent, TitleComponent, IonButton], template: `
223
+ args: [{ selector: 'val-feedback-form', standalone: true, imports: [CommonModule, FormComponent, DisplayComponent, TitleComponent, IonButton], template: `
219
224
  <div class="feedback-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
220
225
  @if (props.showTitle) {
221
226
  <div class="form-header">
@@ -225,14 +230,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
225
230
  />
226
231
  </div>
227
232
  }
228
- <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
229
- @if (props.showAttachments !== false) {
230
- <val-attachment-uploader
231
- [props]="{ maxFiles: 5, uploadFn: uploadFn }"
232
- (attachmentsChange)="onAttachmentsChange($event)"
233
- ></val-attachment-uploader>
234
- }
235
- </val-form>
233
+ <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)" />
236
234
 
237
235
  @if (props.cancelButtonText) {
238
236
  <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
@@ -240,7 +238,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
240
238
  </ion-button>
241
239
  }
242
240
  </div>
243
- `, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-header{margin-bottom:8px}val-attachment-uploader{display:block;margin-top:16px;margin-bottom:8px}.cancel-button{margin-top:8px}\n"] }]
241
+ `, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-header{margin-bottom:8px}.cancel-button{margin-top:8px}\n"] }]
244
242
  }], ctorParameters: () => [], propDecorators: { props: [{
245
243
  type: Input
246
244
  }], onSubmit: [{
@@ -250,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
250
248
  }], onError: [{
251
249
  type: Output
252
250
  }] } });
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2stZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vZmVlZGJhY2stZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXRELE9BQU8sRUFBRSxlQUFlLEVBQWdCLDZCQUE2QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUF3RCxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0csT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBRWhILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBR25FLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsRUFBRSxFQUFFO1FBQ0YsU0FBUyxFQUFFLGlCQUFpQjtRQUM1QixZQUFZ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Z3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQnV0dG9uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5cbmltcG9ydCB7IEZlZWRiYWNrU2VydmljZSwgRmVlZGJhY2tUeXBlLCBERUZBVUxUX0ZFRURCQUNLX1RZUEVfT1BUSU9OUyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZlZWRiYWNrJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbHRlY2hFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RhdGVzLCBGb3JtTWV0YWRhdGEsIEZvcm1TdWJtaXQsIElucHV0TWV0YWRhdGEsIElucHV0T3B0aW9uLCBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXR0YWNobWVudFVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXR0YWNobWVudEl0ZW0gfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvYXR0YWNobWVudC11cGxvYWRlci90eXBlcyc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGZWVkYmFja0Zvcm1NZXRhZGF0YSwgRmVlZGJhY2tTdWJtaXRFdmVudCB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBGRUVEQkFDS19GT1JNX0kxOE4gPSB7XG4gIGVzOiB7XG4gICAgZm9ybVRpdGxlOiAnRW52aWFyIGZlZWRiYWNrJyxcbiAgICBmb3JtU3VidGl0bGU6ICdDdcOpbnRhbm9zIHF1w6kgcGllbnNhcy4gQnVncywgc3VnZXJlbmNpYXMgeSBtZWpvcmFzLicsXG4gICAgZmVlZGJhY2tUeXBlOiAnVGlwbycsXG4gICAgdGl0bGU6ICdUw610dWxvJyxcbiAgICB0aXRsZVBsYWNlaG9sZGVyOiAnUmVzdW1lbiBjb3J0byAoNeKAkzEyMCBjYXJhY3RlcmVzKScsXG4gICAgdGl0bGVWYWxpZGF0aW9uOiAnRWwgdMOtdHVsbyBkZWJlIHRlbmVyIGVudHJlIDUgeSAxMjAgY2FyYWN0ZXJlcycsXG4gICAgZGVzY3JpcHRpb246ICdEZXNjcmlwY2nDs24nLFxuICAgIGRlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdEZXNjcmliZSBlbCBwcm9ibGVtYSBvIHN1Z2VyZW5jaWEgZW4gZGV0YWxsZS4uLicsXG4gICAgZGVzY3JpcHRpb25IaW50OiAnQ2FwdHVyYW1vcyBhdXRvbcOhdGljYW1lbnRlIHR1IG5hdmVnYWRvciwgU08geSBVUkwgYWN0dWFsLicsXG4gICAgZGVzY3JpcHRpb25WYWxpZGF0aW9uOiAnTGEgZGVzY3JpcGNpw7NuIGRlYmUgdGVuZXIgZW50cmUgMTAgeSAyMDAwIGNhcmFjdGVyZXMnLFxuICAgIHN1Ym1pdDogJ0VudmlhcicsXG4gICAgZmVlZGJhY2tTdWNjZXNzOiAnwqFHcmFjaWFzIHBvciB0dSBmZWVkYmFjayEnLFxuICAgIGZlZWRiYWNrRXJyb3I6ICdObyBzZSBwdWRvIGVudmlhciBlbCBmZWVkYmFjay4gSW50w6ludGFsbyBkZSBudWV2by4nLFxuICB9LFxuICBlbjoge1xuICAgIGZvcm1UaXRsZTogJ1NlbmQgZmVlZGJhY2snLFxuICAgIGZvcm1TdWJ0aXRsZTogJ1RlbGwgdXMgd2hhdCB5b3UgdGhpbmsuIEJ1Z3MsIHN1Z2dlc3Rpb25zIGFuZCBpbXByb3ZlbWVudHMuJyxcbiAgICBmZWVkYmFja1R5cGU6ICdUeXBlJyxcbiAgICB0aXRsZTogJ1RpdGxlJyxcbiAgICB0aXRsZVBsYWNlaG9sZGVyOiAnU2hvcnQgc3VtbWFyeSAoNeKAkzEyMCBjaGFycyknLFxuICAgIHRpdGxlVmFsaWRhdGlvbjogJ1RpdGxlIG11c3QgYmUgYmV0d2VlbiA1IGFuZCAxMjAgY2hhcmFjdGVycycsXG4gICAgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbicsXG4gICAgZGVzY3JpcHRpb25QbGFjZWhvbGRlcjogJ0Rlc2NyaWJlIHRoZSBwcm9ibGVtIG9yIHN1Z2dlc3Rpb24gaW4gZGV0YWlsLi4uJyxcbiAgICBkZXNjcmlwdGlvbkhpbnQ6ICdXZSBhdXRvbWF0aWNhbGx5IGNhcHR1cmUgeW91ciBicm93c2VyLCBPUyBhbmQgY3VycmVudCBVUkwuJyxcbiAgICBkZXNjcmlwdGlvblZhbGlkYXRpb246ICdEZXNjcmlwdGlvbiBtdXN0IGJlIGJldHdlZW4gMTAgYW5kIDIwMDAgY2hhcmFjdGVycycsXG4gICAgc3VibWl0OiAnU2VuZCcsXG4gICAgZmVlZGJhY2tTdWNjZXNzOiAnVGhhbmtzIGZvciB5b3VyIGZlZWRiYWNrIScsXG4gICAgZmVlZGJhY2tFcnJvcjogJ0NvdWxkIG5vdCBzZW5kIGZlZWRiYWNrLiBQbGVhc2UgdHJ5IGFnYWluLicsXG4gIH0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZmVlZGJhY2stZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1Db21wb25lbnQsIEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCwgRGlzcGxheUNvbXBvbmVudCwgVGl0bGVDb21wb25lbnQsIElvbkJ1dHRvbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImZlZWRiYWNrLWZvcm0td3JhcHBlclwiIFtjbGFzcy5jb21wYWN0XT1cInByb3BzLmNvbXBhY3RcIiBbbmdDbGFzc109XCJwcm9wcy5jc3NDbGFzc1wiPlxuICAgICAgQGlmIChwcm9wcy5zaG93VGl0bGUpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taGVhZGVyXCI+XG4gICAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ7IHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGNvbnRlbnQ6IHByb3BzLnBhZ2VUaXRsZSB8fCB0dCgnZm9ybVRpdGxlJykgfVwiIC8+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cInsgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICdkYXJrJywgYm9sZDogZmFsc2UsIGNvbnRlbnQ6IHByb3BzLnBhZ2VTdWJ0aXRsZSB8fCB0dCgnZm9ybVN1YnRpdGxlJykgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cImZvcm1Qcm9wc1wiIChvblN1Ym1pdCk9XCJoYW5kbGVGb3JtU3VibWl0KCRldmVudClcIj5cbiAgICAgICAgQGlmIChwcm9wcy5zaG93QXR0YWNobWVudHMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgPHZhbC1hdHRhY2htZW50LXVwbG9hZGVyXG4gICAgICAgICAgICBbcHJvcHNdPVwieyBtYXhGaWxlczogNSwgdXBsb2FkRm46IHVwbG9hZEZuIH1cIlxuICAgICAgICAgICAgKGF0dGFjaG1lbnRzQ2hhbmdlKT1cIm9uQXR0YWNobWVudHNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvdmFsLWF0dGFjaG1lbnQtdXBsb2FkZXI+XG4gICAgICAgIH1cbiAgICAgIDwvdmFsLWZvcm0+XG5cbiAgICAgIEBpZiAocHJvcHMuY2FuY2VsQnV0dG9uVGV4dCkge1xuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwibWVkaXVtXCIgZXhwYW5kPVwiYmxvY2tcIiBjbGFzcz1cImNhbmNlbC1idXR0b25cIiAoY2xpY2spPVwib25DYW5jZWxDbGljaygpXCI+XG4gICAgICAgICAge3sgcHJvcHMuY2FuY2VsQnV0dG9uVGV4dCB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5mZWVkYmFjay1mb3JtLXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDhweDtcblxuICAgICAgICAmLmNvbXBhY3Qge1xuICAgICAgICAgIGdhcDogNHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5mb3JtLWhlYWRlciB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgIH1cblxuICAgICAgdmFsLWF0dGFjaG1lbnQtdXBsb2FkZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgfVxuXG4gICAgICAuY2FuY2VsLWJ1dHRvbiB7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGZWVkYmFja0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwcm9wczogRmVlZGJhY2tGb3JtTWV0YWRhdGEgPSB7fTtcblxuICBAT3V0cHV0KCkgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEZlZWRiYWNrU3VibWl0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd24+KCk7XG5cbiAgcHJvdGVjdGVkIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGZlZWRiYWNrU2VydmljZSA9IGluamVjdChGZWVkYmFja1NlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuXG4gIGZvcm1Qcm9wcyE6IEZvcm1NZXRhZGF0YTtcbiAgdHlwZU9wdGlvbnMgPSBERUZBVUxUX0ZFRURCQUNLX1RZUEVfT1BUSU9OUztcblxuICBpc1N1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHJlYWRvbmx5IHVwbG9hZEZuID0gKGZpbGU6IEZpbGUpID0+IHRoaXMuZmVlZGJhY2tTZXJ2aWNlLnVwbG9hZEF0dGFjaG1lbnQoZmlsZSk7XG5cbiAgcHJpdmF0ZSBjdXJyZW50QXR0YWNobWVudHM6IEF0dGFjaG1lbnRJdGVtW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnRmVlZGJhY2tGb3JtJywgRkVFREJBQ0tfRk9STV9JMThOKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLmVuYWJsZWRUeXBlcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnR5cGVPcHRpb25zID0gdGhpcy50eXBlT3B0aW9ucy5maWx0ZXIob3B0ID0+IHRoaXMucHJvcHMuZW5hYmxlZFR5cGVzIS5pbmNsdWRlcyhvcHQudmFsdWUpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMudHlwZU9wdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy50eXBlT3B0aW9ucyA9IHRoaXMucHJvcHMudHlwZU9wdGlvbnM7XG4gICAgfVxuICAgIHRoaXMuZm9ybVByb3BzID0gdGhpcy5idWlsZEZvcm1Qcm9wcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm1Qcm9wcygpOiBGb3JtTWV0YWRhdGEge1xuICAgIGNvbnN0IGZpZWxkczogSW5wdXRNZXRhZGF0YVtdID0gW107XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zaG93VHlwZVNlbGVjdG9yICE9PSBmYWxzZSkge1xuICAgICAgY29uc3Qgb3B0aW9uczogSW5wdXRPcHRpb25bXSA9IHRoaXMudHlwZU9wdGlvbnMubWFwKChvcHQsIGkpID0+ICh7XG4gICAgICAgIGlkOiBvcHQudmFsdWUsXG4gICAgICAgIG5hbWU6IG9wdC5sYWJlbCxcbiAgICAgICAgb3JkZXI6IGksXG4gICAgICAgIHNlbGVjdGVkOiBvcHQudmFsdWUgPT09ICh0aGlzLnByb3BzLmRlZmF1bHRUeXBlID8/ICdmZWVkYmFjaycpLFxuICAgICAgfSkpO1xuICAgICAgZmllbGRzLnB1c2goe1xuICAgICAgICB0b2tlbjogJ2ZlZWRiYWNrLXR5cGUnLFxuICAgICAgICBuYW1lOiAndHlwZScsXG4gICAgICAgIGxhYmVsOiB0aGlzLnR0KCdmZWVkYmFja1R5cGUnKSxcbiAgICAgICAgaGludDogJycsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlLlNFTEVDVCxcbiAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMuZGVmYXVsdFR5cGUgPz8gJ2ZlZWRiYWNrJyxcbiAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmllbGRzLnB1c2goXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stdGl0bGUnLFxuICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy50aXRsZUxhYmVsID8/IHRoaXMudHQoJ3RpdGxlJyksXG4gICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5wcm9wcy50aXRsZVBsYWNlaG9sZGVyID8/IHRoaXMudHQoJ3RpdGxlUGxhY2Vob2xkZXInKSxcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlLlRFWFQsXG4gICAgICAgIG9yZGVyOiAyLFxuICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNSksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEyMCldLFxuICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICByZXF1aXJlZDogdGhpcy50dCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgICAgbWlubGVuZ3RoOiB0aGlzLnR0KCd0aXRsZVZhbGlkYXRpb24nKSxcbiAgICAgICAgICBtYXhsZW5ndGg6IHRoaXMudHQoJ3RpdGxlVmFsaWRhdGlvbicpLFxuICAgICAgICB9LFxuICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0b2tlbjogJ2ZlZWRiYWNrLWRlc2NyaXB0aW9uJyxcbiAgICAgICAgbmFtZTogJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgbGFiZWw6IHRoaXMucHJvcHMuZGVzY3JpcHRpb25MYWJlbCA/PyB0aGlzLnR0KCdkZXNjcmlwdGlvbicpLFxuICAgICAgICBoaW50OiB0aGlzLnR0KCdkZXNjcmlwdGlvbkhpbnQnKSxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlciA/PyB0aGlzLnR0KCdkZXNjcmlwdGlvblBsYWNlaG9sZGVyJyksXG4gICAgICAgIHR5cGU6IElucHV0VHlwZS5URVhUQVJFQSxcbiAgICAgICAgb3JkZXI6IDMsXG4gICAgICAgIHJhbmdlOiB7IG1pbjogMTAsIG1heDogMjAwMCB9LFxuICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTApLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyMDAwKV0sXG4gICAgICAgIGVycm9yczoge1xuICAgICAgICAgIHJlcXVpcmVkOiB0aGlzLnR0KCdkZXNjcmlwdGlvblZhbGlkYXRpb24nKSxcbiAgICAgICAgICBtaW5sZW5ndGg6IHRoaXMudHQoJ2Rlc2NyaXB0aW9uVmFsaWRhdGlvbicpLFxuICAgICAgICAgIG1heGxlbmd0aDogdGhpcy50dCgnZGVzY3JpcHRpb25WYWxpZGF0aW9uJyksXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgc2VjdGlvbnM6IFt7IG5hbWU6ICcnLCBvcmRlcjogMCwgZmllbGRzIH1dLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgIHRleHQ6IHRoaXMucHJvcHMuc3VibWl0QnV0dG9uVGV4dCA/PyB0aGlzLnR0KCdzdWJtaXQnKSxcbiAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICBleHBhbmQ6ICdibG9jaycsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVGb3JtU3VibWl0KHN1Ym1pdHRlZDogRm9ybVN1Ym1pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzU3VibWl0dGluZygpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY3VycmVudEF0dGFjaG1lbnRzLnNvbWUoYSA9PiBhLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycpKSByZXR1cm47XG5cbiAgICB0aGlzLmlzU3VibWl0dGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5mb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuV09SS0lORztcbiAgICB0aGlzLmZvcm1Qcm9wcy5hY3Rpb25zLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHlwZSA9IChzdWJtaXR0ZWQuZmllbGRzWyd0eXBlJ10gYXMgRmVlZGJhY2tUeXBlKSA/PyB0aGlzLnByb3BzLmRlZmF1bHRUeXBlID8/ICdmZWVkYmFjayc7XG4gICAgICBjb25zdCB0aXRsZSA9IHN1Ym1pdHRlZC5maWVsZHNbJ3RpdGxlJ10gYXMgc3RyaW5nO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBzdWJtaXR0ZWQuZmllbGRzWydkZXNjcmlwdGlvbiddIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRVcmxzID0gdGhpcy5jdXJyZW50QXR0YWNobWVudHMuZmlsdGVyKGEgPT4gYS5zdGF0dXMgPT09ICdyZWFkeScpLm1hcChhID0+IGEudXJsISk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZWVkYmFja1NlcnZpY2UuY3JlYXRlQXN5bmMoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgYXR0YWNobWVudFVybHMsXG4gICAgICAgIHRoaXMucHJvcHMuY29udGVudFJlZlxuICAgICAgKTtcblxuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9wcy5zdWNjZXNzTWVzc2FnZSA/PyB0aGlzLnR0KCdmZWVkYmFja1N1Y2Nlc3MnKSxcbiAgICAgICAgZHVyYXRpb246IDI1MDAsXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm9uU3VibWl0LmVtaXQoeyByZXNwb25zZSwgdHlwZSwgdGl0bGUsIGF0dGFjaG1lbnRVcmxzIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnZmVlZGJhY2stZm9ybS5zdWJtaXQnLFxuICAgICAgICBmYWxsYmFja0tleTogJ2ZlZWRiYWNrRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiAnRmVlZGJhY2tGb3JtJyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vbkVycm9yLmVtaXQoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuZm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQ7XG4gICAgICB0aGlzLmZvcm1Qcm9wcy5hY3Rpb25zLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQ7XG4gICAgfVxuICB9XG5cbiAgb25BdHRhY2htZW50c0NoYW5nZShpdGVtczogQXR0YWNobWVudEl0ZW1bXSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEF0dGFjaG1lbnRzID0gaXRlbXM7XG4gIH1cblxuICBvbkNhbmNlbENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgdHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdGZWVkYmFja0Zvcm0nKTtcbiAgfVxufVxuIl19
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2stZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vZmVlZGJhY2stZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXRELE9BQU8sRUFBRSxlQUFlLEVBQWdCLDZCQUE2QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUF3RCxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0csT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBR25FLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsRUFBRSxFQUFFO1FBQ0YsU0FBUyxFQUFFLGlCQUFpQjtRQUM1QixZQUFZLEVBQUUscURBQXFEO1FBQ25FLFlBQVksRUFBRSxNQUFNO1FBQ3BCLEtBQUss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Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCVDt3REF3QlEsS0FBSztzQkFBYixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQnV0dG9uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5cbmltcG9ydCB7IEZlZWRiYWNrU2VydmljZSwgRmVlZGJhY2tUeXBlLCBERUZBVUxUX0ZFRURCQUNLX1RZUEVfT1BUSU9OUyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZlZWRiYWNrJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbHRlY2hFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RhdGVzLCBGb3JtTWV0YWRhdGEsIEZvcm1TdWJtaXQsIElucHV0TWV0YWRhdGEsIElucHV0T3B0aW9uLCBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2Rpc3BsYXkvZGlzcGxheS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90aXRsZS90aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmVlZGJhY2tGb3JtTWV0YWRhdGEsIEZlZWRiYWNrU3VibWl0RXZlbnQgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgRkVFREJBQ0tfRk9STV9JMThOID0ge1xuICBlczoge1xuICAgIGZvcm1UaXRsZTogJ0VudmlhciBmZWVkYmFjaycsXG4gICAgZm9ybVN1YnRpdGxlOiAnQ3XDqW50YW5vcyBxdcOpIHBpZW5zYXMuIEJ1Z3MsIHN1Z2VyZW5jaWFzIHkgbWVqb3Jhcy4nLFxuICAgIGZlZWRiYWNrVHlwZTogJ1RpcG8nLFxuICAgIHRpdGxlOiAnVMOtdHVsbycsXG4gICAgdGl0bGVQbGFjZWhvbGRlcjogJ1Jlc3VtZW4gY29ydG8gKDXigJMxMjAgY2FyYWN0ZXJlcyknLFxuICAgIHRpdGxlVmFsaWRhdGlvbjogJ0VsIHTDrXR1bG8gZGViZSB0ZW5lciBlbnRyZSA1IHkgMTIwIGNhcmFjdGVyZXMnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGVzY3JpcGNpw7NuJyxcbiAgICBkZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnRGVzY3JpYmUgZWwgcHJvYmxlbWEgbyBzdWdlcmVuY2lhIGVuIGRldGFsbGUuLi4nLFxuICAgIGRlc2NyaXB0aW9uSGludDogJ0NhcHR1cmFtb3MgYXV0b23DoXRpY2FtZW50ZSB0dSBuYXZlZ2Fkb3IsIFNPIHkgVVJMIGFjdHVhbC4nLFxuICAgIGRlc2NyaXB0aW9uVmFsaWRhdGlvbjogJ0xhIGRlc2NyaXBjacOzbiBkZWJlIHRlbmVyIGVudHJlIDEwIHkgMjAwMCBjYXJhY3RlcmVzJyxcbiAgICBzdWJtaXQ6ICdFbnZpYXInLFxuICAgIGF0dGFjaG1lbnRzTGFiZWw6ICdBcmNoaXZvcyBhZGp1bnRvcyAob3BjaW9uYWwpJyxcbiAgICBhdHRhY2htZW50c0hpbnQ6ICdJbcOhZ2VuZXMgKEpQRy9QTkcvV2ViUCkgbyBQREYsIG3DoXggNSBNQiBjYWRhIHVuby4gSGFzdGEgNSBhcmNoaXZvcy4nLFxuICAgIGZlZWRiYWNrU3VjY2VzczogJ8KhR3JhY2lhcyBwb3IgdHUgZmVlZGJhY2shJyxcbiAgICBmZWVkYmFja0Vycm9yOiAnTm8gc2UgcHVkbyBlbnZpYXIgZWwgZmVlZGJhY2suIEludMOpbnRhbG8gZGUgbnVldm8uJyxcbiAgfSxcbiAgZW46IHtcbiAgICBmb3JtVGl0bGU6ICdTZW5kIGZlZWRiYWNrJyxcbiAgICBmb3JtU3VidGl0bGU6ICdUZWxsIHVzIHdoYXQgeW91IHRoaW5rLiBCdWdzLCBzdWdnZXN0aW9ucyBhbmQgaW1wcm92ZW1lbnRzLicsXG4gICAgZmVlZGJhY2tUeXBlOiAnVHlwZScsXG4gICAgdGl0bGU6ICdUaXRsZScsXG4gICAgdGl0bGVQbGFjZWhvbGRlcjogJ1Nob3J0IHN1bW1hcnkgKDXigJMxMjAgY2hhcnMpJyxcbiAgICB0aXRsZVZhbGlkYXRpb246ICdUaXRsZSBtdXN0IGJlIGJldHdlZW4gNSBhbmQgMTIwIGNoYXJhY3RlcnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuICAgIGRlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdEZXNjcmliZSB0aGUgcHJvYmxlbSBvciBzdWdnZXN0aW9uIGluIGRldGFpbC4uLicsXG4gICAgZGVzY3JpcHRpb25IaW50OiAnV2UgYXV0b21hdGljYWxseSBjYXB0dXJlIHlvdXIgYnJvd3NlciwgT1MgYW5kIGN1cnJlbnQgVVJMLicsXG4gICAgZGVzY3JpcHRpb25WYWxpZGF0aW9uOiAnRGVzY3JpcHRpb24gbXVzdCBiZSBiZXR3ZWVuIDEwIGFuZCAyMDAwIGNoYXJhY3RlcnMnLFxuICAgIHN1Ym1pdDogJ1NlbmQnLFxuICAgIGF0dGFjaG1lbnRzTGFiZWw6ICdBdHRhY2htZW50cyAob3B0aW9uYWwpJyxcbiAgICBhdHRhY2htZW50c0hpbnQ6ICdJbWFnZXMgKEpQRy9QTkcvV2ViUCkgb3IgUERGLCBtYXggNSBNQiBlYWNoLiBVcCB0byA1IGZpbGVzLicsXG4gICAgZmVlZGJhY2tTdWNjZXNzOiAnVGhhbmtzIGZvciB5b3VyIGZlZWRiYWNrIScsXG4gICAgZmVlZGJhY2tFcnJvcjogJ0NvdWxkIG5vdCBzZW5kIGZlZWRiYWNrLiBQbGVhc2UgdHJ5IGFnYWluLicsXG4gIH0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZmVlZGJhY2stZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1Db21wb25lbnQsIERpc3BsYXlDb21wb25lbnQsIFRpdGxlQ29tcG9uZW50LCBJb25CdXR0b25dLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJmZWVkYmFjay1mb3JtLXdyYXBwZXJcIiBbY2xhc3MuY29tcGFjdF09XCJwcm9wcy5jb21wYWN0XCIgW25nQ2xhc3NdPVwicHJvcHMuY3NzQ2xhc3NcIj5cbiAgICAgIEBpZiAocHJvcHMuc2hvd1RpdGxlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhlYWRlclwiPlxuICAgICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBjb250ZW50OiBwcm9wcy5wYWdlVGl0bGUgfHwgdHQoJ2Zvcm1UaXRsZScpIH1cIiAvPlxuICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgIFtwcm9wc109XCJ7IHNpemU6ICdsYXJnZScsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IGZhbHNlLCBjb250ZW50OiBwcm9wcy5wYWdlU3VidGl0bGUgfHwgdHQoJ2Zvcm1TdWJ0aXRsZScpIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJmb3JtUHJvcHNcIiAob25TdWJtaXQpPVwiaGFuZGxlRm9ybVN1Ym1pdCgkZXZlbnQpXCIgLz5cblxuICAgICAgQGlmIChwcm9wcy5jYW5jZWxCdXR0b25UZXh0KSB7XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJvdXRsaW5lXCIgY29sb3I9XCJtZWRpdW1cIiBleHBhbmQ9XCJibG9ja1wiIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbENsaWNrKClcIj5cbiAgICAgICAgICB7eyBwcm9wcy5jYW5jZWxCdXR0b25UZXh0IH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLmZlZWRiYWNrLWZvcm0td3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuXG4gICAgICAgICYuY29tcGFjdCB7XG4gICAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmZvcm0taGVhZGVyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgfVxuXG4gICAgICAuY2FuY2VsLWJ1dHRvbiB7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGZWVkYmFja0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwcm9wczogRmVlZGJhY2tGb3JtTWV0YWRhdGEgPSB7fTtcblxuICBAT3V0cHV0KCkgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEZlZWRiYWNrU3VibWl0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd24+KCk7XG5cbiAgcHJvdGVjdGVkIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGZlZWRiYWNrU2VydmljZSA9IGluamVjdChGZWVkYmFja1NlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuXG4gIGZvcm1Qcm9wcyE6IEZvcm1NZXRhZGF0YTtcbiAgdHlwZU9wdGlvbnMgPSBERUZBVUxUX0ZFRURCQUNLX1RZUEVfT1BUSU9OUztcblxuICBpc1N1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKCdGZWVkYmFja0Zvcm0nLCBGRUVEQkFDS19GT1JNX0kxOE4pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlZFR5cGVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudHlwZU9wdGlvbnMgPSB0aGlzLnR5cGVPcHRpb25zLmZpbHRlcihvcHQgPT4gdGhpcy5wcm9wcy5lbmFibGVkVHlwZXMhLmluY2x1ZGVzKG9wdC52YWx1ZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy50eXBlT3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnR5cGVPcHRpb25zID0gdGhpcy5wcm9wcy50eXBlT3B0aW9ucztcbiAgICB9XG4gICAgdGhpcy5mb3JtUHJvcHMgPSB0aGlzLmJ1aWxkRm9ybVByb3BzKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybVByb3BzKCk6IEZvcm1NZXRhZGF0YSB7XG4gICAgY29uc3QgZmllbGRzOiBJbnB1dE1ldGFkYXRhW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnByb3BzLnNob3dUeXBlU2VsZWN0b3IgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBvcHRpb25zOiBJbnB1dE9wdGlvbltdID0gdGhpcy50eXBlT3B0aW9ucy5tYXAoKG9wdCwgaSkgPT4gKHtcbiAgICAgICAgaWQ6IG9wdC52YWx1ZSxcbiAgICAgICAgbmFtZTogb3B0LmxhYmVsLFxuICAgICAgICBvcmRlcjogaSxcbiAgICAgICAgc2VsZWN0ZWQ6IG9wdC52YWx1ZSA9PT0gKHRoaXMucHJvcHMuZGVmYXVsdFR5cGUgPz8gJ2ZlZWRiYWNrJyksXG4gICAgICB9KSk7XG4gICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stdHlwZScsXG4gICAgICAgIG5hbWU6ICd0eXBlJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHQoJ2ZlZWRiYWNrVHlwZScpLFxuICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICB0eXBlOiBJbnB1dFR5cGUuU0VMRUNULFxuICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB2YWx1ZTogdGhpcy5wcm9wcy5kZWZhdWx0VHlwZSA/PyAnZmVlZGJhY2snLFxuICAgICAgICBlcnJvcnM6IHt9LFxuICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmaWVsZHMucHVzaCh7XG4gICAgICB0b2tlbjogJ2ZlZWRiYWNrLXRpdGxlJyxcbiAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICBsYWJlbDogdGhpcy5wcm9wcy50aXRsZUxhYmVsID8/IHRoaXMudHQoJ3RpdGxlJyksXG4gICAgICBoaW50OiAnJyxcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLnRpdGxlUGxhY2Vob2xkZXIgPz8gdGhpcy50dCgndGl0bGVQbGFjZWhvbGRlcicpLFxuICAgICAgdHlwZTogSW5wdXRUeXBlLlRFWFQsXG4gICAgICBvcmRlcjogMixcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTIwKV0sXG4gICAgICBlcnJvcnM6IHtcbiAgICAgICAgcmVxdWlyZWQ6IHRoaXMudHQoJ3RpdGxlVmFsaWRhdGlvbicpLFxuICAgICAgICBtaW5sZW5ndGg6IHRoaXMudHQoJ3RpdGxlVmFsaWRhdGlvbicpLFxuICAgICAgICBtYXhsZW5ndGg6IHRoaXMudHQoJ3RpdGxlVmFsaWRhdGlvbicpLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9KTtcblxuICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgIHRva2VuOiAnZmVlZGJhY2stZGVzY3JpcHRpb24nLFxuICAgICAgbmFtZTogJ2Rlc2NyaXB0aW9uJyxcbiAgICAgIGxhYmVsOiB0aGlzLnByb3BzLmRlc2NyaXB0aW9uTGFiZWwgPz8gdGhpcy50dCgnZGVzY3JpcHRpb24nKSxcbiAgICAgIGhpbnQ6IHRoaXMudHQoJ2Rlc2NyaXB0aW9uSGludCcpLFxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlciA/PyB0aGlzLnR0KCdkZXNjcmlwdGlvblBsYWNlaG9sZGVyJyksXG4gICAgICB0eXBlOiBJbnB1dFR5cGUuVEVYVEFSRUEsXG4gICAgICBvcmRlcjogMyxcbiAgICAgIHJhbmdlOiB7IG1pbjogMTAsIG1heDogMjAwMCB9LFxuICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjAwMCldLFxuICAgICAgZXJyb3JzOiB7XG4gICAgICAgIHJlcXVpcmVkOiB0aGlzLnR0KCdkZXNjcmlwdGlvblZhbGlkYXRpb24nKSxcbiAgICAgICAgbWlubGVuZ3RoOiB0aGlzLnR0KCdkZXNjcmlwdGlvblZhbGlkYXRpb24nKSxcbiAgICAgICAgbWF4bGVuZ3RoOiB0aGlzLnR0KCdkZXNjcmlwdGlvblZhbGlkYXRpb24nKSxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zaG93QXR0YWNobWVudHMgIT09IGZhbHNlKSB7XG4gICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stYXR0YWNobWVudHMnLFxuICAgICAgICBuYW1lOiAnYXR0YWNobWVudHMnLFxuICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy5hdHRhY2htZW50c0xhYmVsID8/IHRoaXMudHQoJ2F0dGFjaG1lbnRzTGFiZWwnKSxcbiAgICAgICAgaGludDogdGhpcy50dCgnYXR0YWNobWVudHNIaW50JyksXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlLkFUVEFDSE1FTlQsXG4gICAgICAgIG9yZGVyOiA0LFxuICAgICAgICB2YWxpZGF0b3JzOiBbXSxcbiAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICB1cGxvYWRGbjogKGZpbGU6IEZpbGUpID0+IHRoaXMuZmVlZGJhY2tTZXJ2aWNlLnVwbG9hZEF0dGFjaG1lbnQoZmlsZSksXG4gICAgICB9IGFzIElucHV0TWV0YWRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnJyxcbiAgICAgIHNlY3Rpb25zOiBbeyBuYW1lOiAnJywgb3JkZXI6IDAsIGZpZWxkcyB9XSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgICB0ZXh0OiB0aGlzLnByb3BzLnN1Ym1pdEJ1dHRvblRleHQgPz8gdGhpcy50dCgnc3VibWl0JyksXG4gICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgZXhwYW5kOiAnYmxvY2snLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlRm9ybVN1Ym1pdChzdWJtaXR0ZWQ6IEZvcm1TdWJtaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcoKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuZm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG4gICAgdGhpcy5mb3JtUHJvcHMuYWN0aW9ucy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR5cGUgPSAoc3VibWl0dGVkLmZpZWxkc1sndHlwZSddIGFzIEZlZWRiYWNrVHlwZSkgPz8gdGhpcy5wcm9wcy5kZWZhdWx0VHlwZSA/PyAnZmVlZGJhY2snO1xuICAgICAgY29uc3QgdGl0bGUgPSBzdWJtaXR0ZWQuZmllbGRzWyd0aXRsZSddIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gc3VibWl0dGVkLmZpZWxkc1snZGVzY3JpcHRpb24nXSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBhdHRhY2htZW50VXJscyA9IChzdWJtaXR0ZWQuZmllbGRzWydhdHRhY2htZW50cyddIGFzIHN0cmluZ1tdKSA/PyBbXTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZlZWRiYWNrU2VydmljZS5jcmVhdGVBc3luYyhcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBhdHRhY2htZW50VXJscyxcbiAgICAgICAgdGhpcy5wcm9wcy5jb250ZW50UmVmXG4gICAgICApO1xuXG4gICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICBtZXNzYWdlOiB0aGlzLnByb3BzLnN1Y2Nlc3NNZXNzYWdlID8/IHRoaXMudHQoJ2ZlZWRiYWNrU3VjY2VzcycpLFxuICAgICAgICBkdXJhdGlvbjogMjUwMCxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMub25TdWJtaXQuZW1pdCh7IHJlc3BvbnNlLCB0eXBlLCB0aXRsZSwgYXR0YWNobWVudFVybHMgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdmZWVkYmFjay1mb3JtLnN1Ym1pdCcsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAnZmVlZGJhY2tFcnJvcicsXG4gICAgICAgIGkxOG5OYW1lc3BhY2U6ICdGZWVkYmFja0Zvcm0nLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm9uRXJyb3IuZW1pdChlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzU3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5mb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgIHRoaXMuZm9ybVByb3BzLmFjdGlvbnMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgdHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdGZWVkYmFja0Zvcm0nKTtcbiAgfVxufVxuIl19
@@ -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.84';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC44NCc7XG4iXX0=
5
+ export const VERSION = '4.0.85';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC44NSc7XG4iXX0=
@@ -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.84';
59
+ const VERSION = '4.0.85';
60
60
 
61
61
  // Control de estado de refresco (singleton a nivel de módulo)
62
62
  let isRefreshing = false;
@@ -64206,6 +64206,8 @@ const FEEDBACK_FORM_I18N = {
64206
64206
  descriptionHint: 'Capturamos automáticamente tu navegador, SO y URL actual.',
64207
64207
  descriptionValidation: 'La descripción debe tener entre 10 y 2000 caracteres',
64208
64208
  submit: 'Enviar',
64209
+ attachmentsLabel: 'Archivos adjuntos (opcional)',
64210
+ attachmentsHint: 'Imágenes (JPG/PNG/WebP) o PDF, máx 5 MB cada uno. Hasta 5 archivos.',
64209
64211
  feedbackSuccess: '¡Gracias por tu feedback!',
64210
64212
  feedbackError: 'No se pudo enviar el feedback. Inténtalo de nuevo.',
64211
64213
  },
@@ -64221,6 +64223,8 @@ const FEEDBACK_FORM_I18N = {
64221
64223
  descriptionHint: 'We automatically capture your browser, OS and current URL.',
64222
64224
  descriptionValidation: 'Description must be between 10 and 2000 characters',
64223
64225
  submit: 'Send',
64226
+ attachmentsLabel: 'Attachments (optional)',
64227
+ attachmentsHint: 'Images (JPG/PNG/WebP) or PDF, max 5 MB each. Up to 5 files.',
64224
64228
  feedbackSuccess: 'Thanks for your feedback!',
64225
64229
  feedbackError: 'Could not send feedback. Please try again.',
64226
64230
  },
@@ -64237,8 +64241,6 @@ class FeedbackFormComponent {
64237
64241
  this.errors = inject(ValtechErrorService);
64238
64242
  this.typeOptions = DEFAULT_FEEDBACK_TYPE_OPTIONS;
64239
64243
  this.isSubmitting = signal(false);
64240
- this.uploadFn = (file) => this.feedbackService.uploadAttachment(file);
64241
- this.currentAttachments = [];
64242
64244
  this.i18n.registerDefaults('FeedbackForm', FEEDBACK_FORM_I18N);
64243
64245
  }
64244
64246
  ngOnInit() {
@@ -64289,7 +64291,8 @@ class FeedbackFormComponent {
64289
64291
  maxlength: this.tt('titleValidation'),
64290
64292
  },
64291
64293
  state: ComponentStates.ENABLED,
64292
- }, {
64294
+ });
64295
+ fields.push({
64293
64296
  token: 'feedback-description',
64294
64297
  name: 'description',
64295
64298
  label: this.props.descriptionLabel ?? this.tt('description'),
@@ -64306,6 +64309,21 @@ class FeedbackFormComponent {
64306
64309
  },
64307
64310
  state: ComponentStates.ENABLED,
64308
64311
  });
64312
+ if (this.props.showAttachments !== false) {
64313
+ fields.push({
64314
+ token: 'feedback-attachments',
64315
+ name: 'attachments',
64316
+ label: this.props.attachmentsLabel ?? this.tt('attachmentsLabel'),
64317
+ hint: this.tt('attachmentsHint'),
64318
+ placeholder: '',
64319
+ type: InputType.ATTACHMENT,
64320
+ order: 4,
64321
+ validators: [],
64322
+ errors: {},
64323
+ state: ComponentStates.ENABLED,
64324
+ uploadFn: (file) => this.feedbackService.uploadAttachment(file),
64325
+ });
64326
+ }
64309
64327
  return {
64310
64328
  name: '',
64311
64329
  sections: [{ name: '', order: 0, fields }],
@@ -64323,8 +64341,6 @@ class FeedbackFormComponent {
64323
64341
  async handleFormSubmit(submitted) {
64324
64342
  if (this.isSubmitting())
64325
64343
  return;
64326
- if (this.currentAttachments.some(a => a.status === 'uploading'))
64327
- return;
64328
64344
  this.isSubmitting.set(true);
64329
64345
  this.formProps.state = ComponentStates.WORKING;
64330
64346
  this.formProps.actions.state = ComponentStates.WORKING;
@@ -64332,7 +64348,7 @@ class FeedbackFormComponent {
64332
64348
  const type = submitted.fields['type'] ?? this.props.defaultType ?? 'feedback';
64333
64349
  const title = submitted.fields['title'];
64334
64350
  const description = submitted.fields['description'];
64335
- const attachmentUrls = this.currentAttachments.filter(a => a.status === 'ready').map(a => a.url);
64351
+ const attachmentUrls = submitted.fields['attachments'] ?? [];
64336
64352
  const response = await this.feedbackService.createAsync(type, title, description, attachmentUrls, this.props.contentRef);
64337
64353
  this.toast.show({
64338
64354
  message: this.props.successMessage ?? this.tt('feedbackSuccess'),
@@ -64356,9 +64372,6 @@ class FeedbackFormComponent {
64356
64372
  this.formProps.actions.state = ComponentStates.ENABLED;
64357
64373
  }
64358
64374
  }
64359
- onAttachmentsChange(items) {
64360
- this.currentAttachments = items;
64361
- }
64362
64375
  onCancelClick() {
64363
64376
  this.onCancel.emit();
64364
64377
  }
@@ -64376,14 +64389,7 @@ class FeedbackFormComponent {
64376
64389
  />
64377
64390
  </div>
64378
64391
  }
64379
- <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
64380
- @if (props.showAttachments !== false) {
64381
- <val-attachment-uploader
64382
- [props]="{ maxFiles: 5, uploadFn: uploadFn }"
64383
- (attachmentsChange)="onAttachmentsChange($event)"
64384
- ></val-attachment-uploader>
64385
- }
64386
- </val-form>
64392
+ <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)" />
64387
64393
 
64388
64394
  @if (props.cancelButtonText) {
64389
64395
  <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
@@ -64391,11 +64397,11 @@ class FeedbackFormComponent {
64391
64397
  </ion-button>
64392
64398
  }
64393
64399
  </div>
64394
- `, isInline: true, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-header{margin-bottom:8px}val-attachment-uploader{display:block;margin-top:16px;margin-bottom:8px}.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: AttachmentUploaderComponent, selector: "val-attachment-uploader", inputs: ["props"], outputs: ["attachmentsChange"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { 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"] }] }); }
64400
+ `, isInline: true, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-header{margin-bottom:8px}.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: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { 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"] }] }); }
64395
64401
  }
64396
64402
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackFormComponent, decorators: [{
64397
64403
  type: Component,
64398
- args: [{ selector: 'val-feedback-form', standalone: true, imports: [CommonModule, FormComponent, AttachmentUploaderComponent, DisplayComponent, TitleComponent, IonButton], template: `
64404
+ args: [{ selector: 'val-feedback-form', standalone: true, imports: [CommonModule, FormComponent, DisplayComponent, TitleComponent, IonButton], template: `
64399
64405
  <div class="feedback-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
64400
64406
  @if (props.showTitle) {
64401
64407
  <div class="form-header">
@@ -64405,14 +64411,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
64405
64411
  />
64406
64412
  </div>
64407
64413
  }
64408
- <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
64409
- @if (props.showAttachments !== false) {
64410
- <val-attachment-uploader
64411
- [props]="{ maxFiles: 5, uploadFn: uploadFn }"
64412
- (attachmentsChange)="onAttachmentsChange($event)"
64413
- ></val-attachment-uploader>
64414
- }
64415
- </val-form>
64414
+ <val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)" />
64416
64415
 
64417
64416
  @if (props.cancelButtonText) {
64418
64417
  <ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
@@ -64420,7 +64419,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
64420
64419
  </ion-button>
64421
64420
  }
64422
64421
  </div>
64423
- `, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-header{margin-bottom:8px}val-attachment-uploader{display:block;margin-top:16px;margin-bottom:8px}.cancel-button{margin-top:8px}\n"] }]
64422
+ `, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.form-header{margin-bottom:8px}.cancel-button{margin-top:8px}\n"] }]
64424
64423
  }], ctorParameters: () => [], propDecorators: { props: [{
64425
64424
  type: Input
64426
64425
  }], onSubmit: [{