@snabcentr/client-ui 3.9.4 → 3.10.0
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +267 -0
- package/esm2022/feedback/gratitude/sc-gratitude.component.mjs +32 -0
- package/esm2022/feedback/index.mjs +3 -0
- package/esm2022/providers/index.mjs +2 -1
- package/esm2022/providers/sc-max-files-in-form-input.mjs +6 -0
- package/esm2022/public-api.mjs +2 -1
- package/esm2022/samples/index.mjs +1 -2
- package/esm2022/samples/sc-sample.module.mjs +5 -6
- package/feedback/feedback-form/sc-feedback-form.component.d.ts +123 -0
- package/feedback/gratitude/sc-gratitude.component.d.ts +20 -0
- package/feedback/index.d.ts +2 -0
- package/fesm2022/snabcentr-client-ui.mjs +317 -140
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/providers/index.d.ts +1 -0
- package/providers/sc-max-files-in-form-input.d.ts +5 -0
- package/public-api.d.ts +1 -0
- package/release_notes.tmp +3 -3
- package/samples/index.d.ts +0 -1
- package/samples/sc-sample.module.d.ts +10 -11
- package/styles/tailwind/tailwind.scss +26 -0
- package/esm2022/samples/ask-to-sample-form/sc-ask-to-sample-form.component.mjs +0 -117
- package/samples/ask-to-sample-form/sc-ask-to-sample-form.component.d.ts +0 -52
@@ -0,0 +1,267 @@
|
|
1
|
+
/* eslint-disable @typescript-eslint/unbound-method */
|
2
|
+
import { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';
|
3
|
+
import { ChangeDetectionStrategy, Component, effect, inject, input, output } from '@angular/core';
|
4
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
5
|
+
import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
6
|
+
import { ScConvertersService, ScFeedbackService, ScISuggestionType, ScUploadedFile, ScUserService } from '@snabcentr/client-core';
|
7
|
+
import { TuiValidationError } from '@taiga-ui/cdk';
|
8
|
+
import { TuiButton, TuiError, TuiLabel, TuiLink } from '@taiga-ui/core';
|
9
|
+
import { TuiButtonLoading, TuiFieldErrorPipe, TuiFiles, tuiFilesAccepted } from '@taiga-ui/kit';
|
10
|
+
import { TuiInputModule, TuiInputPhoneModule, TuiTextareaModule } from '@taiga-ui/legacy';
|
11
|
+
import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
|
12
|
+
import { RecaptchaFormsModule, RecaptchaModule } from 'ng-recaptcha-2';
|
13
|
+
import { ScFormFieldsModule } from 'projects/client-ui/form-fields';
|
14
|
+
import { MAX_FILES_IN_FORM_INPUT } from 'projects/client-ui/providers/sc-max-files-in-form-input';
|
15
|
+
import { catchError, filter, map, merge, of, share, startWith, Subject, switchMap, tap } from 'rxjs';
|
16
|
+
import * as i0 from "@angular/core";
|
17
|
+
import * as i1 from "@angular/forms";
|
18
|
+
import * as i2 from "../../form-fields/suggestion-field/sc-suggestion-field.component";
|
19
|
+
import * as i3 from "@taiga-ui/legacy";
|
20
|
+
import * as i4 from "ng-recaptcha-2";
|
21
|
+
import * as i5 from "@taiga-ui/kit";
|
22
|
+
/**
|
23
|
+
* Компонент формы обратной связи.
|
24
|
+
*/
|
25
|
+
export class ScFeedbackFormComponent {
|
26
|
+
/**
|
27
|
+
* Инициализирует экземпляр класса {@link ScFeedbackFormComponent}.
|
28
|
+
*/
|
29
|
+
constructor() {
|
30
|
+
/**
|
31
|
+
* Условное название блока где расположена ссылка.
|
32
|
+
*/
|
33
|
+
this.formSlag = input.required();
|
34
|
+
/**
|
35
|
+
* Событие нажатия на кнопку договора оферты.
|
36
|
+
*/
|
37
|
+
this.onClickOffer = output();
|
38
|
+
/**
|
39
|
+
* Событие успешной отправки формы.
|
40
|
+
*/
|
41
|
+
this.onSendSuccess = output();
|
42
|
+
/**
|
43
|
+
* Сервис обратной связи.
|
44
|
+
*/
|
45
|
+
this.feedbackService = inject(ScFeedbackService);
|
46
|
+
/**
|
47
|
+
* Сервис конвертации данных.
|
48
|
+
*/
|
49
|
+
this.convertersService = inject(ScConvertersService);
|
50
|
+
/**
|
51
|
+
* Максимальное количество файлов, отправляемых в форме.
|
52
|
+
*/
|
53
|
+
this.maxFilesInForm = inject(MAX_FILES_IN_FORM_INPUT);
|
54
|
+
/**
|
55
|
+
* Сервис данных о пользователе.
|
56
|
+
*/
|
57
|
+
this.user$ = inject(ScUserService)
|
58
|
+
.getUserChange$()
|
59
|
+
.pipe(tap((user) => {
|
60
|
+
if (user.isGuest) {
|
61
|
+
this.form.addControl('recaptcha', this.recaptchaControl);
|
62
|
+
this.resetForm();
|
63
|
+
}
|
64
|
+
else {
|
65
|
+
this.form.removeControl('recaptcha');
|
66
|
+
// eslint-disable-next-line default-case
|
67
|
+
switch (this.formSlag()) {
|
68
|
+
case 'common':
|
69
|
+
this.form.patchValue({ name: user.name, email: user.contacts.email.value });
|
70
|
+
break;
|
71
|
+
case 'contacts':
|
72
|
+
case 'vacancies':
|
73
|
+
this.form.patchValue({ name: user.name, phone: user.contacts.phone.value });
|
74
|
+
break;
|
75
|
+
case 'samples':
|
76
|
+
this.form.patchValue({ name: user.name, phone: user.contacts.phone.value, email: user.contacts.email.value });
|
77
|
+
break;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}));
|
81
|
+
/**
|
82
|
+
* Контекст диалогового окна, в котором открыт компонент.
|
83
|
+
*/
|
84
|
+
this.context = inject(POLYMORPHEUS_CONTEXT, { optional: true });
|
85
|
+
/**
|
86
|
+
* Поле ввода для recaptcha.
|
87
|
+
*/
|
88
|
+
this.recaptchaControl = new FormControl(null);
|
89
|
+
/**
|
90
|
+
* Группа полей ввода для формы «Пожелания и предложения по улучшению сайта».
|
91
|
+
*/
|
92
|
+
this.form = new FormGroup({
|
93
|
+
name: new FormControl(null, [Validators.required, Validators.minLength(3)]),
|
94
|
+
phone: new FormControl(null),
|
95
|
+
email: new FormControl(null),
|
96
|
+
message: new FormControl(null, []),
|
97
|
+
files: new FormControl([], [this.maxFilesLength(5)]),
|
98
|
+
});
|
99
|
+
/**
|
100
|
+
* Перечисление типов подсказок.
|
101
|
+
*/
|
102
|
+
this.suggestionType = ScISuggestionType;
|
103
|
+
/**
|
104
|
+
* {@link Subject} события отправки формы.
|
105
|
+
*/
|
106
|
+
this.onSubmit = new Subject();
|
107
|
+
/**
|
108
|
+
* {@link Observable} запроса на отправку данных.
|
109
|
+
*/
|
110
|
+
this.request$ = this.onSubmit.pipe(filter(() => this.form.valid), map(() => this.form.value), switchMap((value) => this.feedbackService.sendFeedback(this.context?.data.formSlag ?? this.formSlag(), this.convertersService.removeNullRecursive(value)).pipe(tap(() => {
|
111
|
+
if (this.context) {
|
112
|
+
this.context.completeWith();
|
113
|
+
}
|
114
|
+
else {
|
115
|
+
this.resetForm();
|
116
|
+
this.onSendSuccess.emit();
|
117
|
+
}
|
118
|
+
}),
|
119
|
+
// eslint-disable-next-line rxjs/no-implicit-any-catch
|
120
|
+
catchError((error) => {
|
121
|
+
this.form.markAllAsTouched();
|
122
|
+
const { errors, message } = error.error;
|
123
|
+
if (errors) {
|
124
|
+
Object.keys(errors).forEach((key) => {
|
125
|
+
const control = this.form.get(key);
|
126
|
+
if (control) {
|
127
|
+
// eslint-disable-next-line security/detect-object-injection
|
128
|
+
control.setErrors({ serverResponse: errors[key] });
|
129
|
+
}
|
130
|
+
});
|
131
|
+
}
|
132
|
+
else if (message) {
|
133
|
+
this.form.setErrors({ serverResponse: [message] });
|
134
|
+
}
|
135
|
+
return of(null);
|
136
|
+
}),
|
137
|
+
// eslint-disable-next-line unicorn/no-useless-undefined
|
138
|
+
startWith(undefined))), share());
|
139
|
+
/**
|
140
|
+
* {@link Observable} изменения состояния загрузки данных.
|
141
|
+
*/
|
142
|
+
this.loading$ = this.request$.pipe(map((value) => value === undefined));
|
143
|
+
/**
|
144
|
+
* Управляет состоянием загруженных файлов.
|
145
|
+
*/
|
146
|
+
this.loadedFile = new FormControl([], [this.maxFilesLength()]);
|
147
|
+
/**
|
148
|
+
* Observable, который отслеживает, приняты ли файлы в соответствии с требованиями по типу размеру и т.д.
|
149
|
+
*/
|
150
|
+
this.accepted$ = this.loadedFile.valueChanges.pipe(map(() => tuiFilesAccepted(this.loadedFile)));
|
151
|
+
/**
|
152
|
+
* Список файлов, которые были отклонены при загрузке.
|
153
|
+
*/
|
154
|
+
this.rejected = [];
|
155
|
+
merge(this.accepted$, this.user$, this.loadedFile.valueChanges.pipe(tap((files) => {
|
156
|
+
this.form.controls.files.reset([]);
|
157
|
+
this.onUploadFile(files);
|
158
|
+
})))
|
159
|
+
.pipe(takeUntilDestroyed())
|
160
|
+
.subscribe();
|
161
|
+
// Валидация полей ввода в зависимости от формы.
|
162
|
+
effect(() => {
|
163
|
+
switch (this.formSlag()) {
|
164
|
+
case 'common':
|
165
|
+
this.form.get('email')?.setValidators([Validators.required, Validators.email]);
|
166
|
+
this.form.get('phone')?.clearValidators();
|
167
|
+
break;
|
168
|
+
case 'contacts':
|
169
|
+
case 'vacancies':
|
170
|
+
this.form.get('email')?.clearValidators();
|
171
|
+
this.form.get('phone')?.setValidators([Validators.required, Validators.minLength(12)]);
|
172
|
+
break;
|
173
|
+
case 'samples':
|
174
|
+
this.form.get('email')?.setValidators([Validators.required, Validators.email]);
|
175
|
+
this.form.get('phone')?.setValidators([Validators.required, Validators.minLength(12)]);
|
176
|
+
break;
|
177
|
+
default:
|
178
|
+
this.form.get('email')?.clearValidators();
|
179
|
+
this.form.get('phone')?.clearValidators();
|
180
|
+
break;
|
181
|
+
}
|
182
|
+
// Обновляем состояние валидации
|
183
|
+
this.form.get('email')?.updateValueAndValidity();
|
184
|
+
this.form.get('phone')?.updateValueAndValidity();
|
185
|
+
});
|
186
|
+
}
|
187
|
+
/**
|
188
|
+
* Обрабатывает отклоненные файлы.
|
189
|
+
*
|
190
|
+
* @param files Список файлов, которые были отклонены.
|
191
|
+
*/
|
192
|
+
onReject(files) {
|
193
|
+
this.rejected = [...new Set([...this.rejected, ...files])];
|
194
|
+
}
|
195
|
+
/**
|
196
|
+
* Удаляет файл из списка загруженных и отклоненных файлов.
|
197
|
+
*
|
198
|
+
* @param file Файл, который нужно удалить.
|
199
|
+
*/
|
200
|
+
onRemove(file) {
|
201
|
+
this.rejected = this.rejected.filter((rejected) => rejected !== file);
|
202
|
+
this.loadedFile.setValue(this.loadedFile.value?.filter((current) => current !== file) ?? []);
|
203
|
+
}
|
204
|
+
/**
|
205
|
+
* Загружает файл в форму обратной связи.
|
206
|
+
*
|
207
|
+
* @param files Набор файлов.
|
208
|
+
*/
|
209
|
+
onUploadFile(files) {
|
210
|
+
files?.forEach((file) => {
|
211
|
+
const reader = new FileReader();
|
212
|
+
reader.addEventListener('load', () => {
|
213
|
+
if (reader.result) {
|
214
|
+
// eslint-disable-next-line @typescript-eslint/no-base-to-string,sonarjs/no-base-to-string
|
215
|
+
this.form.controls.files.setValue([...(this.form.controls.files.value ?? []), new ScUploadedFile(file.name, reader.result.toString())]);
|
216
|
+
}
|
217
|
+
});
|
218
|
+
reader.readAsDataURL(file);
|
219
|
+
});
|
220
|
+
}
|
221
|
+
/**
|
222
|
+
* Проверяет количество файлов загруженных пользователем.
|
223
|
+
*
|
224
|
+
* @param maxLength максимальное допустимое количество файлов для отправки.
|
225
|
+
*/
|
226
|
+
maxFilesLength(maxLength = this.maxFilesInForm) {
|
227
|
+
return ({ value }) => value.length > maxLength ? { maxLength: new TuiValidationError(`Максимальное количество файлов - ${maxLength}`) } : null;
|
228
|
+
}
|
229
|
+
/**
|
230
|
+
* Выполняет очистку полей формы.
|
231
|
+
*/
|
232
|
+
resetForm() {
|
233
|
+
this.form.reset({
|
234
|
+
email: null,
|
235
|
+
name: null,
|
236
|
+
phone: null,
|
237
|
+
message: null,
|
238
|
+
files: [],
|
239
|
+
});
|
240
|
+
}
|
241
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScFeedbackFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
242
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: ScFeedbackFormComponent, isStandalone: true, selector: "sc-feedback-form", inputs: { formSlag: { classPropertyName: "formSlag", publicName: "formSlag", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onClickOffer: "onClickOffer", onSendSuccess: "onSendSuccess" }, ngImport: i0, template: "@let formSlug = formSlag();\n<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <!-- \u0424\u0418\u041E -->\n <label tuiLabel>\n \u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0424.\u0418.\u041E. </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0422\u0435\u043B\u0435\u0444\u043E\u043D -->\n <label\n *ngIf=\"formSlug === 'contacts' || formSlug === 'vacancies'\"\n tuiLabel\n >\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B -->\n <label\n *ngIf=\"formSlug !== 'contacts' && formSlug !== 'vacancies'\"\n tuiLabel\n >\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 -->\n <label\n *ngIf=\"formSlug === 'common'\"\n tuiLabel\n >\n \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\n <tui-textarea formControlName=\"message\"> \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 </tui-textarea>\n <tui-error\n formControlName=\"message\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0424\u0430\u0439\u043B\u044B -->\n <div\n *ngIf=\"formSlug === 'vacancies'\"\n class=\"flex flex-col gap-1\"\n >\n <label tuiInputFiles>\n <input\n #validator=\"tuiInputFilesValidator\"\n accept=\".doc,.docx,.pdf,image/*\"\n tuiInputFiles\n [formControl]=\"loadedFile\"\n [multiple]=\"true\"\n (reject)=\"onReject($event)\"\n />\n </label>\n\n <tui-error\n *ngIf=\"loadedFile.invalid\"\n [error]=\"['maxLength'] | tuiFieldError | async\"\n [formControl]=\"loadedFile\"\n />\n\n @let accepted = accepted$ | async;\n <tui-files\n *ngIf=\"accepted?.length || rejected.length\"\n class=\"tui-space_top-1\"\n >\n <tui-file\n *ngFor=\"let file of accepted\"\n [file]=\"file\"\n (remove)=\"onRemove(file)\"\n />\n <tui-file\n *ngFor=\"let file of rejected\"\n state=\"error\"\n [file]=\"(file | tuiFileRejected: validator | async) || file\"\n (remove)=\"onRemove(file)\"\n />\n </tui-files>\n </div>\n\n <!-- recaptcha -->\n @if (form.get('recaptcha')) {\n <div\n class=\"mb-3 max-h-20 overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': form.get('recaptcha')?.valid }\"\n >\n <re-captcha formControlName=\"recaptcha\" />\n </div>\n }\n\n <!-- \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F -->\n <div class=\"flex gap-3\">\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n \u041E\u0441\u0442\u0430\u0432\u0438\u0442\u044C\n </button>\n <div class=\"flex items-center\">\n <span class=\"text-body-s\">\n \u041D\u0430\u0436\u0438\u043C\u0430\u044F \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0443, \u0432\u044B \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u0435\u0442\u0435\u0441\u044C \u0441\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); onClickOffer.emit()\"\n >\n \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438\n </button>\n .\n </span>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "pipe", type: TuiFieldErrorPipe, name: "tuiFieldError" }, { kind: "ngmodule", type: ScFormFieldsModule }, { kind: "component", type: i2.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "ngmodule", type: TuiInputModule }, { kind: "component", type: i3.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i3.TuiInputDirective, selector: "tui-input" }, { kind: "ngmodule", type: TuiInputPhoneModule }, { kind: "component", type: i3.TuiInputPhoneComponent, selector: "tui-input-phone", inputs: ["phoneMaskAfterCountryCode", "allowText", "search", "countryCode"], outputs: ["searchChange"] }, { kind: "directive", type: i3.TuiInputPhoneDirective, selector: "tui-input-phone" }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "ngmodule", type: RecaptchaFormsModule }, { kind: "directive", type: i4.RecaptchaValueAccessorDirective, selector: "re-captcha[formControlName],re-captcha[formControl],re-captcha[ngModel]" }, { kind: "ngmodule", type: RecaptchaModule }, { kind: "component", type: i4.RecaptchaComponent, selector: "re-captcha", inputs: ["id", "siteKey", "theme", "type", "size", "tabIndex", "badge", "errorMode"], outputs: ["resolved", "error", "errored"], exportAs: ["reCaptcha"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TuiTextareaModule }, { kind: "component", type: i3.TuiTextareaComponent, selector: "tui-textarea", inputs: ["rows", "maxLength", "expandable"] }, { kind: "directive", type: i3.TuiTextareaDirective, selector: "tui-textarea" }, { kind: "component", type: i5.TuiFile, selector: "tui-file,a[tuiFile],button[tuiFile]", inputs: ["file", "state", "size", "showDelete", "showSize", "leftContent"], outputs: ["remove"] }, { kind: "component", type: i5.TuiInputFiles, selector: "label[tuiInputFiles]" }, { kind: "component", type: i5.TuiFilesComponent, selector: "tui-files", inputs: ["max", "expanded"], outputs: ["expandedChange"] }, { kind: "pipe", type: i5.TuiFileRejectedPipe, name: "tuiFileRejected" }, { kind: "directive", type: i5.TuiInputFilesDirective, selector: "input[tuiInputFiles]", outputs: ["reject"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
243
|
+
}
|
244
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScFeedbackFormComponent, decorators: [{
|
245
|
+
type: Component,
|
246
|
+
args: [{ standalone: true, selector: 'sc-feedback-form', imports: [
|
247
|
+
AsyncPipe,
|
248
|
+
ReactiveFormsModule,
|
249
|
+
NgClass,
|
250
|
+
NgFor,
|
251
|
+
TuiError,
|
252
|
+
TuiFieldErrorPipe,
|
253
|
+
ScFormFieldsModule,
|
254
|
+
TuiInputModule,
|
255
|
+
TuiInputPhoneModule,
|
256
|
+
TuiButton,
|
257
|
+
TuiButtonLoading,
|
258
|
+
TuiLabel,
|
259
|
+
RecaptchaFormsModule,
|
260
|
+
RecaptchaModule,
|
261
|
+
TuiLink,
|
262
|
+
NgIf,
|
263
|
+
TuiTextareaModule,
|
264
|
+
TuiFiles,
|
265
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let formSlug = formSlag();\n<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <!-- \u0424\u0418\u041E -->\n <label tuiLabel>\n \u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0424.\u0418.\u041E. </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0422\u0435\u043B\u0435\u0444\u043E\u043D -->\n <label\n *ngIf=\"formSlug === 'contacts' || formSlug === 'vacancies'\"\n tuiLabel\n >\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B -->\n <label\n *ngIf=\"formSlug !== 'contacts' && formSlug !== 'vacancies'\"\n tuiLabel\n >\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 -->\n <label\n *ngIf=\"formSlug === 'common'\"\n tuiLabel\n >\n \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\n <tui-textarea formControlName=\"message\"> \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 </tui-textarea>\n <tui-error\n formControlName=\"message\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0424\u0430\u0439\u043B\u044B -->\n <div\n *ngIf=\"formSlug === 'vacancies'\"\n class=\"flex flex-col gap-1\"\n >\n <label tuiInputFiles>\n <input\n #validator=\"tuiInputFilesValidator\"\n accept=\".doc,.docx,.pdf,image/*\"\n tuiInputFiles\n [formControl]=\"loadedFile\"\n [multiple]=\"true\"\n (reject)=\"onReject($event)\"\n />\n </label>\n\n <tui-error\n *ngIf=\"loadedFile.invalid\"\n [error]=\"['maxLength'] | tuiFieldError | async\"\n [formControl]=\"loadedFile\"\n />\n\n @let accepted = accepted$ | async;\n <tui-files\n *ngIf=\"accepted?.length || rejected.length\"\n class=\"tui-space_top-1\"\n >\n <tui-file\n *ngFor=\"let file of accepted\"\n [file]=\"file\"\n (remove)=\"onRemove(file)\"\n />\n <tui-file\n *ngFor=\"let file of rejected\"\n state=\"error\"\n [file]=\"(file | tuiFileRejected: validator | async) || file\"\n (remove)=\"onRemove(file)\"\n />\n </tui-files>\n </div>\n\n <!-- recaptcha -->\n @if (form.get('recaptcha')) {\n <div\n class=\"mb-3 max-h-20 overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': form.get('recaptcha')?.valid }\"\n >\n <re-captcha formControlName=\"recaptcha\" />\n </div>\n }\n\n <!-- \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F -->\n <div class=\"flex gap-3\">\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n \u041E\u0441\u0442\u0430\u0432\u0438\u0442\u044C\n </button>\n <div class=\"flex items-center\">\n <span class=\"text-body-s\">\n \u041D\u0430\u0436\u0438\u043C\u0430\u044F \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0443, \u0432\u044B \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u0435\u0442\u0435\u0441\u044C \u0441\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); onClickOffer.emit()\"\n >\n \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438\n </button>\n .\n </span>\n </div>\n </div>\n</form>\n" }]
|
266
|
+
}], ctorParameters: () => [] });
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZmVlZGJhY2stZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvZmVlZGJhY2svZmVlZGJhY2stZm9ybS9zYy1mZWVkYmFjay1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9mZWVkYmFjay9mZWVkYmFjay1mb3JtL3NjLWZlZWRiYWNrLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0RBQXNEO0FBRXRELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFlLE1BQU0sRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxtQkFBbUIsRUFBa0IsaUJBQWlCLEVBQXNCLGlCQUFpQixFQUFFLGNBQWMsRUFBVSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5SyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBb0IsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQWUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1C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UztpQ0FDTSxJQUFJLFlBQ04sa0JBQWtCLFdBRW5CO3dCQUNMLFNBQVM7d0JBQ1QsbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLEtBQUs7d0JBQ0wsUUFBUTt3QkFDUixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixRQUFRO3dCQUNSLG9CQUFvQjt3QkFDcEIsZUFBZTt3QkFDZixPQUFPO3dCQUNQLElBQUk7d0JBQ0osaUJBQWlCO3dCQUNqQixRQUFRO3FCQUNYLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kICovXG5cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIElucHV0U2lnbmFsLCBvdXRwdXQsIE91dHB1dEVtaXR0ZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTY0NvbnZlcnRlcnNTZXJ2aWNlLCBTY0ZlZWRiYWNrRm9ybSwgU2NGZWVkYmFja1NlcnZpY2UsIFNjSUZlZWRiYWNrTWVzc2FnZSwgU2NJU3VnZ2VzdGlvblR5cGUsIFNjVXBsb2FkZWRGaWxlLCBTY1VzZXIsIFNjVXNlclNlcnZpY2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aVZhbGlkYXRpb25FcnJvciB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlEaWFsb2dDb250ZXh0LCBUdWlFcnJvciwgVHVpTGFiZWwsIFR1aUxpbmsgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlCdXR0b25Mb2FkaW5nLCBUdWlGaWVsZEVycm9yUGlwZSwgVHVpRmlsZUxpa2UsIFR1aUZpbGVzLCB0dWlGaWxlc0FjY2VwdGVkIH0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQgeyBUdWlJbnB1dE1vZHVsZSwgVHVpSW5wdXRQaG9uZU1vZHVsZSwgVHVpVGV4dGFyZWFNb2R1bGUgfSBmcm9tICdAdGFpZ2EtdWkvbGVnYWN5JztcbmltcG9ydCB7IFBPTFlNT1JQSEVVU19DT05URVhUIH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBSZWNhcHRjaGFGb3Jtc01vZHVsZSwgUmVjYXB0Y2hhTW9kdWxlIH0gZnJvbSAnbmctcmVjYXB0Y2hhLTInO1xuaW1wb3J0IHsgQXBpRXJyb3JSZXNwb25zZSB9IGZyb20gJ3Byb2plY3RzL2NsaWVudC11aS9hdXRoJztcbmltcG9ydCB7IFNjRm9ybUZpZWxkc01vZHVsZSB9IGZyb20gJ3Byb2plY3RzL2NsaWVudC11aS9mb3JtLWZpZWxkcyc7XG5pbXBvcnQgeyBNQVhfRklMRVNfSU5fRk9STV9JTlBVVCB9IGZyb20gJ3Byb2plY3RzL2NsaWVudC11aS9wcm92aWRlcnMvc2MtbWF4LWZpbGVzLWluLWZvcm0taW5wdXQnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmUsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0YTQvtGA0LzRiyDQvtCx0YDQsNGC0L3QvtC5INGB0LLRj9C30LguXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1mZWVkYmFjay1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtZmVlZGJhY2stZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBUdWlFcnJvcixcbiAgICAgICAgVHVpRmllbGRFcnJvclBpcGUsXG4gICAgICAgIFNjRm9ybUZpZWxkc01vZHVsZSxcbiAgICAgICAgVHVpSW5wdXRNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0UGhvbmVNb2R1bGUsXG4gICAgICAgIFR1aUJ1dHRvbixcbiAgICAgICAgVHVpQnV0dG9uTG9hZGluZyxcbiAgICAgICAgVHVpTGFiZWwsXG4gICAgICAgIFJlY2FwdGNoYUZvcm1zTW9kdWxlLFxuICAgICAgICBSZWNhcHRjaGFNb2R1bGUsXG4gICAgICAgIFR1aUxpbmssXG4gICAgICAgIE5nSWYsXG4gICAgICAgIFR1aVRleHRhcmVhTW9kdWxlLFxuICAgICAgICBUdWlGaWxlcyxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0ZlZWRiYWNrRm9ybUNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0KPRgdC70L7QstC90L7QtSDQvdCw0LfQstCw0L3QuNC1INCx0LvQvtC60LAg0LPQtNC1INGA0LDRgdC/0L7Qu9C+0LbQtdC90LAg0YHRgdGL0LvQutCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtU2xhZzogSW5wdXRTaWduYWw8a2V5b2YgdHlwZW9mIFNjRmVlZGJhY2tGb3JtPiA9IGlucHV0LnJlcXVpcmVkPGtleW9mIHR5cGVvZiBTY0ZlZWRiYWNrRm9ybT4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQvdC+0L/QutGDINC00L7Qs9C+0LLQvtGA0LAg0L7RhNC10YDRgtGLLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBvbkNsaWNrT2ZmZXI6IE91dHB1dEVtaXR0ZXJSZWY8dm9pZD4gPSBvdXRwdXQoKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INGD0YHQv9C10YjQvdC+0Lkg0L7RgtC/0YDQsNCy0LrQuCDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBvblNlbmRTdWNjZXNzOiBPdXRwdXRFbWl0dGVyUmVmPHZvaWQ+ID0gb3V0cHV0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0L7QsdGA0LDRgtC90L7QuSDRgdCy0Y/Qt9C4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmVlZGJhY2tTZXJ2aWNlOiBTY0ZlZWRiYWNrU2VydmljZSA9IGluamVjdChTY0ZlZWRiYWNrU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LrQvtC90LLQtdGA0YLQsNGG0LjQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb252ZXJ0ZXJzU2VydmljZTogU2NDb252ZXJ0ZXJzU2VydmljZSA9IGluamVjdChTY0NvbnZlcnRlcnNTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRhNCw0LnQu9C+0LIsINC+0YLQv9GA0LDQstC70Y/QtdC80YvRhSDQsiDRhNC+0YDQvNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF4RmlsZXNJbkZvcm06IG51bWJlciA9IGluamVjdChNQVhfRklMRVNfSU5fRk9STV9JTlBVVCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQsNC90L3Ri9GFINC+INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXIkOiBPYnNlcnZhYmxlPFNjVXNlcj4gPSBpbmplY3QoU2NVc2VyU2VydmljZSlcbiAgICAgICAgLmdldFVzZXJDaGFuZ2UkKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHVzZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXNlci5pc0d1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5hZGRDb250cm9sKCdyZWNhcHRjaGEnLCB0aGlzLnJlY2FwdGNoYUNvbnRyb2wpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5yZW1vdmVDb250cm9sKCdyZWNhcHRjaGEnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZm9ybVNsYWcoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29tbW9uJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IG5hbWU6IHVzZXIubmFtZSwgZW1haWw6IHVzZXIuY29udGFjdHMuZW1haWwudmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnRhY3RzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3ZhY2FuY2llcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBuYW1lOiB1c2VyLm5hbWUsIHBob25lOiB1c2VyLmNvbnRhY3RzLnBob25lLnZhbHVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzYW1wbGVzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IG5hbWU6IHVzZXIubmFtZSwgcGhvbmU6IHVzZXIuY29udGFjdHMucGhvbmUudmFsdWUsIGVtYWlsOiB1c2VyLmNvbnRhY3RzLmVtYWlsLnZhbHVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgIC8qKlxuICAgICAqINCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGV4dDogVHVpRGlhbG9nQ29udGV4dDx2b2lkLCB7IG9uQ2xpY2tPZmZlckhhbmRsZXI6ICgpID0+IHZvaWQ7IGZvcm1TbGFnOiBrZXlvZiB0eXBlb2YgU2NGZWVkYmFja0Zvcm0gfT4gfCBudWxsID0gaW5qZWN0PFxuICAgICAgICBUdWlEaWFsb2dDb250ZXh0PHZvaWQsIHsgb25DbGlja09mZmVySGFuZGxlcjogKCkgPT4gdm9pZDsgZm9ybVNsYWc6IGtleW9mIHR5cGVvZiBTY0ZlZWRiYWNrRm9ybSB9PlxuICAgID4oUE9MWU1PUlBIRVVTX0NPTlRFWFQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LvQtSDQstCy0L7QtNCwINC00LvRjyByZWNhcHRjaGEuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlY2FwdGNoYUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gICAgLyoqXG4gICAgICog0JPRgNGD0L/Qv9CwINC/0L7Qu9C10Lkg0LLQstC+0LTQsCDQtNC70Y8g0YTQvtGA0LzRiyDCq9Cf0L7QttC10LvQsNC90LjRjyDQuCDQv9GA0LXQtNC70L7QttC10L3QuNGPINC/0L4g0YPQu9GD0YfRiNC10L3QuNGOINGB0LDQudGC0LDCuy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpXSksXG4gICAgICAgIHBob25lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCksXG4gICAgICAgIGVtYWlsOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCksXG4gICAgICAgIG1lc3NhZ2U6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbXSksXG4gICAgICAgIGZpbGVzOiBuZXcgRm9ybUNvbnRyb2w8U2NVcGxvYWRlZEZpbGVbXSB8IG51bGw+KFtdLCBbdGhpcy5tYXhGaWxlc0xlbmd0aCg1KV0pLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXRh9C40YHQu9C10L3QuNC1INGC0LjQv9C+0LIg0L/QvtC00YHQutCw0LfQvtC6LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzdWdnZXN0aW9uVHlwZTogdHlwZW9mIFNjSVN1Z2dlc3Rpb25UeXBlID0gU2NJU3VnZ2VzdGlvblR5cGU7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgU3ViamVjdH0g0YHQvtCx0YvRgtC40Y8g0L7RgtC/0YDQsNCy0LrQuCDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvblN1Ym1pdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0L3QsCDQvtGC0L/RgNCw0LLQutGDINC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVxdWVzdCQ6IE9ic2VydmFibGU8dW5kZWZpbmVkIHwgbnVsbD4gPSB0aGlzLm9uU3VibWl0LnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZvcm0udmFsaWQpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5mb3JtLnZhbHVlIGFzIFNjSUZlZWRiYWNrTWVzc2FnZSksXG4gICAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICB0aGlzLmZlZWRiYWNrU2VydmljZS5zZW5kRmVlZGJhY2sodGhpcy5jb250ZXh0Py5kYXRhLmZvcm1TbGFnID8/IHRoaXMuZm9ybVNsYWcoKSwgdGhpcy5jb252ZXJ0ZXJzU2VydmljZS5yZW1vdmVOdWxsUmVjdXJzaXZlKHZhbHVlKSkucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuY29tcGxldGVXaXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNlbmRTdWNjZXNzLmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzL25vLWltcGxpY2l0LWFueS1jYXRjaFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JzLCBtZXNzYWdlIH0gPSBlcnJvci5lcnJvciBhcyBBcGlFcnJvclJlc3BvbnNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBlcnJvcnNba2V5XSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IFttZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LfQsNCz0YDRg9C30LrQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5yZXF1ZXN0JC5waXBlKG1hcCgodmFsdWUpID0+IHZhbHVlID09PSB1bmRlZmluZWQpKTtcblxuICAgIC8qKlxuICAgICAqINCj0L/RgNCw0LLQu9GP0LXRgiDRgdC+0YHRgtC+0Y/QvdC40LXQvCDQt9Cw0LPRgNGD0LbQtdC90L3Ri9GFINGE0LDQudC70L7Qsi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9hZGVkRmlsZTogRm9ybUNvbnRyb2w8VHVpRmlsZUxpa2VbXSB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPFR1aUZpbGVMaWtlW10gfCBudWxsPihbXSwgW3RoaXMubWF4RmlsZXNMZW5ndGgoKV0pO1xuXG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSwg0LrQvtGC0L7RgNGL0Lkg0L7RgtGB0LvQtdC20LjQstCw0LXRgiwg0L/RgNC40L3Rj9GC0Ysg0LvQuCDRhNCw0LnQu9GLINCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQuCDRgSDRgtGA0LXQsdC+0LLQsNC90LjRj9C80Lgg0L/QviDRgtC40L/RgyDRgNCw0LfQvNC10YDRgyDQuCDRgi7QtC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWNjZXB0ZWQkOiBPYnNlcnZhYmxlPEZpbGVbXT4gPSB0aGlzLmxvYWRlZEZpbGUudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCgpID0+IHR1aUZpbGVzQWNjZXB0ZWQodGhpcy5sb2FkZWRGaWxlKSkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGE0LDQudC70L7Qsiwg0LrQvtGC0L7RgNGL0LUg0LHRi9C70Lgg0L7RgtC60LvQvtC90LXQvdGLINC/0YDQuCDQt9Cw0LPRgNGD0LfQutC1LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWplY3RlZDogcmVhZG9ubHkgRmlsZVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjRmVlZGJhY2tGb3JtQ29tcG9uZW50fS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgdGhpcy5hY2NlcHRlZCQsXG4gICAgICAgICAgICB0aGlzLnVzZXIkLFxuICAgICAgICAgICAgdGhpcy5sb2FkZWRGaWxlLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmZpbGVzLnJlc2V0KFtdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblVwbG9hZEZpbGUoZmlsZXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAgIC8vINCS0LDQu9C40LTQsNGG0LjRjyDQv9C+0LvQtdC5INCy0LLQvtC00LAg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINGE0L7RgNC80YsuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZm9ybVNsYWcoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbW1vbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2VtYWlsJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncGhvbmUnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnY29udGFjdHMnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3ZhY2FuY2llcyc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2VtYWlsJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdwaG9uZScpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMildKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdzYW1wbGVzJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnZW1haWwnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdwaG9uZScpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMildKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdlbWFpbCcpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncGhvbmUnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDQntCx0L3QvtCy0LvRj9C10Lwg0YHQvtGB0YLQvtGP0L3QuNC1INCy0LDQu9C40LTQsNGG0LjQuFxuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnZW1haWwnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncGhvbmUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0LDRgtGL0LLQsNC10YIg0L7RgtC60LvQvtC90LXQvdC90YvQtSDRhNCw0LnQu9GLLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbGVzINCh0L/QuNGB0L7QuiDRhNCw0LnQu9C+0LIsINC60L7RgtC+0YDRi9C1INCx0YvQu9C4INC+0YLQutC70L7QvdC10L3Riy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25SZWplY3QoZmlsZXM6IHJlYWRvbmx5IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlamVjdGVkID0gWy4uLm5ldyBTZXQoWy4uLnRoaXMucmVqZWN0ZWQsIC4uLmZpbGVzXSldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINGE0LDQudC7INC40Lcg0YHQv9C40YHQutCwINC30LDQs9GA0YPQttC10L3QvdGL0YUg0Lgg0L7RgtC60LvQvtC90LXQvdC90YvRhSDRhNCw0LnQu9C+0LIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZSDQpNCw0LnQuywg0LrQvtGC0L7RgNGL0Lkg0L3Rg9C20L3QviDRg9C00LDQu9C40YLRjC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25SZW1vdmUoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlamVjdGVkID0gdGhpcy5yZWplY3RlZC5maWx0ZXIoKHJlamVjdGVkKSA9PiByZWplY3RlZCAhPT0gZmlsZSk7XG4gICAgICAgIHRoaXMubG9hZGVkRmlsZS5zZXRWYWx1ZSh0aGlzLmxvYWRlZEZpbGUudmFsdWU/LmZpbHRlcigoY3VycmVudCkgPT4gY3VycmVudCAhPT0gZmlsZSkgPz8gW10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCX0LDQs9GA0YPQttCw0LXRgiDRhNCw0LnQuyDQsiDRhNC+0YDQvNGDINC+0LHRgNCw0YLQvdC+0Lkg0YHQstGP0LfQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlcyDQndCw0LHQvtGAINGE0LDQudC70L7Qsi5cbiAgICAgKi9cbiAgICBwcml2YXRlIG9uVXBsb2FkRmlsZShmaWxlczogVHVpRmlsZUxpa2VbXSB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgZmlsZXM/LmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICAgICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZWFkZXIucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tYmFzZS10by1zdHJpbmcsc29uYXJqcy9uby1iYXNlLXRvLXN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuZmlsZXMuc2V0VmFsdWUoWy4uLih0aGlzLmZvcm0uY29udHJvbHMuZmlsZXMudmFsdWUgPz8gW10pLCBuZXcgU2NVcGxvYWRlZEZpbGUoZmlsZS5uYW1lLCByZWFkZXIucmVzdWx0LnRvU3RyaW5nKCkpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUgYXMgdW5rbm93biBhcyBCbG9iKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC+0LLQtdGA0Y/QtdGCINC60L7Qu9C40YfQtdGB0YLQstC+INGE0LDQudC70L7QsiDQt9Cw0LPRgNGD0LbQtdC90L3Ri9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC8LlxuICAgICAqXG4gICAgICogQHBhcmFtIG1heExlbmd0aCDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LTQvtC/0YPRgdGC0LjQvNC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YTQsNC50LvQvtCyINC00LvRjyDQvtGC0L/RgNCw0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgbWF4RmlsZXNMZW5ndGgobWF4TGVuZ3RoOiBudW1iZXIgPSB0aGlzLm1heEZpbGVzSW5Gb3JtKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKHsgdmFsdWUgfTogQWJzdHJhY3RDb250cm9sPFR1aUZpbGVMaWtlW10+KSA9PlxuICAgICAgICAgICAgdmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoID8geyBtYXhMZW5ndGg6IG5ldyBUdWlWYWxpZGF0aW9uRXJyb3IoYNCc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRhNCw0LnQu9C+0LIgLSAke21heExlbmd0aH1gKSB9IDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0L/QvtC70L3Rj9C10YIg0L7Rh9C40YHRgtC60YMg0L/QvtC70LXQuSDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoe1xuICAgICAgICAgICAgZW1haWw6IG51bGwsXG4gICAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICAgICAgcGhvbmU6IG51bGwsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgZmlsZXM6IFtdLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJAbGV0IGZvcm1TbHVnID0gZm9ybVNsYWcoKTtcbjxmb3JtXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TdWJtaXQubmV4dCgpXCJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGdhcC00XCJcbj5cbiAgICA8IS0tINCk0JjQniAtLT5cbiAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgINCk0JjQnlxuICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj4g0KPQutCw0LbQuNGC0LUg0JLQsNGI0Lgg0KQu0Jgu0J4uIDwvdHVpLWlucHV0PlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgIC8+XG4gICAgPC9sYWJlbD5cblxuICAgIDwhLS0g0KLQtdC70LXRhNC+0L0gLS0+XG4gICAgPGxhYmVsXG4gICAgICAgICpuZ0lmPVwiZm9ybVNsdWcgPT09ICdjb250YWN0cycgfHwgZm9ybVNsdWcgPT09ICd2YWNhbmNpZXMnXCJcbiAgICAgICAgdHVpTGFiZWxcbiAgICA+XG4gICAgICAgINCi0LXQu9C10YTQvtC9XG4gICAgICAgIDx0dWktaW5wdXQtcGhvbmUgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIj4g0KLQtdC70LXRhNC+0L0gPC90dWktaW5wdXQtcGhvbmU+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBob25lXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgIC8+XG4gICAgPC9sYWJlbD5cblxuICAgIDwhLS0g0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YsgLS0+XG4gICAgPGxhYmVsXG4gICAgICAgICpuZ0lmPVwiZm9ybVNsdWcgIT09ICdjb250YWN0cycgJiYgZm9ybVNsdWcgIT09ICd2YWNhbmNpZXMnXCJcbiAgICAgICAgdHVpTGFiZWxcbiAgICA+XG4gICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgIDx0dWktaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIj5cbiAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmVtYWlsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAvPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8IS0tINCa0L7QvNC80LXQvdGC0LDRgNC40LkgLS0+XG4gICAgPGxhYmVsXG4gICAgICAgICpuZ0lmPVwiZm9ybVNsdWcgPT09ICdjb21tb24nXCJcbiAgICAgICAgdHVpTGFiZWxcbiAgICA+XG4gICAgICAgINCa0L7QvNC80LXQvdGC0LDRgNC40LlcbiAgICAgICAgPHR1aS10ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJtZXNzYWdlXCI+INCa0L7QvNC80LXQvdGC0LDRgNC40LkgPC90dWktdGV4dGFyZWE+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQpNCw0LnQu9GLIC0tPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJmb3JtU2x1ZyA9PT0gJ3ZhY2FuY2llcydcIlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIlxuICAgID5cbiAgICAgICAgPGxhYmVsIHR1aUlucHV0RmlsZXM+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAjdmFsaWRhdG9yPVwidHVpSW5wdXRGaWxlc1ZhbGlkYXRvclwiXG4gICAgICAgICAgICAgICAgYWNjZXB0PVwiLmRvYywuZG9jeCwucGRmLGltYWdlLypcIlxuICAgICAgICAgICAgICAgIHR1aUlucHV0RmlsZXNcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwibG9hZGVkRmlsZVwiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChyZWplY3QpPVwib25SZWplY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICpuZ0lmPVwibG9hZGVkRmlsZS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbJ21heExlbmd0aCddIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJsb2FkZWRGaWxlXCJcbiAgICAgICAgLz5cblxuICAgICAgICBAbGV0IGFjY2VwdGVkID0gYWNjZXB0ZWQkIHwgYXN5bmM7XG4gICAgICAgIDx0dWktZmlsZXNcbiAgICAgICAgICAgICpuZ0lmPVwiYWNjZXB0ZWQ/Lmxlbmd0aCB8fCByZWplY3RlZC5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0dWktc3BhY2VfdG9wLTFcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dHVpLWZpbGVcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsZSBvZiBhY2NlcHRlZFwiXG4gICAgICAgICAgICAgICAgW2ZpbGVdPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJvblJlbW92ZShmaWxlKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHR1aS1maWxlXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbGUgb2YgcmVqZWN0ZWRcIlxuICAgICAgICAgICAgICAgIHN0YXRlPVwiZXJyb3JcIlxuICAgICAgICAgICAgICAgIFtmaWxlXT1cIihmaWxlIHwgdHVpRmlsZVJlamVjdGVkOiB2YWxpZGF0b3IgfCBhc3luYykgfHwgZmlsZVwiXG4gICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJvblJlbW92ZShmaWxlKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3R1aS1maWxlcz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gcmVjYXB0Y2hhIC0tPlxuICAgIEBpZiAoZm9ybS5nZXQoJ3JlY2FwdGNoYScpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibWItMyBtYXgtaC0yMCBvdmVyZmxvdy1oaWRkZW4gZHVyYXRpb24tNTAwXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJyFtYXgtaC0wICEtbS0yJzogZm9ybS5nZXQoJ3JlY2FwdGNoYScpPy52YWxpZCB9XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHJlLWNhcHRjaGEgZm9ybUNvbnRyb2xOYW1lPVwicmVjYXB0Y2hhXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSDQrdC70LXQvNC10L3RgtGLINGD0L/RgNCw0LLQu9C10L3QuNGPICAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtM1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiISEobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnNjLnNlbmRcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxmLWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCe0YHRgtCw0LLQuNGC0YxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJvZHktc1wiPlxuICAgICAgICAgICAgICAgINCd0LDQttC40LzQsNGPINC90LAg0LrQvdC+0L/QutGDLCDQstGLINGB0L7Qs9C70LDRiNCw0LXRgtC10YHRjCDRgVxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICBbcHNldWRvXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbnRleHQ/LmRhdGE/Lm9uQ2xpY2tPZmZlckhhbmRsZXIoKTsgb25DbGlja09mZmVyLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDQn9C+0LvQuNGC0LjQutC+0Lkg0LrQvtC90YTQuNC00LXQvdGG0LjQsNC70YzQvdC+0YHRgtC4XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgLlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
3
|
+
import { TuiIcon } from '@taiga-ui/core';
|
4
|
+
import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
|
5
|
+
import { EMPTY, of, switchMap, timer } from 'rxjs';
|
6
|
+
import * as i0 from "@angular/core";
|
7
|
+
/**
|
8
|
+
* Компонент «Спасибо!».
|
9
|
+
*/
|
10
|
+
export class ScGratitudeComponent {
|
11
|
+
/**
|
12
|
+
* Инициализирует экземпляр класса {@link ScGratitudeComponent}.
|
13
|
+
*/
|
14
|
+
constructor() {
|
15
|
+
/**
|
16
|
+
* Контекст диалогового окна, в котором открыт компонент.
|
17
|
+
*/
|
18
|
+
this.context = inject(POLYMORPHEUS_CONTEXT, { optional: true });
|
19
|
+
of(this.context?.data.autoClose)
|
20
|
+
.pipe(switchMap((autoClose) => (autoClose ? timer(autoClose) : EMPTY)), takeUntilDestroyed())
|
21
|
+
.subscribe(() => {
|
22
|
+
this.context?.$implicit.complete();
|
23
|
+
});
|
24
|
+
}
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScGratitudeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
26
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ScGratitudeComponent, isStandalone: true, selector: "sc-gratitude", ngImport: i0, template: "<div class=\"flex flex-col items-center gap-4 py-14 text-center\">\n <tui-icon\n icon=\"@tui.circle-check\"\n class=\"text-tui-success-fill !size-20 !text-5xl\"\n />\n <p class=\"text-h5\">\u0421\u043F\u0430\u0441\u0438\u0431\u043E!</p>\n <p\n [innerHTML]=\"context?.data?.subTitle ?? '\u0412\u0430\u0448 \u0434\u0430\u043D\u043D\u044B\u0435 \u0443\u0441\u043F\u0435\u0448\u043D\u043E \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044B. \u041C\u044B \u0441\u0432\u044F\u0436\u0435\u043C\u0441\u044F \u0441 \u0432\u0430\u043C\u0438 \u0432 \u0431\u043B\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043C\u044F.'\"\n class=\"text-body-m mx-2\"\n ></p>\n</div>\n", dependencies: [{ kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
27
|
+
}
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScGratitudeComponent, decorators: [{
|
29
|
+
type: Component,
|
30
|
+
args: [{ standalone: true, selector: 'sc-gratitude', imports: [TuiIcon], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col items-center gap-4 py-14 text-center\">\n <tui-icon\n icon=\"@tui.circle-check\"\n class=\"text-tui-success-fill !size-20 !text-5xl\"\n />\n <p class=\"text-h5\">\u0421\u043F\u0430\u0441\u0438\u0431\u043E!</p>\n <p\n [innerHTML]=\"context?.data?.subTitle ?? '\u0412\u0430\u0448 \u0434\u0430\u043D\u043D\u044B\u0435 \u0443\u0441\u043F\u0435\u0448\u043D\u043E \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u044B. \u041C\u044B \u0441\u0432\u044F\u0436\u0435\u043C\u0441\u044F \u0441 \u0432\u0430\u043C\u0438 \u0432 \u0431\u043B\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043C\u044F.'\"\n class=\"text-body-m mx-2\"\n ></p>\n</div>\n" }]
|
31
|
+
}], ctorParameters: () => [] });
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZ3JhdGl0dWRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9mZWVkYmFjay9ncmF0aXR1ZGUvc2MtZ3JhdGl0dWRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9mZWVkYmFjay9ncmF0aXR1ZGUvc2MtZ3JhdGl0dWRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBb0IsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFbkQ7O0dBRUc7QUFRSCxNQUFNLE9BQU8sb0JBQW9CO0lBTTdCOztPQUVHO0lBQ0g7UUFSQTs7V0FFRztRQUNnQixZQUFPLEdBQUcsTUFBTSxDQUFrRSxvQkFBb0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBTTNJLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDM0IsSUFBSSxDQUNELFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDaEUsa0JBQWtCLEVBQUUsQ0FDdkI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOytHQWxCUSxvQkFBb0I7bUdBQXBCLG9CQUFvQix3RUNoQmpDLHl0QkFXQSw0Q0RFYyxPQUFPOzs0RkFHUixvQkFBb0I7a0JBUGhDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLGNBQWMsV0FFZixDQUFDLE9BQU8sQ0FBQyxtQkFDRCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUdWlEaWFsb2dDb250ZXh0LCBUdWlJY29uIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgUE9MWU1PUlBIRVVTX0NPTlRFWFQgfSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcbmltcG9ydCB7IEVNUFRZLCBvZiwgc3dpdGNoTWFwLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDCq9Ch0L/QsNGB0LjQsdC+IcK7LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2MtZ3JhdGl0dWRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtZ3JhdGl0dWRlLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbVHVpSWNvbl0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjR3JhdGl0dWRlQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiDQmtC+0L3RgtC10LrRgdGCINC00LjQsNC70L7Qs9C+0LLQvtCz0L4g0L7QutC90LAsINCyINC60L7RgtC+0YDQvtC8INC+0YLQutGA0YvRgiDQutC+0LzQv9C+0L3QtdC90YIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQgPSBpbmplY3Q8VHVpRGlhbG9nQ29udGV4dDx2b2lkLCB7IGF1dG9DbG9zZTogbnVtYmVyOyBzdWJUaXRsZTogc3RyaW5nIH0+PihQT0xZTU9SUEhFVVNfQ09OVEVYVCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NHcmF0aXR1ZGVDb21wb25lbnR9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgb2YodGhpcy5jb250ZXh0Py5kYXRhLmF1dG9DbG9zZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoYXV0b0Nsb3NlKSA9PiAoYXV0b0Nsb3NlID8gdGltZXIoYXV0b0Nsb3NlKSA6IEVNUFRZKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dD8uJGltcGxpY2l0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTQgcHktMTQgdGV4dC1jZW50ZXJcIj5cbiAgICA8dHVpLWljb25cbiAgICAgICAgaWNvbj1cIkB0dWkuY2lyY2xlLWNoZWNrXCJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LXR1aS1zdWNjZXNzLWZpbGwgIXNpemUtMjAgIXRleHQtNXhsXCJcbiAgICAvPlxuICAgIDxwIGNsYXNzPVwidGV4dC1oNVwiPtCh0L/QsNGB0LjQsdC+ITwvcD5cbiAgICA8cFxuICAgICAgICBbaW5uZXJIVE1MXT1cImNvbnRleHQ/LmRhdGE/LnN1YlRpdGxlID8/ICfQktCw0Ygg0LTQsNC90L3Ri9C1INGD0YHQv9C10YjQvdC+INC+0YLQv9GA0LDQstC70LXQvdGLLiDQnNGLINGB0LLRj9C20LXQvNGB0Y8g0YEg0LLQsNC80Lgg0LIg0LHQu9C40LbQsNC50YjQtdC1INCy0YDQtdC80Y8uJ1wiXG4gICAgICAgIGNsYXNzPVwidGV4dC1ib2R5LW0gbXgtMlwiXG4gICAgPjwvcD5cbjwvZGl2PlxuIl19
|
@@ -0,0 +1,3 @@
|
|
1
|
+
export * from './feedback-form/sc-feedback-form.component';
|
2
|
+
export * from './gratitude/sc-gratitude.component';
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvZmVlZGJhY2svaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLG9DQUFvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mZWVkYmFjay1mb3JtL3NjLWZlZWRiYWNrLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZ3JhdGl0dWRlL3NjLWdyYXRpdHVkZS5jb21wb25lbnQnO1xuIl19
|
@@ -1,3 +1,4 @@
|
|
1
|
+
export * from './sc-max-files-in-form-input';
|
1
2
|
export * from './sc-qa-info';
|
2
3
|
export * from './sc-user-providers';
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2MtbWF4LWZpbGVzLWluLWZvcm0taW5wdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1xYS1pbmZvJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtdXNlci1wcm92aWRlcnMnO1xuIl19
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { tuiCreateToken } from '@taiga-ui/cdk';
|
2
|
+
/**
|
3
|
+
* Токен максимального количества файлов, отправляемых в форме в байтах.
|
4
|
+
*/
|
5
|
+
export const MAX_FILES_IN_FORM_INPUT = tuiCreateToken(5);
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtbWF4LWZpbGVzLWluLWZvcm0taW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvcHJvdmlkZXJzL3NjLW1heC1maWxlcy1pbi1mb3JtLWlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBMkIsY0FBYyxDQUFTLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHR1aUNyZWF0ZVRva2VuIH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5cbi8qKlxuICog0KLQvtC60LXQvSDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LPQviDQutC+0LvQuNGH0LXRgdGC0LLQsCDRhNCw0LnQu9C+0LIsINC+0YLQv9GA0LDQstC70Y/QtdC80YvRhSDQsiDRhNC+0YDQvNC1INCyINCx0LDQudGC0LDRhS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9GSUxFU19JTl9GT1JNX0lOUFVUOiBJbmplY3Rpb25Ub2tlbjxudW1iZXI+ID0gdHVpQ3JlYXRlVG9rZW48bnVtYmVyPig1KTtcbiJdfQ==
|
package/esm2022/public-api.mjs
CHANGED
@@ -23,10 +23,11 @@ export * from './pages';
|
|
23
23
|
export * from './pipes';
|
24
24
|
export * from './samples';
|
25
25
|
export * from './providers';
|
26
|
+
export * from './feedback';
|
26
27
|
export * from './qrcode';
|
27
28
|
export * from './share-button';
|
28
29
|
export * from './user';
|
29
30
|
export * from './validators';
|
30
31
|
export * from './verification';
|
31
32
|
export * from './profile';
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdWlcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2F1dGgnO1xuZXhwb3J0ICogZnJvbSAnLi9hY2NvcmRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9iYW5uZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jYXJ0JztcbmV4cG9ydCAqIGZyb20gJy4vY2F0YWxvZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRyYWdlbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udGFjdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWxpdmVyeS1hZGRyZXNzJztcbmV4cG9ydCAqIGZyb20gJy4vZGlhbG9ncyc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvci1oYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtLWZpZWxkcyc7XG5leHBvcnQgKiBmcm9tICcuL2ljb25zJztcbmV4cG9ydCAqIGZyb20gJy4vbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vYnJhbmRzLWxpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9uZXdzJztcbmV4cG9ydCAqIGZyb20gJy4vb3JkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc2FtcGxlcyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2ZlZWRiYWNrJztcbmV4cG9ydCAqIGZyb20gJy4vcXJjb2RlJztcbmV4cG9ydCAqIGZyb20gJy4vc2hhcmUtYnV0dG9uJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlcic7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi92ZXJpZmljYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9maWxlJztcbiJdfQ==
|
@@ -1,5 +1,4 @@
|
|
1
|
-
export * from './ask-to-sample-form/sc-ask-to-sample-form.component';
|
2
1
|
export * from './interfaces/sc-i-preview-sample';
|
3
2
|
export * from './preview-sample/sc-preview-sample.component';
|
4
3
|
export * from './sc-sample.module';
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvc2FtcGxlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9zYy1pLXByZXZpZXctc2FtcGxlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJldmlldy1zYW1wbGUvc2MtcHJldmlldy1zYW1wbGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2Mtc2FtcGxlLm1vZHVsZSc7XG4iXX0=
|
@@ -7,7 +7,6 @@ import { TuiAvatar, TuiButtonLoading, TuiCarousel, TuiFieldErrorPipe } from '@ta
|
|
7
7
|
import { TuiInputModule, TuiInputPhoneModule } from '@taiga-ui/legacy';
|
8
8
|
import { RecaptchaFormsModule, RecaptchaModule } from 'ng-recaptcha-2';
|
9
9
|
import { ScFormFieldsModule } from '../form-fields';
|
10
|
-
import { ScAskToSampleFormComponent } from './ask-to-sample-form/sc-ask-to-sample-form.component';
|
11
10
|
import { ScPreviewSampleComponent } from './preview-sample/sc-preview-sample.component';
|
12
11
|
import * as i0 from "@angular/core";
|
13
12
|
import * as i1 from "@taiga-ui/cdk/directives/item";
|
@@ -17,7 +16,7 @@ import * as i2 from "@taiga-ui/kit";
|
|
17
16
|
*/
|
18
17
|
export class ScPreviewSampleModule {
|
19
18
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScPreviewSampleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
20
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: ScPreviewSampleModule, declarations: [ScPreviewSampleComponent
|
19
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: ScPreviewSampleModule, declarations: [ScPreviewSampleComponent], imports: [CommonModule,
|
21
20
|
ReactiveFormsModule,
|
22
21
|
TuiError,
|
23
22
|
TuiFieldErrorPipe,
|
@@ -30,7 +29,7 @@ export class ScPreviewSampleModule {
|
|
30
29
|
TuiButtonLoading,
|
31
30
|
TuiLabel,
|
32
31
|
RecaptchaFormsModule,
|
33
|
-
RecaptchaModule], exports: [ScPreviewSampleComponent
|
32
|
+
RecaptchaModule], exports: [ScPreviewSampleComponent] }); }
|
34
33
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScPreviewSampleModule, imports: [CommonModule,
|
35
34
|
ReactiveFormsModule,
|
36
35
|
TuiError,
|
@@ -44,7 +43,7 @@ export class ScPreviewSampleModule {
|
|
44
43
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScPreviewSampleModule, decorators: [{
|
45
44
|
type: NgModule,
|
46
45
|
args: [{
|
47
|
-
declarations: [ScPreviewSampleComponent
|
46
|
+
declarations: [ScPreviewSampleComponent],
|
48
47
|
imports: [
|
49
48
|
CommonModule,
|
50
49
|
ReactiveFormsModule,
|
@@ -63,7 +62,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
|
|
63
62
|
RecaptchaFormsModule,
|
64
63
|
RecaptchaModule,
|
65
64
|
],
|
66
|
-
exports: [ScPreviewSampleComponent
|
65
|
+
exports: [ScPreviewSampleComponent],
|
67
66
|
}]
|
68
67
|
}] });
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2FtcGxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zYW1wbGVzL3NjLXNhbXBsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7OztBQUV4Rjs7R0FFRztBQXVCSCxNQUFNLE9BQU8scUJBQXFCOytHQUFyQixxQkFBcUI7Z0hBQXJCLHFCQUFxQixpQkFyQmYsd0JBQXdCLGFBRW5DLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsUUFBUTtZQUNSLGlCQUFpQjtZQUNqQixrQkFBa0I7WUFDbEIsY0FBYztZQUNkLG1CQUFtQix1SUFFbkIsU0FBUztZQUNULFVBQVU7WUFDVixNQUFNO1lBQ04sU0FBUztZQUNULGdCQUFnQjtZQUNoQixRQUFRO1lBQ1Isb0JBQW9CO1lBQ3BCLGVBQWUsYUFFVCx3QkFBd0I7Z0hBRXpCLHFCQUFxQixZQW5CMUIsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixRQUFRO1lBRVIsa0JBQWtCO1lBQ2xCLGNBQWM7WUFDZCxtQkFBbUIsMkJBRW5CLFNBQVM7WUFJVCxnQkFBZ0I7WUFFaEIsb0JBQW9CO1lBQ3BCLGVBQWU7OzRGQUlWLHFCQUFxQjtrQkF0QmpDLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMsd0JBQXdCLENBQUM7b0JBQ3hDLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsUUFBUTt3QkFDUixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLEdBQUcsV0FBVzt3QkFDZCxTQUFTO3dCQUNULFVBQVU7d0JBQ1YsTUFBTTt3QkFDTixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsUUFBUTt3QkFDUixvQkFBb0I7d0JBQ3BCLGVBQWU7cUJBQ2xCO29CQUNELE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO2lCQUN0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFR1aUhvdmVyZWQsIFR1aUxldCB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlFcnJvciwgVHVpTGFiZWwgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlBdmF0YXIsIFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUNhcm91c2VsLCBUdWlGaWVsZEVycm9yUGlwZSB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgVHVpSW5wdXRNb2R1bGUsIFR1aUlucHV0UGhvbmVNb2R1bGUgfSBmcm9tICdAdGFpZ2EtdWkvbGVnYWN5JztcbmltcG9ydCB7IFJlY2FwdGNoYUZvcm1zTW9kdWxlLCBSZWNhcHRjaGFNb2R1bGUgfSBmcm9tICduZy1yZWNhcHRjaGEtMic7XG5cbmltcG9ydCB7IFNjRm9ybUZpZWxkc01vZHVsZSB9IGZyb20gJy4uL2Zvcm0tZmllbGRzJztcbmltcG9ydCB7IFNjUHJldmlld1NhbXBsZUNvbXBvbmVudCB9IGZyb20gJy4vcHJldmlldy1zYW1wbGUvc2MtcHJldmlldy1zYW1wbGUuY29tcG9uZW50JztcblxuLyoqXG4gKiDQnNC+0LTRg9C70Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0L7QsdGA0LDQt9GG0L7QsiDRgtC+0LLQsNGA0LAuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbU2NQcmV2aWV3U2FtcGxlQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgVHVpRXJyb3IsXG4gICAgICAgIFR1aUZpZWxkRXJyb3JQaXBlLFxuICAgICAgICBTY0Zvcm1GaWVsZHNNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0TW9kdWxlLFxuICAgICAgICBUdWlJbnB1dFBob25lTW9kdWxlLFxuICAgICAgICAuLi5UdWlDYXJvdXNlbCxcbiAgICAgICAgVHVpQXZhdGFyLFxuICAgICAgICBUdWlIb3ZlcmVkLFxuICAgICAgICBUdWlMZXQsXG4gICAgICAgIFR1aUJ1dHRvbixcbiAgICAgICAgVHVpQnV0dG9uTG9hZGluZyxcbiAgICAgICAgVHVpTGFiZWwsXG4gICAgICAgIFJlY2FwdGNoYUZvcm1zTW9kdWxlLFxuICAgICAgICBSZWNhcHRjaGFNb2R1bGUsXG4gICAgXSxcbiAgICBleHBvcnRzOiBbU2NQcmV2aWV3U2FtcGxlQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU2NQcmV2aWV3U2FtcGxlTW9kdWxlIHt9XG4iXX0=
|