@snabcentr/client-ui 0.17.4 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @snabcentr/client-ui might be problematic. Click here for more details.
- package/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.d.ts +4 -8
- package/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.d.ts +3 -8
- package/auth/sc-sign-in-form/sc-sign-in-form.component.d.ts +8 -4
- package/catalog/price-history/sc-price-history.component.d.ts +44 -43
- package/catalog/sc-catalog.module.d.ts +3 -3
- package/esm2020/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.mjs +4 -16
- package/esm2020/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.mjs +4 -16
- package/esm2020/auth/sc-sign-in-form/sc-sign-in-form.component.mjs +24 -6
- package/esm2020/banner/sc-banner.component.mjs +4 -2
- package/esm2020/catalog/price-history/sc-price-history.component.mjs +85 -79
- package/esm2020/catalog/sc-catalog.module.mjs +12 -15
- package/fesm2015/snabcentr-client-ui.mjs +125 -321
- package/fesm2015/snabcentr-client-ui.mjs.map +1 -1
- package/fesm2020/snabcentr-client-ui.mjs +123 -320
- package/fesm2020/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +3 -5
- package/styles/tailwind/tailwind.scss +0 -24
- package/catalog/price-history/sc-chart-option.d.ts +0 -7
- package/catalog/price-history/sc-i-chart-data-item.d.ts +0 -13
- package/catalog/price-history/sc-lang-ru.d.ts +0 -115
- package/esm2020/catalog/price-history/sc-chart-option.mjs +0 -79
- package/esm2020/catalog/price-history/sc-i-chart-data-item.mjs +0 -2
- package/esm2020/catalog/price-history/sc-lang-ru.mjs +0 -115
@@ -1,17 +1,17 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
2
|
import { EventEmitter, Component, ChangeDetectionStrategy, Inject, Input, Output, NgModule, Directive, HostBinding, ContentChild, ViewChild, Injectable, ElementRef, ContentChildren, HostListener, ChangeDetectorRef, Optional, Self, inject, InjectionToken, SkipSelf, forwardRef } from '@angular/core';
|
3
|
-
import * as i10 from 'rxjs';
|
4
|
-
import { Subject, filter, map, switchMap, tap, catchError, of, finalize, startWith, share, timer, scan, takeWhile, endWith, distinctUntilChanged, shareReplay, interval, takeUntil, skip, debounceTime, merge, throwError, combineLatest } from 'rxjs';
|
5
3
|
import * as i1 from '@snabcentr/client-core';
|
6
4
|
import { ScUserMetrikaGoalsEnum, SC_URLS, SC_PATH_IMAGE_NOT_FOUND, SEARCH_TERM, SEARCH_TERM_PROVIDERS, ScCatalogService, ScCartService, ScAuthService, ScISuggestionType, ScOpfList, ScIconTypesEnum, ScUserService } from '@snabcentr/client-core';
|
5
|
+
import * as i10 from 'rxjs';
|
6
|
+
import { Subject, filter, map, switchMap, tap, catchError, of, finalize, startWith, share, timer, scan, takeWhile, endWith, distinctUntilChanged, shareReplay, interval, takeUntil, skip, debounceTime, merge, throwError, combineLatest } from 'rxjs';
|
7
7
|
import * as i2 from '@angular/common';
|
8
|
-
import { CommonModule
|
8
|
+
import { CommonModule } from '@angular/common';
|
9
9
|
import * as i4 from '@taiga-ui/core';
|
10
|
-
import { TuiTextfieldControllerModule, TuiLinkModule, TuiButtonModule, TuiLabelModule, TuiModeModule, TuiErrorModule, TuiLoaderModule, tuiFadeIn,
|
10
|
+
import { TuiTextfieldControllerModule, TuiLinkModule, TuiButtonModule, TuiLabelModule, TuiModeModule, TuiErrorModule, TuiLoaderModule, tuiFadeIn, TUI_MONTHS, TuiSvgModule, TuiHintModule, TuiFormatNumberPipeModule, TuiDataListModule, TuiNotificationModule, TuiFormatPhonePipeModule } from '@taiga-ui/core';
|
11
11
|
import * as i3 from '@angular/forms';
|
12
12
|
import { FormGroupDirective, FormGroup, FormControl, Validators, FormsModule, ReactiveFormsModule, NgControl, FormArray } from '@angular/forms';
|
13
13
|
import * as i6 from '@taiga-ui/cdk';
|
14
|
-
import { tuiControlValue, tuiIsFalsy, TuiLetModule, tuiCreateToken, AbstractTuiNullableControl, TUI_IS_MOBILE, tuiPure, tuiIsPresent, TuiDestroyService, TuiRepeatTimesModule, tuiMarkControlAsTouchedAndValidate, ALWAYS_TRUE_HANDLER } from '@taiga-ui/cdk';
|
14
|
+
import { tuiControlValue, tuiIsFalsy, TuiLetModule, tuiCreateToken, AbstractTuiNullableControl, TUI_IS_MOBILE, tuiPure, TuiDay, TuiDayRange, TuiMonth, tuiIsPresent, TuiDestroyService, TuiRepeatTimesModule, tuiMarkControlAsTouchedAndValidate, ALWAYS_TRUE_HANDLER } from '@taiga-ui/cdk';
|
15
15
|
import * as i4$1 from '@taiga-ui/kit';
|
16
16
|
import { TuiInputPasswordModule, TuiInputModule, TuiFieldErrorPipeModule, TuiInputPhoneModule, TuiAccordionItemComponent, TuiAccordionModule, TuiElasticContainerModule, TuiCarouselModule, TUI_NUMBER_VALUE_TRANSFORMER, TuiInputNumberComponent, TuiIslandModule, TuiInputNumberModule, TuiHighlightModule, TuiCarouselComponent, TuiComboBoxModule, TuiDataListWrapperModule, TuiFilterByInputPipeModule, TuiStringifyContentPipeModule, TuiSelectModule, TuiTreeService, TuiTreeItemContentComponent, TUI_TREE_START, TUI_TREE_CONTENT, TUI_TREE_LOADING, TUI_TREE_LOADER, TuiTreeModule, TuiCheckboxModule, TuiCheckboxLabeledModule } from '@taiga-ui/kit';
|
17
17
|
import * as i6$1 from '@maskito/angular';
|
@@ -27,14 +27,10 @@ import * as i7$1 from '@taiga-ui/addon-preview';
|
|
27
27
|
import { TuiPreviewDialogService, TuiPreviewModule } from '@taiga-ui/addon-preview';
|
28
28
|
import * as i9 from '@taiga-ui/addon-commerce';
|
29
29
|
import { TuiCurrencyPipeModule } from '@taiga-ui/addon-commerce';
|
30
|
-
import * as
|
31
|
-
import {
|
32
|
-
import { LineChart } from 'echarts/charts';
|
33
|
-
import { TitleComponent, TooltipComponent, GridComponent } from 'echarts/components';
|
34
|
-
import * as echarts from 'echarts/core';
|
35
|
-
import { SVGRenderer } from 'echarts/renderers';
|
30
|
+
import * as i3$1 from '@taiga-ui/addon-charts';
|
31
|
+
import { TuiLineDaysChartModule, TuiAxesModule } from '@taiga-ui/addon-charts';
|
36
32
|
import { HttpErrorResponse } from '@angular/common/http';
|
37
|
-
import * as i3$
|
33
|
+
import * as i3$2 from '@taiga-ui/layout';
|
38
34
|
import { TuiBlockStatusModule } from '@taiga-ui/layout';
|
39
35
|
|
40
36
|
/**
|
@@ -298,11 +294,9 @@ class ScSignInFormByPhoneComponent {
|
|
298
294
|
* Инициализирует экземпляр класса {@link ScSignInFormByPhoneComponent}.
|
299
295
|
*
|
300
296
|
* @param authService Сервис аутентификации.
|
301
|
-
* @param userMetrikaService Сервис для сбора метрик о действиях пользователей.
|
302
297
|
*/
|
303
|
-
constructor(authService
|
298
|
+
constructor(authService) {
|
304
299
|
this.authService = authService;
|
305
|
-
this.userMetrikaService = userMetrikaService;
|
306
300
|
/**
|
307
301
|
* Наличие кода подтверждения у пользователя.
|
308
302
|
*/
|
@@ -337,22 +331,13 @@ class ScSignInFormByPhoneComponent {
|
|
337
331
|
*/
|
338
332
|
this.loading$ = this.request$.pipe(map(tuiIsFalsy));
|
339
333
|
}
|
340
|
-
/** @inheritDoc */
|
341
|
-
ngOnInit() {
|
342
|
-
this.userMetrikaService.emitUserMetrikaEvent({
|
343
|
-
target: ScUserMetrikaGoalsEnum.signInShow,
|
344
|
-
params: {
|
345
|
-
type: 'phone',
|
346
|
-
},
|
347
|
-
});
|
348
|
-
}
|
349
334
|
}
|
350
|
-
ScSignInFormByPhoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByPhoneComponent, deps: [{ token: i1.ScAuthService }
|
335
|
+
ScSignInFormByPhoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByPhoneComponent, deps: [{ token: i1.ScAuthService }], target: i0.ɵɵFactoryTarget.Component });
|
351
336
|
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]=\"form\" *tuiLet=\"!!(loading$ | async) as loading\" (ngSubmit)=\"onSubmit.next()\" class=\"flex flex-col gap-4 items-center mb-4\">\n <sc-verification-phone-check-form [(haveCode)]=\"haveCode\" [shouldBeBusy]=\"true\" [shouldBeConfirmed]=\"true\" class=\"w-full\"></sc-verification-phone-check-form>\n <button *ngIf=\"haveCode\" tuiButton type=\"submit\" [showLoader]=\"loading\" [disabled]=\"form.invalid || loading\" icon=\"scIconLogIn\">\u0412\u043E\u0439\u0442\u0438</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: "directive", type: i6.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "component", type: ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
352
337
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByPhoneComponent, decorators: [{
|
353
338
|
type: Component,
|
354
339
|
args: [{ selector: 'sc-sign-in-form-by-phone', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\" *tuiLet=\"!!(loading$ | async) as loading\" (ngSubmit)=\"onSubmit.next()\" class=\"flex flex-col gap-4 items-center mb-4\">\n <sc-verification-phone-check-form [(haveCode)]=\"haveCode\" [shouldBeBusy]=\"true\" [shouldBeConfirmed]=\"true\" class=\"w-full\"></sc-verification-phone-check-form>\n <button *ngIf=\"haveCode\" tuiButton type=\"submit\" [showLoader]=\"loading\" [disabled]=\"form.invalid || loading\" icon=\"scIconLogIn\">\u0412\u043E\u0439\u0442\u0438</button>\n</form>\n" }]
|
355
|
-
}], ctorParameters: function () { return [{ type: i1.ScAuthService }
|
340
|
+
}], ctorParameters: function () { return [{ type: i1.ScAuthService }]; } });
|
356
341
|
|
357
342
|
/**
|
358
343
|
* Компонент аутентификации по адресу электронной почты и паролю.
|
@@ -362,11 +347,9 @@ class ScSignInFormByEmailComponent {
|
|
362
347
|
* Инициализирует экземпляр класса {@link ScSignInFormByEmailComponent}.
|
363
348
|
*
|
364
349
|
* @param authService Сервис аутентификации.
|
365
|
-
* @param userMetrikaService Сервис для сбора метрик о действиях пользователей.
|
366
350
|
*/
|
367
|
-
constructor(authService
|
351
|
+
constructor(authService) {
|
368
352
|
this.authService = authService;
|
369
|
-
this.userMetrikaService = userMetrikaService;
|
370
353
|
/**
|
371
354
|
* Группа полей ввода для формы «Вход на сайт».
|
372
355
|
*/
|
@@ -401,22 +384,13 @@ class ScSignInFormByEmailComponent {
|
|
401
384
|
*/
|
402
385
|
this.forgotPassword = new EventEmitter();
|
403
386
|
}
|
404
|
-
/** @inheritDoc */
|
405
|
-
ngOnInit() {
|
406
|
-
this.userMetrikaService.emitUserMetrikaEvent({
|
407
|
-
target: ScUserMetrikaGoalsEnum.signInShow,
|
408
|
-
params: {
|
409
|
-
type: 'email',
|
410
|
-
},
|
411
|
-
});
|
412
|
-
}
|
413
387
|
}
|
414
|
-
ScSignInFormByEmailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByEmailComponent, deps: [{ token: i1.ScAuthService }
|
388
|
+
ScSignInFormByEmailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByEmailComponent, deps: [{ token: i1.ScAuthService }], target: i0.ɵɵFactoryTarget.Component });
|
415
389
|
ScSignInFormByEmailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScSignInFormByEmailComponent, selector: "sc-sign-in-form-by-email", outputs: { forgotPassword: "forgotPassword" }, ngImport: i0, template: "<form [formGroup]=\"formByEmail\" (ngSubmit)=\"onSubmit.next()\">\n <div class=\"flex flex-col gap-4 mb-8\">\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\">\n <tui-input formControlName=\"login\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <input tuiTextfield autocomplete=\"email\" />\n </tui-input>\n <tui-error formControlName=\"login\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u041F\u0430\u0440\u043E\u043B\u044C\">\n <tui-input-password formControlName=\"password\">\n \u041F\u0430\u0440\u043E\u043B\u044C\n <input tuiTextfield autocomplete=\"current-password\" />\n </tui-input-password>\n <tui-error formControlName=\"password\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <tui-error [error]=\"[] | tuiFieldError | async\"></tui-error>\n </div>\n <div class=\"flex flex-col gap-4 items-center mb-4\">\n <a tuiLink [pseudo]=\"true\" (click)=\"forgotPassword.emit()\" class=\"text-base\">\u0417\u0430\u0431\u044B\u043B\u0438 \u043F\u0430\u0440\u043E\u043B\u044C?</a>\n <button tuiButton type=\"submit\" [showLoader]=\"!!(loadingEmailAuth$ | async)\" [disabled]=\"formByEmail.invalid || !!(loadingEmailAuth$ | async)\" icon=\"scIconLogIn\">\n \u0412\u043E\u0439\u0442\u0438\n </button>\n </div>\n</form>\n", dependencies: [{ 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$1.TuiInputPasswordComponent, selector: "tui-input-password" }, { kind: "directive", type: i4$1.TuiInputPasswordDirective, selector: "tui-input-password" }, { kind: "component", type: i4.TuiTextfieldComponent, selector: "input[tuiTextfield], textarea[tuiTextfield]" }, { kind: "component", type: i4$1.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i4$1.TuiInputDirective, selector: "tui-input" }, { 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: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4$1.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
416
390
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormByEmailComponent, decorators: [{
|
417
391
|
type: Component,
|
418
392
|
args: [{ selector: 'sc-sign-in-form-by-email', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"formByEmail\" (ngSubmit)=\"onSubmit.next()\">\n <div class=\"flex flex-col gap-4 mb-8\">\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\">\n <tui-input formControlName=\"login\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <input tuiTextfield autocomplete=\"email\" />\n </tui-input>\n <tui-error formControlName=\"login\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <label tuiLabel=\"\u041F\u0430\u0440\u043E\u043B\u044C\">\n <tui-input-password formControlName=\"password\">\n \u041F\u0430\u0440\u043E\u043B\u044C\n <input tuiTextfield autocomplete=\"current-password\" />\n </tui-input-password>\n <tui-error formControlName=\"password\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <tui-error [error]=\"[] | tuiFieldError | async\"></tui-error>\n </div>\n <div class=\"flex flex-col gap-4 items-center mb-4\">\n <a tuiLink [pseudo]=\"true\" (click)=\"forgotPassword.emit()\" class=\"text-base\">\u0417\u0430\u0431\u044B\u043B\u0438 \u043F\u0430\u0440\u043E\u043B\u044C?</a>\n <button tuiButton type=\"submit\" [showLoader]=\"!!(loadingEmailAuth$ | async)\" [disabled]=\"formByEmail.invalid || !!(loadingEmailAuth$ | async)\" icon=\"scIconLogIn\">\n \u0412\u043E\u0439\u0442\u0438\n </button>\n </div>\n</form>\n" }]
|
419
|
-
}], ctorParameters: function () { return [{ type: i1.ScAuthService }
|
393
|
+
}], ctorParameters: function () { return [{ type: i1.ScAuthService }]; }, propDecorators: { forgotPassword: [{
|
420
394
|
type: Output
|
421
395
|
}] } });
|
422
396
|
|
@@ -428,9 +402,11 @@ class ScSignInFormComponent {
|
|
428
402
|
* Инициализирует экземпляр класса {@link ScSignInFormComponent}.
|
429
403
|
*
|
430
404
|
* @param authService Сервис аутентификации.
|
405
|
+
* @param userMetrikaService Сервис для сбора метрик о действиях пользователей.
|
431
406
|
*/
|
432
|
-
constructor(authService) {
|
407
|
+
constructor(authService, userMetrikaService) {
|
433
408
|
this.authService = authService;
|
409
|
+
this.userMetrikaService = userMetrikaService;
|
434
410
|
/**
|
435
411
|
* Выбранный способ аутентификации.
|
436
412
|
*/
|
@@ -452,6 +428,15 @@ class ScSignInFormComponent {
|
|
452
428
|
*/
|
453
429
|
this.successAuth = this.authService.getAuthChange().pipe(filter((state) => state));
|
454
430
|
}
|
431
|
+
/** @inheritDoc */
|
432
|
+
ngOnInit() {
|
433
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
434
|
+
target: ScUserMetrikaGoalsEnum.signInShow,
|
435
|
+
params: {
|
436
|
+
type: this.authMethod,
|
437
|
+
},
|
438
|
+
});
|
439
|
+
}
|
455
440
|
/**
|
456
441
|
* Осуществляет переключение способов аутентификации.
|
457
442
|
*
|
@@ -459,6 +444,12 @@ class ScSignInFormComponent {
|
|
459
444
|
*/
|
460
445
|
switchAuth(authMethod) {
|
461
446
|
this.authMethod = authMethod;
|
447
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
448
|
+
target: ScUserMetrikaGoalsEnum.signInShow,
|
449
|
+
params: {
|
450
|
+
type: authMethod,
|
451
|
+
},
|
452
|
+
});
|
462
453
|
}
|
463
454
|
/**
|
464
455
|
* Обрабатывает нажатие на кнопку "Забыли пароль" и выдает сигнал об этом.
|
@@ -467,12 +458,12 @@ class ScSignInFormComponent {
|
|
467
458
|
this.forgotPassword.emit();
|
468
459
|
}
|
469
460
|
}
|
470
|
-
ScSignInFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormComponent, deps: [{ token: i1.ScAuthService }], target: i0.ɵɵFactoryTarget.Component });
|
471
|
-
ScSignInFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScSignInFormComponent, selector: "sc-sign-in-form", inputs: { authMethod: "authMethod" }, outputs: { forgotPassword: "forgotPassword", signUp: "signUp", successAuth: "successAuth" }, ngImport: i0, template: "<div class=\"flex justify-center
|
461
|
+
ScSignInFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormComponent, deps: [{ token: i1.ScAuthService }, { token: i1.ScUserMetrikaService }], target: i0.ɵɵFactoryTarget.Component });
|
462
|
+
ScSignInFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScSignInFormComponent, selector: "sc-sign-in-form", inputs: { authMethod: "authMethod" }, outputs: { forgotPassword: "forgotPassword", signUp: "signUp", successAuth: "successAuth" }, ngImport: i0, template: "<div class=\"mb-4 flex justify-center\">\n <button\n tuiButton\n [tuiMode]=\"authMethod === 'by_phone' ? null : 'onLight'\"\n [appearance]=\"authMethod === 'by_phone' ? 'primary' : 'secondary'\"\n (click)=\"switchAuth(method.byPhone)\"\n class=\"tui-space_right-3 tui-space_bottom-3 !font-bold\"\n >\n \u041F\u043E \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0443\n </button>\n\n <button\n tuiButton\n [tuiMode]=\"authMethod === 'by_email' ? null : 'onLight'\"\n [appearance]=\"authMethod === 'by_email' ? 'primary' : 'secondary'\"\n (click)=\"switchAuth(method.byEmail)\"\n class=\"tui-space_left-3 tui-space_bottom-3 !font-bold\"\n >\n \u041F\u043E e-mail\n </button>\n</div>\n\n<sc-sign-in-form-by-email\n *ngIf=\"authMethod === 'by_email'\"\n (forgotPassword)=\"onForgotPassword()\"\n></sc-sign-in-form-by-email>\n\n<sc-sign-in-form-by-phone [class.hidden]=\"authMethod !== 'by_phone'\"></sc-sign-in-form-by-phone>\n\n<div class=\"flex flex-col items-center gap-4\">\n <span class=\"font-medium text-tui-text-02\">\u0415\u0449\u0435 \u043D\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u044B?</span>\n <button\n tuiButton\n tuiMode=\"onLight\"\n (click)=\"signUp.emit()\"\n type=\"button\"\n icon=\"scIconAddProfile\"\n appearance=\"secondary\"\n >\n \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n </button>\n</div>\n", dependencies: [{ 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: "directive", type: i4.TuiModeDirective, selector: "[tuiMode]", inputs: ["tuiMode"] }, { kind: "component", type: ScSignInFormByPhoneComponent, selector: "sc-sign-in-form-by-phone" }, { kind: "component", type: ScSignInFormByEmailComponent, selector: "sc-sign-in-form-by-email", outputs: ["forgotPassword"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
472
463
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScSignInFormComponent, decorators: [{
|
473
464
|
type: Component,
|
474
|
-
args: [{ selector: 'sc-sign-in-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex justify-center
|
475
|
-
}], ctorParameters: function () { return [{ type: i1.ScAuthService }]; }, propDecorators: { authMethod: [{
|
465
|
+
args: [{ selector: 'sc-sign-in-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-4 flex justify-center\">\n <button\n tuiButton\n [tuiMode]=\"authMethod === 'by_phone' ? null : 'onLight'\"\n [appearance]=\"authMethod === 'by_phone' ? 'primary' : 'secondary'\"\n (click)=\"switchAuth(method.byPhone)\"\n class=\"tui-space_right-3 tui-space_bottom-3 !font-bold\"\n >\n \u041F\u043E \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0443\n </button>\n\n <button\n tuiButton\n [tuiMode]=\"authMethod === 'by_email' ? null : 'onLight'\"\n [appearance]=\"authMethod === 'by_email' ? 'primary' : 'secondary'\"\n (click)=\"switchAuth(method.byEmail)\"\n class=\"tui-space_left-3 tui-space_bottom-3 !font-bold\"\n >\n \u041F\u043E e-mail\n </button>\n</div>\n\n<sc-sign-in-form-by-email\n *ngIf=\"authMethod === 'by_email'\"\n (forgotPassword)=\"onForgotPassword()\"\n></sc-sign-in-form-by-email>\n\n<sc-sign-in-form-by-phone [class.hidden]=\"authMethod !== 'by_phone'\"></sc-sign-in-form-by-phone>\n\n<div class=\"flex flex-col items-center gap-4\">\n <span class=\"font-medium text-tui-text-02\">\u0415\u0449\u0435 \u043D\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u044B?</span>\n <button\n tuiButton\n tuiMode=\"onLight\"\n (click)=\"signUp.emit()\"\n type=\"button\"\n icon=\"scIconAddProfile\"\n appearance=\"secondary\"\n >\n \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n </button>\n</div>\n" }]
|
466
|
+
}], ctorParameters: function () { return [{ type: i1.ScAuthService }, { type: i1.ScUserMetrikaService }]; }, propDecorators: { authMethod: [{
|
476
467
|
type: Input
|
477
468
|
}], forgotPassword: [{
|
478
469
|
type: Output
|
@@ -907,7 +898,9 @@ let ScBannerComponent = class ScBannerComponent {
|
|
907
898
|
onClick(banner) {
|
908
899
|
this.userMetrikaService.emitUserMetrikaEvent({
|
909
900
|
target: ScUserMetrikaGoalsEnum.bannerClick,
|
910
|
-
params: {
|
901
|
+
params: {
|
902
|
+
banner_id: banner.id,
|
903
|
+
},
|
911
904
|
});
|
912
905
|
if (banner.url) {
|
913
906
|
this.clickBannerEvent.emit(banner);
|
@@ -1789,186 +1782,109 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
1789
1782
|
args: ['attr.data-size']
|
1790
1783
|
}] } });
|
1791
1784
|
|
1792
|
-
/**
|
1793
|
-
* Настройки отрисовки графика.
|
1794
|
-
*
|
1795
|
-
* @see [Документация](https://echarts.apache.org/en/option.html#title)
|
1796
|
-
*/
|
1797
|
-
const scChartOption = {
|
1798
|
-
grid: {
|
1799
|
-
top: 12,
|
1800
|
-
left: 64,
|
1801
|
-
right: 0,
|
1802
|
-
bottom: 24
|
1803
|
-
},
|
1804
|
-
tooltip: {
|
1805
|
-
trigger: 'axis',
|
1806
|
-
formatter: (params) => {
|
1807
|
-
const data = Array.isArray(params) ? params[0].data : params.data;
|
1808
|
-
const date = new Date(data.value[0]);
|
1809
|
-
const nextDate = new Date(data.value[2]);
|
1810
|
-
return `
|
1811
|
-
<div class="text-center text-black">
|
1812
|
-
<span class="font-bold">${data.value[1]} ₽</span>
|
1813
|
-
</br>
|
1814
|
-
<span class="text-xs">${formatDate(date, 'dd.MM', 'en')} - ${formatDate(nextDate, 'dd.MM', 'en')}</span>
|
1815
|
-
</div>
|
1816
|
-
`;
|
1817
|
-
},
|
1818
|
-
axisPointer: {
|
1819
|
-
animation: false,
|
1820
|
-
type: 'cross'
|
1821
|
-
},
|
1822
|
-
textStyle: {
|
1823
|
-
fontFamily: 'Roboto, "Helvetica Neue", sans-serif'
|
1824
|
-
}
|
1825
|
-
},
|
1826
|
-
xAxis: {
|
1827
|
-
type: 'time',
|
1828
|
-
splitLine: {
|
1829
|
-
show: false
|
1830
|
-
},
|
1831
|
-
axisLine: {
|
1832
|
-
show: false
|
1833
|
-
},
|
1834
|
-
axisTick: {
|
1835
|
-
show: false
|
1836
|
-
},
|
1837
|
-
axisLabel: {
|
1838
|
-
hideOverlap: true
|
1839
|
-
},
|
1840
|
-
boundaryGap: ['3%', '3%']
|
1841
|
-
},
|
1842
|
-
yAxis: {
|
1843
|
-
splitLine: {
|
1844
|
-
show: false
|
1845
|
-
},
|
1846
|
-
axisLine: {
|
1847
|
-
show: false
|
1848
|
-
},
|
1849
|
-
axisTick: {
|
1850
|
-
show: false
|
1851
|
-
},
|
1852
|
-
axisLabel: {
|
1853
|
-
formatter: (value) => tuiFormatNumber(value)
|
1854
|
-
},
|
1855
|
-
type: 'value',
|
1856
|
-
boundaryGap: [0, '100%']
|
1857
|
-
},
|
1858
|
-
series: {
|
1859
|
-
name: 'История цены',
|
1860
|
-
type: 'line',
|
1861
|
-
showSymbol: false,
|
1862
|
-
symbolSize: 12,
|
1863
|
-
itemStyle: {
|
1864
|
-
color: '#ffcc40'
|
1865
|
-
}
|
1866
|
-
}
|
1867
|
-
};
|
1868
|
-
|
1869
1785
|
/**
|
1870
1786
|
* График истории цен товара или услуги.
|
1871
|
-
* TODO: TASK[#7482] Перепроверить возможность использования TuiLineDaysChart.
|
1872
1787
|
*/
|
1873
1788
|
class ScPriceHistoryComponent {
|
1874
1789
|
/**
|
1875
1790
|
* Инициализирует экземпляр класса {@link ScPriceHistoryComponent}.
|
1876
1791
|
*
|
1877
|
-
* @param
|
1792
|
+
* @param catalogService Сервис для работы с каталогом.
|
1793
|
+
* @param months$ Перечисление месяцев.
|
1794
|
+
* @param context Контекст диалогового окна, в котором открыт компонент.
|
1878
1795
|
*/
|
1879
|
-
constructor(
|
1880
|
-
this.
|
1881
|
-
|
1882
|
-
|
1883
|
-
*/
|
1884
|
-
this.initOption = { locale: 'RU' };
|
1796
|
+
constructor(catalogService, months$, context) {
|
1797
|
+
this.catalogService = catalogService;
|
1798
|
+
this.months$ = months$;
|
1799
|
+
this.context = context;
|
1885
1800
|
/**
|
1886
|
-
*
|
1801
|
+
* {@link Observable} функция для преобразования значения number в строку в подсказке по оси X.
|
1887
1802
|
*/
|
1888
|
-
this.
|
1803
|
+
this.xStringify$ = this.months$.pipe(map((months) => ({ month, day }) =>
|
1804
|
+
// eslint-disable-next-line security/detect-object-injection
|
1805
|
+
`${months[month]}, ${day}`));
|
1889
1806
|
/**
|
1890
|
-
*
|
1807
|
+
* Функция для преобразования значения number в строку в подсказке по оси Y.
|
1808
|
+
*
|
1809
|
+
* @param value Значение оси Y.
|
1891
1810
|
*/
|
1892
|
-
this.
|
1811
|
+
this.yStringify = (value) => `${value.toLocaleString('ru-RU')} ₽`;
|
1812
|
+
if (context) {
|
1813
|
+
this.product = context.data.product;
|
1814
|
+
}
|
1893
1815
|
}
|
1894
1816
|
/** @inheritDoc */
|
1895
1817
|
ngOnInit() {
|
1896
|
-
|
1897
|
-
|
1898
|
-
|
1899
|
-
|
1900
|
-
.
|
1901
|
-
|
1902
|
-
|
1903
|
-
|
1904
|
-
return
|
1905
|
-
})
|
1906
|
-
.sort((a, b) => +a.data - +b.data)
|
1907
|
-
.forEach((item, index, array) => {
|
1908
|
-
var _a, _b;
|
1909
|
-
let nextDate;
|
1910
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
1911
|
-
if ((_a = array[index + 1]) === null || _a === void 0 ? void 0 : _a.data) {
|
1912
|
-
nextDate = new Date((_b = array[index + 1]) === null || _b === void 0 ? void 0 : _b.data);
|
1913
|
-
nextDate.setDate(nextDate.getDate() - 1);
|
1914
|
-
}
|
1915
|
-
else {
|
1916
|
-
nextDate = new Date();
|
1917
|
-
}
|
1918
|
-
this.pushDataItem(item.cost, item.data, nextDate);
|
1919
|
-
});
|
1920
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
1921
|
-
if (this.eChartsInstance) {
|
1922
|
-
this.setChartData();
|
1923
|
-
}
|
1818
|
+
this.history$ = this.catalogService.getPriceHistory$(this.product).pipe(map((history) => Object.keys(history)
|
1819
|
+
.map((item) => [TuiDay.normalizeParse(item, 'DMY'), history[String(item)].cost])
|
1820
|
+
.sort((a, b) => (a[0] > b[0] ? 1 : -1))), shareReplay({ bufferSize: 1, refCount: true }), filter((history) => history.length > 1));
|
1821
|
+
this.priceInfo$ = this.history$.pipe(map((history) => history.map((item) => item[1])), map((values) => ({
|
1822
|
+
min: Math.min(...values),
|
1823
|
+
max: Math.max(...values),
|
1824
|
+
})));
|
1825
|
+
this.range$ = this.history$.pipe(map((value) => { var _a, _b; return ({ from: (_a = value.at(0)) === null || _a === void 0 ? void 0 : _a[0], to: (_b = value.at(-1)) === null || _b === void 0 ? void 0 : _b[0] }); }), filter((range) => !!range.from && !!range.to), map((range) => {
|
1826
|
+
return new TuiDayRange(range.from, range.to);
|
1827
|
+
}));
|
1924
1828
|
}
|
1925
1829
|
/**
|
1926
|
-
*
|
1830
|
+
* Вычисляет подписи даты к оси X.
|
1927
1831
|
*
|
1928
|
-
* @param
|
1929
|
-
|
1930
|
-
|
1931
|
-
onChartInit(eChartsInstance) {
|
1932
|
-
this.eChartsInstance = eChartsInstance;
|
1933
|
-
if (this.data.length > 0) {
|
1934
|
-
this.setChartData();
|
1935
|
-
}
|
1936
|
-
}
|
1937
|
-
/**
|
1938
|
-
* Устанавливает новые данные {@link ScPriceHistoryComponent.eChartsInstance}.
|
1832
|
+
* @param param0 {@link TuiDayRange} Временной промежуток истории цен.
|
1833
|
+
* @param param0.from {@link TuiDay} Дата начала истории цен.
|
1834
|
+
* @param param0.to {@link TuiDay} Дата конца истории цен.
|
1939
1835
|
*/
|
1940
|
-
|
1941
|
-
|
1942
|
-
this.maxPrice = Math.max(...this.data.map((item) => item.value[1]));
|
1943
|
-
this.minPrice = Math.min(...this.data.map((item) => item.value[1]));
|
1944
|
-
this.chartOption.series.data = this.data;
|
1945
|
-
this.eChartsInstance.clear();
|
1946
|
-
this.eChartsInstance.setOption(this.chartOption, true, true);
|
1947
|
-
this.cdr.markForCheck();
|
1948
|
-
}
|
1836
|
+
computeLabels$({ from, to }) {
|
1837
|
+
return this.months$.pipe(map((months) => Array.from({ length: TuiMonth.lengthBetween(from, to) + 1 }, (_, index) => months[from.append({ month: index }).month])));
|
1949
1838
|
}
|
1950
1839
|
/**
|
1951
|
-
*
|
1840
|
+
* Вычисляет данные для отображения на графике.
|
1952
1841
|
*
|
1953
|
-
* @param
|
1954
|
-
* @param
|
1955
|
-
* @param
|
1842
|
+
* @param param0 {@link TuiDayRange} Временной промежуток истории цен.
|
1843
|
+
* @param param0.from {@link TuiDay} Дата начала истории цен.
|
1844
|
+
* @param param0.to {@link TuiDay} Дата конца истории цен.
|
1845
|
+
* @param history История цен.
|
1956
1846
|
*/
|
1957
|
-
|
1958
|
-
|
1959
|
-
|
1960
|
-
|
1961
|
-
|
1847
|
+
computeValue({ from, to }, history) {
|
1848
|
+
return (Array.from({ length: TuiDay.lengthBetween(from, to) + 1 })
|
1849
|
+
.fill(0)
|
1850
|
+
// eslint-disable-next-line unicorn/no-array-reduce
|
1851
|
+
.reduce((array, _, index) => {
|
1852
|
+
var _a;
|
1853
|
+
const data = from.append({ day: index });
|
1854
|
+
return [
|
1855
|
+
...array,
|
1856
|
+
[
|
1857
|
+
data,
|
1858
|
+
((_a = history.find((valueHistory, indexHistory, arrayHistory) => data.daySame(valueHistory[0]) || data.dayBefore(arrayHistory[indexHistory + 1][0]))) !== null && _a !== void 0 ? _a : history[0])[1],
|
1859
|
+
],
|
1860
|
+
];
|
1861
|
+
}, []));
|
1962
1862
|
}
|
1963
1863
|
}
|
1964
|
-
ScPriceHistoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceHistoryComponent, deps: [{ token:
|
1965
|
-
ScPriceHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScPriceHistoryComponent, selector: "sc-price-history", inputs: {
|
1864
|
+
ScPriceHistoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceHistoryComponent, deps: [{ token: i1.ScCatalogService }, { token: TUI_MONTHS }, { token: POLYMORPHEUS_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
1865
|
+
ScPriceHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScPriceHistoryComponent, selector: "sc-price-history", inputs: { product: "product" }, ngImport: i0, template: "<div class=\"flex flex-col items-center\">\n <ng-container *ngIf=\"priceInfo$ | async as priceInfo; else isNotExist\">\n <div class=\"w-174 mb-1 text-end text-lg font-bold\">\u043E\u0442 {{ priceInfo.min.toLocaleString() }} \u20BD \u0434\u043E {{ priceInfo.max.toLocaleString() }} \u20BD</div>\n\n <ng-container *ngIf=\"history$ | async as history\">\n <div\n *ngIf=\"range$ | async as range\"\n class=\"relative h-56 w-full p-5 text-tui-primary\"\n >\n <tui-axes\n *ngIf=\"computeLabels$(range) | async as labels\"\n class=\"h-full\"\n [axisXLabels]=\"labels\"\n [horizontalLines]=\"4\"\n [verticalLines]=\"labels.length\"\n >\n <tui-line-days-chart\n class=\"chart\"\n [height]=\"priceInfo.max\"\n [smoothingFactor]=\"10\"\n [y]=\"priceInfo.min - (priceInfo.min * 1) / 4\"\n [value]=\"computeValue(range, history)\"\n [xStringify]=\"xStringify$ | async\"\n [yStringify]=\"yStringify\"\n [hintContent]=\"hint\"\n ></tui-line-days-chart>\n </tui-axes>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #isNotExist>\n <p class=\"text-base font-bold\">\u0426\u0435\u043D\u0430 \u043D\u0430 \u0442\u043E\u0432\u0430\u0440 \u043D\u0435 \u0438\u0437\u043C\u0435\u043D\u044F\u043B\u0430\u0441\u044C</p>\n </ng-template>\n <ng-template\n #hint\n let-data\n >\n <div class=\"font-bold\">{{ data[1].toLocaleString() }} \u20BD</div>\n <div>{{ data[0] }}</div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.TuiLineDaysChartComponent, selector: "tui-line-days-chart", inputs: ["value", "y", "height", "smoothingFactor", "hintContent", "xStringify", "yStringify", "dots"] }, { kind: "component", type: i3$1.TuiAxesComponent, selector: "tui-axes", inputs: ["axisX", "axisXLabels", "axisY", "axisYInset", "axisYLabels", "axisYName", "axisYSecondaryInset", "axisYSecondaryLabels", "axisYSecondaryName", "horizontalLines", "horizontalLinesHandler", "verticalLines", "verticalLinesHandler"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
1866
|
+
__decorate([
|
1867
|
+
tuiPure
|
1868
|
+
], ScPriceHistoryComponent.prototype, "computeLabels$", null);
|
1869
|
+
__decorate([
|
1870
|
+
tuiPure
|
1871
|
+
], ScPriceHistoryComponent.prototype, "computeValue", null);
|
1966
1872
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceHistoryComponent, decorators: [{
|
1967
1873
|
type: Component,
|
1968
|
-
args: [{ selector: 'sc-price-history', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col items-center\">\n <
|
1969
|
-
}], ctorParameters: function () {
|
1874
|
+
args: [{ selector: 'sc-price-history', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col items-center\">\n <ng-container *ngIf=\"priceInfo$ | async as priceInfo; else isNotExist\">\n <div class=\"w-174 mb-1 text-end text-lg font-bold\">\u043E\u0442 {{ priceInfo.min.toLocaleString() }} \u20BD \u0434\u043E {{ priceInfo.max.toLocaleString() }} \u20BD</div>\n\n <ng-container *ngIf=\"history$ | async as history\">\n <div\n *ngIf=\"range$ | async as range\"\n class=\"relative h-56 w-full p-5 text-tui-primary\"\n >\n <tui-axes\n *ngIf=\"computeLabels$(range) | async as labels\"\n class=\"h-full\"\n [axisXLabels]=\"labels\"\n [horizontalLines]=\"4\"\n [verticalLines]=\"labels.length\"\n >\n <tui-line-days-chart\n class=\"chart\"\n [height]=\"priceInfo.max\"\n [smoothingFactor]=\"10\"\n [y]=\"priceInfo.min - (priceInfo.min * 1) / 4\"\n [value]=\"computeValue(range, history)\"\n [xStringify]=\"xStringify$ | async\"\n [yStringify]=\"yStringify\"\n [hintContent]=\"hint\"\n ></tui-line-days-chart>\n </tui-axes>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #isNotExist>\n <p class=\"text-base font-bold\">\u0426\u0435\u043D\u0430 \u043D\u0430 \u0442\u043E\u0432\u0430\u0440 \u043D\u0435 \u0438\u0437\u043C\u0435\u043D\u044F\u043B\u0430\u0441\u044C</p>\n </ng-template>\n <ng-template\n #hint\n let-data\n >\n <div class=\"font-bold\">{{ data[1].toLocaleString() }} \u20BD</div>\n <div>{{ data[0] }}</div>\n </ng-template>\n</div>\n" }]
|
1875
|
+
}], ctorParameters: function () {
|
1876
|
+
return [{ type: i1.ScCatalogService }, { type: i10.Observable, decorators: [{
|
1877
|
+
type: Inject,
|
1878
|
+
args: [TUI_MONTHS]
|
1879
|
+
}] }, { type: undefined, decorators: [{
|
1880
|
+
type: Optional
|
1881
|
+
}, {
|
1882
|
+
type: Inject,
|
1883
|
+
args: [POLYMORPHEUS_CONTEXT]
|
1884
|
+
}] }];
|
1885
|
+
}, propDecorators: { product: [{
|
1970
1886
|
type: Input
|
1971
|
-
}] } });
|
1887
|
+
}], computeLabels$: [], computeValue: [] } });
|
1972
1888
|
|
1973
1889
|
/**
|
1974
1890
|
* Значения пагинации списка товаров категории по умолчанию.
|
@@ -2098,123 +2014,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
2098
2014
|
type: Input
|
2099
2015
|
}] } });
|
2100
2016
|
|
2101
|
-
/**
|
2102
|
-
* Language: Russian.
|
2103
|
-
*/
|
2104
|
-
var scLangRU = {
|
2105
|
-
time: {
|
2106
|
-
month: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
|
2107
|
-
monthAbbr: ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'],
|
2108
|
-
dayOfWeek: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],
|
2109
|
-
dayOfWeekAbbr: ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],
|
2110
|
-
},
|
2111
|
-
legend: {
|
2112
|
-
selector: {
|
2113
|
-
all: 'Всё',
|
2114
|
-
inverse: 'Обратить',
|
2115
|
-
},
|
2116
|
-
},
|
2117
|
-
toolbox: {
|
2118
|
-
brush: {
|
2119
|
-
title: {
|
2120
|
-
rect: 'Выделить область',
|
2121
|
-
polygon: 'Инструмент «Лассо»',
|
2122
|
-
lineX: 'Горизонтальное выделение',
|
2123
|
-
lineY: 'Вертикальное выделение',
|
2124
|
-
keep: 'Оставить выбранное',
|
2125
|
-
clear: 'Очистить выбранное',
|
2126
|
-
},
|
2127
|
-
},
|
2128
|
-
dataView: {
|
2129
|
-
title: 'Данные',
|
2130
|
-
lang: ['Данные', 'Закрыть', 'Обновить'],
|
2131
|
-
},
|
2132
|
-
dataZoom: {
|
2133
|
-
title: {
|
2134
|
-
zoom: 'Увеличить',
|
2135
|
-
back: 'Сбросить увеличение',
|
2136
|
-
},
|
2137
|
-
},
|
2138
|
-
magicType: {
|
2139
|
-
title: {
|
2140
|
-
line: 'Переключиться на линейный график',
|
2141
|
-
bar: 'Переключиться на столбчатую диаграмму',
|
2142
|
-
stack: 'Стопка',
|
2143
|
-
tiled: 'Плитка',
|
2144
|
-
},
|
2145
|
-
},
|
2146
|
-
restore: {
|
2147
|
-
title: 'Восстановить',
|
2148
|
-
},
|
2149
|
-
saveAsImage: {
|
2150
|
-
title: 'Сохранить картинку',
|
2151
|
-
lang: ['Правый клик, чтобы сохранить картинку'],
|
2152
|
-
},
|
2153
|
-
},
|
2154
|
-
series: {
|
2155
|
-
typeNames: {
|
2156
|
-
pie: 'Круговая диаграмма',
|
2157
|
-
bar: 'Столбчатая диаграмма',
|
2158
|
-
line: 'Линейный график',
|
2159
|
-
scatter: 'Точечная диаграмма',
|
2160
|
-
effectScatter: 'Точечная диаграмма с волнами',
|
2161
|
-
radar: 'Лепестковая диаграмма',
|
2162
|
-
tree: 'Дерево',
|
2163
|
-
treemap: 'Плоское дерево',
|
2164
|
-
boxplot: 'Ящик с усами',
|
2165
|
-
candlestick: 'Свечной график',
|
2166
|
-
k: 'График К-линий',
|
2167
|
-
heatmap: 'Тепловая карта',
|
2168
|
-
map: 'Карта',
|
2169
|
-
parallel: 'Диаграмма параллельных координат',
|
2170
|
-
lines: 'Линейный граф',
|
2171
|
-
graph: 'Граф отношений',
|
2172
|
-
sankey: 'Диаграмма Санкей',
|
2173
|
-
funnel: 'Воронкообразная диаграмма',
|
2174
|
-
gauge: 'Шкала',
|
2175
|
-
pictorialBar: 'Столбец-картинка',
|
2176
|
-
themeRiver: 'Тематическая река',
|
2177
|
-
sunburst: 'Солнечные лучи',
|
2178
|
-
custom: '',
|
2179
|
-
chart: '',
|
2180
|
-
},
|
2181
|
-
},
|
2182
|
-
aria: {
|
2183
|
-
general: {
|
2184
|
-
withTitle: 'Это график, показывающий "{title}"',
|
2185
|
-
withoutTitle: 'Это график',
|
2186
|
-
},
|
2187
|
-
series: {
|
2188
|
-
single: {
|
2189
|
-
prefix: '',
|
2190
|
-
withName: ' с типом {seriesType} и именем {seriesName}.',
|
2191
|
-
withoutName: ' с типом {seriesType}.',
|
2192
|
-
},
|
2193
|
-
multiple: {
|
2194
|
-
prefix: '. Он состоит из {seriesCount} серий.',
|
2195
|
-
withName: ' Серия {seriesId} имеет тип {seriesType} и показывает {seriesName}.',
|
2196
|
-
withoutName: ' Серия {seriesId} имеет тип {seriesType}.',
|
2197
|
-
separator: {
|
2198
|
-
middle: '',
|
2199
|
-
end: '',
|
2200
|
-
},
|
2201
|
-
},
|
2202
|
-
},
|
2203
|
-
data: {
|
2204
|
-
allData: 'Данные таковы: ',
|
2205
|
-
partialData: 'Первые {displayCnt} элементов: ',
|
2206
|
-
withName: 'значение для {name} — {value}',
|
2207
|
-
withoutName: '{value}',
|
2208
|
-
separator: {
|
2209
|
-
middle: ', ',
|
2210
|
-
end: '. ',
|
2211
|
-
},
|
2212
|
-
},
|
2213
|
-
},
|
2214
|
-
};
|
2215
|
-
|
2216
|
-
echarts.registerLocale('RU', scLangRU);
|
2217
|
-
echarts.use([TitleComponent, TooltipComponent, GridComponent, LineChart, SVGRenderer]);
|
2218
2017
|
/**
|
2219
2018
|
* Модуль каталога.
|
2220
2019
|
*/
|
@@ -2243,9 +2042,12 @@ ScCatalogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version
|
|
2243
2042
|
TuiFieldErrorPipeModule,
|
2244
2043
|
TuiLoaderModule,
|
2245
2044
|
TuiLinkModule,
|
2246
|
-
TuiElasticContainerModule,
|
2045
|
+
TuiElasticContainerModule,
|
2046
|
+
TuiLetModule,
|
2247
2047
|
TuiRepeatTimesModule,
|
2248
|
-
TuiHighlightModule
|
2048
|
+
TuiHighlightModule,
|
2049
|
+
TuiLineDaysChartModule,
|
2050
|
+
TuiAxesModule], exports: [ScPriceListPaginationComponent,
|
2249
2051
|
ScCategoryCardComponent,
|
2250
2052
|
ScFavoriteBtnComponent,
|
2251
2053
|
ScInputQuantityComponent,
|
@@ -2269,10 +2071,11 @@ ScCatalogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version
|
|
2269
2071
|
TuiLoaderModule,
|
2270
2072
|
TuiLinkModule,
|
2271
2073
|
TuiElasticContainerModule,
|
2272
|
-
NgxEchartsModule.forRoot({ echarts }),
|
2273
2074
|
TuiLetModule,
|
2274
2075
|
TuiRepeatTimesModule,
|
2275
|
-
TuiHighlightModule
|
2076
|
+
TuiHighlightModule,
|
2077
|
+
TuiLineDaysChartModule,
|
2078
|
+
TuiAxesModule] });
|
2276
2079
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCatalogModule, decorators: [{
|
2277
2080
|
type: NgModule,
|
2278
2081
|
args: [{
|
@@ -2313,10 +2116,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
2313
2116
|
TuiLoaderModule,
|
2314
2117
|
TuiLinkModule,
|
2315
2118
|
TuiElasticContainerModule,
|
2316
|
-
NgxEchartsModule.forRoot({ echarts }),
|
2317
2119
|
TuiLetModule,
|
2318
2120
|
TuiRepeatTimesModule,
|
2319
2121
|
TuiHighlightModule,
|
2122
|
+
TuiLineDaysChartModule,
|
2123
|
+
TuiAxesModule,
|
2320
2124
|
],
|
2321
2125
|
}]
|
2322
2126
|
}] });
|
@@ -4461,7 +4265,7 @@ class ScPaymentStatusComponent {
|
|
4461
4265
|
}
|
4462
4266
|
}
|
4463
4267
|
ScPaymentStatusComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPaymentStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
4464
|
-
ScPaymentStatusComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScPaymentStatusComponent, selector: "sc-payment-status", inputs: { status: "status", orderId: "orderId" }, outputs: { backToOrdersClick: "backToOrdersClick", backToOrderClick: "backToOrderClick" }, ngImport: i0, template: "<ng-container *ngIf=\"status && orderId; else failed\">\n <ng-container [ngSwitch]=\"status\">\n <tui-block-status *ngSwitchCase=\"'success'\">\n <tui-svg src=\"tuiIconCheckCircleLarge\" tuiSlot=\"top\" class=\"scale-[3] !h-20 !text-green-500\"></tui-svg>\n <h4>\u0421\u043F\u0430\u0441\u0438\u0431\u043E!</h4>\n <br />\n <div class=\"font-bold\">\u0412\u0430\u0448 \u0437\u0430\u043A\u0430\u0437 \u0443\u0441\u043F\u0435\u0448\u043D\u043E \u043E\u043F\u043B\u0430\u0447\u0435\u043D. \u041C\u044B \u0441\u0432\u044F\u0436\u0435\u043C\u0441\u044F \u0441 \u0432\u0430\u043C\u0438 \u0432 \u0431\u043B\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043C\u044F.</div>\n <br />\n <div class=\"font-bold\">\n \u041D\u043E\u043C\u0435\u0440 \u0432\u0430\u0448\u0435\u0433\u043E \u0437\u0430\u043A\u0430\u0437\u0430: <a tuiLink [pseudo]=\"true\" (click)=\"backToOrderClick.emit()\">{{orderId}}</a>\n </div>\n\n <button tuiButton (click)=\"backToOrdersClick.emit()\">\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u043A \u0437\u0430\u043A\u0430\u0437\u0430\u043C</button>\n </tui-block-status>\n <tui-block-status *ngSwitchCase=\"'error'\">\n <tui-svg src=\"tuiIconXCircleLarge\" class=\"scale-[3] !h-20 !text-red-500\" tuiSlot=\"top\"></tui-svg>\n <h4>\u041E\u043F\u043B\u0430\u0442\u0430 \u043D\u0435 \u043F\u0440\u043E\u0448\u043B\u0430!</h4>\n <br />\n <div class=\"font-bold\">\u041F\u0440\u0438 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0435 \u043F\u043B\u0430\u0442\u0435\u0436\u0430 \u043F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043E\u0448\u0438\u0431\u043A\u0430.</div>\n <button tuiButton tuiItem (click)=\"backToOrderClick.emit()\">\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u043A \u0437\u0430\u043A\u0430\u0437\u0443</button>\n </tui-block-status>\n </ng-container>\n</ng-container>\n\n<ng-template #failed>\n <tui-block-status>\n <tui-svg src=\"tuiIconInfoLarge\" class=\"scale-[3] !h-20 !text-yellow-500\" tuiSlot=\"top\"></tui-svg>\n <h4>\u0427\u0442\u043E-\u0442\u043E \u043F\u043E\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A!</h4>\n <button tuiButton tuiItem (click)=\"backToOrdersClick.emit()\">\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u043A \u0437\u0430\u043A\u0430\u0437\u0430\u043C</button>\n </tui-block-status>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { 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.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "component", type: i3$
|
4268
|
+
ScPaymentStatusComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScPaymentStatusComponent, selector: "sc-payment-status", inputs: { status: "status", orderId: "orderId" }, outputs: { backToOrdersClick: "backToOrdersClick", backToOrderClick: "backToOrderClick" }, ngImport: i0, template: "<ng-container *ngIf=\"status && orderId; else failed\">\n <ng-container [ngSwitch]=\"status\">\n <tui-block-status *ngSwitchCase=\"'success'\">\n <tui-svg src=\"tuiIconCheckCircleLarge\" tuiSlot=\"top\" class=\"scale-[3] !h-20 !text-green-500\"></tui-svg>\n <h4>\u0421\u043F\u0430\u0441\u0438\u0431\u043E!</h4>\n <br />\n <div class=\"font-bold\">\u0412\u0430\u0448 \u0437\u0430\u043A\u0430\u0437 \u0443\u0441\u043F\u0435\u0448\u043D\u043E \u043E\u043F\u043B\u0430\u0447\u0435\u043D. \u041C\u044B \u0441\u0432\u044F\u0436\u0435\u043C\u0441\u044F \u0441 \u0432\u0430\u043C\u0438 \u0432 \u0431\u043B\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043C\u044F.</div>\n <br />\n <div class=\"font-bold\">\n \u041D\u043E\u043C\u0435\u0440 \u0432\u0430\u0448\u0435\u0433\u043E \u0437\u0430\u043A\u0430\u0437\u0430: <a tuiLink [pseudo]=\"true\" (click)=\"backToOrderClick.emit()\">{{orderId}}</a>\n </div>\n\n <button tuiButton (click)=\"backToOrdersClick.emit()\">\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u043A \u0437\u0430\u043A\u0430\u0437\u0430\u043C</button>\n </tui-block-status>\n <tui-block-status *ngSwitchCase=\"'error'\">\n <tui-svg src=\"tuiIconXCircleLarge\" class=\"scale-[3] !h-20 !text-red-500\" tuiSlot=\"top\"></tui-svg>\n <h4>\u041E\u043F\u043B\u0430\u0442\u0430 \u043D\u0435 \u043F\u0440\u043E\u0448\u043B\u0430!</h4>\n <br />\n <div class=\"font-bold\">\u041F\u0440\u0438 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0435 \u043F\u043B\u0430\u0442\u0435\u0436\u0430 \u043F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043E\u0448\u0438\u0431\u043A\u0430.</div>\n <button tuiButton tuiItem (click)=\"backToOrderClick.emit()\">\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u043A \u0437\u0430\u043A\u0430\u0437\u0443</button>\n </tui-block-status>\n </ng-container>\n</ng-container>\n\n<ng-template #failed>\n <tui-block-status>\n <tui-svg src=\"tuiIconInfoLarge\" class=\"scale-[3] !h-20 !text-yellow-500\" tuiSlot=\"top\"></tui-svg>\n <h4>\u0427\u0442\u043E-\u0442\u043E \u043F\u043E\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A!</h4>\n <button tuiButton tuiItem (click)=\"backToOrdersClick.emit()\">\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u043A \u0437\u0430\u043A\u0430\u0437\u0430\u043C</button>\n </tui-block-status>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { 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.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "component", type: i3$2.TuiBlockStatusComponent, selector: "tui-block-status", inputs: ["card"] }, { kind: "directive", type: i3$2.TuiBlockStatusDirective, selector: "[tuiSlot]", inputs: ["tuiSlot"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
4465
4269
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPaymentStatusComponent, decorators: [{
|
4466
4270
|
type: Component,
|
4467
4271
|
args: [{ selector: 'sc-payment-status', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"status && orderId; else failed\">\n <ng-container [ngSwitch]=\"status\">\n <tui-block-status *ngSwitchCase=\"'success'\">\n <tui-svg src=\"tuiIconCheckCircleLarge\" tuiSlot=\"top\" class=\"scale-[3] !h-20 !text-green-500\"></tui-svg>\n <h4>\u0421\u043F\u0430\u0441\u0438\u0431\u043E!</h4>\n <br />\n <div class=\"font-bold\">\u0412\u0430\u0448 \u0437\u0430\u043A\u0430\u0437 \u0443\u0441\u043F\u0435\u0448\u043D\u043E \u043E\u043F\u043B\u0430\u0447\u0435\u043D. \u041C\u044B \u0441\u0432\u044F\u0436\u0435\u043C\u0441\u044F \u0441 \u0432\u0430\u043C\u0438 \u0432 \u0431\u043B\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043C\u044F.</div>\n <br />\n <div class=\"font-bold\">\n \u041D\u043E\u043C\u0435\u0440 \u0432\u0430\u0448\u0435\u0433\u043E \u0437\u0430\u043A\u0430\u0437\u0430: <a tuiLink [pseudo]=\"true\" (click)=\"backToOrderClick.emit()\">{{orderId}}</a>\n </div>\n\n <button tuiButton (click)=\"backToOrdersClick.emit()\">\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u043A \u0437\u0430\u043A\u0430\u0437\u0430\u043C</button>\n </tui-block-status>\n <tui-block-status *ngSwitchCase=\"'error'\">\n <tui-svg src=\"tuiIconXCircleLarge\" class=\"scale-[3] !h-20 !text-red-500\" tuiSlot=\"top\"></tui-svg>\n <h4>\u041E\u043F\u043B\u0430\u0442\u0430 \u043D\u0435 \u043F\u0440\u043E\u0448\u043B\u0430!</h4>\n <br />\n <div class=\"font-bold\">\u041F\u0440\u0438 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0435 \u043F\u043B\u0430\u0442\u0435\u0436\u0430 \u043F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043E\u0448\u0438\u0431\u043A\u0430.</div>\n <button tuiButton tuiItem (click)=\"backToOrderClick.emit()\">\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u043A \u0437\u0430\u043A\u0430\u0437\u0443</button>\n </tui-block-status>\n </ng-container>\n</ng-container>\n\n<ng-template #failed>\n <tui-block-status>\n <tui-svg src=\"tuiIconInfoLarge\" class=\"scale-[3] !h-20 !text-yellow-500\" tuiSlot=\"top\"></tui-svg>\n <h4>\u0427\u0442\u043E-\u0442\u043E \u043F\u043E\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A!</h4>\n <button tuiButton tuiItem (click)=\"backToOrdersClick.emit()\">\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F \u043A \u0437\u0430\u043A\u0430\u0437\u0430\u043C</button>\n </tui-block-status>\n</ng-template>\n" }]
|