@snabcentr/client-ui 0.7.0 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- package/auth/sc-auth.module.d.ts +2 -1
- package/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.d.ts +4 -42
- package/catalog/categories-list/sc-categories-list.component.d.ts +31 -0
- package/catalog/index.d.ts +1 -0
- package/catalog/sc-catalog.module.d.ts +9 -8
- package/esm2020/auth/sc-auth.module.mjs +7 -3
- package/esm2020/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.mjs +9 -85
- package/esm2020/catalog/categories-list/sc-categories-list.component.mjs +44 -0
- package/esm2020/catalog/index.mjs +2 -1
- package/esm2020/catalog/sc-catalog.module.mjs +8 -3
- package/esm2020/public-api.mjs +2 -1
- package/esm2020/verification/index.mjs +3 -0
- package/esm2020/verification/phone-approve-form/phone-approve-form.component.mjs +154 -0
- package/esm2020/verification/sc-verification.module.mjs +73 -0
- package/fesm2015/snabcentr-client-ui.mjs +249 -65
- package/fesm2015/snabcentr-client-ui.mjs.map +1 -1
- package/fesm2020/snabcentr-client-ui.mjs +241 -63
- package/fesm2020/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +1 -0
- package/styles/tailwind/tailwind.scss +37 -0
- package/verification/index.d.ts +2 -0
- package/verification/phone-approve-form/phone-approve-form.component.d.ts +83 -0
- package/verification/sc-verification.module.d.ts +16 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
|
-
import { Component, ChangeDetectionStrategy,
|
2
|
+
import { EventEmitter, Component, ChangeDetectionStrategy, Inject, Input, Output, NgModule, Directive, HostBinding, ContentChild, Injectable, ElementRef, ContentChildren, ViewChild, HostListener, ChangeDetectorRef, Optional, Self, inject, InjectionToken, forwardRef } from '@angular/core';
|
3
3
|
import * as i12 from 'rxjs';
|
4
|
-
import { Subject, filter, map, switchMap, catchError, of, startWith, share,
|
4
|
+
import { Subject, filter, map, switchMap, tap, catchError, of, finalize, startWith, share, timer, scan, takeWhile, endWith, distinctUntilChanged, shareReplay, interval, takeUntil, skip, debounceTime, merge } from 'rxjs';
|
5
5
|
import * as i1 from '@snabcentr/client-core';
|
6
6
|
import { SC_URLS, SC_PATH_IMAGE_NOT_FOUND, ScCatalogService, ScCartService, ScIconTypesEnum, ScUserService } from '@snabcentr/client-core';
|
7
7
|
import * as i2 from '@angular/common';
|
@@ -9,9 +9,9 @@ import { CommonModule, formatDate } from '@angular/common';
|
|
9
9
|
import * as i4 from '@taiga-ui/core';
|
10
10
|
import { TuiTextfieldControllerModule, TuiLinkModule, TuiButtonModule, TuiLabelModule, TuiModeModule, TuiErrorModule, TuiLoaderModule, tuiFadeIn, tuiFormatNumber, TuiSvgModule, TuiHintModule, TuiFormatNumberPipeModule, TuiNotificationModule, TuiFormatPhonePipeModule } from '@taiga-ui/core';
|
11
11
|
import * as i2$1 from '@angular/forms';
|
12
|
-
import { FormGroup, FormControl, Validators, FormsModule, ReactiveFormsModule, NgControl } from '@angular/forms';
|
12
|
+
import { FormGroupDirective, FormGroup, FormControl, Validators, FormsModule, ReactiveFormsModule, NgControl } from '@angular/forms';
|
13
13
|
import * as i6 from '@taiga-ui/cdk';
|
14
|
-
import { tuiIsFalsy, TuiLetModule, tuiCreateToken, AbstractTuiNullableControl, TUI_IS_MOBILE, tuiIsPresent, TuiDestroyService, tuiPure } from '@taiga-ui/cdk';
|
14
|
+
import { tuiControlValue, tuiIsFalsy, TuiLetModule, tuiCreateToken, AbstractTuiNullableControl, TUI_IS_MOBILE, tuiIsPresent, TuiDestroyService, tuiPure } from '@taiga-ui/cdk';
|
15
15
|
import * as i3 from '@taiga-ui/kit';
|
16
16
|
import { TuiInputPasswordModule, TuiInputModule, TuiFieldErrorPipeModule, TuiInputPhoneModule, TuiAccordionModule, TuiElasticContainerModule, TuiCarouselModule, TUI_NUMBER_VALUE_TRANSFORMER, TuiInputNumberComponent, TuiIslandModule, TuiInputNumberModule, TuiTreeService, TuiTreeItemContentComponent, TUI_TREE_START, TUI_TREE_CONTENT, TUI_TREE_LOADING, TUI_TREE_LOADER, TuiTreeModule, TuiCheckboxLabeledModule } from '@taiga-ui/kit';
|
17
17
|
import * as i7 from '@maskito/angular';
|
@@ -59,67 +59,34 @@ const phoneApproveCodeMask = {
|
|
59
59
|
};
|
60
60
|
|
61
61
|
/**
|
62
|
-
* Компонент
|
62
|
+
* Компонент формы проверки телефона и получения кода подтверждения.
|
63
63
|
*/
|
64
|
-
class
|
64
|
+
class ScPhoneApproveFormComponent {
|
65
65
|
/**
|
66
|
-
* Инициализирует экземпляр класса {@link
|
66
|
+
* Инициализирует экземпляр класса {@link ScPhoneApproveFormComponent}.
|
67
67
|
*
|
68
|
-
* @param authService Сервис аутентификации.
|
69
68
|
* @param verificationService Сервис верификации.
|
69
|
+
* @param formGroupDirective Директива c `FormGroup` из DOM.
|
70
70
|
*/
|
71
|
-
constructor(
|
72
|
-
this.authService = authService;
|
71
|
+
constructor(verificationService, formGroupDirective) {
|
73
72
|
this.verificationService = verificationService;
|
73
|
+
this.formGroupDirective = formGroupDirective;
|
74
74
|
/**
|
75
|
-
*
|
75
|
+
* Признак, следует ли телефону быть в системе. От этого признака зависит в каких случаях выдавать ошибку при проверки занятости телефона.
|
76
76
|
*/
|
77
|
-
this.
|
78
|
-
/**
|
79
|
-
* Группа полей ввода для формы «Вход на сайт».
|
80
|
-
*/
|
81
|
-
this.formByPhone = new FormGroup({
|
82
|
-
phone: new FormControl(null, [Validators.required, Validators.minLength(12)]),
|
83
|
-
phoneApproveCode: new FormControl(null, [Validators.required, Validators.minLength(6)]),
|
84
|
-
});
|
77
|
+
this.shouldBeBusy = true;
|
85
78
|
/**
|
86
|
-
*
|
79
|
+
* Признак, следует ли проверять подтверждён ли телефона в системе. При `true` будет вызывать ошибку при наличие телефона в системе без подтверждения.
|
87
80
|
*/
|
88
|
-
this.
|
81
|
+
this.shouldBeConfirmed = false;
|
89
82
|
/**
|
90
|
-
*
|
83
|
+
* Наличие кода подтверждения у пользователя.
|
91
84
|
*/
|
92
|
-
this.
|
93
|
-
var _a;
|
94
|
-
const errorResponse = error.error;
|
95
|
-
for (const key in errorResponse.errors) {
|
96
|
-
(_a = this.formByPhone.get(key)) === null || _a === void 0 ? void 0 : _a.setErrors({ serverResponse: errorResponse.errors[`${key}`] });
|
97
|
-
}
|
98
|
-
if (!errorResponse.errors && errorResponse.message) {
|
99
|
-
this.formByPhone.setErrors({ serverResponse: [errorResponse.message] });
|
100
|
-
}
|
101
|
-
return of({});
|
102
|
-
}), startWith(null))), share());
|
85
|
+
this.haveCode = false;
|
103
86
|
/**
|
104
|
-
*
|
87
|
+
* Событие для обратной привязки наличия кода подтверждения
|
105
88
|
*/
|
106
|
-
this.
|
107
|
-
if (this.phoneControl.valid && !!value) {
|
108
|
-
return this.verificationService.getPhoneCheck$(value).pipe(map((result) => result.isBusy), tap((isBusy) => {
|
109
|
-
if (!isBusy) {
|
110
|
-
this.phoneControl.setErrors({ serverResponse: ['Пользователя с таким номером телефона не существует'] });
|
111
|
-
this.phoneControl.markAsTouched();
|
112
|
-
}
|
113
|
-
}), catchError((error) => {
|
114
|
-
var _a, _b;
|
115
|
-
const errorResponse = error.error;
|
116
|
-
this.phoneControl.setErrors({ serverResponse: (_b = (_a = errorResponse === null || errorResponse === void 0 ? void 0 : errorResponse.errors) === null || _a === void 0 ? void 0 : _a[`phone`]) !== null && _b !== void 0 ? _b : [errorResponse.message] });
|
117
|
-
return of(false);
|
118
|
-
}), startWith(null));
|
119
|
-
}
|
120
|
-
this.setHaveCode(false);
|
121
|
-
return of(false);
|
122
|
-
}), share());
|
89
|
+
this.haveCodeChange = new EventEmitter();
|
123
90
|
/**
|
124
91
|
* {@link Subject} События отправки кода подтверждения.
|
125
92
|
*/
|
@@ -146,10 +113,6 @@ class ScSignInFormByPhoneComponent {
|
|
146
113
|
* Маска поля ввода кода для подтверждения.
|
147
114
|
*/
|
148
115
|
this.approveCodeMask = phoneApproveCodeMask;
|
149
|
-
/**
|
150
|
-
* {@link Observable} Изменения состояния загрузки данных аутентификации по номеру телефона.
|
151
|
-
*/
|
152
|
-
this.loadingPhoneAuth$ = this.phoneRequest$.pipe(map(tuiIsFalsy));
|
153
116
|
/**
|
154
117
|
* {@link Subject} События запуска/остановки таймера.
|
155
118
|
*/
|
@@ -165,11 +128,52 @@ class ScSignInFormByPhoneComponent {
|
|
165
128
|
return `${Math.round(minutes).toString().padStart(2, '0')}:${Math.round(seconds).toString().padStart(2, '0')}`;
|
166
129
|
}), endWith(null), startWith(null), distinctUntilChanged())));
|
167
130
|
}
|
131
|
+
/**
|
132
|
+
* Группа полей ввода для формы «Вход на сайт».
|
133
|
+
*/
|
134
|
+
get form() {
|
135
|
+
var _a;
|
136
|
+
return (_a = this.formGroupDirective) === null || _a === void 0 ? void 0 : _a.form;
|
137
|
+
}
|
168
138
|
/**
|
169
139
|
* Поле ввода 'Номер телефона'.
|
170
140
|
*/
|
171
141
|
get phoneControl() {
|
172
|
-
|
142
|
+
var _a;
|
143
|
+
return (_a = this.form) === null || _a === void 0 ? void 0 : _a.controls.phone;
|
144
|
+
}
|
145
|
+
/** @inheritDoc */
|
146
|
+
ngOnInit() {
|
147
|
+
this.phoneCheck$ = tuiControlValue(this.phoneControl).pipe(tap(() => this.reloadTimer$.next(0)), switchMap((value) => {
|
148
|
+
if (this.phoneControl.valid && !!value) {
|
149
|
+
return this.verificationService.getPhoneCheck$(value).pipe(map((result) => {
|
150
|
+
if (this.shouldBeBusy !== result.isBusy) {
|
151
|
+
this.phoneControl.setErrors({
|
152
|
+
serverResponse: [
|
153
|
+
this.shouldBeBusy ? 'Пользователя с таким номером телефона не существует' : 'Пользователь с таким номером телефона уже существует',
|
154
|
+
],
|
155
|
+
});
|
156
|
+
this.phoneControl.markAsTouched();
|
157
|
+
return false;
|
158
|
+
}
|
159
|
+
if (this.shouldBeConfirmed && result.isConfirmed === false) {
|
160
|
+
this.phoneControl.setErrors({
|
161
|
+
serverResponse: ['Номер телефона не подтверждён. Обратитесь к вашему персональному менеджеру или войдите с использованием e-mail и пароля.'],
|
162
|
+
});
|
163
|
+
this.phoneControl.markAsTouched();
|
164
|
+
return false;
|
165
|
+
}
|
166
|
+
return true;
|
167
|
+
}), catchError((error) => {
|
168
|
+
var _a, _b;
|
169
|
+
const errorResponse = error.error;
|
170
|
+
this.phoneControl.setErrors({ serverResponse: (_b = (_a = errorResponse === null || errorResponse === void 0 ? void 0 : errorResponse.errors) === null || _a === void 0 ? void 0 : _a[`phone`]) !== null && _b !== void 0 ? _b : [errorResponse.message] });
|
171
|
+
return of(false);
|
172
|
+
}), startWith(null));
|
173
|
+
}
|
174
|
+
this.setHaveCode(false);
|
175
|
+
return of(false);
|
176
|
+
}), share());
|
173
177
|
}
|
174
178
|
/**
|
175
179
|
* Устанавливает состояние наличия кода подтверждения у пользователя.
|
@@ -178,14 +182,82 @@ class ScSignInFormByPhoneComponent {
|
|
178
182
|
*/
|
179
183
|
setHaveCode(haveCode) {
|
180
184
|
this.haveCode = haveCode;
|
185
|
+
this.haveCodeChange.emit(haveCode);
|
186
|
+
}
|
187
|
+
}
|
188
|
+
ScPhoneApproveFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPhoneApproveFormComponent, deps: [{ token: i1.ScVerificationService }, { token: FormGroupDirective }], target: i0.ɵɵFactoryTarget.Component });
|
189
|
+
ScPhoneApproveFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScPhoneApproveFormComponent, selector: "sc-phone-approve-form", inputs: { shouldBeBusy: "shouldBeBusy", shouldBeConfirmed: "shouldBeConfirmed", haveCode: "haveCode" }, outputs: { haveCodeChange: "haveCodeChange" }, ngImport: i0, template: "<form [formGroup]=\"form\" *tuiLet=\"(loadingApproveCode$ | async) as loadingApproveCode\" class=\"flex flex-col gap-3\">\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\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\n <div *tuiLet=\"!!loadingApproveCode as loadingApproveCode\" class=\"flex gap-4 justify-center\">\n <button\n *ngIf=\"!haveCode\"\n tuiButton\n size=\"s\"\n (click)=\"onSendCode.next()\"\n [disabled]=\"loadingApproveCode || !!!(phoneCheck$ | 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]=\"!!!(phoneCheck$ | 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 </div>\n</form>\n\n<ng-template #checkingPhone>\n <tui-loader *ngIf=\"!!!(phoneCheck$ | 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: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.TuiTextfieldComponent, selector: "input[tuiTextfield], textarea[tuiTextfield]" }, { kind: "component", type: i3.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i3.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: i3.TuiInputPhoneComponent, selector: "tui-input-phone", inputs: ["countryCode", "phoneMaskAfterCountryCode", "allowText", "search"], outputs: ["searchChange"] }, { kind: "directive", type: i3.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: i3.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
190
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPhoneApproveFormComponent, decorators: [{
|
191
|
+
type: Component,
|
192
|
+
args: [{ selector: 'sc-phone-approve-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\" *tuiLet=\"(loadingApproveCode$ | async) as loadingApproveCode\" class=\"flex flex-col gap-3\">\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\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\n <div *tuiLet=\"!!loadingApproveCode as loadingApproveCode\" class=\"flex gap-4 justify-center\">\n <button\n *ngIf=\"!haveCode\"\n tuiButton\n size=\"s\"\n (click)=\"onSendCode.next()\"\n [disabled]=\"loadingApproveCode || !!!(phoneCheck$ | 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]=\"!!!(phoneCheck$ | 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 </div>\n</form>\n\n<ng-template #checkingPhone>\n <tui-loader *ngIf=\"!!!(phoneCheck$ | async) && phoneControl.valid\" class=\"w-4 h-4\"> </tui-loader>\n</ng-template>\n" }]
|
193
|
+
}], ctorParameters: function () {
|
194
|
+
return [{ type: i1.ScVerificationService }, { type: i2$1.FormGroupDirective, decorators: [{
|
195
|
+
type: Inject,
|
196
|
+
args: [FormGroupDirective]
|
197
|
+
}] }];
|
198
|
+
}, propDecorators: { shouldBeBusy: [{
|
199
|
+
type: Input
|
200
|
+
}], shouldBeConfirmed: [{
|
201
|
+
type: Input
|
202
|
+
}], haveCode: [{
|
203
|
+
type: Input
|
204
|
+
}], haveCodeChange: [{
|
205
|
+
type: Output
|
206
|
+
}] } });
|
207
|
+
|
208
|
+
/**
|
209
|
+
* Компонент аутентификации по номеру телефона и коду подтверждения.
|
210
|
+
*/
|
211
|
+
class ScSignInFormByPhoneComponent {
|
212
|
+
/**
|
213
|
+
* Инициализирует экземпляр класса {@link ScSignInFormByPhoneComponent}.
|
214
|
+
*
|
215
|
+
* @param authService Сервис аутентификации.
|
216
|
+
* @param verificationService Сервис верификации.
|
217
|
+
*/
|
218
|
+
constructor(authService) {
|
219
|
+
this.authService = authService;
|
220
|
+
/**
|
221
|
+
* Наличие кода подтверждения у пользователя.
|
222
|
+
*/
|
223
|
+
this.haveCode = false;
|
224
|
+
/**
|
225
|
+
* Группа полей ввода для формы «Вход на сайт».
|
226
|
+
*/
|
227
|
+
this.formByPhone = new FormGroup({
|
228
|
+
phone: new FormControl(null, [Validators.required, Validators.minLength(12)]),
|
229
|
+
phoneApproveCode: new FormControl(null, [Validators.required, Validators.minLength(6)]),
|
230
|
+
});
|
231
|
+
/**
|
232
|
+
* {@link Subject} События отправки формы.
|
233
|
+
*/
|
234
|
+
this.onSubmit = new Subject();
|
235
|
+
/**
|
236
|
+
* {@link Observable} Запроса данных аутентификации.
|
237
|
+
*/
|
238
|
+
this.phoneRequest$ = this.onSubmit.pipe(filter(() => this.formByPhone.valid), map(() => this.formByPhone.value), switchMap((value) => this.authService.getSignIn$(value).pipe(catchError((error) => {
|
239
|
+
var _a;
|
240
|
+
const errorResponse = error.error;
|
241
|
+
for (const key in errorResponse.errors) {
|
242
|
+
(_a = this.formByPhone.get(key)) === null || _a === void 0 ? void 0 : _a.setErrors({ serverResponse: errorResponse.errors[`${key}`] });
|
243
|
+
}
|
244
|
+
if (!errorResponse.errors && errorResponse.message) {
|
245
|
+
this.formByPhone.setErrors({ serverResponse: [errorResponse.message] });
|
246
|
+
}
|
247
|
+
return of({});
|
248
|
+
}), startWith(null))), share());
|
249
|
+
/**
|
250
|
+
* {@link Observable} Изменения состояния загрузки данных аутентификации по номеру телефона.
|
251
|
+
*/
|
252
|
+
this.loadingPhoneAuth$ = this.phoneRequest$.pipe(map(tuiIsFalsy));
|
181
253
|
}
|
182
254
|
}
|
183
|
-
ScSignInFormByPhoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByPhoneComponent, deps: [{ token: i1.ScAuthService }
|
184
|
-
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\"
|
255
|
+
ScSignInFormByPhoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByPhoneComponent, deps: [{ token: i1.ScAuthService }], target: i0.ɵɵFactoryTarget.Component });
|
256
|
+
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\" 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: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.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: ScPhoneApproveFormComponent, selector: "sc-phone-approve-form", inputs: ["shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
185
257
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByPhoneComponent, decorators: [{
|
186
258
|
type: Component,
|
187
|
-
args: [{ selector: 'sc-sign-in-form-by-phone', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"formByPhone\"
|
188
|
-
}], ctorParameters: function () { return [{ type: i1.ScAuthService }
|
259
|
+
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\" 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" }]
|
260
|
+
}], ctorParameters: function () { return [{ type: i1.ScAuthService }]; } });
|
189
261
|
|
190
262
|
/**
|
191
263
|
* Компонент аутентификации по адресу электронной почты и паролю.
|
@@ -304,6 +376,70 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
304
376
|
type: Output
|
305
377
|
}] } });
|
306
378
|
|
379
|
+
/**
|
380
|
+
* Модуль отправки кодов подтверждения (номера телефона, адреса эл. почты и т.д.).
|
381
|
+
*/
|
382
|
+
class ScVerificationModule {
|
383
|
+
}
|
384
|
+
ScVerificationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScVerificationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
385
|
+
ScVerificationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ScVerificationModule, declarations: [ScPhoneApproveFormComponent], imports: [CommonModule,
|
386
|
+
FormsModule,
|
387
|
+
ReactiveFormsModule,
|
388
|
+
TuiInputPasswordModule,
|
389
|
+
TuiInputModule,
|
390
|
+
TuiTextfieldControllerModule,
|
391
|
+
TuiLinkModule,
|
392
|
+
TuiButtonModule,
|
393
|
+
TuiLabelModule,
|
394
|
+
TuiModeModule,
|
395
|
+
TuiFieldErrorPipeModule,
|
396
|
+
TuiErrorModule,
|
397
|
+
TuiLetModule,
|
398
|
+
TuiLoaderModule,
|
399
|
+
TuiInputPhoneModule,
|
400
|
+
MaskitoModule], exports: [ScPhoneApproveFormComponent] });
|
401
|
+
ScVerificationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScVerificationModule, imports: [CommonModule,
|
402
|
+
FormsModule,
|
403
|
+
ReactiveFormsModule,
|
404
|
+
TuiInputPasswordModule,
|
405
|
+
TuiInputModule,
|
406
|
+
TuiTextfieldControllerModule,
|
407
|
+
TuiLinkModule,
|
408
|
+
TuiButtonModule,
|
409
|
+
TuiLabelModule,
|
410
|
+
TuiModeModule,
|
411
|
+
TuiFieldErrorPipeModule,
|
412
|
+
TuiErrorModule,
|
413
|
+
TuiLetModule,
|
414
|
+
TuiLoaderModule,
|
415
|
+
TuiInputPhoneModule,
|
416
|
+
MaskitoModule] });
|
417
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScVerificationModule, decorators: [{
|
418
|
+
type: NgModule,
|
419
|
+
args: [{
|
420
|
+
imports: [
|
421
|
+
CommonModule,
|
422
|
+
FormsModule,
|
423
|
+
ReactiveFormsModule,
|
424
|
+
TuiInputPasswordModule,
|
425
|
+
TuiInputModule,
|
426
|
+
TuiTextfieldControllerModule,
|
427
|
+
TuiLinkModule,
|
428
|
+
TuiButtonModule,
|
429
|
+
TuiLabelModule,
|
430
|
+
TuiModeModule,
|
431
|
+
TuiFieldErrorPipeModule,
|
432
|
+
TuiErrorModule,
|
433
|
+
TuiLetModule,
|
434
|
+
TuiLoaderModule,
|
435
|
+
TuiInputPhoneModule,
|
436
|
+
MaskitoModule,
|
437
|
+
],
|
438
|
+
exports: [ScPhoneApproveFormComponent],
|
439
|
+
declarations: [ScPhoneApproveFormComponent],
|
440
|
+
}]
|
441
|
+
}] });
|
442
|
+
|
307
443
|
/**
|
308
444
|
* Модуль аутентификации.
|
309
445
|
*/
|
@@ -325,7 +461,8 @@ ScAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
325
461
|
TuiLetModule,
|
326
462
|
TuiLoaderModule,
|
327
463
|
TuiInputPhoneModule,
|
328
|
-
MaskitoModule
|
464
|
+
MaskitoModule,
|
465
|
+
ScVerificationModule], exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent] });
|
329
466
|
ScAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScAuthModule, imports: [CommonModule,
|
330
467
|
FormsModule,
|
331
468
|
ReactiveFormsModule,
|
@@ -341,7 +478,8 @@ ScAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
341
478
|
TuiLetModule,
|
342
479
|
TuiLoaderModule,
|
343
480
|
TuiInputPhoneModule,
|
344
|
-
MaskitoModule
|
481
|
+
MaskitoModule,
|
482
|
+
ScVerificationModule] });
|
345
483
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScAuthModule, decorators: [{
|
346
484
|
type: NgModule,
|
347
485
|
args: [{
|
@@ -363,6 +501,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
363
501
|
TuiLoaderModule,
|
364
502
|
TuiInputPhoneModule,
|
365
503
|
MaskitoModule,
|
504
|
+
ScVerificationModule,
|
366
505
|
],
|
367
506
|
exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent],
|
368
507
|
}]
|
@@ -1095,6 +1234,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
1095
1234
|
type: Output
|
1096
1235
|
}] } });
|
1097
1236
|
|
1237
|
+
/**
|
1238
|
+
* Компонент списка категорий.
|
1239
|
+
*/
|
1240
|
+
class ScCategoriesListComponent {
|
1241
|
+
/**
|
1242
|
+
* Инициализирует экземпляр класса {@link ScCategoriesListComponent}.
|
1243
|
+
*
|
1244
|
+
* @param urls объект информации о базовом списке ссылок приложения.
|
1245
|
+
*/
|
1246
|
+
constructor(urls) {
|
1247
|
+
this.urls = urls;
|
1248
|
+
/**
|
1249
|
+
* Событие нажатия на категорию.
|
1250
|
+
*/
|
1251
|
+
this.clickCategoryEvent = new EventEmitter();
|
1252
|
+
}
|
1253
|
+
/**
|
1254
|
+
* Возвращает путь до изображения на сервере.
|
1255
|
+
*
|
1256
|
+
* @param imgPath путь, где хранится изображение.
|
1257
|
+
*/
|
1258
|
+
getCategoryImage(imgPath) {
|
1259
|
+
return this.urls.imgServerUrl + '/' + imgPath;
|
1260
|
+
}
|
1261
|
+
}
|
1262
|
+
ScCategoriesListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoriesListComponent, deps: [{ token: SC_URLS }], target: i0.ɵɵFactoryTarget.Component });
|
1263
|
+
ScCategoriesListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCategoriesListComponent, selector: "sc-categories-list", inputs: { categories: "categories" }, outputs: { clickCategoryEvent: "clickCategoryEvent" }, ngImport: i0, template: "<div class=\"flex flex-col\">\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button *ngFor=\"let item of $any(categories)\" class=\"flex flex-row h-11 w-full border-b justify-between items-center py-7\" (click)=\"clickCategoryEvent.emit(item)\">\n <p class=\"truncate mr-0 text-left font-bold max-w-[85%]\">{{ item.name }}</p>\n <tui-svg *ngIf=\"item.isFavorite\" src=\"scIconFavoriteFill\" class=\"text-tui-primary !text-xs mr-auto\"></tui-svg>\n <img *ngIf=\"item.properties?.image\" [src]=\"getCategoryImage(item.properties?.image)\" [alt]=\"item.name\" class=\"w-6 h-6 ml-auto\" />\n <i *ngIf=\"item.properties?.['icon'] && !item.properties?.image\" class=\"{{ item.properties?.['icon'] }} w-6 h-6 ml-auto\"></i>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *ngFor=\"let _ of [].constructor(10); let index = index\"\n tuiButton\n size=\"m\"\n appearance=\"secondary\"\n tuiMode=\"onLight\"\n style.width=\"{{ ((index % 3) + 3) * 20 }}%\"\n class=\"!flex-shrink tui-skeleton my-4\"\n ></button>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i4.TuiModeDirective, selector: "[tuiMode]", inputs: ["tuiMode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
1264
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoriesListComponent, decorators: [{
|
1265
|
+
type: Component,
|
1266
|
+
args: [{ selector: 'sc-categories-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col\">\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button *ngFor=\"let item of $any(categories)\" class=\"flex flex-row h-11 w-full border-b justify-between items-center py-7\" (click)=\"clickCategoryEvent.emit(item)\">\n <p class=\"truncate mr-0 text-left font-bold max-w-[85%]\">{{ item.name }}</p>\n <tui-svg *ngIf=\"item.isFavorite\" src=\"scIconFavoriteFill\" class=\"text-tui-primary !text-xs mr-auto\"></tui-svg>\n <img *ngIf=\"item.properties?.image\" [src]=\"getCategoryImage(item.properties?.image)\" [alt]=\"item.name\" class=\"w-6 h-6 ml-auto\" />\n <i *ngIf=\"item.properties?.['icon'] && !item.properties?.image\" class=\"{{ item.properties?.['icon'] }} w-6 h-6 ml-auto\"></i>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *ngFor=\"let _ of [].constructor(10); let index = index\"\n tuiButton\n size=\"m\"\n appearance=\"secondary\"\n tuiMode=\"onLight\"\n style.width=\"{{ ((index % 3) + 3) * 20 }}%\"\n class=\"!flex-shrink tui-skeleton my-4\"\n ></button>\n</ng-template>\n" }]
|
1267
|
+
}], ctorParameters: function () {
|
1268
|
+
return [{ type: undefined, decorators: [{
|
1269
|
+
type: Inject,
|
1270
|
+
args: [SC_URLS]
|
1271
|
+
}] }];
|
1272
|
+
}, propDecorators: { categories: [{
|
1273
|
+
type: Input
|
1274
|
+
}], clickCategoryEvent: [{
|
1275
|
+
type: Output
|
1276
|
+
}] } });
|
1277
|
+
|
1098
1278
|
/**
|
1099
1279
|
* Компонент кнопки избранных товаров и категорий.
|
1100
1280
|
*/
|
@@ -1836,7 +2016,8 @@ ScCatalogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version
|
|
1836
2016
|
ScInputQuantityComponent,
|
1837
2017
|
ScPriceCardComponent,
|
1838
2018
|
ScPriceWarehouseStockComponent,
|
1839
|
-
ScPriceHistoryComponent
|
2019
|
+
ScPriceHistoryComponent,
|
2020
|
+
ScCategoriesListComponent], imports: [CommonModule,
|
1840
2021
|
RouterModule,
|
1841
2022
|
TuiButtonModule,
|
1842
2023
|
TuiSvgModule,
|
@@ -1857,7 +2038,8 @@ ScCatalogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version
|
|
1857
2038
|
ScInputQuantityComponent,
|
1858
2039
|
ScPriceCardComponent,
|
1859
2040
|
ScPriceWarehouseStockComponent,
|
1860
|
-
ScPriceHistoryComponent
|
2041
|
+
ScPriceHistoryComponent,
|
2042
|
+
ScCategoriesListComponent] });
|
1861
2043
|
ScCatalogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCatalogModule, imports: [CommonModule,
|
1862
2044
|
RouterModule,
|
1863
2045
|
TuiButtonModule,
|
@@ -1887,6 +2069,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
1887
2069
|
ScPriceCardComponent,
|
1888
2070
|
ScPriceWarehouseStockComponent,
|
1889
2071
|
ScPriceHistoryComponent,
|
2072
|
+
ScCategoriesListComponent,
|
1890
2073
|
],
|
1891
2074
|
exports: [
|
1892
2075
|
ScPriceListPaginationComponent,
|
@@ -1896,6 +2079,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
1896
2079
|
ScPriceCardComponent,
|
1897
2080
|
ScPriceWarehouseStockComponent,
|
1898
2081
|
ScPriceHistoryComponent,
|
2082
|
+
ScCategoriesListComponent,
|
1899
2083
|
],
|
1900
2084
|
imports: [
|
1901
2085
|
CommonModule,
|
@@ -3081,5 +3265,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
3081
3265
|
* Generated bundle index. Do not edit.
|
3082
3266
|
*/
|
3083
3267
|
|
3084
|
-
export { AuthMethod, FilesAndDocumentsComponent, FilesAndDocumentsModule, SC_LINEAR_VALUES, SC_LINEAR_VALUES_TOKEN, SC_LOADING_PAGINATION_CHANGE_INFO, SC_NEXT_PAGE_PAGINATION_CHANGE_INFO, SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_CHANGE_INFO, SC_PRODUCT_PAGINATION_CHANGE_PROVIDERS, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_PRODUCT_PAGINATION_PARAMS, SC_USER_INFO, SC_USER_PROVIDERS, ScAccordionComponent, ScAccordionContentDirective, ScAccordionModule, ScAuthModule, ScBannerComponent, ScBannerModule, ScCartItemMobileComponent, ScCartModule, ScCatalogModule, ScCategoryCardComponent, ScContactsAccordionComponent, ScContactsModule, ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScContragentsModule, ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScDeliveryAddressModule, ScFavoriteBtnComponent, ScInputQuantityComponent, ScNewsCardComponent, ScNewsCardSkeletonComponent, ScNewsModule, ScOrderItemMobileComponent, ScOrderModule, ScPriceCardComponent, ScPriceHistoryComponent, ScPriceListPaginationComponent, ScPriceWarehouseStockComponent, ScProfileAccordionsContentComponent, ScProfileModule, ScResetUserPasswordComponent, ScShareButtonComponent, ScShareButtonModule, ScSignInFormByEmailComponent, ScSignInFormByPhoneComponent, ScSignInFormComponent, ScUserModule, TreeDirective, TreeIconService, TreeLoaderService, TreeTopDirective, nextPageClickEvent, paginationParams$, phoneApproveCodeMask, scClientUiIconsName, scPasswordConfirmMatchingValidator, scUserFactory, stepValidator };
|
3268
|
+
export { AuthMethod, FilesAndDocumentsComponent, FilesAndDocumentsModule, SC_LINEAR_VALUES, SC_LINEAR_VALUES_TOKEN, SC_LOADING_PAGINATION_CHANGE_INFO, SC_NEXT_PAGE_PAGINATION_CHANGE_INFO, SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_CHANGE_INFO, SC_PRODUCT_PAGINATION_CHANGE_PROVIDERS, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_PRODUCT_PAGINATION_PARAMS, SC_USER_INFO, SC_USER_PROVIDERS, ScAccordionComponent, ScAccordionContentDirective, ScAccordionModule, ScAuthModule, ScBannerComponent, ScBannerModule, ScCartItemMobileComponent, ScCartModule, ScCatalogModule, ScCategoriesListComponent, ScCategoryCardComponent, ScContactsAccordionComponent, ScContactsModule, ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScContragentsModule, ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScDeliveryAddressModule, ScFavoriteBtnComponent, ScInputQuantityComponent, ScNewsCardComponent, ScNewsCardSkeletonComponent, ScNewsModule, ScOrderItemMobileComponent, ScOrderModule, ScPhoneApproveFormComponent, ScPriceCardComponent, ScPriceHistoryComponent, ScPriceListPaginationComponent, ScPriceWarehouseStockComponent, ScProfileAccordionsContentComponent, ScProfileModule, ScResetUserPasswordComponent, ScShareButtonComponent, ScShareButtonModule, ScSignInFormByEmailComponent, ScSignInFormByPhoneComponent, ScSignInFormComponent, ScUserModule, ScVerificationModule, TreeDirective, TreeIconService, TreeLoaderService, TreeTopDirective, nextPageClickEvent, paginationParams$, phoneApproveCodeMask, scClientUiIconsName, scPasswordConfirmMatchingValidator, scUserFactory, stepValidator };
|
3085
3269
|
//# sourceMappingURL=snabcentr-client-ui.mjs.map
|