valtech-components 2.0.857 → 2.0.859
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/feedback-form/feedback-form.component.mjs +153 -268
- package/esm2022/lib/components/molecules/feedback-form/types.mjs +1 -1
- package/esm2022/lib/components/molecules/textarea-input/textarea-input.component.mjs +3 -3
- package/esm2022/lib/components/organisms/attachment-uploader/attachment-uploader.component.mjs +77 -0
- package/esm2022/lib/components/organisms/attachment-uploader/types.mjs +2 -0
- package/esm2022/lib/components/organisms/mfa-modal/mfa-modal.component.mjs +39 -4
- package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +5 -5
- package/esm2022/lib/components/organisms/wizard/types.mjs +1 -1
- package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +13 -37
- package/esm2022/lib/components/types.mjs +1 -1
- package/esm2022/lib/services/auth/auth.service.mjs +6 -1
- package/esm2022/lib/services/i18n/default-content.mjs +19 -1
- package/esm2022/lib/services/icons.service.mjs +3 -2
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/valtech-components.mjs +929 -934
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/feedback-form/feedback-form.component.d.ts +8 -39
- package/lib/components/molecules/feedback-form/types.d.ts +1 -0
- package/lib/components/organisms/attachment-uploader/attachment-uploader.component.d.ts +23 -0
- package/lib/components/organisms/attachment-uploader/types.d.ts +12 -0
- package/lib/components/organisms/mfa-modal/mfa-modal.component.d.ts +9 -1
- package/lib/components/organisms/wizard/types.d.ts +3 -3
- package/lib/components/organisms/wizard/wizard.component.d.ts +2 -1
- package/lib/components/types.d.ts +2 -0
- package/lib/services/auth/auth.service.d.ts +3 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/src/lib/services/firebase/firebase-messaging-sw.js +145 -0
|
@@ -1,325 +1,210 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
2
|
import { Component, EventEmitter, Input, Output, inject, signal } from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { IonButton, IonIcon, IonItem, IonLabel, IonList, IonNote, IonSelect, IonSelectOption, IonSpinner, IonText, IonTextarea, } from '@ionic/angular/standalone';
|
|
3
|
+
import { Validators } from '@angular/forms';
|
|
4
|
+
import { IonButton, IonIcon } from '@ionic/angular/standalone';
|
|
6
5
|
import { addIcons } from 'ionicons';
|
|
7
|
-
import {
|
|
8
|
-
import { FeedbackService, DEFAULT_FEEDBACK_TYPE_OPTIONS
|
|
6
|
+
import { checkmarkCircleOutline, closeCircleOutline } from 'ionicons/icons';
|
|
7
|
+
import { FeedbackService, DEFAULT_FEEDBACK_TYPE_OPTIONS } from '../../../services/feedback';
|
|
8
|
+
import { I18nService } from '../../../services/i18n';
|
|
9
|
+
import { ComponentStates, InputType } from '../../types';
|
|
10
|
+
import { FormComponent } from '../../organisms/form/form.component';
|
|
11
|
+
import { AttachmentUploaderComponent } from '../../organisms/attachment-uploader/attachment-uploader.component';
|
|
9
12
|
import * as i0 from "@angular/core";
|
|
10
13
|
import * as i1 from "@angular/common";
|
|
11
|
-
import * as i2 from "@angular/forms";
|
|
12
|
-
/**
|
|
13
|
-
* val-feedback-form
|
|
14
|
-
*
|
|
15
|
-
* Formulario reutilizable para enviar feedback desde cualquier parte de la aplicación.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```html
|
|
19
|
-
* <!-- Feedback general -->
|
|
20
|
-
* <val-feedback-form
|
|
21
|
-
* [props]="{ defaultType: 'feedback', showTypeSelector: true }"
|
|
22
|
-
* (onSubmit)="handleSuccess($event)"
|
|
23
|
-
* (onCancel)="closeModal()"
|
|
24
|
-
* />
|
|
25
|
-
*
|
|
26
|
-
* <!-- Reportar contenido incorrecto -->
|
|
27
|
-
* <val-feedback-form
|
|
28
|
-
* [props]="{
|
|
29
|
-
* defaultType: 'poor-content',
|
|
30
|
-
* showTypeSelector: false,
|
|
31
|
-
* contentRef: { contentId: article.id, contentType: 'article' },
|
|
32
|
-
* submitButtonText: 'Reportar contenido'
|
|
33
|
-
* }"
|
|
34
|
-
* />
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
14
|
export class FeedbackFormComponent {
|
|
38
15
|
constructor() {
|
|
39
|
-
/**
|
|
40
|
-
* Configuración del formulario.
|
|
41
|
-
*/
|
|
42
16
|
this.props = {};
|
|
43
|
-
/**
|
|
44
|
-
* Evento emitido cuando el feedback se envía exitosamente.
|
|
45
|
-
*/
|
|
46
17
|
this.onSubmit = new EventEmitter();
|
|
47
|
-
/**
|
|
48
|
-
* Evento emitido cuando el usuario cancela.
|
|
49
|
-
*/
|
|
50
18
|
this.onCancel = new EventEmitter();
|
|
51
|
-
this.fb = inject(FormBuilder);
|
|
52
|
-
this.feedbackService = inject(FeedbackService);
|
|
53
19
|
this.i18n = inject(I18nService);
|
|
20
|
+
this.feedbackService = inject(FeedbackService);
|
|
54
21
|
this.typeOptions = DEFAULT_FEEDBACK_TYPE_OPTIONS;
|
|
55
22
|
this.isSubmitting = signal(false);
|
|
56
23
|
this.isSuccess = signal(false);
|
|
57
24
|
this.error = signal(null);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
bulbOutline,
|
|
61
|
-
chatbubbleOutline,
|
|
62
|
-
checkmarkCircleOutline,
|
|
63
|
-
closeCircleOutline,
|
|
64
|
-
documentTextOutline,
|
|
65
|
-
});
|
|
25
|
+
this.currentAttachments = [];
|
|
26
|
+
addIcons({ checkmarkCircleOutline, closeCircleOutline });
|
|
66
27
|
}
|
|
67
28
|
ngOnInit() {
|
|
68
|
-
// Filtrar tipos habilitados si se especifica
|
|
69
29
|
if (this.props.enabledTypes?.length) {
|
|
70
30
|
this.typeOptions = this.typeOptions.filter(opt => this.props.enabledTypes.includes(opt.value));
|
|
71
31
|
}
|
|
72
|
-
// Usar opciones personalizadas si se proporcionan
|
|
73
32
|
if (this.props.typeOptions?.length) {
|
|
74
33
|
this.typeOptions = this.props.typeOptions;
|
|
75
34
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
35
|
+
this.formProps = this.buildFormProps();
|
|
36
|
+
}
|
|
37
|
+
buildFormProps() {
|
|
38
|
+
const fields = [];
|
|
39
|
+
if (this.props.showTypeSelector !== false) {
|
|
40
|
+
const options = this.typeOptions.map((opt, i) => ({
|
|
41
|
+
id: opt.value,
|
|
42
|
+
name: opt.label,
|
|
43
|
+
order: i,
|
|
44
|
+
selected: opt.value === (this.props.defaultType ?? 'feedback'),
|
|
45
|
+
}));
|
|
46
|
+
fields.push({
|
|
47
|
+
token: 'feedback-type',
|
|
48
|
+
name: 'type',
|
|
49
|
+
label: this.i18n.t('feedbackType'),
|
|
50
|
+
hint: '',
|
|
51
|
+
placeholder: '',
|
|
52
|
+
type: InputType.SELECT,
|
|
53
|
+
order: 1,
|
|
54
|
+
validators: [Validators.required],
|
|
55
|
+
options,
|
|
56
|
+
value: this.props.defaultType ?? 'feedback',
|
|
57
|
+
errors: {},
|
|
58
|
+
state: ComponentStates.ENABLED,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
fields.push({
|
|
62
|
+
token: 'feedback-title',
|
|
63
|
+
name: 'title',
|
|
64
|
+
label: this.props.titleLabel ?? this.i18n.t('title'),
|
|
65
|
+
hint: '',
|
|
66
|
+
placeholder: this.props.titlePlaceholder ?? this.i18n.t('titlePlaceholder'),
|
|
67
|
+
type: InputType.TEXT,
|
|
68
|
+
order: 2,
|
|
69
|
+
validators: [Validators.required, Validators.minLength(5), Validators.maxLength(200)],
|
|
70
|
+
errors: {
|
|
71
|
+
required: this.i18n.t('titleValidation'),
|
|
72
|
+
minlength: this.i18n.t('titleValidation'),
|
|
73
|
+
maxlength: this.i18n.t('titleValidation'),
|
|
74
|
+
},
|
|
75
|
+
state: ComponentStates.ENABLED,
|
|
76
|
+
}, {
|
|
77
|
+
token: 'feedback-description',
|
|
78
|
+
name: 'description',
|
|
79
|
+
label: this.props.descriptionLabel ?? this.i18n.t('description'),
|
|
80
|
+
hint: '',
|
|
81
|
+
placeholder: this.props.descriptionPlaceholder ?? this.i18n.t('descriptionPlaceholder'),
|
|
82
|
+
type: InputType.TEXTAREA,
|
|
83
|
+
order: 3,
|
|
84
|
+
range: { min: 10, max: 5000 },
|
|
85
|
+
validators: [Validators.required, Validators.minLength(10), Validators.maxLength(5000)],
|
|
86
|
+
errors: {
|
|
87
|
+
required: this.i18n.t('descriptionValidation'),
|
|
88
|
+
minlength: this.i18n.t('descriptionValidation'),
|
|
89
|
+
maxlength: this.i18n.t('descriptionValidation'),
|
|
90
|
+
},
|
|
91
|
+
state: ComponentStates.ENABLED,
|
|
81
92
|
});
|
|
93
|
+
return {
|
|
94
|
+
name: '',
|
|
95
|
+
sections: [{ name: '', order: 0, fields }],
|
|
96
|
+
actions: {
|
|
97
|
+
type: 'submit',
|
|
98
|
+
color: 'primary',
|
|
99
|
+
text: this.props.submitButtonText ?? this.i18n.t('submit'),
|
|
100
|
+
state: ComponentStates.ENABLED,
|
|
101
|
+
expand: 'block',
|
|
102
|
+
},
|
|
103
|
+
state: ComponentStates.ENABLED,
|
|
104
|
+
};
|
|
82
105
|
}
|
|
83
|
-
async
|
|
84
|
-
if (this.
|
|
106
|
+
async handleFormSubmit(submitted) {
|
|
107
|
+
if (this.isSubmitting())
|
|
108
|
+
return;
|
|
109
|
+
if (this.currentAttachments.some(a => a.status === 'uploading'))
|
|
85
110
|
return;
|
|
86
111
|
this.isSubmitting.set(true);
|
|
87
112
|
this.error.set(null);
|
|
88
113
|
this.isSuccess.set(false);
|
|
114
|
+
this.formProps.state = ComponentStates.WORKING;
|
|
115
|
+
this.formProps.actions.state = ComponentStates.WORKING;
|
|
89
116
|
try {
|
|
90
|
-
const
|
|
91
|
-
const
|
|
92
|
-
|
|
117
|
+
const type = submitted.fields['type'] ?? this.props.defaultType ?? 'feedback';
|
|
118
|
+
const title = submitted.fields['title'];
|
|
119
|
+
const description = submitted.fields['description'];
|
|
120
|
+
const attachmentUrls = this.currentAttachments.filter(a => a.status === 'ready').map(a => a.url);
|
|
121
|
+
const response = await this.feedbackService.createAsync(type, title, description, attachmentUrls, this.props.contentRef);
|
|
93
122
|
this.isSuccess.set(true);
|
|
94
|
-
this.
|
|
95
|
-
this.onSubmit.emit({
|
|
96
|
-
response,
|
|
97
|
-
type: type,
|
|
98
|
-
title,
|
|
99
|
-
});
|
|
123
|
+
this.onSubmit.emit({ response, type, title, attachmentUrls });
|
|
100
124
|
}
|
|
101
125
|
catch (err) {
|
|
102
126
|
this.error.set(err.error?.message || err.message || this.i18n.t('feedbackError'));
|
|
103
127
|
}
|
|
104
128
|
finally {
|
|
105
129
|
this.isSubmitting.set(false);
|
|
130
|
+
this.formProps.state = ComponentStates.ENABLED;
|
|
131
|
+
this.formProps.actions.state = ComponentStates.ENABLED;
|
|
106
132
|
}
|
|
107
133
|
}
|
|
134
|
+
onAttachmentsChange(items) {
|
|
135
|
+
this.currentAttachments = items;
|
|
136
|
+
}
|
|
108
137
|
onCancelClick() {
|
|
109
138
|
this.onCancel.emit();
|
|
110
139
|
}
|
|
111
140
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
112
141
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FeedbackFormComponent, isStandalone: true, selector: "val-feedback-form", inputs: { props: "props" }, outputs: { onSubmit: "onSubmit", onCancel: "onCancel" }, ngImport: i0, template: `
|
|
113
|
-
<form
|
|
114
|
-
[
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
@if (props.showTypeSelector !== false) {
|
|
122
|
-
<ion-item>
|
|
123
|
-
<ion-select
|
|
124
|
-
formControlName="type"
|
|
125
|
-
[label]="i18n.t('feedbackType')"
|
|
126
|
-
labelPlacement="floating"
|
|
127
|
-
interface="popover"
|
|
128
|
-
>
|
|
129
|
-
@for (option of typeOptions; track option.value) {
|
|
130
|
-
<ion-select-option [value]="option.value">
|
|
131
|
-
{{ option.label }}
|
|
132
|
-
</ion-select-option>
|
|
133
|
-
}
|
|
134
|
-
</ion-select>
|
|
135
|
-
</ion-item>
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
<!-- Title -->
|
|
139
|
-
<ion-item>
|
|
140
|
-
<ion-textarea
|
|
141
|
-
formControlName="title"
|
|
142
|
-
[label]="props.titleLabel || i18n.t('title')"
|
|
143
|
-
labelPlacement="floating"
|
|
144
|
-
[placeholder]="props.titlePlaceholder || i18n.t('titlePlaceholder')"
|
|
145
|
-
[maxlength]="200"
|
|
146
|
-
[counter]="true"
|
|
147
|
-
[autoGrow]="false"
|
|
148
|
-
rows="1"
|
|
149
|
-
></ion-textarea>
|
|
150
|
-
</ion-item>
|
|
151
|
-
@if (form.get('title')?.invalid && form.get('title')?.touched) {
|
|
152
|
-
<ion-note color="danger" class="ion-padding-start">
|
|
153
|
-
{{ i18n.t('titleValidation') }}
|
|
154
|
-
</ion-note>
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
<!-- Description -->
|
|
158
|
-
<ion-item>
|
|
159
|
-
<ion-textarea
|
|
160
|
-
formControlName="description"
|
|
161
|
-
[label]="props.descriptionLabel || i18n.t('description')"
|
|
162
|
-
labelPlacement="floating"
|
|
163
|
-
[placeholder]="props.descriptionPlaceholder || i18n.t('descriptionPlaceholder')"
|
|
164
|
-
[maxlength]="5000"
|
|
165
|
-
[counter]="true"
|
|
166
|
-
[autoGrow]="true"
|
|
167
|
-
rows="4"
|
|
168
|
-
></ion-textarea>
|
|
169
|
-
</ion-item>
|
|
170
|
-
@if (form.get('description')?.invalid && form.get('description')?.touched) {
|
|
171
|
-
<ion-note color="danger" class="ion-padding-start">
|
|
172
|
-
{{ i18n.t('descriptionValidation') }}
|
|
173
|
-
</ion-note>
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
<!-- Error message -->
|
|
177
|
-
@if (error()) {
|
|
178
|
-
<div class="feedback-alert error">
|
|
179
|
-
<ion-icon name="close-circle-outline"></ion-icon>
|
|
180
|
-
<span>{{ error() }}</span>
|
|
181
|
-
</div>
|
|
182
|
-
}
|
|
142
|
+
<div class="feedback-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
|
|
143
|
+
<val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
|
|
144
|
+
@if (props.showAttachments !== false) {
|
|
145
|
+
<val-attachment-uploader
|
|
146
|
+
[props]="{ maxFiles: 5 }"
|
|
147
|
+
(attachmentsChange)="onAttachmentsChange($event)"
|
|
148
|
+
></val-attachment-uploader>
|
|
149
|
+
}
|
|
183
150
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
}
|
|
151
|
+
@if (error()) {
|
|
152
|
+
<div class="feedback-alert error">
|
|
153
|
+
<ion-icon name="close-circle-outline"></ion-icon>
|
|
154
|
+
<span>{{ error() }}</span>
|
|
155
|
+
</div>
|
|
156
|
+
}
|
|
191
157
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
</ion-button>
|
|
158
|
+
@if (isSuccess()) {
|
|
159
|
+
<div class="feedback-alert success">
|
|
160
|
+
<ion-icon name="checkmark-circle-outline"></ion-icon>
|
|
161
|
+
<span>{{ props.successMessage || i18n.t('feedbackSuccess') }}</span>
|
|
162
|
+
</div>
|
|
198
163
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
164
|
+
</val-form>
|
|
165
|
+
|
|
166
|
+
@if (props.cancelButtonText) {
|
|
167
|
+
<ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
|
|
168
|
+
{{ props.cancelButtonText }}
|
|
205
169
|
</ion-button>
|
|
206
|
-
|
|
207
|
-
</
|
|
208
|
-
`, isInline: true, styles: [".feedback-form{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.
|
|
170
|
+
}
|
|
171
|
+
</div>
|
|
172
|
+
`, isInline: true, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.feedback-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:20px}}.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: 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"] }] }); }
|
|
209
173
|
}
|
|
210
174
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FeedbackFormComponent, decorators: [{
|
|
211
175
|
type: Component,
|
|
212
|
-
args: [{ selector: 'val-feedback-form', standalone: true, imports: [
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
IonSelect,
|
|
222
|
-
IonSelectOption,
|
|
223
|
-
IonSpinner,
|
|
224
|
-
IonText,
|
|
225
|
-
IonTextarea,
|
|
226
|
-
], template: `
|
|
227
|
-
<form
|
|
228
|
-
[formGroup]="form"
|
|
229
|
-
(ngSubmit)="handleSubmit()"
|
|
230
|
-
class="feedback-form"
|
|
231
|
-
[class.compact]="props.compact"
|
|
232
|
-
[ngClass]="props.cssClass"
|
|
233
|
-
>
|
|
234
|
-
<!-- Type selector -->
|
|
235
|
-
@if (props.showTypeSelector !== false) {
|
|
236
|
-
<ion-item>
|
|
237
|
-
<ion-select
|
|
238
|
-
formControlName="type"
|
|
239
|
-
[label]="i18n.t('feedbackType')"
|
|
240
|
-
labelPlacement="floating"
|
|
241
|
-
interface="popover"
|
|
242
|
-
>
|
|
243
|
-
@for (option of typeOptions; track option.value) {
|
|
244
|
-
<ion-select-option [value]="option.value">
|
|
245
|
-
{{ option.label }}
|
|
246
|
-
</ion-select-option>
|
|
247
|
-
}
|
|
248
|
-
</ion-select>
|
|
249
|
-
</ion-item>
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
<!-- Title -->
|
|
253
|
-
<ion-item>
|
|
254
|
-
<ion-textarea
|
|
255
|
-
formControlName="title"
|
|
256
|
-
[label]="props.titleLabel || i18n.t('title')"
|
|
257
|
-
labelPlacement="floating"
|
|
258
|
-
[placeholder]="props.titlePlaceholder || i18n.t('titlePlaceholder')"
|
|
259
|
-
[maxlength]="200"
|
|
260
|
-
[counter]="true"
|
|
261
|
-
[autoGrow]="false"
|
|
262
|
-
rows="1"
|
|
263
|
-
></ion-textarea>
|
|
264
|
-
</ion-item>
|
|
265
|
-
@if (form.get('title')?.invalid && form.get('title')?.touched) {
|
|
266
|
-
<ion-note color="danger" class="ion-padding-start">
|
|
267
|
-
{{ i18n.t('titleValidation') }}
|
|
268
|
-
</ion-note>
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
<!-- Description -->
|
|
272
|
-
<ion-item>
|
|
273
|
-
<ion-textarea
|
|
274
|
-
formControlName="description"
|
|
275
|
-
[label]="props.descriptionLabel || i18n.t('description')"
|
|
276
|
-
labelPlacement="floating"
|
|
277
|
-
[placeholder]="props.descriptionPlaceholder || i18n.t('descriptionPlaceholder')"
|
|
278
|
-
[maxlength]="5000"
|
|
279
|
-
[counter]="true"
|
|
280
|
-
[autoGrow]="true"
|
|
281
|
-
rows="4"
|
|
282
|
-
></ion-textarea>
|
|
283
|
-
</ion-item>
|
|
284
|
-
@if (form.get('description')?.invalid && form.get('description')?.touched) {
|
|
285
|
-
<ion-note color="danger" class="ion-padding-start">
|
|
286
|
-
{{ i18n.t('descriptionValidation') }}
|
|
287
|
-
</ion-note>
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
<!-- Error message -->
|
|
291
|
-
@if (error()) {
|
|
292
|
-
<div class="feedback-alert error">
|
|
293
|
-
<ion-icon name="close-circle-outline"></ion-icon>
|
|
294
|
-
<span>{{ error() }}</span>
|
|
295
|
-
</div>
|
|
296
|
-
}
|
|
176
|
+
args: [{ selector: 'val-feedback-form', standalone: true, imports: [CommonModule, FormComponent, AttachmentUploaderComponent, IonButton, IonIcon], template: `
|
|
177
|
+
<div class="feedback-form-wrapper" [class.compact]="props.compact" [ngClass]="props.cssClass">
|
|
178
|
+
<val-form [props]="formProps" (onSubmit)="handleFormSubmit($event)">
|
|
179
|
+
@if (props.showAttachments !== false) {
|
|
180
|
+
<val-attachment-uploader
|
|
181
|
+
[props]="{ maxFiles: 5 }"
|
|
182
|
+
(attachmentsChange)="onAttachmentsChange($event)"
|
|
183
|
+
></val-attachment-uploader>
|
|
184
|
+
}
|
|
297
185
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
}
|
|
186
|
+
@if (error()) {
|
|
187
|
+
<div class="feedback-alert error">
|
|
188
|
+
<ion-icon name="close-circle-outline"></ion-icon>
|
|
189
|
+
<span>{{ error() }}</span>
|
|
190
|
+
</div>
|
|
191
|
+
}
|
|
305
192
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
</ion-button>
|
|
193
|
+
@if (isSuccess()) {
|
|
194
|
+
<div class="feedback-alert success">
|
|
195
|
+
<ion-icon name="checkmark-circle-outline"></ion-icon>
|
|
196
|
+
<span>{{ props.successMessage || i18n.t('feedbackSuccess') }}</span>
|
|
197
|
+
</div>
|
|
312
198
|
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
}
|
|
199
|
+
</val-form>
|
|
200
|
+
|
|
201
|
+
@if (props.cancelButtonText) {
|
|
202
|
+
<ion-button fill="outline" color="medium" expand="block" class="cancel-button" (click)="onCancelClick()">
|
|
203
|
+
{{ props.cancelButtonText }}
|
|
319
204
|
</ion-button>
|
|
320
|
-
|
|
321
|
-
</
|
|
322
|
-
`, styles: [".feedback-form{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.
|
|
205
|
+
}
|
|
206
|
+
</div>
|
|
207
|
+
`, styles: [".feedback-form-wrapper{display:flex;flex-direction:column;gap:8px;&.compact{gap:4px}}.feedback-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:20px}}.cancel-button{margin-top:8px}\n"] }]
|
|
323
208
|
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
324
209
|
type: Input
|
|
325
210
|
}], onSubmit: [{
|
|
@@ -327,4 +212,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
327
212
|
}], onCancel: [{
|
|
328
213
|
type: Output
|
|
329
214
|
}] } });
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2stZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vZmVlZGJhY2stZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQ0wsU0FBUyxFQUNULE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLE9BQU8sRUFDUCxPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsT0FBTyxFQUNQLFdBQVcsR0FDWixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLFVBQVUsRUFDVixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLGVBQWUsRUFHZiw2QkFBNkIsR0FDOUIsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQUdwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBMEtILE1BQU0sT0FBTyxxQkFBcUI7SUEyQmhDO1FBMUJBOztXQUVHO1FBQ00sVUFBSyxHQUF5QixFQUFFLENBQUM7UUFFMUM7O1dBRUc7UUFD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UCxPQUFPO3dCQUNQLFFBQVE7d0JBQ1IsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsZUFBZTt3QkFDZixVQUFVO3dCQUNWLE9BQU87d0JBQ1AsV0FBVztxQkFDWixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnR1Q7d0RBMkRRLEtBQUs7c0JBQWIsS0FBSztnQkFLSSxRQUFRO3NCQUFqQixNQUFNO2dCQUtHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgSW9uQnV0dG9uLFxuICBJb25JY29uLFxuICBJb25JdGVtLFxuICBJb25MYWJlbCxcbiAgSW9uTGlzdCxcbiAgSW9uTm90ZSxcbiAgSW9uU2VsZWN0LFxuICBJb25TZWxlY3RPcHRpb24sXG4gIElvblNwaW5uZXIsXG4gIElvblRleHQsXG4gIElvblRleHRhcmVhLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHtcbiAgYnVnT3V0bGluZSxcbiAgYnVsYk91dGxpbmUsXG4gIGNoYXRidWJibGVPdXRsaW5lLFxuICBjaGVja21hcmtDaXJjbGVPdXRsaW5lLFxuICBjbG9zZUNpcmNsZU91dGxpbmUsXG4gIGRvY3VtZW50VGV4dE91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IHtcbiAgRmVlZGJhY2tTZXJ2aWNlLFxuICBGZWVkYmFja1R5cGUsXG4gIENyZWF0ZUZlZWRiYWNrUmVzcG9uc2UsXG4gIERFRkFVTFRfRkVFREJBQ0tfVFlQRV9PUFRJT05TLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFjayc7XG5pbXBvcnQgeyBGZWVkYmFja0Zvcm1NZXRhZGF0YSwgRmVlZGJhY2tTdWJtaXRFdmVudCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIHZhbC1mZWVkYmFjay1mb3JtXG4gKlxuICogRm9ybXVsYXJpbyByZXV0aWxpemFibGUgcGFyYSBlbnZpYXIgZmVlZGJhY2sgZGVzZGUgY3VhbHF1aWVyIHBhcnRlIGRlIGxhIGFwbGljYWNpw7NuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8IS0tIEZlZWRiYWNrIGdlbmVyYWwgLS0+XG4gKiA8dmFsLWZlZWRiYWNrLWZvcm1cbiAqICAgW3Byb3BzXT1cInsgZGVmYXVsdFR5cGU6ICdmZWVkYmFjaycsIHNob3dUeXBlU2VsZWN0b3I6IHRydWUgfVwiXG4gKiAgIChvblN1Ym1pdCk9XCJoYW5kbGVTdWNjZXNzKCRldmVudClcIlxuICogICAob25DYW5jZWwpPVwiY2xvc2VNb2RhbCgpXCJcbiAqIC8+XG4gKlxuICogPCEtLSBSZXBvcnRhciBjb250ZW5pZG8gaW5jb3JyZWN0byAtLT5cbiAqIDx2YWwtZmVlZGJhY2stZm9ybVxuICogICBbcHJvcHNdPVwie1xuICogICAgIGRlZmF1bHRUeXBlOiAncG9vci1jb250ZW50JyxcbiAqICAgICBzaG93VHlwZVNlbGVjdG9yOiBmYWxzZSxcbiAqICAgICBjb250ZW50UmVmOiB7IGNvbnRlbnRJZDogYXJ0aWNsZS5pZCwgY29udGVudFR5cGU6ICdhcnRpY2xlJyB9LFxuICogICAgIHN1Ym1pdEJ1dHRvblRleHQ6ICdSZXBvcnRhciBjb250ZW5pZG8nXG4gKiAgIH1cIlxuICogLz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZmVlZGJhY2stZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uSWNvbixcbiAgICBJb25JdGVtLFxuICAgIElvbkxhYmVsLFxuICAgIElvbkxpc3QsXG4gICAgSW9uTm90ZSxcbiAgICBJb25TZWxlY3QsXG4gICAgSW9uU2VsZWN0T3B0aW9uLFxuICAgIElvblNwaW5uZXIsXG4gICAgSW9uVGV4dCxcbiAgICBJb25UZXh0YXJlYSxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8Zm9ybVxuICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgIChuZ1N1Ym1pdCk9XCJoYW5kbGVTdWJtaXQoKVwiXG4gICAgICBjbGFzcz1cImZlZWRiYWNrLWZvcm1cIlxuICAgICAgW2NsYXNzLmNvbXBhY3RdPVwicHJvcHMuY29tcGFjdFwiXG4gICAgICBbbmdDbGFzc109XCJwcm9wcy5jc3NDbGFzc1wiXG4gICAgPlxuICAgICAgPCEtLSBUeXBlIHNlbGVjdG9yIC0tPlxuICAgICAgQGlmIChwcm9wcy5zaG93VHlwZVNlbGVjdG9yICE9PSBmYWxzZSkge1xuICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgPGlvbi1zZWxlY3RcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImkxOG4udCgnZmVlZGJhY2tUeXBlJylcIlxuICAgICAgICAgICAgbGFiZWxQbGFjZW1lbnQ9XCJmbG9hdGluZ1wiXG4gICAgICAgICAgICBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgdHlwZU9wdGlvbnM7IHRyYWNrIG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICA8aW9uLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLXNlbGVjdD5cbiAgICAgICAgPC9pb24taXRlbT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBUaXRsZSAtLT5cbiAgICAgIDxpb24taXRlbT5cbiAgICAgICAgPGlvbi10ZXh0YXJlYVxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCJcbiAgICAgICAgICBbbGFiZWxdPVwicHJvcHMudGl0bGVMYWJlbCB8fCBpMThuLnQoJ3RpdGxlJylcIlxuICAgICAgICAgIGxhYmVsUGxhY2VtZW50PVwiZmxvYXRpbmdcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wcy50aXRsZVBsYWNlaG9sZGVyIHx8IGkxOG4udCgndGl0bGVQbGFjZWhvbGRlcicpXCJcbiAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjIwMFwiXG4gICAgICAgICAgW2NvdW50ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW2F1dG9Hcm93XT1cImZhbHNlXCJcbiAgICAgICAgICByb3dzPVwiMVwiXG4gICAgICAgID48L2lvbi10ZXh0YXJlYT5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICBAaWYgKGZvcm0uZ2V0KCd0aXRsZScpPy5pbnZhbGlkICYmIGZvcm0uZ2V0KCd0aXRsZScpPy50b3VjaGVkKSB7XG4gICAgICAgIDxpb24tbm90ZSBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwiaW9uLXBhZGRpbmctc3RhcnRcIj5cbiAgICAgICAgICB7eyBpMThuLnQoJ3RpdGxlVmFsaWRhdGlvbicpIH19XG4gICAgICAgIDwvaW9uLW5vdGU+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gRGVzY3JpcHRpb24gLS0+XG4gICAgICA8aW9uLWl0ZW0+XG4gICAgICAgIDxpb24tdGV4dGFyZWFcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgW2xhYmVsXT1cInByb3BzLmRlc2NyaXB0aW9uTGFiZWwgfHwgaTE4bi50KCdkZXNjcmlwdGlvbicpXCJcbiAgICAgICAgICBsYWJlbFBsYWNlbWVudD1cImZsb2F0aW5nXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlciB8fCBpMThuLnQoJ2Rlc2NyaXB0aW9uUGxhY2Vob2xkZXInKVwiXG4gICAgICAgICAgW21heGxlbmd0aF09XCI1MDAwXCJcbiAgICAgICAgICBbY291bnRlcl09XCJ0cnVlXCJcbiAgICAgICAgICBbYXV0b0dyb3ddPVwidHJ1ZVwiXG4gICAgICAgICAgcm93cz1cIjRcIlxuICAgICAgICA+PC9pb24tdGV4dGFyZWE+XG4gICAgICA8L2lvbi1pdGVtPlxuICAgICAgQGlmIChmb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uaW52YWxpZCAmJiBmb3JtLmdldCgnZGVzY3JpcHRpb24nKT8udG91Y2hlZCkge1xuICAgICAgICA8aW9uLW5vdGUgY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImlvbi1wYWRkaW5nLXN0YXJ0XCI+XG4gICAgICAgICAge3sgaTE4bi50KCdkZXNjcmlwdGlvblZhbGlkYXRpb24nKSB9fVxuICAgICAgICA8L2lvbi1ub3RlPlxuICAgICAgfVxuXG4gICAgICA8IS0tIEVycm9yIG1lc3NhZ2UgLS0+XG4gICAgICBAaWYgKGVycm9yKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZlZWRiYWNrLWFsZXJ0IGVycm9yXCI+XG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGUtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgZXJyb3IoKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gU3VjY2VzcyBtZXNzYWdlIC0tPlxuICAgICAgQGlmIChpc1N1Y2Nlc3MoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmVlZGJhY2stYWxlcnQgc3VjY2Vzc1wiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hlY2ttYXJrLWNpcmNsZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBwcm9wcy5zdWNjZXNzTWVzc2FnZSB8fCBpMThuLnQoJ2ZlZWRiYWNrU3VjY2VzcycpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBBY3Rpb25zIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tYWN0aW9uc1wiPlxuICAgICAgICBAaWYgKHByb3BzLmNhbmNlbEJ1dHRvblRleHQpIHtcbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwibWVkaXVtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbENsaWNrKClcIj5cbiAgICAgICAgICAgIHt7IHByb3BzLmNhbmNlbEJ1dHRvblRleHQgfX1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgPGlvbi1idXR0b24gdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWQgfHwgaXNTdWJtaXR0aW5nKClcIiBleHBhbmQ9XCJibG9ja1wiPlxuICAgICAgICAgIEBpZiAoaXNTdWJtaXR0aW5nKCkpIHtcbiAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY2lyY3VsYXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAge3sgcHJvcHMuc3VibWl0QnV0dG9uVGV4dCB8fCBpMThuLnQoJ3N1Ym1pdCcpIH19XG4gICAgICAgICAgfVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5mZWVkYmFjay1mb3JtIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG5cbiAgICAgICAgJi5jb21wYWN0IHtcbiAgICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuZm9ybS1hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG5cbiAgICAgICAgaW9uLWJ1dHRvbiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuZmVlZGJhY2stYWxlcnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcblxuICAgICAgICAmLmVycm9yIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXRpbnQpO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuc3VjY2VzcyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MtdGludCk7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1zdWNjZXNzLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlvbi1pY29uIHtcbiAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW9uLW5vdGUge1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIG1hcmdpbi10b3A6IC00cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGZWVkYmFja0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogQ29uZmlndXJhY2nDs24gZGVsIGZvcm11bGFyaW8uXG4gICAqL1xuICBASW5wdXQoKSBwcm9wczogRmVlZGJhY2tGb3JtTWV0YWRhdGEgPSB7fTtcblxuICAvKipcbiAgICogRXZlbnRvIGVtaXRpZG8gY3VhbmRvIGVsIGZlZWRiYWNrIHNlIGVudsOtYSBleGl0b3NhbWVudGUuXG4gICAqL1xuICBAT3V0cHV0KCkgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEZlZWRiYWNrU3VibWl0RXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50byBlbWl0aWRvIGN1YW5kbyBlbCB1c3VhcmlvIGNhbmNlbGEuXG4gICAqL1xuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG4gIHByaXZhdGUgZmVlZGJhY2tTZXJ2aWNlID0gaW5qZWN0KEZlZWRiYWNrU2VydmljZSk7XG4gIHByb3RlY3RlZCBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblxuICBmb3JtITogRm9ybUdyb3VwO1xuICB0eXBlT3B0aW9ucyA9IERFRkFVTFRfRkVFREJBQ0tfVFlQRV9PUFRJT05TO1xuXG4gIGlzU3VibWl0dGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIGlzU3VjY2VzcyA9IHNpZ25hbChmYWxzZSk7XG4gIGVycm9yID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFkZEljb25zKHtcbiAgICAgIGJ1Z091dGxpbmUsXG4gICAgICBidWxiT3V0bGluZSxcbiAgICAgIGNoYXRidWJibGVPdXRsaW5lLFxuICAgICAgY2hlY2ttYXJrQ2lyY2xlT3V0bGluZSxcbiAgICAgIGNsb3NlQ2lyY2xlT3V0bGluZSxcbiAgICAgIGRvY3VtZW50VGV4dE91dGxpbmUsXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBGaWx0cmFyIHRpcG9zIGhhYmlsaXRhZG9zIHNpIHNlIGVzcGVjaWZpY2FcbiAgICBpZiAodGhpcy5wcm9wcy5lbmFibGVkVHlwZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy50eXBlT3B0aW9ucyA9IHRoaXMudHlwZU9wdGlvbnMuZmlsdGVyKG9wdCA9PiB0aGlzLnByb3BzLmVuYWJsZWRUeXBlcyEuaW5jbHVkZXMob3B0LnZhbHVlKSk7XG4gICAgfVxuXG4gICAgLy8gVXNhciBvcGNpb25lcyBwZXJzb25hbGl6YWRhcyBzaSBzZSBwcm9wb3JjaW9uYW5cbiAgICBpZiAodGhpcy5wcm9wcy50eXBlT3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnR5cGVPcHRpb25zID0gdGhpcy5wcm9wcy50eXBlT3B0aW9ucztcbiAgICB9XG5cbiAgICAvLyBJbmljaWFsaXphciBmb3JtdWxhcmlvXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICB0eXBlOiBbdGhpcy5wcm9wcy5kZWZhdWx0VHlwZSB8fCAnZmVlZGJhY2snLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHRpdGxlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjAwKV1dLFxuICAgICAgZGVzY3JpcHRpb246IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTAwMCldXSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVN1Ym1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQgfHwgdGhpcy5pc1N1Ym1pdHRpbmcoKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuZXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuaXNTdWNjZXNzLnNldChmYWxzZSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB0eXBlLCB0aXRsZSwgZGVzY3JpcHRpb24gfSA9IHRoaXMuZm9ybS52YWx1ZTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZlZWRiYWNrU2VydmljZS5jcmVhdGVBc3luYyhcbiAgICAgICAgdHlwZSBhcyBGZWVkYmFja1R5cGUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgW10sIC8vIGF0dGFjaG1lbnRzIChwb3IgYWhvcmEgdmFjw61vKVxuICAgICAgICB0aGlzLnByb3BzLmNvbnRlbnRSZWZcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaXNTdWNjZXNzLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuZm9ybS5yZXNldCh7IHR5cGU6IHRoaXMucHJvcHMuZGVmYXVsdFR5cGUgfHwgJ2ZlZWRiYWNrJyB9KTtcblxuICAgICAgdGhpcy5vblN1Ym1pdC5lbWl0KHtcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIHR5cGU6IHR5cGUgYXMgRmVlZGJhY2tUeXBlLFxuICAgICAgICB0aXRsZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aGlzLmVycm9yLnNldChlcnIuZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyLm1lc3NhZ2UgfHwgdGhpcy5pMThuLnQoJ2ZlZWRiYWNrRXJyb3InKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWxDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxufVxuIl19
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2stZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vZmVlZGJhY2stZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLDZCQUE2QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQXdELFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7OztBQWlGaEgsTUFBTSxPQUFPLHFCQUFxQjtJQWtCaEM7UUFqQlMsVUFBSyxHQUF5QixFQUFFLENBQUM7UUFFaEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ25ELGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXBDLFNB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Q0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO1lBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBdUI7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQzsrR0F0SlUscUJBQXFCO21HQUFyQixxQkFBcUIsa0tBekV0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCVCwwZkFoQ1MsWUFBWSw2SEFBRSxhQUFhLDhIQUFFLDJCQUEyQix1SEFBRSxTQUFTLG9QQUFFLE9BQU87OzRGQTBFM0UscUJBQXFCO2tCQTdFakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQzdFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JUO3dEQTJDUSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNoZWNrbWFya0NpcmNsZU91dGxpbmUsIGNsb3NlQ2lyY2xlT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IHsgRmVlZGJhY2tTZXJ2aWNlLCBGZWVkYmFja1R5cGUsIERFRkFVTFRfRkVFREJBQ0tfVFlQRV9PUFRJT05TIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmVlZGJhY2snO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlcywgRm9ybU1ldGFkYXRhLCBGb3JtU3VibWl0LCBJbnB1dE1ldGFkYXRhLCBJbnB1dE9wdGlvbiwgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9hdHRhY2htZW50LXVwbG9hZGVyL2F0dGFjaG1lbnQtdXBsb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEF0dGFjaG1lbnRJdGVtIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL2F0dGFjaG1lbnQtdXBsb2FkZXIvdHlwZXMnO1xuaW1wb3J0IHsgRmVlZGJhY2tGb3JtTWV0YWRhdGEsIEZlZWRiYWNrU3VibWl0RXZlbnQgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWZlZWRiYWNrLWZvcm0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3JtQ29tcG9uZW50LCBBdHRhY2htZW50VXBsb2FkZXJDb21wb25lbnQsIElvbkJ1dHRvbiwgSW9uSWNvbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImZlZWRiYWNrLWZvcm0td3JhcHBlclwiIFtjbGFzcy5jb21wYWN0XT1cInByb3BzLmNvbXBhY3RcIiBbbmdDbGFzc109XCJwcm9wcy5jc3NDbGFzc1wiPlxuICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJmb3JtUHJvcHNcIiAob25TdWJtaXQpPVwiaGFuZGxlRm9ybVN1Ym1pdCgkZXZlbnQpXCI+XG4gICAgICAgIEBpZiAocHJvcHMuc2hvd0F0dGFjaG1lbnRzICE9PSBmYWxzZSkge1xuICAgICAgICAgIDx2YWwtYXR0YWNobWVudC11cGxvYWRlclxuICAgICAgICAgICAgW3Byb3BzXT1cInsgbWF4RmlsZXM6IDUgfVwiXG4gICAgICAgICAgICAoYXR0YWNobWVudHNDaGFuZ2UpPVwib25BdHRhY2htZW50c0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC92YWwtYXR0YWNobWVudC11cGxvYWRlcj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoZXJyb3IoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZWVkYmFjay1hbGVydCBlcnJvclwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGUtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8c3Bhbj57eyBlcnJvcigpIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChpc1N1Y2Nlc3MoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZWVkYmFjay1hbGVydCBzdWNjZXNzXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZWNrbWFyay1jaXJjbGUtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8c3Bhbj57eyBwcm9wcy5zdWNjZXNzTWVzc2FnZSB8fCBpMThuLnQoJ2ZlZWRiYWNrU3VjY2VzcycpIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L3ZhbC1mb3JtPlxuXG4gICAgICBAaWYgKHByb3BzLmNhbmNlbEJ1dHRvblRleHQpIHtcbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBjb2xvcj1cIm1lZGl1bVwiIGV4cGFuZD1cImJsb2NrXCIgY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHByb3BzLmNhbmNlbEJ1dHRvblRleHQgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAuZmVlZGJhY2stZm9ybS13cmFwcGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG5cbiAgICAgICAgJi5jb21wYWN0IHtcbiAgICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuZmVlZGJhY2stYWxlcnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcblxuICAgICAgICAmLmVycm9yIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXRpbnQpO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuc3VjY2VzcyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MtdGludCk7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1zdWNjZXNzLXNoYWRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlvbi1pY29uIHtcbiAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNhbmNlbC1idXR0b24ge1xuICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmVlZGJhY2tGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHJvcHM6IEZlZWRiYWNrRm9ybU1ldGFkYXRhID0ge307XG5cbiAgQE91dHB1dCgpIG9uU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxGZWVkYmFja1N1Ym1pdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJvdGVjdGVkIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGZlZWRiYWNrU2VydmljZSA9IGluamVjdChGZWVkYmFja1NlcnZpY2UpO1xuXG4gIGZvcm1Qcm9wcyE6IEZvcm1NZXRhZGF0YTtcbiAgdHlwZU9wdGlvbnMgPSBERUZBVUxUX0ZFRURCQUNLX1RZUEVfT1BUSU9OUztcblxuICBpc1N1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBpc1N1Y2Nlc3MgPSBzaWduYWwoZmFsc2UpO1xuICBlcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIGN1cnJlbnRBdHRhY2htZW50czogQXR0YWNobWVudEl0ZW1bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFkZEljb25zKHsgY2hlY2ttYXJrQ2lyY2xlT3V0bGluZSwgY2xvc2VDaXJjbGVPdXRsaW5lIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuZW5hYmxlZFR5cGVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudHlwZU9wdGlvbnMgPSB0aGlzLnR5cGVPcHRpb25zLmZpbHRlcihvcHQgPT4gdGhpcy5wcm9wcy5lbmFibGVkVHlwZXMhLmluY2x1ZGVzKG9wdC52YWx1ZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy50eXBlT3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnR5cGVPcHRpb25zID0gdGhpcy5wcm9wcy50eXBlT3B0aW9ucztcbiAgICB9XG4gICAgdGhpcy5mb3JtUHJvcHMgPSB0aGlzLmJ1aWxkRm9ybVByb3BzKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybVByb3BzKCk6IEZvcm1NZXRhZGF0YSB7XG4gICAgY29uc3QgZmllbGRzOiBJbnB1dE1ldGFkYXRhW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnByb3BzLnNob3dUeXBlU2VsZWN0b3IgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBvcHRpb25zOiBJbnB1dE9wdGlvbltdID0gdGhpcy50eXBlT3B0aW9ucy5tYXAoKG9wdCwgaSkgPT4gKHtcbiAgICAgICAgaWQ6IG9wdC52YWx1ZSxcbiAgICAgICAgbmFtZTogb3B0LmxhYmVsLFxuICAgICAgICBvcmRlcjogaSxcbiAgICAgICAgc2VsZWN0ZWQ6IG9wdC52YWx1ZSA9PT0gKHRoaXMucHJvcHMuZGVmYXVsdFR5cGUgPz8gJ2ZlZWRiYWNrJyksXG4gICAgICB9KSk7XG4gICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stdHlwZScsXG4gICAgICAgIG5hbWU6ICd0eXBlJyxcbiAgICAgICAgbGFiZWw6IHRoaXMuaTE4bi50KCdmZWVkYmFja1R5cGUnKSxcbiAgICAgICAgaGludDogJycsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlLlNFTEVDVCxcbiAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMuZGVmYXVsdFR5cGUgPz8gJ2ZlZWRiYWNrJyxcbiAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmllbGRzLnB1c2goXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stdGl0bGUnLFxuICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy50aXRsZUxhYmVsID8/IHRoaXMuaTE4bi50KCd0aXRsZScpLFxuICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMudGl0bGVQbGFjZWhvbGRlciA/PyB0aGlzLmkxOG4udCgndGl0bGVQbGFjZWhvbGRlcicpLFxuICAgICAgICB0eXBlOiBJbnB1dFR5cGUuVEVYVCxcbiAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjAwKV0sXG4gICAgICAgIGVycm9yczoge1xuICAgICAgICAgIHJlcXVpcmVkOiB0aGlzLmkxOG4udCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgICAgbWlubGVuZ3RoOiB0aGlzLmkxOG4udCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgICAgbWF4bGVuZ3RoOiB0aGlzLmkxOG4udCgndGl0bGVWYWxpZGF0aW9uJyksXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRva2VuOiAnZmVlZGJhY2stZGVzY3JpcHRpb24nLFxuICAgICAgICBuYW1lOiAnZGVzY3JpcHRpb24nLFxuICAgICAgICBsYWJlbDogdGhpcy5wcm9wcy5kZXNjcmlwdGlvbkxhYmVsID8/IHRoaXMuaTE4bi50KCdkZXNjcmlwdGlvbicpLFxuICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlciA/PyB0aGlzLmkxOG4udCgnZGVzY3JpcHRpb25QbGFjZWhvbGRlcicpLFxuICAgICAgICB0eXBlOiBJbnB1dFR5cGUuVEVYVEFSRUEsXG4gICAgICAgIG9yZGVyOiAzLFxuICAgICAgICByYW5nZTogeyBtaW46IDEwLCBtYXg6IDUwMDAgfSxcbiAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTAwMCldLFxuICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICByZXF1aXJlZDogdGhpcy5pMThuLnQoJ2Rlc2NyaXB0aW9uVmFsaWRhdGlvbicpLFxuICAgICAgICAgIG1pbmxlbmd0aDogdGhpcy5pMThuLnQoJ2Rlc2NyaXB0aW9uVmFsaWRhdGlvbicpLFxuICAgICAgICAgIG1heGxlbmd0aDogdGhpcy5pMThuLnQoJ2Rlc2NyaXB0aW9uVmFsaWRhdGlvbicpLFxuICAgICAgICB9LFxuICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnJyxcbiAgICAgIHNlY3Rpb25zOiBbeyBuYW1lOiAnJywgb3JkZXI6IDAsIGZpZWxkcyB9XSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgIHRleHQ6IHRoaXMucHJvcHMuc3VibWl0QnV0dG9uVGV4dCA/PyB0aGlzLmkxOG4udCgnc3VibWl0JyksXG4gICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgZXhwYW5kOiAnYmxvY2snLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlRm9ybVN1Ym1pdChzdWJtaXR0ZWQ6IEZvcm1TdWJtaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmN1cnJlbnRBdHRhY2htZW50cy5zb21lKGEgPT4gYS5zdGF0dXMgPT09ICd1cGxvYWRpbmcnKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuZXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuaXNTdWNjZXNzLnNldChmYWxzZSk7XG4gICAgdGhpcy5mb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuV09SS0lORztcbiAgICB0aGlzLmZvcm1Qcm9wcy5hY3Rpb25zLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHlwZSA9IChzdWJtaXR0ZWQuZmllbGRzWyd0eXBlJ10gYXMgRmVlZGJhY2tUeXBlKSA/PyB0aGlzLnByb3BzLmRlZmF1bHRUeXBlID8/ICdmZWVkYmFjayc7XG4gICAgICBjb25zdCB0aXRsZSA9IHN1Ym1pdHRlZC5maWVsZHNbJ3RpdGxlJ10gYXMgc3RyaW5nO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBzdWJtaXR0ZWQuZmllbGRzWydkZXNjcmlwdGlvbiddIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRVcmxzID0gdGhpcy5jdXJyZW50QXR0YWNobWVudHMuZmlsdGVyKGEgPT4gYS5zdGF0dXMgPT09ICdyZWFkeScpLm1hcChhID0+IGEudXJsISk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZWVkYmFja1NlcnZpY2UuY3JlYXRlQXN5bmMoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgYXR0YWNobWVudFVybHMsXG4gICAgICAgIHRoaXMucHJvcHMuY29udGVudFJlZlxuICAgICAgKTtcblxuICAgICAgdGhpcy5pc1N1Y2Nlc3Muc2V0KHRydWUpO1xuXG4gICAgICB0aGlzLm9uU3VibWl0LmVtaXQoeyByZXNwb25zZSwgdHlwZSwgdGl0bGUsIGF0dGFjaG1lbnRVcmxzIH0pO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aGlzLmVycm9yLnNldChlcnIuZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyLm1lc3NhZ2UgfHwgdGhpcy5pMThuLnQoJ2ZlZWRiYWNrRXJyb3InKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgICAgdGhpcy5mb3JtUHJvcHMuYWN0aW9ucy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIH1cbiAgfVxuXG4gIG9uQXR0YWNobWVudHNDaGFuZ2UoaXRlbXM6IEF0dGFjaG1lbnRJdGVtW10pOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRBdHRhY2htZW50cyA9IGl0ZW1zO1xuICB9XG5cbiAgb25DYW5jZWxDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEZlZWRiYWNrVHlwZSxcbiAgQ29udGVudFJlZixcbiAgQ3JlYXRlRmVlZGJhY2tSZXNwb25zZSxcbiAgRmVlZGJhY2tUeXBlT3B0aW9uLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFjay90eXBlcyc7XG5cbi8qKlxuICogTWV0YWRhdGEgcGFyYSBlbCBjb21wb25lbnRlIEZlZWRiYWNrRm9ybS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja0Zvcm1NZXRhZGF0YSB7XG4gIC8qKiBUaXBvIGRlIGZlZWRiYWNrIHByZXNlbGVjY2lvbmFkbyAqL1xuICBkZWZhdWx0VHlwZT86IEZlZWRiYWNrVHlwZTtcblxuICAvKiogUmVmZXJlbmNpYSBhIGNvbnRlbmlkbyAoc2kgYXBsaWNhKSAqL1xuICBjb250ZW50UmVmPzogQ29udGVudFJlZjtcblxuICAvKiogTW9zdHJhciBzZWxlY3RvciBkZSB0aXBvIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93VHlwZVNlbGVjdG9yPzogYm9vbGVhbjtcblxuICAvKiogVGlwb3MgZGUgZmVlZGJhY2sgaGFiaWxpdGFkb3MgKHBvciBkZWZlY3RvIHRvZG9zKSAqL1xuICBlbmFibGVkVHlwZXM/OiBGZWVkYmFja1R5cGVbXTtcblxuICAvKiogT3BjaW9uZXMgcGVyc29uYWxpemFkYXMgcGFyYSB0aXBvcyBkZSBmZWVkYmFjayAqL1xuICB0eXBlT3B0aW9ucz86IEZlZWRiYWNrVHlwZU9wdGlvbltdO1xuXG4gIC8qKiBQbGFjZWhvbGRlciBwYXJhIHTDrXR1bG8gKi9cbiAgdGl0bGVQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKiogUGxhY2Vob2xkZXIgcGFyYSBkZXNjcmlwY2nDs24gKi9cbiAgZGVzY3JpcHRpb25QbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKiogTGFiZWwgcGFyYSBjYW1wbyBkZSB0w610dWxvICovXG4gIHRpdGxlTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIExhYmVsIHBhcmEgY2FtcG8gZGUgZGVzY3JpcGNpw7NuICovXG4gIGRlc2NyaXB0aW9uTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlbCBib3TDs24gZGUgZW52w61vICovXG4gIHN1Ym1pdEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlbCBib3TDs24gY2FuY2VsYXIgKHNpIG5vIHNlIHByb3BvcmNpb25hLCBubyBzZSBtdWVzdHJhKSAqL1xuICBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKiBNb3N0cmFyIGNhbXBvIGRlIGFkanVudG9zIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93QXR0YWNobWVudHM/OiBib29sZWFuO1xuXG4gIC8qKiBMYWJlbCBwYXJhIGNhbXBvIGRlIGFkanVudG9zICovXG4gIGF0dGFjaG1lbnRzTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIE1lbnNhamUgZGUgw6l4aXRvIHBlcnNvbmFsaXphZG8gKi9cbiAgc3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqIENTUyBjbGFzcyBhZGljaW9uYWwgcGFyYSBlbCBjb250ZW5lZG9yICovXG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuXG4gIC8qKiBNb2RvIGNvbXBhY3RvIChtZW5vcyBlc3BhY2lhZG8pICovXG4gIGNvbXBhY3Q/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZlZWRiYWNrLWZvcm0vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEZlZWRiYWNrVHlwZSxcbiAgQ29udGVudFJlZixcbiAgQ3JlYXRlRmVlZGJhY2tSZXNwb25zZSxcbiAgRmVlZGJhY2tUeXBlT3B0aW9uLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mZWVkYmFjay90eXBlcyc7XG5cbi8qKlxuICogTWV0YWRhdGEgcGFyYSBlbCBjb21wb25lbnRlIEZlZWRiYWNrRm9ybS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja0Zvcm1NZXRhZGF0YSB7XG4gIC8qKiBUaXBvIGRlIGZlZWRiYWNrIHByZXNlbGVjY2lvbmFkbyAqL1xuICBkZWZhdWx0VHlwZT86IEZlZWRiYWNrVHlwZTtcblxuICAvKiogUmVmZXJlbmNpYSBhIGNvbnRlbmlkbyAoc2kgYXBsaWNhKSAqL1xuICBjb250ZW50UmVmPzogQ29udGVudFJlZjtcblxuICAvKiogTW9zdHJhciBzZWxlY3RvciBkZSB0aXBvIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93VHlwZVNlbGVjdG9yPzogYm9vbGVhbjtcblxuICAvKiogVGlwb3MgZGUgZmVlZGJhY2sgaGFiaWxpdGFkb3MgKHBvciBkZWZlY3RvIHRvZG9zKSAqL1xuICBlbmFibGVkVHlwZXM/OiBGZWVkYmFja1R5cGVbXTtcblxuICAvKiogT3BjaW9uZXMgcGVyc29uYWxpemFkYXMgcGFyYSB0aXBvcyBkZSBmZWVkYmFjayAqL1xuICB0eXBlT3B0aW9ucz86IEZlZWRiYWNrVHlwZU9wdGlvbltdO1xuXG4gIC8qKiBQbGFjZWhvbGRlciBwYXJhIHTDrXR1bG8gKi9cbiAgdGl0bGVQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKiogUGxhY2Vob2xkZXIgcGFyYSBkZXNjcmlwY2nDs24gKi9cbiAgZGVzY3JpcHRpb25QbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAvKiogTGFiZWwgcGFyYSBjYW1wbyBkZSB0w610dWxvICovXG4gIHRpdGxlTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIExhYmVsIHBhcmEgY2FtcG8gZGUgZGVzY3JpcGNpw7NuICovXG4gIGRlc2NyaXB0aW9uTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlbCBib3TDs24gZGUgZW52w61vICovXG4gIHN1Ym1pdEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlbCBib3TDs24gY2FuY2VsYXIgKHNpIG5vIHNlIHByb3BvcmNpb25hLCBubyBzZSBtdWVzdHJhKSAqL1xuICBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKiBNb3N0cmFyIGNhbXBvIGRlIGFkanVudG9zIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93QXR0YWNobWVudHM/OiBib29sZWFuO1xuXG4gIC8qKiBMYWJlbCBwYXJhIGNhbXBvIGRlIGFkanVudG9zICovXG4gIGF0dGFjaG1lbnRzTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIE1lbnNhamUgZGUgw6l4aXRvIHBlcnNvbmFsaXphZG8gKi9cbiAgc3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqIENTUyBjbGFzcyBhZGljaW9uYWwgcGFyYSBlbCBjb250ZW5lZG9yICovXG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuXG4gIC8qKiBNb2RvIGNvbXBhY3RvIChtZW5vcyBlc3BhY2lhZG8pICovXG4gIGNvbXBhY3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEV2ZW50byBlbWl0aWRvIGN1YW5kbyBlbCBmZWVkYmFjayBzZSBlbnbDrWEgZXhpdG9zYW1lbnRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrU3VibWl0RXZlbnQge1xuICByZXNwb25zZTogQ3JlYXRlRmVlZGJhY2tSZXNwb25zZTtcbiAgdHlwZTogRmVlZGJhY2tUeXBlO1xuICB0aXRsZTogc3RyaW5nO1xuICBhdHRhY2htZW50VXJscz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEVzdGFkbyBkZWwgZm9ybXVsYXJpby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja0Zvcm1TdGF0ZSB7XG4gIGlzU3VibWl0dGluZzogYm9vbGVhbjtcbiAgaXNTdWNjZXNzOiBib29sZWFuO1xuICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbn1cbiJdfQ==
|