@snabcentr/client-ui 0.7.0 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. package/auth/sc-auth.module.d.ts +2 -1
  2. package/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.d.ts +4 -42
  3. package/catalog/categories-list/sc-categories-list.component.d.ts +31 -0
  4. package/catalog/index.d.ts +1 -0
  5. package/catalog/input-quantity/sc-input-quantity.component.d.ts +1 -5
  6. package/catalog/sc-catalog.module.d.ts +9 -8
  7. package/esm2020/auth/sc-auth.module.mjs +7 -3
  8. package/esm2020/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.mjs +9 -85
  9. package/esm2020/cart/cart-item-mobile/sc-cart-item-mobile.component.mjs +3 -3
  10. package/esm2020/catalog/categories-list/sc-categories-list.component.mjs +44 -0
  11. package/esm2020/catalog/index.mjs +2 -1
  12. package/esm2020/catalog/input-quantity/sc-input-quantity.component.mjs +3 -5
  13. package/esm2020/catalog/price-card/sc-price-card.component.mjs +3 -3
  14. package/esm2020/catalog/sc-catalog.module.mjs +8 -3
  15. package/esm2020/order/order-item-mobile/order-item-mobile.component.mjs +3 -3
  16. package/esm2020/public-api.mjs +2 -1
  17. package/esm2020/verification/index.mjs +3 -0
  18. package/esm2020/verification/phone-approve-form/phone-approve-form.component.mjs +154 -0
  19. package/esm2020/verification/sc-verification.module.mjs +73 -0
  20. package/fesm2015/snabcentr-client-ui.mjs +257 -75
  21. package/fesm2015/snabcentr-client-ui.mjs.map +1 -1
  22. package/fesm2020/snabcentr-client-ui.mjs +249 -73
  23. package/fesm2020/snabcentr-client-ui.mjs.map +1 -1
  24. package/package.json +2 -2
  25. package/public-api.d.ts +1 -0
  26. package/styles/tailwind/tailwind.scss +37 -0
  27. package/verification/index.d.ts +2 -0
  28. package/verification/phone-approve-form/phone-approve-form.component.d.ts +83 -0
  29. package/verification/sc-verification.module.d.ts +16 -0
@@ -8,11 +8,12 @@ import * as i6 from "@taiga-ui/kit";
8
8
  import * as i7 from "@taiga-ui/core";
9
9
  import * as i8 from "@taiga-ui/cdk";
10
10
  import * as i9 from "@maskito/angular";
11
+ import * as i10 from "../verification/sc-verification.module";
11
12
  /**
12
13
  * Модуль аутентификации.
13
14
  */
14
15
  export declare class ScAuthModule {
15
16
  static ɵfac: i0.ɵɵFactoryDeclaration<ScAuthModule, never>;
16
- static ɵmod: i0.ɵɵNgModuleDeclaration<ScAuthModule, [typeof i1.ScSignInFormComponent, typeof i2.ScSignInFormByPhoneComponent, typeof i3.ScSignInFormByEmailComponent], [typeof i4.CommonModule, typeof i5.FormsModule, typeof i5.ReactiveFormsModule, typeof i6.TuiInputPasswordModule, typeof i6.TuiInputModule, typeof i7.TuiTextfieldControllerModule, typeof i7.TuiLinkModule, typeof i7.TuiButtonModule, typeof i7.TuiLabelModule, typeof i7.TuiModeModule, typeof i6.TuiFieldErrorPipeModule, typeof i7.TuiErrorModule, typeof i8.TuiLetModule, typeof i7.TuiLoaderModule, typeof i6.TuiInputPhoneModule, typeof i9.MaskitoModule], [typeof i1.ScSignInFormComponent, typeof i2.ScSignInFormByPhoneComponent, typeof i3.ScSignInFormByEmailComponent]>;
17
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ScAuthModule, [typeof i1.ScSignInFormComponent, typeof i2.ScSignInFormByPhoneComponent, typeof i3.ScSignInFormByEmailComponent], [typeof i4.CommonModule, typeof i5.FormsModule, typeof i5.ReactiveFormsModule, typeof i6.TuiInputPasswordModule, typeof i6.TuiInputModule, typeof i7.TuiTextfieldControllerModule, typeof i7.TuiLinkModule, typeof i7.TuiButtonModule, typeof i7.TuiLabelModule, typeof i7.TuiModeModule, typeof i6.TuiFieldErrorPipeModule, typeof i7.TuiErrorModule, typeof i8.TuiLetModule, typeof i7.TuiLoaderModule, typeof i6.TuiInputPhoneModule, typeof i9.MaskitoModule, typeof i10.ScVerificationModule], [typeof i1.ScSignInFormComponent, typeof i2.ScSignInFormByPhoneComponent, typeof i3.ScSignInFormByEmailComponent]>;
17
18
  static ɵinj: i0.ɵɵInjectorDeclaration<ScAuthModule>;
18
19
  }
@@ -1,6 +1,5 @@
1
- import { FormGroup, FormControl } from '@angular/forms';
2
- import { MaskitoOptions } from '@maskito/core';
3
- import { ScAuthService, ScVerificationService } from '@snabcentr/client-core';
1
+ import { FormGroup } from '@angular/forms';
2
+ import { ScAuthService } from '@snabcentr/client-core';
4
3
  import { Subject, Observable } from 'rxjs';
5
4
  import * as i0 from "@angular/core";
6
5
  /**
@@ -8,19 +7,14 @@ import * as i0 from "@angular/core";
8
7
  */
9
8
  export declare class ScSignInFormByPhoneComponent {
10
9
  private readonly authService;
11
- private readonly verificationService;
12
10
  /**
13
- * Этап процесса аутентификации.
11
+ * Наличие кода подтверждения у пользователя.
14
12
  */
15
13
  haveCode: boolean;
16
14
  /**
17
15
  * Группа полей ввода для формы «Вход на сайт».
18
16
  */
19
17
  readonly formByPhone: FormGroup;
20
- /**
21
- * Поле ввода 'Номер телефона'.
22
- */
23
- get phoneControl(): FormControl<string | null>;
24
18
  /**
25
19
  * {@link Subject} События отправки формы.
26
20
  */
@@ -29,49 +23,17 @@ export declare class ScSignInFormByPhoneComponent {
29
23
  * {@link Observable} Запроса данных аутентификации.
30
24
  */
31
25
  private readonly phoneRequest$;
32
- /**
33
- * {@link Observable} Запроса данных получения информации о том свободен ли номер телефона.
34
- */
35
- isPhoneNotBusy$: Observable<boolean | null>;
36
- /**
37
- * {@link Subject} События отправки кода подтверждения.
38
- */
39
- readonly onSendCode: Subject<void>;
40
- /**
41
- * {@link Observable} Запроса данных получения кода подтверждения.
42
- */
43
- readonly loadingApproveCode$: Observable<boolean>;
44
- /**
45
- * Маска поля ввода кода для подтверждения.
46
- */
47
- readonly approveCodeMask: MaskitoOptions;
48
26
  /**
49
27
  * {@link Observable} Изменения состояния загрузки данных аутентификации по номеру телефона.
50
28
  */
51
29
  readonly loadingPhoneAuth$: Observable<boolean>;
52
- /**
53
- * {@link Subject} События запуска/остановки таймера.
54
- */
55
- readonly reloadTimer$: Subject<number>;
56
- /**
57
- * {@link Observable} Таймера.
58
- *
59
- * TODO: Вынести таймер в отдельную директиву TASK:[#9260].
60
- */
61
- readonly timer$: Observable<string | null>;
62
30
  /**
63
31
  * Инициализирует экземпляр класса {@link ScSignInFormByPhoneComponent}.
64
32
  *
65
33
  * @param authService Сервис аутентификации.
66
34
  * @param verificationService Сервис верификации.
67
35
  */
68
- constructor(authService: ScAuthService, verificationService: ScVerificationService);
69
- /**
70
- * Устанавливает состояние наличия кода подтверждения у пользователя.
71
- *
72
- * @param haveCode Признак того есть ли код подтверждения или нет.
73
- */
74
- setHaveCode(haveCode: boolean): void;
36
+ constructor(authService: ScAuthService);
75
37
  static ɵfac: i0.ɵɵFactoryDeclaration<ScSignInFormByPhoneComponent, never>;
76
38
  static ɵcmp: i0.ɵɵComponentDeclaration<ScSignInFormByPhoneComponent, "sc-sign-in-form-by-phone", never, {}, {}, never, never, false>;
77
39
  }
@@ -0,0 +1,31 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { ScIUrls } from '@snabcentr/client-core';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Компонент списка категорий.
6
+ */
7
+ export declare class ScCategoriesListComponent<T> {
8
+ private readonly urls;
9
+ /**
10
+ * Список категорий.
11
+ */
12
+ categories: T[] | undefined | null;
13
+ /**
14
+ * Событие нажатия на категорию.
15
+ */
16
+ clickCategoryEvent: EventEmitter<T>;
17
+ /**
18
+ * Инициализирует экземпляр класса {@link ScCategoriesListComponent}.
19
+ *
20
+ * @param urls объект информации о базовом списке ссылок приложения.
21
+ */
22
+ constructor(urls: ScIUrls);
23
+ /**
24
+ * Возвращает путь до изображения на сервере.
25
+ *
26
+ * @param imgPath путь, где хранится изображение.
27
+ */
28
+ getCategoryImage(imgPath: string): string;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScCategoriesListComponent<any>, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScCategoriesListComponent<any>, "sc-categories-list", never, { "categories": "categories"; }, { "clickCategoryEvent": "clickCategoryEvent"; }, never, never, false>;
31
+ }
@@ -1,3 +1,4 @@
1
+ export * from './categories-list/sc-categories-list.component';
1
2
  export * from './category-card/sc-category-card.component';
2
3
  export * from './input-quantity/sc-input-quantity.component';
3
4
  export * from './price-card/sc-price-card.component';
@@ -12,10 +12,6 @@ export declare class ScInputQuantityComponent extends AbstractTuiNullableControl
12
12
  * Шаг увеличения количества. Отвечает за проверку кратности ввода.
13
13
  */
14
14
  step: number;
15
- /**
16
- * Единица измерения количества. Будет указана в постфиксе поля ввода.
17
- */
18
- quantityUnit?: string;
19
15
  /**
20
16
  * Признак, что необходимо отобразить {@link TuiLoaderComponent} над компонентом.
21
17
  */
@@ -75,5 +71,5 @@ export declare class ScInputQuantityComponent extends AbstractTuiNullableControl
75
71
  */
76
72
  clear(): void;
77
73
  static ɵfac: i0.ɵɵFactoryDeclaration<ScInputQuantityComponent, [{ optional: true; self: true; }, null, { optional: true; }]>;
78
- static ɵcmp: i0.ɵɵComponentDeclaration<ScInputQuantityComponent, "sc-input-quantity", never, { "step": "step"; "quantityUnit": "quantityUnit"; "showLoader": "showLoader"; "showCross": "showCross"; "appearance": "appearance"; "isDisabled": "isDisabled"; "size": "size"; }, { "clickClearEvent": "clickClearEvent"; }, never, never, false>;
74
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScInputQuantityComponent, "sc-input-quantity", never, { "step": "step"; "showLoader": "showLoader"; "showCross": "showCross"; "appearance": "appearance"; "isDisabled": "isDisabled"; "size": "size"; }, { "clickClearEvent": "clickClearEvent"; }, never, never, false>;
79
75
  }
@@ -6,18 +6,19 @@ import * as i4 from "./input-quantity/sc-input-quantity.component";
6
6
  import * as i5 from "./price-card/sc-price-card.component";
7
7
  import * as i6 from "./price-warehouse-stock/sc-price-warehouse-stock.component";
8
8
  import * as i7 from "./price-history/sc-price-history.component";
9
- import * as i8 from "@angular/common";
10
- import * as i9 from "@angular/router";
11
- import * as i10 from "@taiga-ui/core";
12
- import * as i11 from "@taiga-ui/kit";
13
- import * as i12 from "@angular/forms";
14
- import * as i13 from "ngx-echarts";
15
- import * as i14 from "@taiga-ui/cdk";
9
+ import * as i8 from "./categories-list/sc-categories-list.component";
10
+ import * as i9 from "@angular/common";
11
+ import * as i10 from "@angular/router";
12
+ import * as i11 from "@taiga-ui/core";
13
+ import * as i12 from "@taiga-ui/kit";
14
+ import * as i13 from "@angular/forms";
15
+ import * as i14 from "ngx-echarts";
16
+ import * as i15 from "@taiga-ui/cdk";
16
17
  /**
17
18
  * Модуль каталога.
18
19
  */
19
20
  export declare class ScCatalogModule {
20
21
  static ɵfac: i0.ɵɵFactoryDeclaration<ScCatalogModule, never>;
21
- static ɵmod: i0.ɵɵNgModuleDeclaration<ScCatalogModule, [typeof i1.ScPriceListPaginationComponent, typeof i2.ScCategoryCardComponent, typeof i3.ScFavoriteBtnComponent, typeof i4.ScInputQuantityComponent, typeof i5.ScPriceCardComponent, typeof i6.ScPriceWarehouseStockComponent, typeof i7.ScPriceHistoryComponent], [typeof i8.CommonModule, typeof i9.RouterModule, typeof i10.TuiButtonModule, typeof i10.TuiSvgModule, typeof i11.TuiIslandModule, typeof i11.TuiInputNumberModule, typeof i10.TuiLabelModule, typeof i10.TuiTextfieldControllerModule, typeof i12.FormsModule, typeof i12.ReactiveFormsModule, typeof i10.TuiHintModule, typeof i10.TuiModeModule, typeof i11.TuiFieldErrorPipeModule, typeof i10.TuiLoaderModule, typeof i10.TuiLinkModule, typeof i11.TuiElasticContainerModule, typeof i13.NgxEchartsModule, typeof i14.TuiLetModule], [typeof i1.ScPriceListPaginationComponent, typeof i2.ScCategoryCardComponent, typeof i3.ScFavoriteBtnComponent, typeof i4.ScInputQuantityComponent, typeof i5.ScPriceCardComponent, typeof i6.ScPriceWarehouseStockComponent, typeof i7.ScPriceHistoryComponent]>;
22
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ScCatalogModule, [typeof i1.ScPriceListPaginationComponent, typeof i2.ScCategoryCardComponent, typeof i3.ScFavoriteBtnComponent, typeof i4.ScInputQuantityComponent, typeof i5.ScPriceCardComponent, typeof i6.ScPriceWarehouseStockComponent, typeof i7.ScPriceHistoryComponent, typeof i8.ScCategoriesListComponent], [typeof i9.CommonModule, typeof i10.RouterModule, typeof i11.TuiButtonModule, typeof i11.TuiSvgModule, typeof i12.TuiIslandModule, typeof i12.TuiInputNumberModule, typeof i11.TuiLabelModule, typeof i11.TuiTextfieldControllerModule, typeof i13.FormsModule, typeof i13.ReactiveFormsModule, typeof i11.TuiHintModule, typeof i11.TuiModeModule, typeof i12.TuiFieldErrorPipeModule, typeof i11.TuiLoaderModule, typeof i11.TuiLinkModule, typeof i12.TuiElasticContainerModule, typeof i14.NgxEchartsModule, typeof i15.TuiLetModule], [typeof i1.ScPriceListPaginationComponent, typeof i2.ScCategoryCardComponent, typeof i3.ScFavoriteBtnComponent, typeof i4.ScInputQuantityComponent, typeof i5.ScPriceCardComponent, typeof i6.ScPriceWarehouseStockComponent, typeof i7.ScPriceHistoryComponent, typeof i8.ScCategoriesListComponent]>;
22
23
  static ɵinj: i0.ɵɵInjectorDeclaration<ScCatalogModule>;
23
24
  }
@@ -8,6 +8,7 @@ import { TuiTextfieldControllerModule, TuiLinkModule, TuiButtonModule, TuiLabelM
8
8
  import { TuiInputPasswordModule, TuiInputModule, TuiFieldErrorPipeModule, TuiInputPhoneModule } from '@taiga-ui/kit';
9
9
  import { ScSignInFormByPhoneComponent } from './sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component';
10
10
  import { ScSignInFormByEmailComponent } from './sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component';
11
+ import { ScVerificationModule } from '../verification';
11
12
  import * as i0 from "@angular/core";
12
13
  /**
13
14
  * Модуль аутентификации.
@@ -30,7 +31,8 @@ ScAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
30
31
  TuiLetModule,
31
32
  TuiLoaderModule,
32
33
  TuiInputPhoneModule,
33
- MaskitoModule], exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent] });
34
+ MaskitoModule,
35
+ ScVerificationModule], exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent] });
34
36
  ScAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScAuthModule, imports: [CommonModule,
35
37
  FormsModule,
36
38
  ReactiveFormsModule,
@@ -46,7 +48,8 @@ ScAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
46
48
  TuiLetModule,
47
49
  TuiLoaderModule,
48
50
  TuiInputPhoneModule,
49
- MaskitoModule] });
51
+ MaskitoModule,
52
+ ScVerificationModule] });
50
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScAuthModule, decorators: [{
51
54
  type: NgModule,
52
55
  args: [{
@@ -68,8 +71,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
68
71
  TuiLoaderModule,
69
72
  TuiInputPhoneModule,
70
73
  MaskitoModule,
74
+ ScVerificationModule,
71
75
  ],
72
76
  exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent],
73
77
  }]
74
78
  }] });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvYXV0aC9zYy1hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlKLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0VBQStFLENBQUM7QUFDN0gsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0VBQStFLENBQUM7O0FBRTdIOztHQUVHO0FBdUJILE1BQU0sT0FBTyxZQUFZOzt5R0FBWixZQUFZOzBHQUFaLFlBQVksaUJBckJOLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixhQUU1RixZQUFZO1FBQ1osV0FBVztRQUNYLG1CQUFtQjtRQUNuQixzQkFBc0I7UUFDdEIsY0FBYztRQUNkLDRCQUE0QjtRQUM1QixhQUFhO1FBQ2IsZUFBZTtRQUNmLGNBQWM7UUFDZCxhQUFhO1FBQ2IsdUJBQXVCO1FBQ3ZCLGNBQWM7UUFDZCxZQUFZO1FBQ1osZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixhQUFhLGFBRVAscUJBQXFCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCOzBHQUVsRixZQUFZLFlBbkJqQixZQUFZO1FBQ1osV0FBVztRQUNYLG1CQUFtQjtRQUNuQixzQkFBc0I7UUFDdEIsY0FBYztRQUNkLDRCQUE0QjtRQUM1QixhQUFhO1FBQ2IsZUFBZTtRQUNmLGNBQWM7UUFDZCxhQUFhO1FBQ2IsdUJBQXVCO1FBQ3ZCLGNBQWM7UUFDZCxZQUFZO1FBQ1osZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixhQUFhOzJGQUlSLFlBQVk7a0JBdEJ4QixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixDQUFDO29CQUNqRyxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3dCQUN0QixjQUFjO3dCQUNkLDRCQUE0Qjt3QkFDNUIsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYix1QkFBdUI7d0JBQ3ZCLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsYUFBYTtxQkFDaEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMscUJBQXFCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLENBQUM7aUJBQy9GIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWFza2l0b01vZHVsZSB9IGZyb20gJ0BtYXNraXRvL2FuZ3VsYXInO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjU2lnbkluRm9ybUNvbXBvbmVudCB9IGZyb20gJy4nO1xuaW1wb3J0IHsgVHVpTGV0TW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQgeyBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlLCBUdWlMaW5rTW9kdWxlLCBUdWlCdXR0b25Nb2R1bGUsIFR1aUxhYmVsTW9kdWxlLCBUdWlNb2RlTW9kdWxlLCBUdWlFcnJvck1vZHVsZSwgVHVpTG9hZGVyTW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpSW5wdXRQYXNzd29yZE1vZHVsZSwgVHVpSW5wdXRNb2R1bGUsIFR1aUZpZWxkRXJyb3JQaXBlTW9kdWxlLCBUdWlJbnB1dFBob25lTW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQgeyBTY1NpZ25JbkZvcm1CeVBob25lQ29tcG9uZW50IH0gZnJvbSAnLi9zYy1zaWduLWluLWZvcm0vc2Mtc2lnbi1pbi1mb3JtLWJ5LXBob25lL3NjLXNpZ24taW4tZm9ybS1ieS1waG9uZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2NTaWduSW5Gb3JtQnlFbWFpbENvbXBvbmVudCB9IGZyb20gJy4vc2Mtc2lnbi1pbi1mb3JtL3NjLXNpZ24taW4tZm9ybS1ieS1lbWFpbC9zYy1zaWduLWluLWZvcm0tYnktZW1haWwuY29tcG9uZW50JztcblxuLyoqXG4gKiDQnNC+0LTRg9C70Ywg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtTY1NpZ25JbkZvcm1Db21wb25lbnQsIFNjU2lnbkluRm9ybUJ5UGhvbmVDb21wb25lbnQsIFNjU2lnbkluRm9ybUJ5RW1haWxDb21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgVHVpSW5wdXRQYXNzd29yZE1vZHVsZSxcbiAgICAgICAgVHVpSW5wdXRNb2R1bGUsXG4gICAgICAgIFR1aVRleHRmaWVsZENvbnRyb2xsZXJNb2R1bGUsXG4gICAgICAgIFR1aUxpbmtNb2R1bGUsXG4gICAgICAgIFR1aUJ1dHRvbk1vZHVsZSxcbiAgICAgICAgVHVpTGFiZWxNb2R1bGUsXG4gICAgICAgIFR1aU1vZGVNb2R1bGUsXG4gICAgICAgIFR1aUZpZWxkRXJyb3JQaXBlTW9kdWxlLFxuICAgICAgICBUdWlFcnJvck1vZHVsZSxcbiAgICAgICAgVHVpTGV0TW9kdWxlLFxuICAgICAgICBUdWlMb2FkZXJNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0UGhvbmVNb2R1bGUsXG4gICAgICAgIE1hc2tpdG9Nb2R1bGUsXG4gICAgXSxcbiAgICBleHBvcnRzOiBbU2NTaWduSW5Gb3JtQ29tcG9uZW50LCBTY1NpZ25JbkZvcm1CeVBob25lQ29tcG9uZW50LCBTY1NpZ25JbkZvcm1CeUVtYWlsQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU2NBdXRoTW9kdWxlIHt9XG4iXX0=
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvYXV0aC9zYy1hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlKLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0VBQStFLENBQUM7QUFDN0gsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0VBQStFLENBQUM7QUFDN0gsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRXZEOztHQUVHO0FBd0JILE1BQU0sT0FBTyxZQUFZOzt5R0FBWixZQUFZOzBHQUFaLFlBQVksaUJBdEJOLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixhQUU1RixZQUFZO1FBQ1osV0FBVztRQUNYLG1CQUFtQjtRQUNuQixzQkFBc0I7UUFDdEIsY0FBYztRQUNkLDRCQUE0QjtRQUM1QixhQUFhO1FBQ2IsZUFBZTtRQUNmLGNBQWM7UUFDZCxhQUFhO1FBQ2IsdUJBQXVCO1FBQ3ZCLGNBQWM7UUFDZCxZQUFZO1FBQ1osZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixhQUFhO1FBQ2Isb0JBQW9CLGFBRWQscUJBQXFCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCOzBHQUVsRixZQUFZLFlBcEJqQixZQUFZO1FBQ1osV0FBVztRQUNYLG1CQUFtQjtRQUNuQixzQkFBc0I7UUFDdEIsY0FBYztRQUNkLDRCQUE0QjtRQUM1QixhQUFhO1FBQ2IsZUFBZTtRQUNmLGNBQWM7UUFDZCxhQUFhO1FBQ2IsdUJBQXVCO1FBQ3ZCLGNBQWM7UUFDZCxZQUFZO1FBQ1osZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixhQUFhO1FBQ2Isb0JBQW9COzJGQUlmLFlBQVk7a0JBdkJ4QixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixDQUFDO29CQUNqRyxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3dCQUN0QixjQUFjO3dCQUNkLDRCQUE0Qjt3QkFDNUIsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYix1QkFBdUI7d0JBQ3ZCLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixvQkFBb0I7cUJBQ3ZCO29CQUNELE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixDQUFDO2lCQUMvRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hc2tpdG9Nb2R1bGUgfSBmcm9tICdAbWFza2l0by9hbmd1bGFyJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTY1NpZ25JbkZvcm1Db21wb25lbnQgfSBmcm9tICcuJztcbmltcG9ydCB7IFR1aUxldE1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZSwgVHVpTGlua01vZHVsZSwgVHVpQnV0dG9uTW9kdWxlLCBUdWlMYWJlbE1vZHVsZSwgVHVpTW9kZU1vZHVsZSwgVHVpRXJyb3JNb2R1bGUsIFR1aUxvYWRlck1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aUlucHV0UGFzc3dvcmRNb2R1bGUsIFR1aUlucHV0TW9kdWxlLCBUdWlGaWVsZEVycm9yUGlwZU1vZHVsZSwgVHVpSW5wdXRQaG9uZU1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgU2NTaWduSW5Gb3JtQnlQaG9uZUNvbXBvbmVudCB9IGZyb20gJy4vc2Mtc2lnbi1pbi1mb3JtL3NjLXNpZ24taW4tZm9ybS1ieS1waG9uZS9zYy1zaWduLWluLWZvcm0tYnktcGhvbmUuY29tcG9uZW50JztcbmltcG9ydCB7IFNjU2lnbkluRm9ybUJ5RW1haWxDb21wb25lbnQgfSBmcm9tICcuL3NjLXNpZ24taW4tZm9ybS9zYy1zaWduLWluLWZvcm0tYnktZW1haWwvc2Mtc2lnbi1pbi1mb3JtLWJ5LWVtYWlsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTY1ZlcmlmaWNhdGlvbk1vZHVsZSB9IGZyb20gJy4uL3ZlcmlmaWNhdGlvbic7XG5cbi8qKlxuICog0JzQvtC00YPQu9GMINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40LguXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbU2NTaWduSW5Gb3JtQ29tcG9uZW50LCBTY1NpZ25JbkZvcm1CeVBob25lQ29tcG9uZW50LCBTY1NpZ25JbkZvcm1CeUVtYWlsQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0UGFzc3dvcmRNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0TW9kdWxlLFxuICAgICAgICBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlLFxuICAgICAgICBUdWlMaW5rTW9kdWxlLFxuICAgICAgICBUdWlCdXR0b25Nb2R1bGUsXG4gICAgICAgIFR1aUxhYmVsTW9kdWxlLFxuICAgICAgICBUdWlNb2RlTW9kdWxlLFxuICAgICAgICBUdWlGaWVsZEVycm9yUGlwZU1vZHVsZSxcbiAgICAgICAgVHVpRXJyb3JNb2R1bGUsXG4gICAgICAgIFR1aUxldE1vZHVsZSxcbiAgICAgICAgVHVpTG9hZGVyTW9kdWxlLFxuICAgICAgICBUdWlJbnB1dFBob25lTW9kdWxlLFxuICAgICAgICBNYXNraXRvTW9kdWxlLFxuICAgICAgICBTY1ZlcmlmaWNhdGlvbk1vZHVsZSxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtTY1NpZ25JbkZvcm1Db21wb25lbnQsIFNjU2lnbkluRm9ybUJ5UGhvbmVDb21wb25lbnQsIFNjU2lnbkluRm9ybUJ5RW1haWxDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBTY0F1dGhNb2R1bGUge31cbiJdfQ==
@@ -1,16 +1,13 @@
1
1
  import { ChangeDetectionStrategy, Component } from '@angular/core';
2
2
  import { FormGroup, FormControl, Validators } from '@angular/forms';
3
3
  import { tuiIsFalsy } from '@taiga-ui/cdk';
4
- import { Subject, filter, map, switchMap, catchError, of, startWith, share, tap, finalize, timer, scan, takeWhile, endWith, distinctUntilChanged } from 'rxjs';
5
- import { phoneApproveCodeMask } from '../../constants/phone-approve-code-mask';
4
+ import { Subject, filter, map, switchMap, catchError, of, startWith, share } from 'rxjs';
6
5
  import * as i0 from "@angular/core";
7
6
  import * as i1 from "@snabcentr/client-core";
8
7
  import * as i2 from "@angular/common";
9
8
  import * as i3 from "@angular/forms";
10
9
  import * as i4 from "@taiga-ui/core";
11
- import * as i5 from "@taiga-ui/kit";
12
- import * as i6 from "@taiga-ui/cdk";
13
- import * as i7 from "@maskito/angular";
10
+ import * as i5 from "../../../verification/phone-approve-form/phone-approve-form.component";
14
11
  /**
15
12
  * Компонент аутентификации по номеру телефона и коду подтверждения.
16
13
  */
@@ -21,11 +18,10 @@ export class ScSignInFormByPhoneComponent {
21
18
  * @param authService Сервис аутентификации.
22
19
  * @param verificationService Сервис верификации.
23
20
  */
24
- constructor(authService, verificationService) {
21
+ constructor(authService) {
25
22
  this.authService = authService;
26
- this.verificationService = verificationService;
27
23
  /**
28
- * Этап процесса аутентификации.
24
+ * Наличие кода подтверждения у пользователя.
29
25
  */
30
26
  this.haveCode = false;
31
27
  /**
@@ -52,88 +48,16 @@ export class ScSignInFormByPhoneComponent {
52
48
  }
53
49
  return of({});
54
50
  }), startWith(null))), share());
55
- /**
56
- * {@link Observable} Запроса данных получения информации о том свободен ли номер телефона.
57
- */
58
- this.isPhoneNotBusy$ = this.phoneControl.valueChanges.pipe(tap(() => this.reloadTimer$.next(0)), switchMap((value) => {
59
- if (this.phoneControl.valid && !!value) {
60
- return this.verificationService.getPhoneCheck$(value).pipe(map((result) => result.isBusy), tap((isBusy) => {
61
- if (!isBusy) {
62
- this.phoneControl.setErrors({ serverResponse: ['Пользователя с таким номером телефона не существует'] });
63
- this.phoneControl.markAsTouched();
64
- }
65
- }), catchError((error) => {
66
- const errorResponse = error.error;
67
- this.phoneControl.setErrors({ serverResponse: errorResponse?.errors?.[`phone`] ?? [errorResponse.message] });
68
- return of(false);
69
- }), startWith(null));
70
- }
71
- this.setHaveCode(false);
72
- return of(false);
73
- }), share());
74
- /**
75
- * {@link Subject} События отправки кода подтверждения.
76
- */
77
- this.onSendCode = new Subject();
78
- /**
79
- * {@link Observable} Запроса данных получения кода подтверждения.
80
- */
81
- this.loadingApproveCode$ = this.onSendCode.pipe(filter(() => this.phoneControl.valid), map(() => this.phoneControl.value), switchMap((value) => this.verificationService.sendPhoneApproveCode(value).pipe(tap(() => this.reloadTimer$.next(60)), map(() => false), catchError((error) => {
82
- const errorResponse = error.error;
83
- const regex = /(\d{2}):\d{2}/;
84
- const match = errorResponse.message.match(regex);
85
- if (match && match.length > 1) {
86
- const timeParts = match[0].split(':');
87
- const seconds = parseInt(timeParts[1], 10);
88
- this.reloadTimer$.next(seconds);
89
- }
90
- else {
91
- this.phoneControl.setErrors({ serverResponse: errorResponse?.errors?.[`phone`] ?? [errorResponse.message] });
92
- }
93
- return of(false);
94
- }), finalize(() => this.setHaveCode(true)), startWith(true))), startWith(false), share());
95
- /**
96
- * Маска поля ввода кода для подтверждения.
97
- */
98
- this.approveCodeMask = phoneApproveCodeMask;
99
51
  /**
100
52
  * {@link Observable} Изменения состояния загрузки данных аутентификации по номеру телефона.
101
53
  */
102
54
  this.loadingPhoneAuth$ = this.phoneRequest$.pipe(map(tuiIsFalsy));
103
- /**
104
- * {@link Subject} События запуска/остановки таймера.
105
- */
106
- this.reloadTimer$ = new Subject();
107
- /**
108
- * {@link Observable} Таймера.
109
- *
110
- * TODO: Вынести таймер в отдельную директиву TASK:[#9260].
111
- */
112
- this.timer$ = this.reloadTimer$.pipe(switchMap((sec) => timer(0, 1000).pipe(scan((total) => --total, sec), takeWhile((total) => total >= 0), map((total) => {
113
- const minutes = Math.floor(total / 60);
114
- const seconds = total % 60;
115
- return `${Math.round(minutes).toString().padStart(2, '0')}:${Math.round(seconds).toString().padStart(2, '0')}`;
116
- }), endWith(null), startWith(null), distinctUntilChanged())));
117
- }
118
- /**
119
- * Поле ввода 'Номер телефона'.
120
- */
121
- get phoneControl() {
122
- return this.formByPhone.get('phone');
123
- }
124
- /**
125
- * Устанавливает состояние наличия кода подтверждения у пользователя.
126
- *
127
- * @param haveCode Признак того есть ли код подтверждения или нет.
128
- */
129
- setHaveCode(haveCode) {
130
- this.haveCode = haveCode;
131
55
  }
132
56
  }
133
- ScSignInFormByPhoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByPhoneComponent, deps: [{ token: i1.ScAuthService }, { token: i1.ScVerificationService }], target: i0.ɵɵFactoryTarget.Component });
134
- ScSignInFormByPhoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScSignInFormByPhoneComponent, selector: "sc-sign-in-form-by-phone", ngImport: i0, template: "<form [formGroup]=\"formByPhone\" *tuiLet=\"(loadingApproveCode$ | async) as loadingApproveCode\" (ngSubmit)=\"onSubmit.next()\">\n <div class=\"flex flex-col gap-4 mb-8\">\n <label tuiLabel=\"\u041D\u043E\u043C\u0435\u0440 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430\">\n <tui-input-phone formControlName=\"phone\" [tuiTextfieldCustomContent]=\"checkingPhone\">\n \u041D\u043E\u043C\u0435\u0440 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430\n <input tuiTextfield autocomplete=\"phone\" />\n </tui-input-phone>\n <tui-error formControlName=\"phone\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <tui-error [error]=\"[] | tuiFieldError | async\"></tui-error>\n\n <label *ngIf=\"loadingApproveCode === false && haveCode\" tuiLabel=\"\u041A\u043E\u0434 \u0438\u0437 \u0421\u041C\u0421\">\n <tui-input formControlName=\"phoneApproveCode\">\n \u041A\u043E\u0434 \u0438\u0437 \u0421\u041C\u0421\n <input tuiTextfield [maskito]=\"approveCodeMask\" autocomplete=\"new-password\" />\n </tui-input>\n <tui-error formControlName=\"phoneApproveCode\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n </div>\n\n <div *tuiLet=\"!!loadingApproveCode as loadingApproveCode\" class=\"flex flex-col gap-4 items-center mb-4\">\n <button\n *ngIf=\"!haveCode\"\n tuiButton\n size=\"s\"\n (click)=\"onSendCode.next()\"\n [disabled]=\"loadingApproveCode || !!!(isPhoneNotBusy$ | async) || phoneControl.invalid\"\n [showLoader]=\"loadingApproveCode\"\n icon=\"scIconLogIn\"\n >\n \u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043A\u043E\u0434\n </button>\n <button *ngIf=\"!loadingApproveCode && !haveCode\" tuiLink [pseudo]=\"true\" [disabled]=\"!!!(isPhoneNotBusy$ | async) || phoneControl.invalid\" (click)=\"setHaveCode(true)\">\n \u0423 \u043C\u0435\u043D\u044F \u0435\u0441\u0442\u044C \u043A\u043E\u0434\n </button>\n\n <ng-container *tuiLet=\"timer$ | async as timer\">\n <tui-loader *ngIf=\"haveCode\" [showLoader]=\"loadingApproveCode\">\n <button tuiLink [pseudo]=\"true\" [disabled]=\"loadingApproveCode || timer\" (click)=\"onSendCode.next()\">\n \u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u0434\n <ng-container *ngIf=\"timer\" class=\"!text-tui-base-08\">(\u0447\u0435\u0440\u0435\u0437 {{ timer }})</ng-container>\n </button>\n </tui-loader>\n </ng-container>\n <button\n *ngIf=\"haveCode\"\n tuiButton\n size=\"s\"\n type=\"submit\"\n [showLoader]=\"!!(loadingPhoneAuth$ | async)\"\n [disabled]=\"formByPhone.invalid || !!(loadingPhoneAuth$ | async)\"\n icon=\"scIconLogIn\"\n >\n \u0412\u043E\u0439\u0442\u0438\n </button>\n </div>\n</form>\n\n<ng-template #checkingPhone>\n <tui-loader *ngIf=\"!!!(isPhoneNotBusy$ | async) && phoneControl.valid\" class=\"w-4 h-4\"> </tui-loader>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.TuiTextfieldComponent, selector: "input[tuiTextfield], textarea[tuiTextfield]" }, { kind: "component", type: i5.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i5.TuiInputDirective, selector: "tui-input" }, { kind: "directive", type: i4.TuiTextfieldCustomContentDirective, selector: "[tuiTextfieldCustomContent]", inputs: ["tuiTextfieldCustomContent"] }, { kind: "component", type: i4.TuiLinkComponent, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo", "icon", "iconAlign", "iconRotated", "mode"], exportAs: ["tuiLink"] }, { kind: "component", type: i4.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "component", type: i4.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { kind: "component", type: i4.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i6.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "component", type: i4.TuiLoaderComponent, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "component", type: i5.TuiInputPhoneComponent, selector: "tui-input-phone", inputs: ["countryCode", "phoneMaskAfterCountryCode", "allowText", "search"], outputs: ["searchChange"] }, { kind: "directive", type: i5.TuiInputPhoneDirective, selector: "tui-input-phone" }, { kind: "directive", type: i7.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "directive", type: i7.MaskitoCva, selector: "input[maskito], textarea[maskito]", inputs: ["maskito"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
57
+ ScSignInFormByPhoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByPhoneComponent, deps: [{ token: i1.ScAuthService }], target: i0.ɵɵFactoryTarget.Component });
58
+ ScSignInFormByPhoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScSignInFormByPhoneComponent, selector: "sc-sign-in-form-by-phone", ngImport: i0, template: "<form [formGroup]=\"formByPhone\" (ngSubmit)=\"onSubmit.next()\" class=\"flex flex-col gap-4 items-center mb-4\">\n <sc-phone-approve-form [(haveCode)]=\"haveCode\" [shouldBeConfirmed]=\"true\" class=\"w-full\"></sc-phone-approve-form>\n <button\n *ngIf=\"haveCode\"\n tuiButton\n size=\"s\"\n type=\"submit\"\n [showLoader]=\"!!(loadingPhoneAuth$ | async)\"\n [disabled]=\"formByPhone.invalid || !!(loadingPhoneAuth$ | async)\"\n icon=\"scIconLogIn\"\n >\n \u0412\u043E\u0439\u0442\u0438\n </button>\n</form>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "component", type: i5.ScPhoneApproveFormComponent, selector: "sc-phone-approve-form", inputs: ["shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
135
59
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByPhoneComponent, decorators: [{
136
60
  type: Component,
137
- args: [{ selector: 'sc-sign-in-form-by-phone', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"formByPhone\" *tuiLet=\"(loadingApproveCode$ | async) as loadingApproveCode\" (ngSubmit)=\"onSubmit.next()\">\n <div class=\"flex flex-col gap-4 mb-8\">\n <label tuiLabel=\"\u041D\u043E\u043C\u0435\u0440 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430\">\n <tui-input-phone formControlName=\"phone\" [tuiTextfieldCustomContent]=\"checkingPhone\">\n \u041D\u043E\u043C\u0435\u0440 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430\n <input tuiTextfield autocomplete=\"phone\" />\n </tui-input-phone>\n <tui-error formControlName=\"phone\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <tui-error [error]=\"[] | tuiFieldError | async\"></tui-error>\n\n <label *ngIf=\"loadingApproveCode === false && haveCode\" tuiLabel=\"\u041A\u043E\u0434 \u0438\u0437 \u0421\u041C\u0421\">\n <tui-input formControlName=\"phoneApproveCode\">\n \u041A\u043E\u0434 \u0438\u0437 \u0421\u041C\u0421\n <input tuiTextfield [maskito]=\"approveCodeMask\" autocomplete=\"new-password\" />\n </tui-input>\n <tui-error formControlName=\"phoneApproveCode\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n </div>\n\n <div *tuiLet=\"!!loadingApproveCode as loadingApproveCode\" class=\"flex flex-col gap-4 items-center mb-4\">\n <button\n *ngIf=\"!haveCode\"\n tuiButton\n size=\"s\"\n (click)=\"onSendCode.next()\"\n [disabled]=\"loadingApproveCode || !!!(isPhoneNotBusy$ | async) || phoneControl.invalid\"\n [showLoader]=\"loadingApproveCode\"\n icon=\"scIconLogIn\"\n >\n \u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043A\u043E\u0434\n </button>\n <button *ngIf=\"!loadingApproveCode && !haveCode\" tuiLink [pseudo]=\"true\" [disabled]=\"!!!(isPhoneNotBusy$ | async) || phoneControl.invalid\" (click)=\"setHaveCode(true)\">\n \u0423 \u043C\u0435\u043D\u044F \u0435\u0441\u0442\u044C \u043A\u043E\u0434\n </button>\n\n <ng-container *tuiLet=\"timer$ | async as timer\">\n <tui-loader *ngIf=\"haveCode\" [showLoader]=\"loadingApproveCode\">\n <button tuiLink [pseudo]=\"true\" [disabled]=\"loadingApproveCode || timer\" (click)=\"onSendCode.next()\">\n \u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u0434\n <ng-container *ngIf=\"timer\" class=\"!text-tui-base-08\">(\u0447\u0435\u0440\u0435\u0437 {{ timer }})</ng-container>\n </button>\n </tui-loader>\n </ng-container>\n <button\n *ngIf=\"haveCode\"\n tuiButton\n size=\"s\"\n type=\"submit\"\n [showLoader]=\"!!(loadingPhoneAuth$ | async)\"\n [disabled]=\"formByPhone.invalid || !!(loadingPhoneAuth$ | async)\"\n icon=\"scIconLogIn\"\n >\n \u0412\u043E\u0439\u0442\u0438\n </button>\n </div>\n</form>\n\n<ng-template #checkingPhone>\n <tui-loader *ngIf=\"!!!(isPhoneNotBusy$ | async) && phoneControl.valid\" class=\"w-4 h-4\"> </tui-loader>\n</ng-template>\n" }]
138
- }], ctorParameters: function () { return [{ type: i1.ScAuthService }, { type: i1.ScVerificationService }]; } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2lnbi1pbi1mb3JtLWJ5LXBob25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9hdXRoL3NjLXNpZ24taW4tZm9ybS9zYy1zaWduLWluLWZvcm0tYnktcGhvbmUvc2Mtc2lnbi1pbi1mb3JtLWJ5LXBob25lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9hdXRoL3NjLXNpZ24taW4tZm9ybS9zYy1zaWduLWluLWZvcm0tYnktcGhvbmUvc2Mtc2lnbi1pbi1mb3JtLWJ5LXBob25lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFjLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzSyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7Ozs7O0FBRy9FOztHQUVHO0FBTUgsTUFBTSxPQUFPLDRCQUE0QjtJQWtLckM7Ozs7O09BS0c7SUFDSCxZQUFvQyxXQUEwQixFQUFtQixtQkFBMEM7UUFBdkYsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFBbUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF1QjtRQXZLM0g7O1dB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QkFBMEIsbUJBRW5CLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXNraXRvT3B0aW9ucyB9IGZyb20gJ0BtYXNraXRvL2NvcmUnO1xuaW1wb3J0IHsgSUF1dGhUb2tlbiwgSVBob25lTG9naW4sIFNjQXV0aFNlcnZpY2UsIFNjVmVyaWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgdHVpSXNGYWxzeSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgY2F0Y2hFcnJvciwgb2YsIHN0YXJ0V2l0aCwgc2hhcmUsIHRhcCwgZmluYWxpemUsIHRpbWVyLCBzY2FuLCB0YWtlV2hpbGUsIGVuZFdpdGgsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBwaG9uZUFwcHJvdmVDb2RlTWFzayB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9waG9uZS1hcHByb3ZlLWNvZGUtbWFzayc7XG5pbXBvcnQgeyBBcGlFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BcGlFcnJvclJlc3BvbnNlJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+INC90L7QvNC10YDRgyDRgtC10LvQtdGE0L7QvdCwINC4INC60L7QtNGDINC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLXNpZ24taW4tZm9ybS1ieS1waG9uZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLXNpZ24taW4tZm9ybS1ieS1waG9uZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjU2lnbkluRm9ybUJ5UGhvbmVDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCt0YLQsNC/INC/0YDQvtGG0LXRgdGB0LAg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGF2ZUNvZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCT0YDRg9C/0L/QsCDQv9C+0LvQtdC5INCy0LLQvtC00LAg0LTQu9GPINGE0L7RgNC80YsgwqvQktGF0L7QtCDQvdCwINGB0LDQudGCwrsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGZvcm1CeVBob25lOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgcGhvbmU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTIpXSksXG4gICAgICAgIHBob25lQXBwcm92ZUNvZGU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildKSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCf0L7Qu9C1INCy0LLQvtC00LAgJ9Cd0L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsCcuXG4gICAgICovXG4gICAgcHVibGljIGdldCBwaG9uZUNvbnRyb2woKTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQnlQaG9uZS5nZXQoJ3Bob25lJykgYXMgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INCh0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb25TdWJtaXQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INCX0LDQv9GA0L7RgdCwINC00LDQvdC90YvRhSDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGhvbmVSZXF1ZXN0JDogT2JzZXJ2YWJsZTxJQXV0aFRva2VuIHwgbnVsbD4gPSB0aGlzLm9uU3VibWl0LnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZvcm1CeVBob25lLnZhbGlkKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuZm9ybUJ5UGhvbmUudmFsdWUgYXMgSVBob25lTG9naW4pLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRTaWduSW4kKHZhbHVlKS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3JSZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlcnJvclJlc3BvbnNlLmVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQnlQaG9uZS5nZXQoa2V5KT8uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IGVycm9yUmVzcG9uc2UuZXJyb3JzW2Ake2tleX1gXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZXJyb3JSZXNwb25zZS5lcnJvcnMgJiYgZXJyb3JSZXNwb25zZS5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1CeVBob25lLnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBbZXJyb3JSZXNwb25zZS5tZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih7fSBhcyBJQXV0aFRva2VuKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0JfQsNC/0YDQvtGB0LAg0LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQtdC90LjRjyDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDRgtC+0Lwg0YHQstC+0LHQvtC00LXQvSDQu9C4INC90L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNQaG9uZU5vdEJ1c3kkOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBudWxsPiA9IHRoaXMucGhvbmVDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5yZWxvYWRUaW1lciQubmV4dCgwKSksXG4gICAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBob25lQ29udHJvbC52YWxpZCAmJiAhIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVyaWZpY2F0aW9uU2VydmljZS5nZXRQaG9uZUNoZWNrJCh2YWx1ZSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXN1bHQpID0+IHJlc3VsdC5pc0J1c3kpLFxuICAgICAgICAgICAgICAgICAgICB0YXAoKGlzQnVzeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0J1c3kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBob25lQ29udHJvbC5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogWyfQn9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0YEg0YLQsNC60LjQvCDQvdC+0LzQtdGA0L7QvCDRgtC10LvQtdGE0L7QvdCwINC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YInXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBob25lQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBlcnJvci5lcnJvciBhcyBBcGlFcnJvclJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waG9uZUNvbnRyb2wuc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IGVycm9yUmVzcG9uc2U/LmVycm9ycz8uW2BwaG9uZWBdID8/IFtlcnJvclJlc3BvbnNlLm1lc3NhZ2VdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0SGF2ZUNvZGUoZmFsc2UpO1xuXG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgU3ViamVjdH0g0KHQvtCx0YvRgtC40Y8g0L7RgtC/0YDQsNCy0LrQuCDQutC+0LTQsCDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb25TZW5kQ29kZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0JfQsNC/0YDQvtGB0LAg0LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQtdC90LjRjyDQutC+0LTQsCDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZ0FwcHJvdmVDb2RlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMub25TZW5kQ29kZS5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5waG9uZUNvbnRyb2wudmFsaWQpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5waG9uZUNvbnRyb2wudmFsdWUgYXMgc3RyaW5nKSxcbiAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgIHRoaXMudmVyaWZpY2F0aW9uU2VydmljZS5zZW5kUGhvbmVBcHByb3ZlQ29kZSh2YWx1ZSkucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5yZWxvYWRUaW1lciQubmV4dCg2MCkpLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiBmYWxzZSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBlcnJvci5lcnJvciBhcyBBcGlFcnJvclJlc3BvbnNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gLyhcXGR7Mn0pOlxcZHsyfS87XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gZXJyb3JSZXNwb25zZS5tZXNzYWdlLm1hdGNoKHJlZ2V4KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZVBhcnRzID0gbWF0Y2hbMF0uc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZHMgPSBwYXJzZUludCh0aW1lUGFydHNbMV0sIDEwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWRUaW1lciQubmV4dChzZWNvbmRzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGhvbmVDb250cm9sLnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBlcnJvclJlc3BvbnNlPy5lcnJvcnM/LltgcGhvbmVgXSA/PyBbZXJyb3JSZXNwb25zZS5tZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5zZXRIYXZlQ29kZSh0cnVlKSksXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRydWUpXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHN0YXJ0V2l0aChmYWxzZSksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0JzQsNGB0LrQsCDQv9C+0LvRjyDQstCy0L7QtNCwINC60L7QtNCwINC00LvRjyDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYXBwcm92ZUNvZGVNYXNrOiBNYXNraXRvT3B0aW9ucyA9IHBob25lQXBwcm92ZUNvZGVNYXNrO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INCY0LfQvNC10L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LfQsNCz0YDRg9C30LrQuCDQtNCw0L3QvdGL0YUg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+INC90L7QvNC10YDRgyDRgtC10LvQtdGE0L7QvdCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2FkaW5nUGhvbmVBdXRoJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMucGhvbmVSZXF1ZXN0JC5waXBlKG1hcCh0dWlJc0ZhbHN5KSk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgU3ViamVjdH0g0KHQvtCx0YvRgtC40Y8g0LfQsNC/0YPRgdC60LAv0L7RgdGC0LDQvdC+0LLQutC4INGC0LDQudC80LXRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSByZWxvYWRUaW1lciQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQotCw0LnQvNC10YDQsC5cbiAgICAgKlxuICAgICAqIFRPRE86INCS0YvQvdC10YHRgtC4INGC0LDQudC80LXRgCDQsiDQvtGC0LTQtdC70YzQvdGD0Y4g0LTQuNGA0LXQutGC0LjQstGDIFRBU0s6WyM5MjYwXS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgdGltZXIkOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+ID0gdGhpcy5yZWxvYWRUaW1lciQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChzZWMpID0+XG4gICAgICAgICAgICB0aW1lcigwLCAxMDAwKS5waXBlKFxuICAgICAgICAgICAgICAgIHNjYW4oKHRvdGFsKSA9PiAtLXRvdGFsLCBzZWMpLFxuICAgICAgICAgICAgICAgIHRha2VXaGlsZSgodG90YWwpID0+IHRvdGFsID49IDApLFxuICAgICAgICAgICAgICAgIG1hcCgodG90YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IodG90YWwgLyA2MCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZHMgPSB0b3RhbCAlIDYwO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKG1pbnV0ZXMpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHtNYXRoLnJvdW5kKHNlY29uZHMpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGVuZFdpdGgobnVsbCksXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjU2lnbkluRm9ybUJ5UGhvbmVDb21wb25lbnR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGF1dGhTZXJ2aWNlINCh0LXRgNCy0LjRgSDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqIEBwYXJhbSB2ZXJpZmljYXRpb25TZXJ2aWNlINCh0LXRgNCy0LjRgSDQstC10YDQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBTY0F1dGhTZXJ2aWNlLCBwcml2YXRlIHJlYWRvbmx5IHZlcmlmaWNhdGlvblNlcnZpY2U6IFNjVmVyaWZpY2F0aW9uU2VydmljZSkge31cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINGB0L7RgdGC0L7Rj9C90LjQtSDQvdCw0LvQuNGH0LjRjyDQutC+0LTQsCDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjRjyDRgyDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaGF2ZUNvZGUg0J/RgNC40LfQvdCw0Log0YLQvtCz0L4g0LXRgdGC0Ywg0LvQuCDQutC+0LQg0L/QvtC00YLQstC10YDQttC00LXQvdC40Y8g0LjQu9C4INC90LXRgi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0SGF2ZUNvZGUoaGF2ZUNvZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYXZlQ29kZSA9IGhhdmVDb2RlO1xuICAgIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUJ5UGhvbmVcIiAqdHVpTGV0PVwiKGxvYWRpbmdBcHByb3ZlQ29kZSQgfCBhc3luYykgYXMgbG9hZGluZ0FwcHJvdmVDb2RlXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0Lm5leHQoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IG1iLThcIj5cbiAgICAgICAgPGxhYmVsIHR1aUxhYmVsPVwi0J3QvtC80LXRgCDRgtC10LvQtdGE0L7QvdCwXCI+XG4gICAgICAgICAgICA8dHVpLWlucHV0LXBob25lIGZvcm1Db250cm9sTmFtZT1cInBob25lXCIgW3R1aVRleHRmaWVsZEN1c3RvbUNvbnRlbnRdPVwiY2hlY2tpbmdQaG9uZVwiPlxuICAgICAgICAgICAgICAgINCd0L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsFxuICAgICAgICAgICAgICAgIDxpbnB1dCB0dWlUZXh0ZmllbGQgYXV0b2NvbXBsZXRlPVwicGhvbmVcIiAvPlxuICAgICAgICAgICAgPC90dWktaW5wdXQtcGhvbmU+XG4gICAgICAgICAgICA8dHVpLWVycm9yIGZvcm1Db250cm9sTmFtZT1cInBob25lXCIgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCI+PC90dWktZXJyb3I+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDx0dWktZXJyb3IgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCI+PC90dWktZXJyb3I+XG5cbiAgICAgICAgPGxhYmVsICpuZ0lmPVwibG9hZGluZ0FwcHJvdmVDb2RlID09PSBmYWxzZSAmJiBoYXZlQ29kZVwiIHR1aUxhYmVsPVwi0JrQvtC0INC40Lcg0KHQnNChXCI+XG4gICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cInBob25lQXBwcm92ZUNvZGVcIj5cbiAgICAgICAgICAgICAgICDQmtC+0LQg0LjQtyDQodCc0KFcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHVpVGV4dGZpZWxkIFttYXNraXRvXT1cImFwcHJvdmVDb2RlTWFza1wiIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiIC8+XG4gICAgICAgICAgICA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgIDx0dWktZXJyb3IgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVBcHByb3ZlQ29kZVwiIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiPjwvdHVpLWVycm9yPlxuICAgICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqdHVpTGV0PVwiISFsb2FkaW5nQXBwcm92ZUNvZGUgYXMgbG9hZGluZ0FwcHJvdmVDb2RlXCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IGl0ZW1zLWNlbnRlciBtYi00XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiIWhhdmVDb2RlXCJcbiAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VuZENvZGUubmV4dCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nQXBwcm92ZUNvZGUgfHwgISEhKGlzUGhvbmVOb3RCdXN5JCB8IGFzeW5jKSB8fCBwaG9uZUNvbnRyb2wuaW52YWxpZFwiXG4gICAgICAgICAgICBbc2hvd0xvYWRlcl09XCJsb2FkaW5nQXBwcm92ZUNvZGVcIlxuICAgICAgICAgICAgaWNvbj1cInNjSWNvbkxvZ0luXCJcbiAgICAgICAgPlxuICAgICAgICAgICAg0J/QvtC70YPRh9C40YLRjCDQutC+0LRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhbG9hZGluZ0FwcHJvdmVDb2RlICYmICFoYXZlQ29kZVwiIHR1aUxpbmsgW3BzZXVkb109XCJ0cnVlXCIgW2Rpc2FibGVkXT1cIiEhIShpc1Bob25lTm90QnVzeSQgfCBhc3luYykgfHwgcGhvbmVDb250cm9sLmludmFsaWRcIiAoY2xpY2spPVwic2V0SGF2ZUNvZGUodHJ1ZSlcIj5cbiAgICAgICAgICAgINCjINC80LXQvdGPINC10YHRgtGMINC60L7QtFxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bmctY29udGFpbmVyICp0dWlMZXQ9XCJ0aW1lciQgfCBhc3luYyBhcyB0aW1lclwiPlxuICAgICAgICAgICAgPHR1aS1sb2FkZXIgKm5nSWY9XCJoYXZlQ29kZVwiIFtzaG93TG9hZGVyXT1cImxvYWRpbmdBcHByb3ZlQ29kZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHVpTGluayBbcHNldWRvXT1cInRydWVcIiBbZGlzYWJsZWRdPVwibG9hZGluZ0FwcHJvdmVDb2RlIHx8IHRpbWVyXCIgKGNsaWNrKT1cIm9uU2VuZENvZGUubmV4dCgpXCI+XG4gICAgICAgICAgICAgICAgICAgINCf0L7QstGC0L7RgNC90L4g0L7RgtC/0YDQsNCy0LjRgtGMINC60L7QtFxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGltZXJcIiBjbGFzcz1cIiF0ZXh0LXR1aS1iYXNlLTA4XCI+KNGH0LXRgNC10Lcge3sgdGltZXIgfX0pPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3R1aS1sb2FkZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImhhdmVDb2RlXCJcbiAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBbc2hvd0xvYWRlcl09XCIhIShsb2FkaW5nUGhvbmVBdXRoJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUJ5UGhvbmUuaW52YWxpZCB8fCAhIShsb2FkaW5nUGhvbmVBdXRoJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBpY29uPVwic2NJY29uTG9nSW5cIlxuICAgICAgICA+XG4gICAgICAgICAgICDQktC+0LnRgtC4XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9mb3JtPlxuXG48bmctdGVtcGxhdGUgI2NoZWNraW5nUGhvbmU+XG4gICAgPHR1aS1sb2FkZXIgKm5nSWY9XCIhISEoaXNQaG9uZU5vdEJ1c3kkIHwgYXN5bmMpICYmIHBob25lQ29udHJvbC52YWxpZFwiIGNsYXNzPVwidy00IGgtNFwiPiA8L3R1aS1sb2FkZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
61
+ args: [{ selector: 'sc-sign-in-form-by-phone', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"formByPhone\" (ngSubmit)=\"onSubmit.next()\" class=\"flex flex-col gap-4 items-center mb-4\">\n <sc-phone-approve-form [(haveCode)]=\"haveCode\" [shouldBeConfirmed]=\"true\" class=\"w-full\"></sc-phone-approve-form>\n <button\n *ngIf=\"haveCode\"\n tuiButton\n size=\"s\"\n type=\"submit\"\n [showLoader]=\"!!(loadingPhoneAuth$ | async)\"\n [disabled]=\"formByPhone.invalid || !!(loadingPhoneAuth$ | async)\"\n icon=\"scIconLogIn\"\n >\n \u0412\u043E\u0439\u0442\u0438\n </button>\n</form>\n" }]
62
+ }], ctorParameters: function () { return [{ type: i1.ScAuthService }]; } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2lnbi1pbi1mb3JtLWJ5LXBob25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9hdXRoL3NjLXNpZ24taW4tZm9ybS9zYy1zaWduLWluLWZvcm0tYnktcGhvbmUvc2Mtc2lnbi1pbi1mb3JtLWJ5LXBob25lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9hdXRoL3NjLXNpZ24taW4tZm9ybS9zYy1zaWduLWluLWZvcm0tYnktcGhvbmUvc2Mtc2lnbi1pbi1mb3JtLWJ5LXBob25lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFjLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQUdyRzs7R0FFRztBQU1ILE1BQU0sT0FBTyw0QkFBNEI7SUFtRHJDOzs7OztPQUtHO0lBQ0gsWUFBb0MsV0FBMEI7UUFBMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUF4RDlEOztXQUVHO1FBQ0ksYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVqQzs7V0FFRztRQUNhLGdCQUFXLEdBQWMsSUFBSSxTQUFTLENBQUM7WUFDbkQsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFnQixJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RixnQkFBZ0IsRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekcsQ0FBQyxDQUFDO1FBRUg7O1dBRUc7UUFDYSxhQUFRLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFOUQ7O1dBRUc7UUFDYyxrQkFBYSxHQUFrQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDOUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQ3BDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQW9CLENBQUMsRUFDaEQsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUNuQyxVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDcEMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQXlCLENBQUM7WUFFdEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzVGO1lBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNFO1lBRUQsT0FBTyxFQUFFLENBQUMsRUFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FDbEIsQ0FDSixFQUNELEtBQUssRUFBRSxDQUNWLENBQUM7UUFFRjs7V0FFRztRQUNhLHNCQUFpQixHQUF3QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQVFqQyxDQUFDOzt5SEF6RHpELDRCQUE0Qjs2R0FBNUIsNEJBQTRCLGdFQ2hCekMscWtCQWNBOzJGREVhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDSSwwQkFBMEIsbUJBRW5CLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJQXV0aFRva2VuLCBJUGhvbmVMb2dpbiwgU2NBdXRoU2VydmljZSB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgdHVpSXNGYWxzeSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgY2F0Y2hFcnJvciwgb2YsIHN0YXJ0V2l0aCwgc2hhcmUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaUVycm9yUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FwaUVycm9yUmVzcG9uc2UnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L4g0L3QvtC80LXRgNGDINGC0LXQu9C10YTQvtC90LAg0Lgg0LrQvtC00YMg0L/QvtC00YLQstC10YDQttC00LXQvdC40Y8uXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2Mtc2lnbi1pbi1mb3JtLWJ5LXBob25lJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2Mtc2lnbi1pbi1mb3JtLWJ5LXBob25lLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NTaWduSW5Gb3JtQnlQaG9uZUNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0J3QsNC70LjRh9C40LUg0LrQvtC00LAg0L/QvtC00YLQstC10YDQttC00LXQvdC40Y8g0YMg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqL1xuICAgIHB1YmxpYyBoYXZlQ29kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog0JPRgNGD0L/Qv9CwINC/0L7Qu9C10Lkg0LLQstC+0LTQsCDQtNC70Y8g0YTQvtGA0LzRiyDCq9CS0YXQvtC0INC90LAg0YHQsNC50YLCuy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybUJ5UGhvbmU6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBwaG9uZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMildKSxcbiAgICAgICAgcGhvbmVBcHByb3ZlQ29kZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KV0pLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INCh0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb25TdWJtaXQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INCX0LDQv9GA0L7RgdCwINC00LDQvdC90YvRhSDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGhvbmVSZXF1ZXN0JDogT2JzZXJ2YWJsZTxJQXV0aFRva2VuIHwgbnVsbD4gPSB0aGlzLm9uU3VibWl0LnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZvcm1CeVBob25lLnZhbGlkKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuZm9ybUJ5UGhvbmUudmFsdWUgYXMgSVBob25lTG9naW4pLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRTaWduSW4kKHZhbHVlKS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gZXJyb3IuZXJyb3IgYXMgQXBpRXJyb3JSZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlcnJvclJlc3BvbnNlLmVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQnlQaG9uZS5nZXQoa2V5KT8uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IGVycm9yUmVzcG9uc2UuZXJyb3JzW2Ake2tleX1gXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZXJyb3JSZXNwb25zZS5lcnJvcnMgJiYgZXJyb3JSZXNwb25zZS5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1CeVBob25lLnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBbZXJyb3JSZXNwb25zZS5tZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih7fSBhcyBJQXV0aFRva2VuKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0JjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LPRgNGD0LfQutC4INC00LDQvdC90YvRhSDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L4g0L3QvtC80LXRgNGDINGC0LXQu9C10YTQvtC90LAuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmdQaG9uZUF1dGgkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5waG9uZVJlcXVlc3QkLnBpcGUobWFwKHR1aUlzRmFsc3kpKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NTaWduSW5Gb3JtQnlQaG9uZUNvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXV0aFNlcnZpY2Ug0KHQtdGA0LLQuNGBINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40LguXG4gICAgICogQHBhcmFtIHZlcmlmaWNhdGlvblNlcnZpY2Ug0KHQtdGA0LLQuNGBINCy0LXRgNC40YTQuNC60LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IFNjQXV0aFNlcnZpY2UpIHt9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1CeVBob25lXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0Lm5leHQoKVwiIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBpdGVtcy1jZW50ZXIgbWItNFwiPlxuICAgIDxzYy1waG9uZS1hcHByb3ZlLWZvcm0gWyhoYXZlQ29kZSldPVwiaGF2ZUNvZGVcIiBbc2hvdWxkQmVDb25maXJtZWRdPVwidHJ1ZVwiIGNsYXNzPVwidy1mdWxsXCI+PC9zYy1waG9uZS1hcHByb3ZlLWZvcm0+XG4gICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cImhhdmVDb2RlXCJcbiAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgIFtzaG93TG9hZGVyXT1cIiEhKGxvYWRpbmdQaG9uZUF1dGgkIHwgYXN5bmMpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1CeVBob25lLmludmFsaWQgfHwgISEobG9hZGluZ1Bob25lQXV0aCQgfCBhc3luYylcIlxuICAgICAgICBpY29uPVwic2NJY29uTG9nSW5cIlxuICAgID5cbiAgICAgICAg0JLQvtC50YLQuFxuICAgIDwvYnV0dG9uPlxuPC9mb3JtPlxuIl19