@snabcentr/client-ui 3.9.4 → 3.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. package/contacts/sc-contacts.module.d.ts +2 -2
  2. package/directives/links/sc-links.d.ts +2 -2
  3. package/esm2022/contacts/contacts-accordion/sc-contacts-accordion.component.mjs +4 -4
  4. package/esm2022/contacts/sc-contacts.module.mjs +3 -3
  5. package/esm2022/directives/links/sc-links.mjs +3 -3
  6. package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +267 -0
  7. package/esm2022/feedback/gratitude/sc-gratitude.component.mjs +32 -0
  8. package/esm2022/feedback/index.mjs +3 -0
  9. package/esm2022/pipes/index.mjs +2 -2
  10. package/esm2022/pipes/sc-phone-format.mjs +44 -0
  11. package/esm2022/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.mjs +4 -4
  12. package/esm2022/profile/sc-profile.module.mjs +3 -3
  13. package/esm2022/providers/index.mjs +2 -1
  14. package/esm2022/providers/sc-max-files-in-form-input.mjs +6 -0
  15. package/esm2022/public-api.mjs +2 -1
  16. package/esm2022/samples/index.mjs +1 -2
  17. package/esm2022/samples/sc-sample.module.mjs +5 -6
  18. package/esm2022/user/sc-user.module.mjs +3 -3
  19. package/esm2022/user/user-managers/sc-user-managers.component.mjs +4 -4
  20. package/feedback/feedback-form/sc-feedback-form.component.d.ts +123 -0
  21. package/feedback/gratitude/sc-gratitude.component.d.ts +20 -0
  22. package/feedback/index.d.ts +2 -0
  23. package/fesm2022/snabcentr-client-ui.mjs +330 -153
  24. package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
  25. package/package.json +1 -1
  26. package/pipes/index.d.ts +1 -1
  27. package/pipes/{sc-formatted-phone.d.ts → sc-phone-format.d.ts} +3 -3
  28. package/profile/sc-profile.module.d.ts +2 -2
  29. package/providers/index.d.ts +1 -0
  30. package/providers/sc-max-files-in-form-input.d.ts +5 -0
  31. package/public-api.d.ts +1 -0
  32. package/release_notes.tmp +3 -3
  33. package/samples/index.d.ts +0 -1
  34. package/samples/sc-sample.module.d.ts +10 -11
  35. package/styles/tailwind/tailwind.scss +26 -0
  36. package/user/sc-user.module.d.ts +2 -2
  37. package/esm2022/pipes/sc-formatted-phone.mjs +0 -44
  38. package/esm2022/samples/ask-to-sample-form/sc-ask-to-sample-form.component.mjs +0 -117
  39. package/samples/ask-to-sample-form/sc-ask-to-sample-form.component.d.ts +0 -52
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snabcentr/client-ui",
3
- "version": "3.9.4",
3
+ "version": "3.11.0",
4
4
  "author": "Snabcentr Ltd.",
5
5
  "repository": "https://gitlab.snabcentr.met/web/angular/snabcentr-client-ui-lib",
6
6
  "license": "Commercial",
package/pipes/index.d.ts CHANGED
@@ -1 +1 @@
1
- export * from './sc-formatted-phone';
1
+ export * from './sc-phone-format';
@@ -6,7 +6,7 @@ import * as i0 from "@angular/core";
6
6
  * Если переданный номер телефона валиден, он будет отформатирован с использованием метода `formatPhoneNumber` сервиса `ScPhoneService`.
7
7
  * Если номер невалиден, возвращается исходное значение.
8
8
  */
9
- export declare class ScFormatePhonePipe implements PipeTransform {
9
+ export declare class ScPhoneFormatPipe implements PipeTransform {
10
10
  /**
11
11
  * Преобразует строковое значение номера телефона.
12
12
  *
@@ -16,6 +16,6 @@ export declare class ScFormatePhonePipe implements PipeTransform {
16
16
  * @returns Отформатированный номер телефона, если он валиден, или исходное значение, если он невалиден.
17
17
  */
18
18
  transform(value: string, format?: 'normal' | 'clean' | 'cleanWithPlus'): string;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<ScFormatePhonePipe, never>;
20
- static ɵpipe: i0.ɵɵPipeDeclaration<ScFormatePhonePipe, "scFormatePhone", true>;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScPhoneFormatPipe, never>;
20
+ static ɵpipe: i0.ɵɵPipeDeclaration<ScPhoneFormatPipe, "scPhoneFormat", true>;
21
21
  }
@@ -12,13 +12,13 @@ import * as i10 from "../contacts/sc-contacts.module";
12
12
  import * as i11 from "../directives/terminal-link/sc-terminal-link.directive";
13
13
  import * as i12 from "../directives/links/sc-tel-link.directive";
14
14
  import * as i13 from "../directives/links/sc-email-link.directive";
15
- import * as i14 from "../pipes/sc-formatted-phone";
15
+ import * as i14 from "../pipes/sc-phone-format";
16
16
  import * as i15 from "@taiga-ui/kit";
17
17
  /**
18
18
  * Модуль профиля пользователя.
19
19
  */
20
20
  export declare class ScProfileModule {
21
21
  static ɵfac: i0.ɵɵFactoryDeclaration<ScProfileModule, never>;
22
- static ɵmod: i0.ɵɵNgModuleDeclaration<ScProfileModule, [typeof i1.ScProfileAccordionsContentComponent], [typeof i2.CommonModule, typeof i3.ScUserModule, typeof i4.ScAccordionModule, typeof i5.ScContragentsModule, typeof i6.ScDeliveryAddressModule, typeof i7.TuiLoader, typeof i8.TuiLet, typeof i7.TuiLink, typeof i7.TuiLabel, typeof i7.TuiIcon, typeof i9.FormsModule, typeof i9.ReactiveFormsModule, typeof i7.TuiButton, typeof i10.ScContactsModule, typeof i11.ScTerminalLinkDirective, typeof i12.ScTelLinkDirective, typeof i13.ScEmailLinkDirective, typeof i14.ScFormatePhonePipe, typeof i15.TuiCheckbox], [typeof i1.ScProfileAccordionsContentComponent]>;
22
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ScProfileModule, [typeof i1.ScProfileAccordionsContentComponent], [typeof i2.CommonModule, typeof i3.ScUserModule, typeof i4.ScAccordionModule, typeof i5.ScContragentsModule, typeof i6.ScDeliveryAddressModule, typeof i7.TuiLoader, typeof i8.TuiLet, typeof i7.TuiLink, typeof i7.TuiLabel, typeof i7.TuiIcon, typeof i9.FormsModule, typeof i9.ReactiveFormsModule, typeof i7.TuiButton, typeof i10.ScContactsModule, typeof i11.ScTerminalLinkDirective, typeof i12.ScTelLinkDirective, typeof i13.ScEmailLinkDirective, typeof i14.ScPhoneFormatPipe, typeof i15.TuiCheckbox], [typeof i1.ScProfileAccordionsContentComponent]>;
23
23
  static ɵinj: i0.ɵɵInjectorDeclaration<ScProfileModule>;
24
24
  }
@@ -1,2 +1,3 @@
1
+ export * from './sc-max-files-in-form-input';
1
2
  export * from './sc-qa-info';
2
3
  export * from './sc-user-providers';
@@ -0,0 +1,5 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * Токен максимального количества файлов, отправляемых в форме в байтах.
4
+ */
5
+ export declare const MAX_FILES_IN_FORM_INPUT: InjectionToken<number>;
package/public-api.d.ts CHANGED
@@ -20,6 +20,7 @@ export * from './pages';
20
20
  export * from './pipes';
21
21
  export * from './samples';
22
22
  export * from './providers';
23
+ export * from './feedback';
23
24
  export * from './qrcode';
24
25
  export * from './share-button';
25
26
  export * from './user';
package/release_notes.tmp CHANGED
@@ -1,6 +1,6 @@
1
- ## 3.9.4 (2025-01-23)
1
+ ## 3.11.0 (2025-01-29)
2
2
 
3
- ### changed (1 change)
3
+ ### fixed (1 change)
4
4
 
5
- - [#10965: Добавлен флаг для определения отображением плитки категории.](web_soft/libs/angular/snabcentr-client-ui-lib@3ae479cbfb2d0697eb829e54c4efcd957d0f9901) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!217))
5
+ - [#10903: Исправлено наименование пайпа форматирования телефона](web_soft/libs/angular/snabcentr-client-ui-lib@df7a62ec21253beddad65c4912ee31f8fdae9ea0) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!219))
6
6
 
@@ -1,4 +1,3 @@
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';
@@ -1,20 +1,19 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./preview-sample/sc-preview-sample.component";
3
- import * as i2 from "./ask-to-sample-form/sc-ask-to-sample-form.component";
4
- import * as i3 from "@angular/common";
5
- import * as i4 from "@angular/forms";
6
- import * as i5 from "@taiga-ui/core";
7
- import * as i6 from "@taiga-ui/kit";
8
- import * as i7 from "../form-fields/form-fields.module";
9
- import * as i8 from "@taiga-ui/legacy";
10
- import * as i9 from "@taiga-ui/cdk/directives/item";
11
- import * as i10 from "@taiga-ui/cdk";
12
- import * as i11 from "ng-recaptcha-2";
3
+ import * as i2 from "@angular/common";
4
+ import * as i3 from "@angular/forms";
5
+ import * as i4 from "@taiga-ui/core";
6
+ import * as i5 from "@taiga-ui/kit";
7
+ import * as i6 from "../form-fields/form-fields.module";
8
+ import * as i7 from "@taiga-ui/legacy";
9
+ import * as i8 from "@taiga-ui/cdk/directives/item";
10
+ import * as i9 from "@taiga-ui/cdk";
11
+ import * as i10 from "ng-recaptcha-2";
13
12
  /**
14
13
  * Модуль представления образцов товара.
15
14
  */
16
15
  export declare class ScPreviewSampleModule {
17
16
  static ɵfac: i0.ɵɵFactoryDeclaration<ScPreviewSampleModule, never>;
18
- static ɵmod: i0.ɵɵNgModuleDeclaration<ScPreviewSampleModule, [typeof i1.ScPreviewSampleComponent, typeof i2.ScAskToSampleFormComponent], [typeof i3.CommonModule, typeof i4.ReactiveFormsModule, typeof i5.TuiError, typeof i6.TuiFieldErrorPipe, typeof i7.ScFormFieldsModule, typeof i8.TuiInputModule, typeof i8.TuiInputPhoneModule, typeof i9.TuiItem, typeof i6.TuiCarouselComponent, typeof i6.TuiCarouselDirective, typeof i6.TuiCarouselAutoscroll, typeof i6.TuiCarouselButtons, typeof i6.TuiCarouselScroll, typeof i6.TuiAvatar, typeof i10.TuiHovered, typeof i10.TuiLet, typeof i5.TuiButton, typeof i6.TuiButtonLoading, typeof i5.TuiLabel, typeof i11.RecaptchaFormsModule, typeof i11.RecaptchaModule], [typeof i1.ScPreviewSampleComponent, typeof i2.ScAskToSampleFormComponent]>;
17
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ScPreviewSampleModule, [typeof i1.ScPreviewSampleComponent], [typeof i2.CommonModule, typeof i3.ReactiveFormsModule, typeof i4.TuiError, typeof i5.TuiFieldErrorPipe, typeof i6.ScFormFieldsModule, typeof i7.TuiInputModule, typeof i7.TuiInputPhoneModule, typeof i8.TuiItem, typeof i5.TuiCarouselComponent, typeof i5.TuiCarouselDirective, typeof i5.TuiCarouselAutoscroll, typeof i5.TuiCarouselButtons, typeof i5.TuiCarouselScroll, typeof i5.TuiAvatar, typeof i9.TuiHovered, typeof i9.TuiLet, typeof i4.TuiButton, typeof i5.TuiButtonLoading, typeof i4.TuiLabel, typeof i10.RecaptchaFormsModule, typeof i10.RecaptchaModule], [typeof i1.ScPreviewSampleComponent]>;
19
18
  static ɵinj: i0.ɵɵInjectorDeclaration<ScPreviewSampleModule>;
20
19
  }
@@ -704,6 +704,11 @@ video {
704
704
  margin: -0.5rem !important;
705
705
  }
706
706
 
707
+ .mx-2 {
708
+ margin-left: 0.5rem;
709
+ margin-right: 0.5rem;
710
+ }
711
+
707
712
  .my-2 {
708
713
  margin-top: 0.5rem;
709
714
  margin-bottom: 0.5rem;
@@ -801,6 +806,11 @@ video {
801
806
  display: none;
802
807
  }
803
808
 
809
+ .\!size-20 {
810
+ width: 5rem !important;
811
+ height: 5rem !important;
812
+ }
813
+
804
814
  .size-20 {
805
815
  width: 5rem;
806
816
  height: 5rem;
@@ -1305,6 +1315,11 @@ video {
1305
1315
  padding-right: 1.5rem;
1306
1316
  }
1307
1317
 
1318
+ .py-14 {
1319
+ padding-top: 3.5rem;
1320
+ padding-bottom: 3.5rem;
1321
+ }
1322
+
1308
1323
  .py-4\.5 {
1309
1324
  padding-top: 1.125rem;
1310
1325
  padding-bottom: 1.125rem;
@@ -1338,6 +1353,11 @@ video {
1338
1353
  vertical-align: baseline;
1339
1354
  }
1340
1355
 
1356
+ .\!text-5xl {
1357
+ font-size: 3rem !important;
1358
+ line-height: 1 !important;
1359
+ }
1360
+
1341
1361
  .\!text-body-m-bold {
1342
1362
  font-size: 0.9375rem !important;
1343
1363
  line-height: 1.5rem !important;
@@ -1375,6 +1395,12 @@ video {
1375
1395
  font-weight: 800;
1376
1396
  }
1377
1397
 
1398
+ .text-body-m {
1399
+ font-size: 0.9375rem;
1400
+ line-height: 1.5rem;
1401
+ font-weight: 500;
1402
+ }
1403
+
1378
1404
  .text-body-m-bold {
1379
1405
  font-size: 0.9375rem;
1380
1406
  line-height: 1.5rem;
@@ -14,12 +14,12 @@ import * as i12 from "../form-fields/form-fields.module";
14
14
  import * as i13 from "../directives/terminal-link/sc-terminal-link.directive";
15
15
  import * as i14 from "../directives/links/sc-tel-link.directive";
16
16
  import * as i15 from "../directives/links/sc-email-link.directive";
17
- import * as i16 from "../pipes/sc-formatted-phone";
17
+ import * as i16 from "../pipes/sc-phone-format";
18
18
  /**
19
19
  * Модуль компонентов пользователя.
20
20
  */
21
21
  export declare class ScUserModule {
22
22
  static ɵfac: i0.ɵɵFactoryDeclaration<ScUserModule, never>;
23
- static ɵmod: i0.ɵɵNgModuleDeclaration<ScUserModule, [typeof i1.ScResetUserPasswordComponent, typeof i2.ScUpdateUserInfoDialogComponent, typeof i3.ScUserPhoneApproveDialogComponent, typeof i4.ScUserManagersComponent], [typeof i5.CommonModule, typeof i6.FormsModule, typeof i6.ReactiveFormsModule, typeof i7.TuiFieldErrorPipe, typeof i8.TuiInputPasswordModule, typeof i9.TuiButton, typeof i9.TuiError, typeof i9.TuiLabel, typeof i8.TuiTextfieldControllerModule, typeof i10.TuiLet, typeof i11.ScVerificationModule, typeof i12.ScFormFieldsModule, typeof i9.TuiLoader, typeof i8.TuiInputModule, typeof i8.TuiInputPhoneModule, typeof i7.TuiCheckbox, typeof i9.TuiDataListComponent, typeof i9.TuiDataListDirective, typeof i9.TuiOption, typeof i9.TuiOptGroup, typeof i8.TuiSelectModule, typeof i9.TuiLink, typeof i13.ScTerminalLinkDirective, typeof i14.ScTelLinkDirective, typeof i15.ScEmailLinkDirective, typeof i16.ScFormatePhonePipe, typeof i7.TuiButtonLoading], [typeof i1.ScResetUserPasswordComponent, typeof i2.ScUpdateUserInfoDialogComponent, typeof i3.ScUserPhoneApproveDialogComponent, typeof i4.ScUserManagersComponent]>;
23
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ScUserModule, [typeof i1.ScResetUserPasswordComponent, typeof i2.ScUpdateUserInfoDialogComponent, typeof i3.ScUserPhoneApproveDialogComponent, typeof i4.ScUserManagersComponent], [typeof i5.CommonModule, typeof i6.FormsModule, typeof i6.ReactiveFormsModule, typeof i7.TuiFieldErrorPipe, typeof i8.TuiInputPasswordModule, typeof i9.TuiButton, typeof i9.TuiError, typeof i9.TuiLabel, typeof i8.TuiTextfieldControllerModule, typeof i10.TuiLet, typeof i11.ScVerificationModule, typeof i12.ScFormFieldsModule, typeof i9.TuiLoader, typeof i8.TuiInputModule, typeof i8.TuiInputPhoneModule, typeof i7.TuiCheckbox, typeof i9.TuiDataListComponent, typeof i9.TuiDataListDirective, typeof i9.TuiOption, typeof i9.TuiOptGroup, typeof i8.TuiSelectModule, typeof i9.TuiLink, typeof i13.ScTerminalLinkDirective, typeof i14.ScTelLinkDirective, typeof i15.ScEmailLinkDirective, typeof i16.ScPhoneFormatPipe, typeof i7.TuiButtonLoading], [typeof i1.ScResetUserPasswordComponent, typeof i2.ScUpdateUserInfoDialogComponent, typeof i3.ScUserPhoneApproveDialogComponent, typeof i4.ScUserManagersComponent]>;
24
24
  static ɵinj: i0.ɵɵInjectorDeclaration<ScUserModule>;
25
25
  }
@@ -1,44 +0,0 @@
1
- /* eslint-disable class-methods-use-this */
2
- import { Pipe } from '@angular/core';
3
- import { ScPhoneService } from '@snabcentr/client-core';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * Пайп для форматирования номера телефона.
7
- *
8
- * Если переданный номер телефона валиден, он будет отформатирован с использованием метода `formatPhoneNumber` сервиса `ScPhoneService`.
9
- * Если номер невалиден, возвращается исходное значение.
10
- */
11
- export class ScFormatePhonePipe {
12
- /**
13
- * Преобразует строковое значение номера телефона.
14
- *
15
- * @param value Строка, содержащая номер телефона.
16
- * @param format Формат возвращаемого значения. `normal` - удобочитаемое представление номера телефона, `clean` - очищенное от лишних символов представление номера телефона, `cleanWithPlus` - очищенное от лишних символов представление номера телефона с `+` в начале.
17
- *
18
- * @returns Отформатированный номер телефона, если он валиден, или исходное значение, если он невалиден.
19
- */
20
- transform(value, format = 'normal') {
21
- if (ScPhoneService.isValidPhoneNumber(value)) {
22
- // eslint-disable-next-line default-case
23
- switch (format) {
24
- case 'normal':
25
- return ScPhoneService.formatPhoneNumber(value);
26
- case 'clean':
27
- return ScPhoneService.cleanPhoneNumber(value);
28
- case 'cleanWithPlus':
29
- return `+${ScPhoneService.cleanPhoneNumber(value)}`;
30
- }
31
- }
32
- return value; // Возвращаем оригинальный номер, если он невалиден.
33
- }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScFormatePhonePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
35
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: ScFormatePhonePipe, isStandalone: true, name: "scFormatePhone" }); }
36
- }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScFormatePhonePipe, decorators: [{
38
- type: Pipe,
39
- args: [{
40
- standalone: true,
41
- name: 'scFormatePhone',
42
- }]
43
- }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZm9ybWF0dGVkLXBob25lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3BpcGVzL3NjLWZvcm1hdHRlZC1waG9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUV4RDs7Ozs7R0FLRztBQUtILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0I7Ozs7Ozs7T0FPRztJQUNJLFNBQVMsQ0FBQyxLQUFhLEVBQUUsU0FBK0MsUUFBUTtRQUNuRixJQUFJLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLHdDQUF3QztZQUN4QyxRQUFRLE1BQU0sRUFBRSxDQUFDO2dCQUNiLEtBQUssUUFBUTtvQkFDVCxPQUFPLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkQsS0FBSyxPQUFPO29CQUNSLE9BQU8sY0FBYyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsRCxLQUFLLGVBQWU7b0JBQ2hCLE9BQU8sSUFBSSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLENBQUMsb0RBQW9EO0lBQ3RFLENBQUM7K0dBdkJRLGtCQUFrQjs2R0FBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUo5QixJQUFJO21CQUFDO29CQUNGLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUUsZ0JBQWdCO2lCQUN6QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbmltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjUGhvbmVTZXJ2aWNlIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5cbi8qKlxuICog0J/QsNC50L8g0LTQu9GPINGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC40Y8g0L3QvtC80LXRgNCwINGC0LXQu9C10YTQvtC90LAuXG4gKlxuICog0JXRgdC70Lgg0L/QtdGA0LXQtNCw0L3QvdGL0Lkg0L3QvtC80LXRgCDRgtC10LvQtdGE0L7QvdCwINCy0LDQu9C40LTQtdC9LCDQvtC9INCx0YPQtNC10YIg0L7RgtGE0L7RgNC80LDRgtC40YDQvtCy0LDQvSDRgSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC8INC80LXRgtC+0LTQsCBgZm9ybWF0UGhvbmVOdW1iZXJgINGB0LXRgNCy0LjRgdCwIGBTY1Bob25lU2VydmljZWAuXG4gKiDQldGB0LvQuCDQvdC+0LzQtdGAINC90LXQstCw0LvQuNC00LXQvSwg0LLQvtC30LLRgNCw0YnQsNC10YLRgdGPINC40YHRhdC+0LTQvdC+0LUg0LfQvdCw0YfQtdC90LjQtS5cbiAqL1xuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3NjRm9ybWF0ZVBob25lJyxcbn0pXG5leHBvcnQgY2xhc3MgU2NGb3JtYXRlUGhvbmVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqXG4gICAgICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDRgdGC0YDQvtC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSDQvdC+0LzQtdGA0LAg0YLQtdC70LXRhNC+0L3QsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSDQodGC0YDQvtC60LAsINGB0L7QtNC10YDQttCw0YnQsNGPINC90L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsC5cbiAgICAgKiBAcGFyYW0gZm9ybWF0INCk0L7RgNC80LDRgiDQstC+0LfQstGA0LDRidCw0LXQvNC+0LPQviDQt9C90LDRh9C10L3QuNGPLiBgbm9ybWFsYCAtINGD0LTQvtCx0L7Rh9C40YLQsNC10LzQvtC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1INC90L7QvNC10YDQsCDRgtC10LvQtdGE0L7QvdCwLCBgY2xlYW5gIC0g0L7Rh9C40YnQtdC90L3QvtC1INC+0YIg0LvQuNGI0L3QuNGFINGB0LjQvNCy0L7Qu9C+0LIg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0L3QvtC80LXRgNCwINGC0LXQu9C10YTQvtC90LAsIGBjbGVhbldpdGhQbHVzYCAtINC+0YfQuNGJ0LXQvdC90L7QtSDQvtGCINC70LjRiNC90LjRhSDRgdC40LzQstC+0LvQvtCyINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1INC90L7QvNC10YDQsCDRgtC10LvQtdGE0L7QvdCwINGBIGArYCDQsiDQvdCw0YfQsNC70LUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyDQntGC0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90L3Ri9C5INC90L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsCwg0LXRgdC70Lgg0L7QvSDQstCw0LvQuNC00LXQvSwg0LjQu9C4INC40YHRhdC+0LTQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0LXRgdC70Lgg0L7QvSDQvdC10LLQsNC70LjQtNC10L0uXG4gICAgICovXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBmb3JtYXQ6ICdub3JtYWwnIHwgJ2NsZWFuJyB8ICdjbGVhbldpdGhQbHVzJyA9ICdub3JtYWwnKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKFNjUGhvbmVTZXJ2aWNlLmlzVmFsaWRQaG9uZU51bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbm9ybWFsJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjUGhvbmVTZXJ2aWNlLmZvcm1hdFBob25lTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlICdjbGVhbic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY1Bob25lU2VydmljZS5jbGVhblBob25lTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlICdjbGVhbldpdGhQbHVzJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGArJHtTY1Bob25lU2VydmljZS5jbGVhblBob25lTnVtYmVyKHZhbHVlKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlOyAvLyDQktC+0LfQstGA0LDRidCw0LXQvCDQvtGA0LjQs9C40L3QsNC70YzQvdGL0Lkg0L3QvtC80LXRgCwg0LXRgdC70Lgg0L7QvSDQvdC10LLQsNC70LjQtNC10L0uXG4gICAgfVxufVxuIl19
@@ -1,117 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
2
- import { FormControl, FormGroup, Validators } from '@angular/forms';
3
- import { ScFeedbackService, ScISuggestionType, ScUserService } from '@snabcentr/client-core';
4
- import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
5
- import { catchError, filter, map, of, share, startWith, Subject, switchMap, tap } from 'rxjs';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common";
8
- import * as i2 from "@angular/forms";
9
- import * as i3 from "@taiga-ui/core";
10
- import * as i4 from "../../form-fields/suggestion-field/sc-suggestion-field.component";
11
- import * as i5 from "@taiga-ui/legacy";
12
- import * as i6 from "@taiga-ui/cdk";
13
- import * as i7 from "@taiga-ui/kit";
14
- import * as i8 from "ng-recaptcha-2";
15
- /**
16
- * Компонент формы запроса бесплатного образца.
17
- */
18
- export class ScAskToSampleFormComponent {
19
- constructor() {
20
- /**
21
- * Сервис обратной связи.
22
- */
23
- this.feedbackService = inject(ScFeedbackService);
24
- /**
25
- * Сервис данных о пользователе.
26
- */
27
- this.user$ = inject(ScUserService)
28
- .getUserChange$()
29
- .pipe(tap((user) => {
30
- if (user.isGuest) {
31
- this.form.addControl('recaptcha', this.recaptchaControl);
32
- this.form.controls.email.reset();
33
- this.form.controls.name.reset();
34
- this.form.controls.phone.reset();
35
- }
36
- else {
37
- this.form.removeControl('recaptcha');
38
- this.form.patchValue({
39
- name: user.name,
40
- phone: user.contacts.phone.value,
41
- email: user.contacts.email.value,
42
- });
43
- }
44
- }));
45
- /**
46
- * Контекст диалогового окна, в котором открыт компонент.
47
- */
48
- this.context = inject(POLYMORPHEUS_CONTEXT, {
49
- optional: true,
50
- });
51
- /**
52
- * Поле ввода для recaptcha.
53
- */
54
- this.recaptchaControl = new FormControl(null, Validators.required);
55
- /**
56
- * Группа полей ввода для формы «Пожелания и предложения по улучшению сайта».
57
- */
58
- this.form = new FormGroup({
59
- name: new FormControl(null, [Validators.required, Validators.minLength(3)]),
60
- phone: new FormControl(null, [Validators.required, Validators.minLength(12)]),
61
- email: new FormControl(null, [Validators.required, Validators.email]),
62
- recaptcha: new FormControl(null, Validators.required),
63
- });
64
- /**
65
- * Перечисление типов подсказок.
66
- */
67
- this.suggestionType = ScISuggestionType;
68
- /**
69
- * {@link Subject} события отправки формы.
70
- */
71
- this.onSubmit = new Subject();
72
- /**
73
- * {@link Observable} запроса на отправку данных.
74
- */
75
- this.request$ = this.onSubmit.pipe(filter(() => this.form.valid), map(() => this.form.value), switchMap((value) => this.feedbackService.sendFeedback('samples', value).pipe(tap(() => {
76
- if (this.context) {
77
- this.context.completeWith();
78
- }
79
- else {
80
- this.form.controls.email.reset();
81
- this.form.controls.name.reset();
82
- this.form.controls.phone.reset();
83
- }
84
- }),
85
- // eslint-disable-next-line rxjs/no-implicit-any-catch
86
- catchError((error) => {
87
- this.form.markAllAsTouched();
88
- const { errors, message } = error.error;
89
- if (errors) {
90
- Object.keys(errors).forEach((key) => {
91
- const control = this.form.get(key);
92
- if (control) {
93
- // eslint-disable-next-line security/detect-object-injection
94
- control.setErrors({ serverResponse: errors[key] });
95
- }
96
- });
97
- }
98
- else if (message) {
99
- this.form.setErrors({ serverResponse: [message] });
100
- }
101
- return of(null);
102
- }),
103
- // eslint-disable-next-line unicorn/no-useless-undefined
104
- startWith(undefined))), share());
105
- /**
106
- * {@link Observable} изменения состояния загрузки данных.
107
- */
108
- this.loading$ = this.request$.pipe(map((value) => value === undefined));
109
- }
110
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScAskToSampleFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
111
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ScAskToSampleFormComponent, selector: "sc-ask-to-sample-form", ngImport: i0, template: "<form\n *tuiLet=\"user$ | async\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <label tuiLabel\n >\u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0418\u0432\u0430\u043D\u043E\u0432 \u0418\u0432\u0430\u043D \u0418\u0432\u0430\u043D\u043E\u0432\u0438\u0447 </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\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 ></tui-error>\n </label>\n <label\n tuiLabel\n class=\"w-full\"\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 ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <div\n *ngIf=\"form.get('recaptcha')\"\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\"></re-captcha>\n </div>\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</form>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "component", type: i4.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: i5.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i5.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i5.TuiInputPhoneComponent, selector: "tui-input-phone", inputs: ["phoneMaskAfterCountryCode", "allowText", "search", "countryCode"], outputs: ["searchChange"] }, { kind: "directive", type: i5.TuiInputPhoneDirective, selector: "tui-input-phone" }, { kind: "directive", type: i6.TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "directive", type: i3.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: i7.TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "directive", type: i3.TuiLabel, selector: "label[tuiLabel]" }, { kind: "directive", type: i8.RecaptchaValueAccessorDirective, selector: "re-captcha[formControlName],re-captcha[formControl],re-captcha[ngModel]" }, { kind: "component", type: i8.RecaptchaComponent, selector: "re-captcha", inputs: ["id", "siteKey", "theme", "type", "size", "tabIndex", "badge", "errorMode"], outputs: ["resolved", "error", "errored"], exportAs: ["reCaptcha"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
112
- }
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScAskToSampleFormComponent, decorators: [{
114
- type: Component,
115
- args: [{ selector: 'sc-ask-to-sample-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n *tuiLet=\"user$ | async\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <label tuiLabel\n >\u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0418\u0432\u0430\u043D\u043E\u0432 \u0418\u0432\u0430\u043D \u0418\u0432\u0430\u043D\u043E\u0432\u0438\u0447 </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\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 ></tui-error>\n </label>\n <label\n tuiLabel\n class=\"w-full\"\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 ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <div\n *ngIf=\"form.get('recaptcha')\"\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\"></re-captcha>\n </div>\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</form>\n" }]
116
- }] });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYXNrLXRvLXNhbXBsZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zYW1wbGVzL2Fzay10by1zYW1wbGUtZm9ybS9zYy1hc2stdG8tc2FtcGxlLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3NhbXBsZXMvYXNrLXRvLXNhbXBsZS1mb3JtL3NjLWFzay10by1zYW1wbGUtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7OztBQUkxRzs7R0FFRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUFMdkM7UUFNSTs7V0FFRztRQUNjLG9CQUFlLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhGOztXQUVHO1FBQ2EsVUFBSyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7YUFDeEMsY0FBYyxFQUFFO2FBQ2hCLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNULElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxJQUFrQixDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsQ0FBQztpQkFBTSxDQUFDO2dCQUNILElBQUksQ0FBQyxJQUFrQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSztvQkFDaEMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUs7aUJBQ25DLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRU47O1dBRUc7UUFDYyxZQUFPLEdBQUcsTUFBTSxDQUFtQixvQkFBb0IsRUFBRTtZQUN0RSxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFFSDs7V0FFRztRQUNhLHFCQUFnQixHQUFHLElBQUksV0FBVyxDQUFnQixJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTdGOztXQUVHO1FBQ0ksU0FBSSxHQUFHLElBQUksU0FBUyxDQUFDO1lBQ3hCLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUYsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFnQixJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RixLQUFLLEVBQUUsSUFBSSxXQUFXLENBQWdCLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BGLFNBQVMsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUN4RCxDQUFDLENBQUM7UUFFSDs7V0FFRztRQUNhLG1CQUFjLEdBQTZCLGlCQUFpQixDQUFDO1FBRTdFOztXQUVHO1FBQ2EsYUFBUSxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRTlEOztXQUVHO1FBQ2EsYUFBUSxHQUFpQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDdkUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQzdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQTJCLENBQUMsRUFDaEQsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDcEQsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNMLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDaEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLHNEQUFzRDtRQUN0RCxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRTdCLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQXlCLENBQUM7WUFFNUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFFbkMsSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDViw0REFBNEQ7d0JBQzVELE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDdkQsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7aUJBQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUVELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQztRQUNGLHdEQUF3RDtRQUN4RCxTQUFTLENBQUMsU0FBUyxDQUFDLENBQ3ZCLENBQ0osRUFDRCxLQUFLLEVBQUUsQ0FDVixDQUFDO1FBRUY7O1dBRUc7UUFDYSxhQUFRLEdBQXdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDM0c7K0dBOUdZLDBCQUEwQjttR0FBMUIsMEJBQTBCLDZEQ3BCdkMsaWxFQXdEQTs7NEZEcENhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDSSx1QkFBdUIsbUJBRWhCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QsbG9kYXNoL3ByZWZlci1sb2Rhc2gtbWV0aG9kICovXG5cbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2NGZWVkYmFja1NlcnZpY2UsIFNjSUZlZWRiYWNrTWVzc2FnZSwgU2NJU3VnZ2VzdGlvblR5cGUsIFNjVXNlclNlcnZpY2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBQT0xZTU9SUEhFVVNfQ09OVEVYVCB9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBcGlFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vYXV0aCc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINGE0L7RgNC80Ysg0LfQsNC/0YDQvtGB0LAg0LHQtdGB0L/Qu9Cw0YLQvdC+0LPQviDQvtCx0YDQsNC30YbQsC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1hc2stdG8tc2FtcGxlLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1hc2stdG8tc2FtcGxlLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0Fza1RvU2FtcGxlRm9ybUNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC+0LHRgNCw0YLQvdC+0Lkg0YHQstGP0LfQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGZlZWRiYWNrU2VydmljZTogU2NGZWVkYmFja1NlcnZpY2UgPSBpbmplY3QoU2NGZWVkYmFja1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LDQvdC90YvRhSDQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHVzZXIkID0gaW5qZWN0KFNjVXNlclNlcnZpY2UpXG4gICAgICAgIC5nZXRVc2VyQ2hhbmdlJCgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFwKCh1c2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXIuaXNHdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5mb3JtIGFzIEZvcm1Hcm91cCkuYWRkQ29udHJvbCgncmVjYXB0Y2hhJywgdGhpcy5yZWNhcHRjaGFDb250cm9sKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmVtYWlsLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5uYW1lLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5waG9uZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5yZW1vdmVDb250cm9sKCdyZWNhcHRjaGEnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdXNlci5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHVzZXIuY29udGFjdHMucGhvbmUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogdXNlci5jb250YWN0cy5lbWFpbC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgIC8qKlxuICAgICAqINCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQgPSBpbmplY3Q8VHVpRGlhbG9nQ29udGV4dD4oUE9MWU1PUlBIRVVTX0NPTlRFWFQsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LvQtSDQstCy0L7QtNCwINC00LvRjyByZWNhcHRjaGEuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHJlY2FwdGNoYUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cbiAgICAvKipcbiAgICAgKiDQk9GA0YPQv9C/0LAg0L/QvtC70LXQuSDQstCy0L7QtNCwINC00LvRjyDRhNC+0YDQvNGLIMKr0J/QvtC20LXQu9Cw0L3QuNGPINC4INC/0YDQtdC00LvQvtC20LXQvdC40Y8g0L/QviDRg9C70YPRh9GI0LXQvdC40Y4g0YHQsNC50YLQsMK7LlxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyldKSxcbiAgICAgICAgcGhvbmU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTIpXSksXG4gICAgICAgIGVtYWlsOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdKSxcbiAgICAgICAgcmVjYXB0Y2hhOiBuZXcgRm9ybUNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0YLQuNC/0L7QsiDQv9C+0LTRgdC60LDQt9C+0LouXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Z2dlc3Rpb25UeXBlOiB0eXBlb2YgU2NJU3VnZ2VzdGlvblR5cGUgPSBTY0lTdWdnZXN0aW9uVHlwZTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBTdWJqZWN0fSDRgdC+0LHRi9GC0LjRjyDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9uU3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQvdCwINC+0YLQv9GA0LDQstC60YMg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1ZXN0JDogT2JzZXJ2YWJsZTx1bmRlZmluZWQgfCBudWxsPiA9IHRoaXMub25TdWJtaXQucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZm9ybS52YWxpZCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmZvcm0udmFsdWUgYXMgU2NJRmVlZGJhY2tNZXNzYWdlKSxcbiAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgIHRoaXMuZmVlZGJhY2tTZXJ2aWNlLnNlbmRGZWVkYmFjaygnc2FtcGxlcycsIHZhbHVlKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5jb21wbGV0ZVdpdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5lbWFpbC5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLm5hbWUucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5waG9uZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMvbm8taW1wbGljaXQtYW55LWNhdGNoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvcnMsIG1lc3NhZ2UgfSA9IGVycm9yLmVycm9yIGFzIEFwaUVycm9yUmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IGVycm9yc1trZXldIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogW21lc3NhZ2VdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXVzZWxlc3MtdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LPRgNGD0LfQutC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnJlcXVlc3QkLnBpcGUobWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHVuZGVmaW5lZCkpO1xufVxuIiwiPGZvcm1cbiAgICAqdHVpTGV0PVwidXNlciQgfCBhc3luY1wiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TdWJtaXQubmV4dCgpXCJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGdhcC00XCJcbj5cbiAgICA8bGFiZWwgdHVpTGFiZWxcbiAgICAgICAgPtCk0JjQnlxuICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj4g0JjQstCw0L3QvtCyINCY0LLQsNC9INCY0LLQsNC90L7QstC40YcgPC90dWktaW5wdXQ+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgPjwvdHVpLWVycm9yPlxuICAgIDwvbGFiZWw+XG4gICAgPGxhYmVsIHR1aUxhYmVsXG4gICAgICAgID7QotC10LvQtdGE0L7QvVxuICAgICAgICA8dHVpLWlucHV0LXBob25lIGZvcm1Db250cm9sTmFtZT1cInBob25lXCI+INCi0LXQu9C10YTQvtC9IDwvdHVpLWlucHV0LXBob25lPlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiXG4gICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgPC9sYWJlbD5cbiAgICA8bGFiZWxcbiAgICAgICAgdHVpTGFiZWxcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICA+0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcbiAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiPlxuICAgICAgICAgICAg0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcbiAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZW1haWxcIlxuICAgICAgICAgICAgPjwvc2Mtc3VnZ2VzdGlvbi1maWVsZD5cbiAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgID48L3R1aS1lcnJvcj5cbiAgICA8L2xhYmVsPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJmb3JtLmdldCgncmVjYXB0Y2hhJylcIlxuICAgICAgICBjbGFzcz1cIm1iLTMgbWF4LWgtMjAgb3ZlcmZsb3ctaGlkZGVuIGR1cmF0aW9uLTUwMFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJyFtYXgtaC0wICEtbS0yJzogZm9ybS5nZXQoJ3JlY2FwdGNoYScpPy52YWxpZCB9XCJcbiAgICA+XG4gICAgICAgIDxyZS1jYXB0Y2hhIGZvcm1Db250cm9sTmFtZT1cInJlY2FwdGNoYVwiPjwvcmUtY2FwdGNoYT5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICAgIHR1aUJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgW2xvYWRpbmddPVwiISEobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5zYy5zZW5kXCJcbiAgICAgICAgY2xhc3M9XCJzZWxmLWNlbnRlclwiXG4gICAgPlxuICAgICAgICDQntGB0YLQsNCy0LjRgtGMXG4gICAgPC9idXR0b24+XG48L2Zvcm0+XG4iXX0=
@@ -1,52 +0,0 @@
1
- import { FormControl, FormGroup } from '@angular/forms';
2
- import { ScISuggestionType } from '@snabcentr/client-core';
3
- import { Observable, Subject } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * Компонент формы запроса бесплатного образца.
7
- */
8
- export declare class ScAskToSampleFormComponent {
9
- /**
10
- * Сервис обратной связи.
11
- */
12
- private readonly feedbackService;
13
- /**
14
- * Сервис данных о пользователе.
15
- */
16
- readonly user$: Observable<import("@snabcentr/client-core").ScUser>;
17
- /**
18
- * Контекст диалогового окна, в котором открыт компонент.
19
- */
20
- private readonly context;
21
- /**
22
- * Поле ввода для recaptcha.
23
- */
24
- readonly recaptchaControl: FormControl<string | null>;
25
- /**
26
- * Группа полей ввода для формы «Пожелания и предложения по улучшению сайта».
27
- */
28
- form: FormGroup<{
29
- name: FormControl<string | null>;
30
- phone: FormControl<string | null>;
31
- email: FormControl<string | null>;
32
- recaptcha: FormControl<null>;
33
- }>;
34
- /**
35
- * Перечисление типов подсказок.
36
- */
37
- readonly suggestionType: typeof ScISuggestionType;
38
- /**
39
- * {@link Subject} события отправки формы.
40
- */
41
- readonly onSubmit: Subject<void>;
42
- /**
43
- * {@link Observable} запроса на отправку данных.
44
- */
45
- readonly request$: Observable<undefined | null>;
46
- /**
47
- * {@link Observable} изменения состояния загрузки данных.
48
- */
49
- readonly loading$: Observable<boolean>;
50
- static ɵfac: i0.ɵɵFactoryDeclaration<ScAskToSampleFormComponent, never>;
51
- static ɵcmp: i0.ɵɵComponentDeclaration<ScAskToSampleFormComponent, "sc-ask-to-sample-form", never, {}, {}, never, never, false, never>;
52
- }