@snabcentr/client-ui 0.27.0 → 0.28.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.

Files changed (26) hide show
  1. package/auth/sc-auth.module.d.ts +1 -2
  2. package/cart/cart-item-mobile/sc-cart-item-mobile.component.d.ts +15 -15
  3. package/catalog/price-card/sc-price-card.component.d.ts +9 -107
  4. package/contragents/sc-contragents.module.d.ts +1 -2
  5. package/directives/abstract-price-card/abstract-sc-price-card.directive.d.ts +107 -0
  6. package/directives/index.d.ts +1 -2
  7. package/esm2020/auth/sc-auth.module.mjs +3 -7
  8. package/esm2020/cart/cart-item-mobile/sc-cart-item-mobile.component.mjs +9 -8
  9. package/esm2020/catalog/price-card/sc-price-card.component.mjs +25 -145
  10. package/esm2020/contragents/sc-contragents.module.mjs +38 -20
  11. package/esm2020/directives/abstract-price-card/abstract-sc-price-card.directive.mjs +131 -0
  12. package/esm2020/directives/index.mjs +2 -3
  13. package/esm2020/helpers/sc-units-helper.mjs +11 -10
  14. package/esm2020/order/order-item-mobile/order-item-mobile.component.mjs +3 -3
  15. package/fesm2015/snabcentr-client-ui.mjs +290 -319
  16. package/fesm2015/snabcentr-client-ui.mjs.map +1 -1
  17. package/fesm2020/snabcentr-client-ui.mjs +288 -314
  18. package/fesm2020/snabcentr-client-ui.mjs.map +1 -1
  19. package/helpers/sc-units-helper.d.ts +6 -6
  20. package/order/order-item-mobile/order-item-mobile.component.d.ts +3 -3
  21. package/package.json +1 -1
  22. package/styles/tailwind/tailwind.scss +4 -40
  23. package/directives/carousel-item-hidden/sc-carousel-item-hidden.directive.d.ts +0 -24
  24. package/directives/carousel-item-hidden/sc-carousel-item-hidden.module.d.ts +0 -11
  25. package/esm2020/directives/carousel-item-hidden/sc-carousel-item-hidden.directive.mjs +0 -40
  26. package/esm2020/directives/carousel-item-hidden/sc-carousel-item-hidden.module.mjs +0 -21
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Component, ChangeDetectionStrategy, Inject, Input, Output, SkipSelf, Directive, HostBinding, ContentChild, ViewChild, NgModule, Optional, ContentChildren, HostListener, Injectable, ElementRef, ChangeDetectorRef, Self, inject, InjectionToken, forwardRef } from '@angular/core';
2
+ import { EventEmitter, Component, ChangeDetectionStrategy, Inject, Input, Output, SkipSelf, Directive, HostBinding, ContentChild, ViewChild, NgModule, Optional, Injectable, ElementRef, ContentChildren, HostListener, ChangeDetectorRef, Self, inject, InjectionToken, forwardRef } from '@angular/core';
3
3
  import * as i1 from '@snabcentr/client-core';
4
- import { ScUserMetrikaGoalsEnum, ScISuggestionType, ScOpfList, SC_URLS, SC_PATH_IMAGE_NOT_FOUND, SEARCH_TERM, SEARCH_TERM_PROVIDERS, ScCatalogService, ScCartService, ScAuthService, ScIconTypesEnum, ScUserService } from '@snabcentr/client-core';
5
- import * as i10 from 'rxjs';
4
+ import { ScUserMetrikaGoalsEnum, ScISuggestionType, ScOpfList, SC_URLS, SC_PATH_IMAGE_NOT_FOUND, ScWarehouseService, ScAuthService, SEARCH_TERM, ScImageHelper, SEARCH_TERM_PROVIDERS, ScCatalogService, ScCartService, ScIconTypesEnum, ScUserService } from '@snabcentr/client-core';
5
+ import * as i5 from 'rxjs';
6
6
  import { Subject, map, filter, switchMap, tap, catchError, of, finalize, startWith, share, timer, scan, takeWhile, endWith, distinctUntilChanged, combineLatest, debounceTime, throwError, shareReplay, interval, takeUntil, skip, merge } from 'rxjs';
7
7
  import * as i2 from '@angular/common';
8
8
  import { CommonModule } from '@angular/common';
@@ -12,9 +12,9 @@ import { HttpErrorResponse } from '@angular/common/http';
12
12
  import * as i3 from '@angular/forms';
13
13
  import { FormGroupDirective, FormGroup, FormControl, Validators, NgControl, FormArray, FormsModule, ReactiveFormsModule } from '@angular/forms';
14
14
  import * as i6 from '@taiga-ui/cdk';
15
- import { tuiControlValue, tuiIsFalsy, tuiIsPresent, tuiMarkControlAsTouchedAndValidate, TuiLetModule, AbstractTuiControl, tuiCreateToken, AbstractTuiNullableControl, TUI_IS_MOBILE, tuiPure, TuiDay, TuiDayRange, TuiMonth, TuiDestroyService, TuiRepeatTimesModule, ALWAYS_TRUE_HANDLER } from '@taiga-ui/cdk';
15
+ import { tuiControlValue, tuiIsFalsy, tuiIsPresent, tuiMarkControlAsTouchedAndValidate, TuiLetModule, tuiCreateToken, AbstractTuiNullableControl, TUI_IS_MOBILE, tuiPure, AbstractTuiControl, TuiDay, TuiDayRange, TuiMonth, TuiDestroyService, TuiRepeatTimesModule, ALWAYS_TRUE_HANDLER } from '@taiga-ui/cdk';
16
16
  import * as i4$1 from '@taiga-ui/kit';
17
- import { TuiAccordionItemComponent, TuiAccordionModule, TuiElasticContainerModule, TuiInputModule, TuiFieldErrorPipeModule, TuiComboBoxModule, TuiDataListWrapperModule, TuiFilterByInputPipeModule, TuiStringifyContentPipeModule, TuiInputPhoneModule, TuiSelectModule, TuiCarouselComponent, TuiCarouselModule, TuiInputPasswordModule, TuiCheckboxModule, TuiCheckboxLabeledModule, TUI_NUMBER_VALUE_TRANSFORMER, TuiInputNumberComponent, TuiIslandModule, TuiInputNumberModule, TuiHighlightModule, TuiTreeService, TuiTreeItemContentComponent, TUI_TREE_START, TUI_TREE_CONTENT, TUI_TREE_LOADING, TUI_TREE_LOADER, TuiTreeModule } from '@taiga-ui/kit';
17
+ import { TuiAccordionItemComponent, TuiAccordionModule, TuiElasticContainerModule, TuiInputModule, TuiFieldErrorPipeModule, TuiComboBoxModule, TuiDataListWrapperModule, TuiFilterByInputPipeModule, TuiStringifyContentPipeModule, TuiInputPhoneModule, TuiSelectModule, TuiCarouselModule, TuiInputPasswordModule, TuiCheckboxModule, TuiCheckboxLabeledModule, TUI_NUMBER_VALUE_TRANSFORMER, TuiInputNumberComponent, TuiIslandModule, TuiInputNumberModule, TuiHighlightModule, TuiTreeService, TuiTreeItemContentComponent, TUI_TREE_START, TUI_TREE_CONTENT, TUI_TREE_LOADING, TUI_TREE_LOADER, TuiTreeModule } from '@taiga-ui/kit';
18
18
  import * as i6$1 from '@maskito/angular';
19
19
  import { MaskitoModule } from '@maskito/angular';
20
20
  import { __decorate } from 'tslib';
@@ -1616,132 +1616,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
1616
1616
  }]
1617
1617
  }] });
1618
1618
 
1619
- /**
1620
- * Компонент контрагента пользователя.
1621
- */
1622
- class ScContragentsAccordionItemComponent {
1623
- /**
1624
- * Инициализирует экземпляр класса {@link ScContragentsAccordionItemComponent}.
1625
- *
1626
- * @param contragentService Сервис работы с контрагентами.
1627
- */
1628
- constructor(contragentService) {
1629
- this.contragentService = contragentService;
1630
- /**
1631
- * Событие нажатия на кнопку удаления контрагента.
1632
- */
1633
- this.deleteContragentClick = new EventEmitter();
1634
- /**
1635
- * Событие нажатия на кнопку добавления банковского счёта контрагенту.
1636
- */
1637
- this.addContragentBankAccountClick = new EventEmitter();
1638
- /**
1639
- * Событие нажатия на кнопку удаления банковского счёта контрагента.
1640
- */
1641
- this.deleteContragentBankAccountClick = new EventEmitter();
1642
- /**
1643
- * Событие нажатия на кнопку добавления контактного лица контрагенту.
1644
- */
1645
- this.addContragentContactClick = new EventEmitter();
1646
- /**
1647
- * Событие нажатия на кнопку удаления контактного лица у контрагента.
1648
- */
1649
- this.deleteContragentContactClick = new EventEmitter();
1650
- }
1651
- /** @inheritDoc */
1652
- ngOnInit() {
1653
- this.bankAccounts$ = this.contragentService.getContragentBankAccounts$(this.contragent.id);
1654
- this.contacts$ = this.contragentService.getContragentContacts$(this.contragent.id);
1655
- }
1656
- /**
1657
- * Обработчик нажатия на кнопку удаления контактного лица у контрагента.
1658
- *
1659
- * @param contact Контактное лицо.
1660
- * @param contragent Контрагент.
1661
- */
1662
- onDeleteContragentContactClick(contact, contragent) {
1663
- this.deleteContragentContactClick.emit({ contact: contact, contragent: contragent });
1664
- }
1665
- }
1666
- ScContragentsAccordionItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsAccordionItemComponent, deps: [{ token: i1.ScContragentService }], target: i0.ɵɵFactoryTarget.Component });
1667
- ScContragentsAccordionItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScContragentsAccordionItemComponent, selector: "sc-contragents-accordion-item", inputs: { contragent: "contragent" }, outputs: { deleteContragentClick: "deleteContragentClick", addContragentBankAccountClick: "addContragentBankAccountClick", deleteContragentBankAccountClick: "deleteContragentBankAccountClick", addContragentContactClick: "addContragentContactClick", deleteContragentContactClick: "deleteContragentContactClick" }, ngImport: i0, template: "<sc-accordion [showAddButton]=\"false\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">\u0418\u041D\u041D: {{ inn }}</span>\n\n <ng-template scAccordionContent>\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex gap-2\">\n <div class=\"flex flex-col gap-2 grow\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">\u0418\u041D\u041D: {{ inn }}</span>\n <span *ngIf=\"$any(contragent).kpp as kpp\">\u041A\u041F\u041F: {{ kpp }}</span>\n </div>\n <!-- \u0424\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043D\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044E. -->\n <!-- <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconEdit3Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); editContragentClick.emit(contragent.id)\"\n ></button>\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconTrash2Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteContragentClick.emit(contragent)\"\n ></button> -->\n </div>\n\n <sc-accordion (addButtonClick)=\"addContragentBankAccountClick.emit(contragent)\">\n \u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n <ng-template scAccordionContent>\n <tui-loader *tuiLet=\"bankAccounts$ | async as bankAccounts\" [overlay]=\"true\" [showLoader]=\"bankAccounts === null\">\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!bankAccounts || bankAccounts.length; else bankAccountsNotExist\">\n <div *ngFor=\"let bankAccount of bankAccounts\" class=\"flex gap-2 border-b border-tui-base-03\">\n <div class=\"flex flex-col gap-2 grow\">\n <span>\u0411\u0430\u043D\u043A: {{ bankAccount.bankName }}</span>\n <span>\u0411\u0418\u041A: {{ bankAccount.bic }}</span>\n <span>\u0420/\u0441\u0447\u0451\u0442: {{ bankAccount.accountNumber }}</span>\n <span>\u041A\u043E\u0440/\u0441\u0447\u0451\u0442: {{ bankAccount.correspondentAccount }}</span>\n <span>\u0412\u0430\u043B\u044E\u0442\u0430: {{ bankAccount.currency.name }}</span>\n </div>\n <!-- <div class=\"flex flex-col md:flex-row gap-4\">\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconEdit3Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); editBankAccountsContragentClick.emit(bankAccount.id)\"\n ></button>\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconTrash2Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteContragentBankAccountClick.emit(bankAccount)\"\n ></button>\n </div> -->\n </div>\n </ng-container>\n\n <ng-template #bankAccountsNotExist>\n <tui-notification size=\"l\">\n <div class=\"flex flex-wrap gap-2 font-medium\">\n \u0423 \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 <span class=\"font-bold\">{{ contragent.name }}</span> \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u044B \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B.\n </div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n </sc-accordion>\n <sc-contacts-accordion\n *ngIf=\"contacts$\"\n [contacts$]=\"contacts$\"\n (addContactClick)=\"addContragentContactClick.emit(contragent)\"\n (deleteButtonClick)=\"onDeleteContragentContactClick($event, contragent)\"\n ></sc-contacts-accordion>\n </div>\n </ng-template>\n</sc-accordion>\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: ScAccordionComponent, selector: "sc-accordion", inputs: ["showAddButton", "showDeleteButton", "showArrow", "open", "size"], outputs: ["addButtonClick", "deleteButtonClick"] }, { kind: "directive", type: ScAccordionContentDirective, selector: "ng-template[scAccordionContent]" }, { kind: "component", type: i4.TuiLoaderComponent, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "directive", type: i6.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "component", type: i4.TuiNotificationComponent, selector: "tui-notification,a[tuiNotification],button[tuiNotification]", inputs: ["hasIcon", "icon", "status", "size", "hideClose"], outputs: ["close"] }, { kind: "component", type: ScContactsAccordionComponent, selector: "sc-contacts-accordion", inputs: ["contacts$"], outputs: ["addContactClick", "deleteButtonClick"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1668
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsAccordionItemComponent, decorators: [{
1669
- type: Component,
1670
- args: [{ selector: 'sc-contragents-accordion-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<sc-accordion [showAddButton]=\"false\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">\u0418\u041D\u041D: {{ inn }}</span>\n\n <ng-template scAccordionContent>\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex gap-2\">\n <div class=\"flex flex-col gap-2 grow\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">\u0418\u041D\u041D: {{ inn }}</span>\n <span *ngIf=\"$any(contragent).kpp as kpp\">\u041A\u041F\u041F: {{ kpp }}</span>\n </div>\n <!-- \u0424\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043D\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044E. -->\n <!-- <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconEdit3Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); editContragentClick.emit(contragent.id)\"\n ></button>\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconTrash2Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteContragentClick.emit(contragent)\"\n ></button> -->\n </div>\n\n <sc-accordion (addButtonClick)=\"addContragentBankAccountClick.emit(contragent)\">\n \u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n <ng-template scAccordionContent>\n <tui-loader *tuiLet=\"bankAccounts$ | async as bankAccounts\" [overlay]=\"true\" [showLoader]=\"bankAccounts === null\">\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!bankAccounts || bankAccounts.length; else bankAccountsNotExist\">\n <div *ngFor=\"let bankAccount of bankAccounts\" class=\"flex gap-2 border-b border-tui-base-03\">\n <div class=\"flex flex-col gap-2 grow\">\n <span>\u0411\u0430\u043D\u043A: {{ bankAccount.bankName }}</span>\n <span>\u0411\u0418\u041A: {{ bankAccount.bic }}</span>\n <span>\u0420/\u0441\u0447\u0451\u0442: {{ bankAccount.accountNumber }}</span>\n <span>\u041A\u043E\u0440/\u0441\u0447\u0451\u0442: {{ bankAccount.correspondentAccount }}</span>\n <span>\u0412\u0430\u043B\u044E\u0442\u0430: {{ bankAccount.currency.name }}</span>\n </div>\n <!-- <div class=\"flex flex-col md:flex-row gap-4\">\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconEdit3Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); editBankAccountsContragentClick.emit(bankAccount.id)\"\n ></button>\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconTrash2Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteContragentBankAccountClick.emit(bankAccount)\"\n ></button>\n </div> -->\n </div>\n </ng-container>\n\n <ng-template #bankAccountsNotExist>\n <tui-notification size=\"l\">\n <div class=\"flex flex-wrap gap-2 font-medium\">\n \u0423 \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 <span class=\"font-bold\">{{ contragent.name }}</span> \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u044B \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B.\n </div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n </sc-accordion>\n <sc-contacts-accordion\n *ngIf=\"contacts$\"\n [contacts$]=\"contacts$\"\n (addContactClick)=\"addContragentContactClick.emit(contragent)\"\n (deleteButtonClick)=\"onDeleteContragentContactClick($event, contragent)\"\n ></sc-contacts-accordion>\n </div>\n </ng-template>\n</sc-accordion>\n" }]
1671
- }], ctorParameters: function () { return [{ type: i1.ScContragentService }]; }, propDecorators: { contragent: [{
1672
- type: Input
1673
- }], deleteContragentClick: [{
1674
- type: Output
1675
- }], addContragentBankAccountClick: [{
1676
- type: Output
1677
- }], deleteContragentBankAccountClick: [{
1678
- type: Output
1679
- }], addContragentContactClick: [{
1680
- type: Output
1681
- }], deleteContragentContactClick: [{
1682
- type: Output
1683
- }] } });
1684
-
1685
- /**
1686
- * Компонент контрагента пользователя.
1687
- */
1688
- class ScContragentsAccordionComponent {
1689
- /**
1690
- * Инициализирует экземпляр класса {@link ScContragentsAccordionComponent}.
1691
- *
1692
- * @param contragentService Сервис работы с контрагентами.
1693
- */
1694
- constructor(contragentService) {
1695
- this.contragentService = contragentService;
1696
- /**
1697
- * {@link Observable} данных о контрагентах пользователя.
1698
- */
1699
- this.contragents$ = this.contragentService.contragents$;
1700
- /**
1701
- * Событие нажатия на кнопку удаления контрагента.
1702
- */
1703
- this.addContragentClick = new EventEmitter();
1704
- /**
1705
- * Событие нажатия на кнопку удаления контрагента.
1706
- */
1707
- this.deleteContragentClick = new EventEmitter();
1708
- /**
1709
- * Событие нажатия на кнопку добавления банковского счёта контрагенту.
1710
- */
1711
- this.addContragentBankAccountClick = new EventEmitter();
1712
- /**
1713
- * Событие нажатия на кнопку удаления банковского счёта контрагента.
1714
- */
1715
- this.deleteContragentBankAccountClick = new EventEmitter();
1716
- /**
1717
- * Событие нажатия на кнопку добавления контактного лица контрагенту.
1718
- */
1719
- this.addContragentContactClick = new EventEmitter();
1720
- /**
1721
- * Событие нажатия на кнопку удаления контактного лица у контрагента.
1722
- */
1723
- this.deleteContragentContactClick = new EventEmitter();
1724
- }
1725
- }
1726
- ScContragentsAccordionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsAccordionComponent, deps: [{ token: i1.ScContragentService }], target: i0.ɵɵFactoryTarget.Component });
1727
- ScContragentsAccordionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScContragentsAccordionComponent, selector: "sc-contragents-accordion", outputs: { addContragentClick: "addContragentClick", deleteContragentClick: "deleteContragentClick", addContragentBankAccountClick: "addContragentBankAccountClick", deleteContragentBankAccountClick: "deleteContragentBankAccountClick", addContragentContactClick: "addContragentContactClick", deleteContragentContactClick: "deleteContragentContactClick" }, ngImport: i0, template: "<sc-accordion (addButtonClick)=\"addContragentClick.emit()\">\n \u041A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u044B\n <ng-template scAccordionContent>\n <tui-loader *tuiLet=\"contragents$ | async as contragents\" [overlay]=\"true\" [showLoader]=\"contragents === null\">\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!contragents || contragents.length; else contragentsNotExist\">\n <sc-contragents-accordion-item\n *ngFor=\"let contragent of contragents\"\n [contragent]=\"contragent\"\n (deleteContragentClick)=\"deleteContragentClick.emit($event)\"\n (addContragentBankAccountClick)=\"addContragentBankAccountClick.emit($event)\"\n (deleteContragentBankAccountClick)=\"deleteContragentBankAccountClick.emit($event)\"\n (addContragentContactClick)=\"addContragentContactClick.emit($event)\"\n (deleteContragentContactClick)=\"deleteContragentContactClick.emit($event)\"\n ></sc-contragents-accordion-item>\n </ng-container>\n\n <ng-template #contragentsNotExist>\n <tui-notification size=\"l\">\n <div class=\"flex flex-wrap gap-2 font-medium\">\u041A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u044B \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u044B.</div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n</sc-accordion>\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: ScAccordionComponent, selector: "sc-accordion", inputs: ["showAddButton", "showDeleteButton", "showArrow", "open", "size"], outputs: ["addButtonClick", "deleteButtonClick"] }, { kind: "directive", type: ScAccordionContentDirective, selector: "ng-template[scAccordionContent]" }, { kind: "component", type: i4.TuiLoaderComponent, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "directive", type: i6.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "component", type: i4.TuiNotificationComponent, selector: "tui-notification,a[tuiNotification],button[tuiNotification]", inputs: ["hasIcon", "icon", "status", "size", "hideClose"], outputs: ["close"] }, { kind: "component", type: ScContragentsAccordionItemComponent, selector: "sc-contragents-accordion-item", inputs: ["contragent"], outputs: ["deleteContragentClick", "addContragentBankAccountClick", "deleteContragentBankAccountClick", "addContragentContactClick", "deleteContragentContactClick"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1728
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsAccordionComponent, decorators: [{
1729
- type: Component,
1730
- args: [{ selector: 'sc-contragents-accordion', changeDetection: ChangeDetectionStrategy.OnPush, template: "<sc-accordion (addButtonClick)=\"addContragentClick.emit()\">\n \u041A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u044B\n <ng-template scAccordionContent>\n <tui-loader *tuiLet=\"contragents$ | async as contragents\" [overlay]=\"true\" [showLoader]=\"contragents === null\">\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!contragents || contragents.length; else contragentsNotExist\">\n <sc-contragents-accordion-item\n *ngFor=\"let contragent of contragents\"\n [contragent]=\"contragent\"\n (deleteContragentClick)=\"deleteContragentClick.emit($event)\"\n (addContragentBankAccountClick)=\"addContragentBankAccountClick.emit($event)\"\n (deleteContragentBankAccountClick)=\"deleteContragentBankAccountClick.emit($event)\"\n (addContragentContactClick)=\"addContragentContactClick.emit($event)\"\n (deleteContragentContactClick)=\"deleteContragentContactClick.emit($event)\"\n ></sc-contragents-accordion-item>\n </ng-container>\n\n <ng-template #contragentsNotExist>\n <tui-notification size=\"l\">\n <div class=\"flex flex-wrap gap-2 font-medium\">\u041A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u044B \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u044B.</div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n</sc-accordion>\n" }]
1731
- }], ctorParameters: function () { return [{ type: i1.ScContragentService }]; }, propDecorators: { addContragentClick: [{
1732
- type: Output
1733
- }], deleteContragentClick: [{
1734
- type: Output
1735
- }], addContragentBankAccountClick: [{
1736
- type: Output
1737
- }], deleteContragentBankAccountClick: [{
1738
- type: Output
1739
- }], addContragentContactClick: [{
1740
- type: Output
1741
- }], deleteContragentContactClick: [{
1742
- type: Output
1743
- }] } });
1744
-
1745
1619
  /* eslint-disable no-restricted-syntax,@typescript-eslint/unbound-method */
1746
1620
  /**
1747
1621
  * Компонент формы создания нового банковского счета контрагента.
@@ -2054,121 +1928,143 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
2054
1928
  } });
2055
1929
 
2056
1930
  /**
2057
- * Директива для скрытия элементов карусели тайги.
1931
+ * Компонент контрагента пользователя.
2058
1932
  */
2059
- class ScCarouselItemHiddenDirective {
1933
+ class ScContragentsAccordionItemComponent {
2060
1934
  /**
2061
- * Инициализирует экземпляр класса {@link CarouselItemHiddenDirective}.
1935
+ * Инициализирует экземпляр класса {@link ScContragentsAccordionItemComponent}.
2062
1936
  *
2063
- * @param carouselComponent Компонент карусели, взятый из DI.
1937
+ * @param contragentService Сервис работы с контрагентами.
2064
1938
  */
2065
- constructor(carouselComponent) {
2066
- this.carouselComponent = carouselComponent;
1939
+ constructor(contragentService) {
1940
+ this.contragentService = contragentService;
1941
+ /**
1942
+ * Событие нажатия на кнопку удаления контрагента.
1943
+ */
1944
+ this.deleteContragentClick = new EventEmitter();
1945
+ /**
1946
+ * Событие нажатия на кнопку добавления банковского счёта контрагенту.
1947
+ */
1948
+ this.addContragentBankAccountClick = new EventEmitter();
1949
+ /**
1950
+ * Событие нажатия на кнопку удаления банковского счёта контрагента.
1951
+ */
1952
+ this.deleteContragentBankAccountClick = new EventEmitter();
1953
+ /**
1954
+ * Событие нажатия на кнопку добавления контактного лица контрагенту.
1955
+ */
1956
+ this.addContragentContactClick = new EventEmitter();
1957
+ /**
1958
+ * Событие нажатия на кнопку удаления контактного лица у контрагента.
1959
+ */
1960
+ this.deleteContragentContactClick = new EventEmitter();
1961
+ }
1962
+ /** @inheritDoc */
1963
+ ngOnInit() {
1964
+ this.bankAccounts$ = this.contragentService.getContragentBankAccounts$(this.contragent.id);
1965
+ this.contacts$ = this.contragentService.getContragentContacts$(this.contragent.id);
2067
1966
  }
2068
1967
  /**
2069
- * Свойство, от которого зависит наличие класса `!hidden` у `:host` компонента.
1968
+ * Обработчик нажатия на кнопку удаления контактного лица у контрагента.
1969
+ *
1970
+ * @param contact Контактное лицо.
1971
+ * @param contragent Контрагент.
2070
1972
  */
2071
- get isHidden() {
2072
- return this.index !== this.carouselComponent.index;
1973
+ onDeleteContragentContactClick(contact, contragent) {
1974
+ this.deleteContragentContactClick.emit({ contact: contact, contragent: contragent });
2073
1975
  }
2074
1976
  }
2075
- ScCarouselItemHiddenDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCarouselItemHiddenDirective, deps: [{ token: TuiCarouselComponent }], target: i0.ɵɵFactoryTarget.Directive });
2076
- ScCarouselItemHiddenDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ScCarouselItemHiddenDirective, selector: "[tuiItem], [scCarouselItemHidden]", inputs: { index: "index" }, host: { properties: { "class.!hidden": "this.isHidden" } }, ngImport: i0 });
2077
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCarouselItemHiddenDirective, decorators: [{
2078
- type: Directive,
2079
- args: [{
2080
- selector: '[tuiItem], [scCarouselItemHidden]',
2081
- }]
2082
- }], ctorParameters: function () {
2083
- return [{ type: i4$1.TuiCarouselComponent, decorators: [{
2084
- type: Inject,
2085
- args: [TuiCarouselComponent]
2086
- }] }];
2087
- }, propDecorators: { index: [{
1977
+ ScContragentsAccordionItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsAccordionItemComponent, deps: [{ token: i1.ScContragentService }], target: i0.ɵɵFactoryTarget.Component });
1978
+ ScContragentsAccordionItemComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScContragentsAccordionItemComponent, selector: "sc-contragents-accordion-item", inputs: { contragent: "contragent" }, outputs: { deleteContragentClick: "deleteContragentClick", addContragentBankAccountClick: "addContragentBankAccountClick", deleteContragentBankAccountClick: "deleteContragentBankAccountClick", addContragentContactClick: "addContragentContactClick", deleteContragentContactClick: "deleteContragentContactClick" }, ngImport: i0, template: "<sc-accordion [showAddButton]=\"false\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">\u0418\u041D\u041D: {{ inn }}</span>\n\n <ng-template scAccordionContent>\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex gap-2\">\n <div class=\"flex flex-col gap-2 grow\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">\u0418\u041D\u041D: {{ inn }}</span>\n <span *ngIf=\"$any(contragent).kpp as kpp\">\u041A\u041F\u041F: {{ kpp }}</span>\n </div>\n <!-- \u0424\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043D\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044E. -->\n <!-- <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconEdit3Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); editContragentClick.emit(contragent.id)\"\n ></button>\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconTrash2Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteContragentClick.emit(contragent)\"\n ></button> -->\n </div>\n\n <sc-accordion (addButtonClick)=\"addContragentBankAccountClick.emit(contragent)\">\n \u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n <ng-template scAccordionContent>\n <tui-loader *tuiLet=\"bankAccounts$ | async as bankAccounts\" [overlay]=\"true\" [showLoader]=\"bankAccounts === null\">\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!bankAccounts || bankAccounts.length; else bankAccountsNotExist\">\n <div *ngFor=\"let bankAccount of bankAccounts\" class=\"flex gap-2 border-b border-tui-base-03\">\n <div class=\"flex flex-col gap-2 grow\">\n <span>\u0411\u0430\u043D\u043A: {{ bankAccount.bankName }}</span>\n <span>\u0411\u0418\u041A: {{ bankAccount.bic }}</span>\n <span>\u0420/\u0441\u0447\u0451\u0442: {{ bankAccount.accountNumber }}</span>\n <span>\u041A\u043E\u0440/\u0441\u0447\u0451\u0442: {{ bankAccount.correspondentAccount }}</span>\n <span>\u0412\u0430\u043B\u044E\u0442\u0430: {{ bankAccount.currency.name }}</span>\n </div>\n <!-- <div class=\"flex flex-col md:flex-row gap-4\">\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconEdit3Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); editBankAccountsContragentClick.emit(bankAccount.id)\"\n ></button>\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconTrash2Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteContragentBankAccountClick.emit(bankAccount)\"\n ></button>\n </div> -->\n </div>\n </ng-container>\n\n <ng-template #bankAccountsNotExist>\n <tui-notification size=\"l\">\n <div class=\"flex flex-wrap gap-2 font-medium\">\n \u0423 \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 <span class=\"font-bold\">{{ contragent.name }}</span> \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u044B \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B.\n </div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n </sc-accordion>\n <sc-contacts-accordion\n *ngIf=\"contacts$\"\n [contacts$]=\"contacts$\"\n (addContactClick)=\"addContragentContactClick.emit(contragent)\"\n (deleteButtonClick)=\"onDeleteContragentContactClick($event, contragent)\"\n ></sc-contacts-accordion>\n </div>\n </ng-template>\n</sc-accordion>\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: ScAccordionComponent, selector: "sc-accordion", inputs: ["showAddButton", "showDeleteButton", "showArrow", "open", "size"], outputs: ["addButtonClick", "deleteButtonClick"] }, { kind: "directive", type: ScAccordionContentDirective, selector: "ng-template[scAccordionContent]" }, { kind: "component", type: i4.TuiLoaderComponent, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "directive", type: i6.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "component", type: i4.TuiNotificationComponent, selector: "tui-notification,a[tuiNotification],button[tuiNotification]", inputs: ["hasIcon", "icon", "status", "size", "hideClose"], outputs: ["close"] }, { kind: "component", type: ScContactsAccordionComponent, selector: "sc-contacts-accordion", inputs: ["contacts$"], outputs: ["addContactClick", "deleteButtonClick"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1979
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsAccordionItemComponent, decorators: [{
1980
+ type: Component,
1981
+ args: [{ selector: 'sc-contragents-accordion-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<sc-accordion [showAddButton]=\"false\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">\u0418\u041D\u041D: {{ inn }}</span>\n\n <ng-template scAccordionContent>\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex gap-2\">\n <div class=\"flex flex-col gap-2 grow\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">\u0418\u041D\u041D: {{ inn }}</span>\n <span *ngIf=\"$any(contragent).kpp as kpp\">\u041A\u041F\u041F: {{ kpp }}</span>\n </div>\n <!-- \u0424\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u043D\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044E. -->\n <!-- <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconEdit3Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); editContragentClick.emit(contragent.id)\"\n ></button>\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconTrash2Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteContragentClick.emit(contragent)\"\n ></button> -->\n </div>\n\n <sc-accordion (addButtonClick)=\"addContragentBankAccountClick.emit(contragent)\">\n \u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n <ng-template scAccordionContent>\n <tui-loader *tuiLet=\"bankAccounts$ | async as bankAccounts\" [overlay]=\"true\" [showLoader]=\"bankAccounts === null\">\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!bankAccounts || bankAccounts.length; else bankAccountsNotExist\">\n <div *ngFor=\"let bankAccount of bankAccounts\" class=\"flex gap-2 border-b border-tui-base-03\">\n <div class=\"flex flex-col gap-2 grow\">\n <span>\u0411\u0430\u043D\u043A: {{ bankAccount.bankName }}</span>\n <span>\u0411\u0418\u041A: {{ bankAccount.bic }}</span>\n <span>\u0420/\u0441\u0447\u0451\u0442: {{ bankAccount.accountNumber }}</span>\n <span>\u041A\u043E\u0440/\u0441\u0447\u0451\u0442: {{ bankAccount.correspondentAccount }}</span>\n <span>\u0412\u0430\u043B\u044E\u0442\u0430: {{ bankAccount.currency.name }}</span>\n </div>\n <!-- <div class=\"flex flex-col md:flex-row gap-4\">\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconEdit3Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); editBankAccountsContragentClick.emit(bankAccount.id)\"\n ></button>\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"tuiIconTrash2Large\"\n tuiMode=\"onLight\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteContragentBankAccountClick.emit(bankAccount)\"\n ></button>\n </div> -->\n </div>\n </ng-container>\n\n <ng-template #bankAccountsNotExist>\n <tui-notification size=\"l\">\n <div class=\"flex flex-wrap gap-2 font-medium\">\n \u0423 \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 <span class=\"font-bold\">{{ contragent.name }}</span> \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u044B \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B.\n </div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n </sc-accordion>\n <sc-contacts-accordion\n *ngIf=\"contacts$\"\n [contacts$]=\"contacts$\"\n (addContactClick)=\"addContragentContactClick.emit(contragent)\"\n (deleteButtonClick)=\"onDeleteContragentContactClick($event, contragent)\"\n ></sc-contacts-accordion>\n </div>\n </ng-template>\n</sc-accordion>\n" }]
1982
+ }], ctorParameters: function () { return [{ type: i1.ScContragentService }]; }, propDecorators: { contragent: [{
2088
1983
  type: Input
2089
- }], isHidden: [{
2090
- type: HostBinding,
2091
- args: ['class.!hidden']
1984
+ }], deleteContragentClick: [{
1985
+ type: Output
1986
+ }], addContragentBankAccountClick: [{
1987
+ type: Output
1988
+ }], deleteContragentBankAccountClick: [{
1989
+ type: Output
1990
+ }], addContragentContactClick: [{
1991
+ type: Output
1992
+ }], deleteContragentContactClick: [{
1993
+ type: Output
2092
1994
  }] } });
2093
1995
 
2094
1996
  /**
2095
- * Модуль директивы для скрытия элементов карусели тайги.
2096
- */
2097
- class ScCarouselItemHiddenModule {
2098
- }
2099
- ScCarouselItemHiddenModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCarouselItemHiddenModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2100
- ScCarouselItemHiddenModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ScCarouselItemHiddenModule, declarations: [ScCarouselItemHiddenDirective], imports: [TuiCarouselModule], exports: [ScCarouselItemHiddenDirective] });
2101
- ScCarouselItemHiddenModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCarouselItemHiddenModule, imports: [TuiCarouselModule] });
2102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCarouselItemHiddenModule, decorators: [{
2103
- type: NgModule,
2104
- args: [{
2105
- imports: [TuiCarouselModule],
2106
- declarations: [ScCarouselItemHiddenDirective],
2107
- exports: [ScCarouselItemHiddenDirective],
2108
- }]
2109
- }] });
2110
-
2111
- /* eslint-disable lodash/prefer-lodash-method */
2112
- /**
2113
- * Директива для перехода по нажатию клавиши enter на следующее поле ввода формы.
1997
+ * Компонент контрагента пользователя.
2114
1998
  */
2115
- class ScNextInputFocusDirective {
1999
+ class ScContragentsAccordionComponent {
2116
2000
  /**
2117
- * Слушатель нажатия на клавишу enter. Предотвращает событие submit, выполняет смену фокуса на следующее поле ввода TuiFocusableElementAccessor.
2001
+ * Инициализирует экземпляр класса {@link ScContragentsAccordionComponent}.
2118
2002
  *
2119
- * @param event Объект события нажатия на клавишу.
2003
+ * @param contragentService Сервис работы с контрагентами.
2120
2004
  */
2121
- onFormKeyDownEnter(event) {
2122
- var _a;
2123
- event.preventDefault();
2124
- const elements = this.focusableElements.toArray();
2125
- const focusedIndex = elements.findIndex((control) => control.focused);
2126
- if (focusedIndex !== -1) {
2127
- const nextElement = (_a = elements[focusedIndex + 1]) === null || _a === void 0 ? void 0 : _a.nativeFocusableElement;
2128
- if (nextElement) {
2129
- nextElement.focus();
2130
- }
2131
- }
2005
+ constructor(contragentService) {
2006
+ this.contragentService = contragentService;
2007
+ /**
2008
+ * {@link Observable} данных о контрагентах пользователя.
2009
+ */
2010
+ this.contragents$ = this.contragentService.contragents$;
2011
+ /**
2012
+ * Событие нажатия на кнопку удаления контрагента.
2013
+ */
2014
+ this.addContragentClick = new EventEmitter();
2015
+ /**
2016
+ * Событие нажатия на кнопку удаления контрагента.
2017
+ */
2018
+ this.deleteContragentClick = new EventEmitter();
2019
+ /**
2020
+ * Событие нажатия на кнопку добавления банковского счёта контрагенту.
2021
+ */
2022
+ this.addContragentBankAccountClick = new EventEmitter();
2023
+ /**
2024
+ * Событие нажатия на кнопку удаления банковского счёта контрагента.
2025
+ */
2026
+ this.deleteContragentBankAccountClick = new EventEmitter();
2027
+ /**
2028
+ * Событие нажатия на кнопку добавления контактного лица контрагенту.
2029
+ */
2030
+ this.addContragentContactClick = new EventEmitter();
2031
+ /**
2032
+ * Событие нажатия на кнопку удаления контактного лица у контрагента.
2033
+ */
2034
+ this.deleteContragentContactClick = new EventEmitter();
2132
2035
  }
2133
2036
  }
2134
- ScNextInputFocusDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2135
- ScNextInputFocusDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ScNextInputFocusDirective, selector: "form[ScNextInputFocus]", host: { listeners: { "keydown.enter": "onFormKeyDownEnter($event)" } }, queries: [{ propertyName: "focusableElements", predicate: AbstractTuiControl, descendants: true }], ngImport: i0 });
2136
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusDirective, decorators: [{
2137
- type: Directive,
2138
- args: [{
2139
- selector: 'form[ScNextInputFocus]',
2140
- }]
2141
- }], propDecorators: { focusableElements: [{
2142
- type: ContentChildren,
2143
- args: [AbstractTuiControl, { descendants: true }]
2144
- }], onFormKeyDownEnter: [{
2145
- type: HostListener,
2146
- args: ['keydown.enter', ['$event']]
2037
+ ScContragentsAccordionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsAccordionComponent, deps: [{ token: i1.ScContragentService }], target: i0.ɵɵFactoryTarget.Component });
2038
+ ScContragentsAccordionComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScContragentsAccordionComponent, selector: "sc-contragents-accordion", outputs: { addContragentClick: "addContragentClick", deleteContragentClick: "deleteContragentClick", addContragentBankAccountClick: "addContragentBankAccountClick", deleteContragentBankAccountClick: "deleteContragentBankAccountClick", addContragentContactClick: "addContragentContactClick", deleteContragentContactClick: "deleteContragentContactClick" }, ngImport: i0, template: "<sc-accordion (addButtonClick)=\"addContragentClick.emit()\">\n \u041A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u044B\n <ng-template scAccordionContent>\n <tui-loader *tuiLet=\"contragents$ | async as contragents\" [overlay]=\"true\" [showLoader]=\"contragents === null\">\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!contragents || contragents.length; else contragentsNotExist\">\n <sc-contragents-accordion-item\n *ngFor=\"let contragent of contragents\"\n [contragent]=\"contragent\"\n (deleteContragentClick)=\"deleteContragentClick.emit($event)\"\n (addContragentBankAccountClick)=\"addContragentBankAccountClick.emit($event)\"\n (deleteContragentBankAccountClick)=\"deleteContragentBankAccountClick.emit($event)\"\n (addContragentContactClick)=\"addContragentContactClick.emit($event)\"\n (deleteContragentContactClick)=\"deleteContragentContactClick.emit($event)\"\n ></sc-contragents-accordion-item>\n </ng-container>\n\n <ng-template #contragentsNotExist>\n <tui-notification size=\"l\">\n <div class=\"flex flex-wrap gap-2 font-medium\">\u041A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u044B \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u044B.</div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n</sc-accordion>\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: ScAccordionComponent, selector: "sc-accordion", inputs: ["showAddButton", "showDeleteButton", "showArrow", "open", "size"], outputs: ["addButtonClick", "deleteButtonClick"] }, { kind: "directive", type: ScAccordionContentDirective, selector: "ng-template[scAccordionContent]" }, { kind: "component", type: i4.TuiLoaderComponent, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "directive", type: i6.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "component", type: i4.TuiNotificationComponent, selector: "tui-notification,a[tuiNotification],button[tuiNotification]", inputs: ["hasIcon", "icon", "status", "size", "hideClose"], outputs: ["close"] }, { kind: "component", type: ScContragentsAccordionItemComponent, selector: "sc-contragents-accordion-item", inputs: ["contragent"], outputs: ["deleteContragentClick", "addContragentBankAccountClick", "deleteContragentBankAccountClick", "addContragentContactClick", "deleteContragentContactClick"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2039
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsAccordionComponent, decorators: [{
2040
+ type: Component,
2041
+ args: [{ selector: 'sc-contragents-accordion', changeDetection: ChangeDetectionStrategy.OnPush, template: "<sc-accordion (addButtonClick)=\"addContragentClick.emit()\">\n \u041A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u044B\n <ng-template scAccordionContent>\n <tui-loader *tuiLet=\"contragents$ | async as contragents\" [overlay]=\"true\" [showLoader]=\"contragents === null\">\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!contragents || contragents.length; else contragentsNotExist\">\n <sc-contragents-accordion-item\n *ngFor=\"let contragent of contragents\"\n [contragent]=\"contragent\"\n (deleteContragentClick)=\"deleteContragentClick.emit($event)\"\n (addContragentBankAccountClick)=\"addContragentBankAccountClick.emit($event)\"\n (deleteContragentBankAccountClick)=\"deleteContragentBankAccountClick.emit($event)\"\n (addContragentContactClick)=\"addContragentContactClick.emit($event)\"\n (deleteContragentContactClick)=\"deleteContragentContactClick.emit($event)\"\n ></sc-contragents-accordion-item>\n </ng-container>\n\n <ng-template #contragentsNotExist>\n <tui-notification size=\"l\">\n <div class=\"flex flex-wrap gap-2 font-medium\">\u041A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u044B \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u044B.</div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n</sc-accordion>\n" }]
2042
+ }], ctorParameters: function () { return [{ type: i1.ScContragentService }]; }, propDecorators: { addContragentClick: [{
2043
+ type: Output
2044
+ }], deleteContragentClick: [{
2045
+ type: Output
2046
+ }], addContragentBankAccountClick: [{
2047
+ type: Output
2048
+ }], deleteContragentBankAccountClick: [{
2049
+ type: Output
2050
+ }], addContragentContactClick: [{
2051
+ type: Output
2052
+ }], deleteContragentContactClick: [{
2053
+ type: Output
2147
2054
  }] } });
2148
2055
 
2149
- /**
2150
- * Модуль директивы для перехода по нажатию клавиши enter на следующее поле ввода формы.
2151
- */
2152
- class ScNextInputFocusModule {
2153
- }
2154
- ScNextInputFocusModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2155
- ScNextInputFocusModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusModule, declarations: [ScNextInputFocusDirective], exports: [ScNextInputFocusDirective] });
2156
- ScNextInputFocusModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusModule });
2157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusModule, decorators: [{
2158
- type: NgModule,
2159
- args: [{
2160
- declarations: [ScNextInputFocusDirective],
2161
- exports: [ScNextInputFocusDirective],
2162
- }]
2163
- }] });
2164
-
2165
2056
  /**
2166
2057
  * Модуль для отображение контента разделами, с возможностью скрывать и отображать содержимое.
2167
2058
  */
2168
2059
  class ScContragentsModule {
2169
2060
  }
2170
2061
  ScContragentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2171
- ScContragentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsModule, declarations: [ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScNewContragentBankAccountsFormComponent, ScAddContragentBankAccountsDialogComponent, ScAddContragentDialogComponent, ScNewContragentFormComponent], imports: [FormsModule,
2062
+ ScContragentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsModule, declarations: [ScContragentsAccordionComponent,
2063
+ ScContragentsAccordionItemComponent,
2064
+ ScNewContragentBankAccountsFormComponent,
2065
+ ScAddContragentBankAccountsDialogComponent,
2066
+ ScAddContragentDialogComponent,
2067
+ ScNewContragentFormComponent], imports: [FormsModule,
2172
2068
  ReactiveFormsModule,
2173
2069
  CommonModule,
2174
2070
  ScAccordionModule,
@@ -2189,8 +2085,11 @@ ScContragentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", ver
2189
2085
  MaskitoModule,
2190
2086
  ScFormFieldsModule,
2191
2087
  TuiElasticContainerModule,
2192
- TuiCarouselModule,
2193
- ScCarouselItemHiddenModule], exports: [ScContragentsAccordionComponent, ScNewContragentBankAccountsFormComponent, ScAddContragentBankAccountsDialogComponent, ScAddContragentDialogComponent, ScNewContragentFormComponent] });
2088
+ TuiCarouselModule], exports: [ScContragentsAccordionComponent,
2089
+ ScNewContragentBankAccountsFormComponent,
2090
+ ScAddContragentBankAccountsDialogComponent,
2091
+ ScAddContragentDialogComponent,
2092
+ ScNewContragentFormComponent] });
2194
2093
  ScContragentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsModule, imports: [FormsModule,
2195
2094
  ReactiveFormsModule,
2196
2095
  CommonModule,
@@ -2212,12 +2111,18 @@ ScContragentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", ver
2212
2111
  MaskitoModule,
2213
2112
  ScFormFieldsModule,
2214
2113
  TuiElasticContainerModule,
2215
- TuiCarouselModule,
2216
- ScCarouselItemHiddenModule] });
2114
+ TuiCarouselModule] });
2217
2115
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScContragentsModule, decorators: [{
2218
2116
  type: NgModule,
2219
2117
  args: [{
2220
- declarations: [ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScNewContragentBankAccountsFormComponent, ScAddContragentBankAccountsDialogComponent, ScAddContragentDialogComponent, ScNewContragentFormComponent],
2118
+ declarations: [
2119
+ ScContragentsAccordionComponent,
2120
+ ScContragentsAccordionItemComponent,
2121
+ ScNewContragentBankAccountsFormComponent,
2122
+ ScAddContragentBankAccountsDialogComponent,
2123
+ ScAddContragentDialogComponent,
2124
+ ScNewContragentFormComponent,
2125
+ ],
2221
2126
  imports: [
2222
2127
  FormsModule,
2223
2128
  ReactiveFormsModule,
@@ -2241,9 +2146,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
2241
2146
  ScFormFieldsModule,
2242
2147
  TuiElasticContainerModule,
2243
2148
  TuiCarouselModule,
2244
- ScCarouselItemHiddenModule
2245
2149
  ],
2246
- exports: [ScContragentsAccordionComponent, ScNewContragentBankAccountsFormComponent, ScAddContragentBankAccountsDialogComponent, ScAddContragentDialogComponent, ScNewContragentFormComponent]
2150
+ exports: [
2151
+ ScContragentsAccordionComponent,
2152
+ ScNewContragentBankAccountsFormComponent,
2153
+ ScAddContragentBankAccountsDialogComponent,
2154
+ ScAddContragentDialogComponent,
2155
+ ScNewContragentFormComponent,
2156
+ ],
2247
2157
  }]
2248
2158
  }] });
2249
2159
 
@@ -2343,8 +2253,7 @@ ScAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
2343
2253
  TuiSelectModule,
2344
2254
  TuiElasticContainerModule,
2345
2255
  ScContragentsModule,
2346
- ScContactsModule,
2347
- ScCarouselItemHiddenModule], exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent] });
2256
+ ScContactsModule], exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent] });
2348
2257
  ScAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScAuthModule, imports: [CommonModule,
2349
2258
  FormsModule,
2350
2259
  ReactiveFormsModule,
@@ -2371,8 +2280,7 @@ ScAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
2371
2280
  TuiSelectModule,
2372
2281
  TuiElasticContainerModule,
2373
2282
  ScContragentsModule,
2374
- ScContactsModule,
2375
- ScCarouselItemHiddenModule] });
2283
+ ScContactsModule] });
2376
2284
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScAuthModule, decorators: [{
2377
2285
  type: NgModule,
2378
2286
  args: [{
@@ -2405,7 +2313,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
2405
2313
  TuiElasticContainerModule,
2406
2314
  ScContragentsModule,
2407
2315
  ScContactsModule,
2408
- ScCarouselItemHiddenModule,
2409
2316
  ],
2410
2317
  exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent],
2411
2318
  }]
@@ -2684,12 +2591,13 @@ const SC_LINEAR_VALUES = ['пог.м.', 'м.', 'м2'];
2684
2591
  */
2685
2592
  const SC_LINEAR_VALUES_TOKEN = tuiCreateToken(SC_LINEAR_VALUES);
2686
2593
 
2594
+ /* eslint-disable lodash/prefer-lodash-method */
2687
2595
  /**
2688
2596
  * Класс хэлпер для работы со значениями единиц измерения товара.
2689
2597
  */
2690
- class UnitsHelper {
2598
+ class ScUnitsHelper {
2691
2599
  /**
2692
- * Инициирует экземпляр класса {@link UnitsHelper}.
2600
+ * Инициирует экземпляр класса {@link ScUnitsHelper}.
2693
2601
  *
2694
2602
  * @param linearValues Единицы измерения линейной величины.
2695
2603
  */
@@ -2699,7 +2607,7 @@ class UnitsHelper {
2699
2607
  /**
2700
2608
  * Возвращает признак возможности продажи товара на метраж.
2701
2609
  *
2702
- * @param linearValues Товар для которого нужно проверить возможность продажи на метраж.
2610
+ * @param product Товар для которого нужно проверить возможность продажи на метраж.
2703
2611
  */
2704
2612
  productIsMeasurable(product) {
2705
2613
  return this.linearValues.includes(product.unit);
@@ -2707,18 +2615,18 @@ class UnitsHelper {
2707
2615
  /**
2708
2616
  * Возвращает кратность количества для товара.
2709
2617
  *
2710
- * @param linearValues Товар для которого нужно вернуть кратность количества.
2618
+ * @param product Товар для которого нужно вернуть кратность количества.
2711
2619
  */
2712
2620
  productMultiplicity(product) {
2713
- return product && product.minCount && !this.linearValues.includes(product.unit) ? product.minCount : 1;
2621
+ return product.minCount && !this.linearValues.includes(product.unit) ? product.minCount : 1;
2714
2622
  }
2715
2623
  }
2716
- UnitsHelper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UnitsHelper, deps: [{ token: SC_LINEAR_VALUES_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
2717
- UnitsHelper.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UnitsHelper, providedIn: 'root' });
2718
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UnitsHelper, decorators: [{
2624
+ ScUnitsHelper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScUnitsHelper, deps: [{ token: SC_LINEAR_VALUES_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
2625
+ ScUnitsHelper.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScUnitsHelper, providedIn: 'root' });
2626
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScUnitsHelper, decorators: [{
2719
2627
  type: Injectable,
2720
2628
  args: [{
2721
- providedIn: 'root'
2629
+ providedIn: 'root',
2722
2630
  }]
2723
2631
  }], ctorParameters: function () {
2724
2632
  return [{ type: undefined, decorators: [{
@@ -2926,6 +2834,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
2926
2834
  type: Input
2927
2835
  }] } });
2928
2836
 
2837
+ /* eslint-disable no-underscore-dangle */
2929
2838
  /**
2930
2839
  * Компонент карточки элемента корзины.
2931
2840
  */
@@ -2994,7 +2903,8 @@ class ScCartItemMobileComponent {
2994
2903
  * Отобразить спецификацию.
2995
2904
  */
2996
2905
  showSpecification() {
2997
- this.previewDialogService.open(this.specificationPreviewRef || '').subscribe();
2906
+ var _a;
2907
+ this.previewDialogService.open((_a = this.specificationPreviewRef) !== null && _a !== void 0 ? _a : '').subscribe();
2998
2908
  }
2999
2909
  /**
3000
2910
  * Возвращает ссылку на изображение карточки товара.
@@ -3004,13 +2914,13 @@ class ScCartItemMobileComponent {
3004
2914
  return (_b = (_a = this.product) === null || _a === void 0 ? void 0 : _a.getImagePreview(this.urls.imgServerUrl)) !== null && _b !== void 0 ? _b : this.urls.imgServerUrl + this.pathImageNotFound;
3005
2915
  }
3006
2916
  }
3007
- ScCartItemMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartItemMobileComponent, deps: [{ token: UnitsHelper }, { token: TuiPreviewDialogService }, { token: SC_URLS }, { token: SC_PATH_IMAGE_NOT_FOUND }], target: i0.ɵɵFactoryTarget.Component });
2917
+ ScCartItemMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartItemMobileComponent, deps: [{ token: ScUnitsHelper }, { token: TuiPreviewDialogService }, { token: SC_URLS }, { token: SC_PATH_IMAGE_NOT_FOUND }], target: i0.ɵɵFactoryTarget.Component });
3008
2918
  ScCartItemMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCartItemMobileComponent, selector: "sc-cart-item-mobile", inputs: { cartItem: "cartItem" }, outputs: { quantityValueChanges: "quantityValueChanges", clickDeleteEvent: "clickDeleteEvent", clickSettingsEvent: "clickSettingsEvent", clickCardEvent: "clickCardEvent" }, viewQueries: [{ propertyName: "specificationPreviewRef", first: true, predicate: ["specificationPreview"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"cartItem && product; else skeleton\">\n <!-- TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton size=\"m\" icon=\"scIconVerticalThreeDots\" appearance=\"float\" tuiMode=\"onLight\" class=\"!absolute right-0 top-0\"></button> -->\n <div class=\"flex bg-white border border-tui-base-04 shadow-sc-2 rounded-xl min-w-[18rem] gap-2 p-2\">\n <div class=\"flex w-40 items-center\">\n <img (click)=\"clickCardEvent.emit()\" [src]=\"getCardImage()\" [alt]=\"product.name\" class=\"rounded-xl w-full max-h-full object-cover\" />\n </div>\n <div class=\"flex flex-col sm:flex-row sm:gap-5 items-center gap-2 justify-between w-full\">\n <div class=\"flex flex-col self-start max-w-full gap-1\">\n <a tuiLink (click)=\"clickCardEvent.emit()\">\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n\n <div class=\"flex flex-wrap gap-y-1 gap-x-2 w-full text-xs text-tui-base-05\">\n <p *ngIf=\"product.pack\">\u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}</p>\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-y-1 gap-x-2 w-full\">\n <p *ngIf=\"!product.priceInRub\" class=\"font-bold\">{{ product.costString }}</p>\n <p class=\"font-bold text-xs text-tui-base-05\">{{ product.costRubString }}</p>\n <span *ngIf=\"product.discount\" class=\"flex items-center\">\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"text-tui-success-fill font-bold\"> -{{ product.discount.percent }}% </span>\n <tui-svg src=\"tuiIconInfoLarge\" [tuiHint]=\"discountHint\" [tuiHintShowDelay]=\"100\" tuiHintDirection=\"top\" class=\"!text-xs !h-4\"></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n </div>\n\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n\n <div *ngIf=\"cartItem.height || cartItem.length || cartItem.width\" class=\"flex gap-1 items-center\">\n <button\n tuiIconButton\n icon=\"tuiIconSettings\"\n (click)=\"clickSettingsEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n tuiMode=\"onLight\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-wrap gap-x-2 font-thin text-xs text-tui-base-04\">\n <p *ngIf=\"cartItem.marker\">\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ cartItem.marker }}</p>\n <p *ngIf=\"cartItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ cartItem.width }} \u043C.</p>\n <ng-container *ngIf=\"cartItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ cartItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"cartItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} \u043C.</p>\n </ng-template>\n </div>\n </div>\n\n <a tuiLink *ngIf=\"cartItem.specificationImgUrl\" (click)=\"showSpecification()\">\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a>\n <ng-template #specificationPreview let-preview>\n <tui-preview [rotatable]=\"false\" [zoomable]=\"false\">\n <img *polymorpheusOutlet=\"cartItem.specificationImgUrl as src\" alt=\"preview\" [src]=\"cartItem.specificationImgUrl\" />\n <button icon=\"tuiIconClose\" title=\"Close\" tuiIconButton tuiPreviewAction type=\"button\" (click)=\"preview.complete()\"></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"flex flex-col self-start gap-1 sm:mr-9 sm:self-center\">\n <div class=\"flex gap-2\">\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"quantityControl\"\n [formControl]=\"quantityControl\"\n [showCross]=\"false\"\n size=\"s\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-28\"\n ></sc-input-quantity>\n <button tuiIconButton icon=\"tuiIconTrash2\" shape=\"rounded\" size=\"xs\" (click)=\"clickDeleteEvent.emit()\"></button>\n </div>\n <p class=\"font-bold text-tui-text-01 text-sm\">\u0418\u0442\u043E\u0433\u043E: {{ cartItem.costRub | tuiFormatNumber }} {{ 'RUB' | tuiCurrency }}</p>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #skeleton>\n <div class=\"flex gap-2 w-full\">\n <div class=\"h-20 w-20 bg-tui-base-02 rounded-xl\"></div>\n <div class=\"flex flex-col grow gap-2.5 bg-white\">\n <div class=\"w-full h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-3/5 h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-4/5 h-4 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TuiLinkComponent, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo", "icon", "iconAlign", "iconRotated", "mode"], exportAs: ["tuiLink"] }, { kind: "component", type: ScInputQuantityComponent, selector: "sc-input-quantity", inputs: ["step", "showLoader", "showCross", "appearance", "isDisabled", "size"], outputs: ["clickClearEvent"] }, { kind: "component", type: ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint", "fromMain"] }, { 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: i4.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i4.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHint", "tuiHintContext", "tuiHintAppearance"] }, { kind: "directive", type: i4.TuiHintDriverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)" }, { kind: "directive", type: i4.TuiHintHoverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintShowDelay", "tuiHintHideDelay"], exportAs: ["tuiHintHover"] }, { kind: "directive", type: i4.TuiHintPositionDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintDirection"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7$1.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { kind: "directive", type: i7$1.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }, { kind: "directive", type: i2$1.PolymorpheusOutletDirective, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "pipe", type: i9.TuiCurrencyPipe, name: "tuiCurrency" }, { kind: "pipe", type: i4.TuiFormatNumberPipe, name: "tuiFormatNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3009
2919
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartItemMobileComponent, decorators: [{
3010
2920
  type: Component,
3011
2921
  args: [{ selector: 'sc-cart-item-mobile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"cartItem && product; else skeleton\">\n <!-- TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton size=\"m\" icon=\"scIconVerticalThreeDots\" appearance=\"float\" tuiMode=\"onLight\" class=\"!absolute right-0 top-0\"></button> -->\n <div class=\"flex bg-white border border-tui-base-04 shadow-sc-2 rounded-xl min-w-[18rem] gap-2 p-2\">\n <div class=\"flex w-40 items-center\">\n <img (click)=\"clickCardEvent.emit()\" [src]=\"getCardImage()\" [alt]=\"product.name\" class=\"rounded-xl w-full max-h-full object-cover\" />\n </div>\n <div class=\"flex flex-col sm:flex-row sm:gap-5 items-center gap-2 justify-between w-full\">\n <div class=\"flex flex-col self-start max-w-full gap-1\">\n <a tuiLink (click)=\"clickCardEvent.emit()\">\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n\n <div class=\"flex flex-wrap gap-y-1 gap-x-2 w-full text-xs text-tui-base-05\">\n <p *ngIf=\"product.pack\">\u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}</p>\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-y-1 gap-x-2 w-full\">\n <p *ngIf=\"!product.priceInRub\" class=\"font-bold\">{{ product.costString }}</p>\n <p class=\"font-bold text-xs text-tui-base-05\">{{ product.costRubString }}</p>\n <span *ngIf=\"product.discount\" class=\"flex items-center\">\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"text-tui-success-fill font-bold\"> -{{ product.discount.percent }}% </span>\n <tui-svg src=\"tuiIconInfoLarge\" [tuiHint]=\"discountHint\" [tuiHintShowDelay]=\"100\" tuiHintDirection=\"top\" class=\"!text-xs !h-4\"></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n </div>\n\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n\n <div *ngIf=\"cartItem.height || cartItem.length || cartItem.width\" class=\"flex gap-1 items-center\">\n <button\n tuiIconButton\n icon=\"tuiIconSettings\"\n (click)=\"clickSettingsEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n tuiMode=\"onLight\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-wrap gap-x-2 font-thin text-xs text-tui-base-04\">\n <p *ngIf=\"cartItem.marker\">\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ cartItem.marker }}</p>\n <p *ngIf=\"cartItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ cartItem.width }} \u043C.</p>\n <ng-container *ngIf=\"cartItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ cartItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"cartItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} \u043C.</p>\n </ng-template>\n </div>\n </div>\n\n <a tuiLink *ngIf=\"cartItem.specificationImgUrl\" (click)=\"showSpecification()\">\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a>\n <ng-template #specificationPreview let-preview>\n <tui-preview [rotatable]=\"false\" [zoomable]=\"false\">\n <img *polymorpheusOutlet=\"cartItem.specificationImgUrl as src\" alt=\"preview\" [src]=\"cartItem.specificationImgUrl\" />\n <button icon=\"tuiIconClose\" title=\"Close\" tuiIconButton tuiPreviewAction type=\"button\" (click)=\"preview.complete()\"></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"flex flex-col self-start gap-1 sm:mr-9 sm:self-center\">\n <div class=\"flex gap-2\">\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"quantityControl\"\n [formControl]=\"quantityControl\"\n [showCross]=\"false\"\n size=\"s\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-28\"\n ></sc-input-quantity>\n <button tuiIconButton icon=\"tuiIconTrash2\" shape=\"rounded\" size=\"xs\" (click)=\"clickDeleteEvent.emit()\"></button>\n </div>\n <p class=\"font-bold text-tui-text-01 text-sm\">\u0418\u0442\u043E\u0433\u043E: {{ cartItem.costRub | tuiFormatNumber }} {{ 'RUB' | tuiCurrency }}</p>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #skeleton>\n <div class=\"flex gap-2 w-full\">\n <div class=\"h-20 w-20 bg-tui-base-02 rounded-xl\"></div>\n <div class=\"flex flex-col grow gap-2.5 bg-white\">\n <div class=\"w-full h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-3/5 h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-4/5 h-4 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n" }]
3012
2922
  }], ctorParameters: function () {
3013
- return [{ type: UnitsHelper }, { type: i7$1.TuiPreviewDialogService, decorators: [{
2923
+ return [{ type: ScUnitsHelper }, { type: i7$1.TuiPreviewDialogService, decorators: [{
3014
2924
  type: Inject,
3015
2925
  args: [TuiPreviewDialogService]
3016
2926
  }] }, { type: undefined, decorators: [{
@@ -3020,11 +2930,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
3020
2930
  type: Inject,
3021
2931
  args: [SC_PATH_IMAGE_NOT_FOUND]
3022
2932
  }] }];
3023
- }, propDecorators: { specificationPreviewRef: [{
2933
+ }, propDecorators: { cartItem: [{
2934
+ type: Input
2935
+ }], specificationPreviewRef: [{
3024
2936
  type: ViewChild,
3025
2937
  args: ['specificationPreview']
3026
- }], cartItem: [{
3027
- type: Input
3028
2938
  }], quantityValueChanges: [{
3029
2939
  type: Output
3030
2940
  }], clickDeleteEvent: [{
@@ -3265,36 +3175,70 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
3265
3175
  args: ['mouseleave']
3266
3176
  }] } });
3267
3177
 
3268
- /* eslint-disable no-underscore-dangle */
3178
+ /* eslint-disable lodash/prefer-lodash-method */
3269
3179
  /**
3270
- * Компонент карточки товара.
3180
+ * Директива для перехода по нажатию клавиши enter на следующее поле ввода формы.
3271
3181
  */
3272
- class ScPriceCardComponent {
3182
+ class ScNextInputFocusDirective {
3273
3183
  /**
3274
- * Инициирует экземпляр класса {@link ScPriceCardComponent}.
3184
+ * Слушатель нажатия на клавишу enter. Предотвращает событие submit, выполняет смену фокуса на следующее поле ввода TuiFocusableElementAccessor.
3275
3185
  *
3276
- * @param unitsHelper Объект-хэлпер для работы со значениями единиц измерения товара.
3277
- * @param authService Сервис аутентификации пользователей.
3278
- * @param warehouseService Сервис для работы со складами.
3279
- * @param urls Список ссылок на разделы backend'a.
3280
- * @param pathImageNotFound Путь до изображения 'Товар не найден'.
3281
- * @param search$ Провайдер поиска терма.
3282
- * @param cdr Объект для работы с обнаружением изменений.
3283
- * @param imageHelper Хелпер для работы с изображениями товара.
3186
+ * @param event Объект события нажатия на клавишу.
3284
3187
  */
3285
- constructor(unitsHelper, authService, warehouseService, urls, pathImageNotFound, search$, cdr, imageHelper) {
3286
- this.unitsHelper = unitsHelper;
3287
- this.authService = authService;
3288
- this.warehouseService = warehouseService;
3289
- this.urls = urls;
3290
- this.pathImageNotFound = pathImageNotFound;
3291
- this.search$ = search$;
3292
- this.cdr = cdr;
3293
- this.imageHelper = imageHelper;
3188
+ onFormKeyDownEnter(event) {
3189
+ var _a;
3190
+ event.preventDefault();
3191
+ const elements = this.focusableElements.toArray();
3192
+ const focusedIndex = elements.findIndex((control) => control.focused);
3193
+ if (focusedIndex !== -1) {
3194
+ const nextElement = (_a = elements[focusedIndex + 1]) === null || _a === void 0 ? void 0 : _a.nativeFocusableElement;
3195
+ if (nextElement) {
3196
+ nextElement.focus();
3197
+ }
3198
+ }
3199
+ }
3200
+ }
3201
+ ScNextInputFocusDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3202
+ ScNextInputFocusDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ScNextInputFocusDirective, selector: "form[ScNextInputFocus]", host: { listeners: { "keydown.enter": "onFormKeyDownEnter($event)" } }, queries: [{ propertyName: "focusableElements", predicate: AbstractTuiControl, descendants: true }], ngImport: i0 });
3203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusDirective, decorators: [{
3204
+ type: Directive,
3205
+ args: [{
3206
+ selector: 'form[ScNextInputFocus]',
3207
+ }]
3208
+ }], propDecorators: { focusableElements: [{
3209
+ type: ContentChildren,
3210
+ args: [AbstractTuiControl, { descendants: true }]
3211
+ }], onFormKeyDownEnter: [{
3212
+ type: HostListener,
3213
+ args: ['keydown.enter', ['$event']]
3214
+ }] } });
3215
+
3216
+ /**
3217
+ * Модуль директивы для перехода по нажатию клавиши enter на следующее поле ввода формы.
3218
+ */
3219
+ class ScNextInputFocusModule {
3220
+ }
3221
+ ScNextInputFocusModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3222
+ ScNextInputFocusModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusModule, declarations: [ScNextInputFocusDirective], exports: [ScNextInputFocusDirective] });
3223
+ ScNextInputFocusModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusModule });
3224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScNextInputFocusModule, decorators: [{
3225
+ type: NgModule,
3226
+ args: [{
3227
+ declarations: [ScNextInputFocusDirective],
3228
+ exports: [ScNextInputFocusDirective],
3229
+ }]
3230
+ }] });
3231
+
3232
+ /* eslint-disable no-underscore-dangle */
3233
+ /**
3234
+ * Директива абстрактной карточки товара.
3235
+ */
3236
+ class AbstractScPriceCard {
3237
+ constructor() {
3294
3238
  /**
3295
- * Признак того, что этот компонент отображается на мобильном устройстве.
3239
+ * {@link FormControl} поля ввода количества товара в корзине.
3296
3240
  */
3297
- this.isMobile = inject(TUI_IS_MOBILE);
3241
+ this.quantityControl = new FormControl(3, { updateOn: 'blur' });
3298
3242
  /**
3299
3243
  * Признак, что необходимо отобразить лоадер для поля ввода количества товара.
3300
3244
  */
@@ -3303,6 +3247,18 @@ class ScPriceCardComponent {
3303
3247
  * Признак, что необходимо отобразить лоадер для кнопки избранных товаров и категорий.
3304
3248
  */
3305
3249
  this.favoriteShowLoader = false;
3250
+ /**
3251
+ * {@link Observable} изменения выбранного склада.
3252
+ */
3253
+ this.warehouseSelect$ = inject(ScWarehouseService).getWarehouseSelectChange$();
3254
+ /**
3255
+ * {@link Observable} изменения статуса авторизации.
3256
+ */
3257
+ this.authStatus$ = inject(ScAuthService).getAuthChange();
3258
+ /**
3259
+ * {@link Observable} поиска терма.
3260
+ */
3261
+ this.search$ = inject(SEARCH_TERM);
3306
3262
  /**
3307
3263
  * Признак, что необходимо отобразить поле ввода количества товара.
3308
3264
  */
@@ -3324,25 +3280,25 @@ class ScPriceCardComponent {
3324
3280
  */
3325
3281
  this.clickCardEvent = new EventEmitter();
3326
3282
  /**
3327
- * {@link Observable} изменения выбранного склада.
3328
- */
3329
- this.warehouseSelect$ = this.warehouseService.getWarehouseSelectChange$();
3330
- /**
3331
- * {@link FormControl} поля ввода количества товара в корзине.
3283
+ * Событие нажатия на историю цен.
3332
3284
  */
3333
- this.quantityControl = new FormControl(null, { updateOn: 'blur' });
3285
+ this.clickPriceHistoryEvent = new EventEmitter();
3334
3286
  /**
3335
3287
  * {@link Observable} изменения количества товара в корзине.
3336
3288
  */
3337
3289
  this.quantityValueChanges = this.quantityControl.valueChanges;
3338
3290
  /**
3339
- * {@link Observable} изменения статуса авторизации.
3291
+ * Экземпляр класса-помощника для работы со значениями единиц измерения товара.
3340
3292
  */
3341
- this.authStatus$ = this.authService.getAuthChange();
3293
+ this.unitsHelper = inject(ScUnitsHelper);
3342
3294
  /**
3343
- * Размер компонента.
3295
+ * Хелпер для работы с изображениями товара.
3344
3296
  */
3345
- this.size = 'm';
3297
+ this.imageHelper = inject(ScImageHelper);
3298
+ /**
3299
+ * Путь до изображения 'Товар не найден'.
3300
+ */
3301
+ this.pathImageNotFound = inject(SC_PATH_IMAGE_NOT_FOUND);
3346
3302
  }
3347
3303
  /**
3348
3304
  * Позиция товара в корзине.
@@ -3363,13 +3319,6 @@ class ScPriceCardComponent {
3363
3319
  this.quantityControl.patchValue((_b = (_a = this._cartItem) === null || _a === void 0 ? void 0 : _a.quantity) !== null && _b !== void 0 ? _b : null, { emitEvent: false });
3364
3320
  this.quantityShowLoader = false;
3365
3321
  }
3366
- /**
3367
- * Конвертация размера для компонента sc-input-quantity.
3368
- * TODO: Решить проблему с функционалом size для разных платформ.
3369
- */
3370
- get getQuantitySize() {
3371
- return this.size === 'xs' ? 's' : this.size;
3372
- }
3373
3322
  /**
3374
3323
  * Признак, что нужно показать скелетон.
3375
3324
  */
@@ -3382,35 +3331,17 @@ class ScPriceCardComponent {
3382
3331
  getCardImagePreview() {
3383
3332
  return this.product ? this.imageHelper.getImagePreview(this.product) : this.pathImageNotFound;
3384
3333
  }
3385
- /**
3386
- * Устанавливает компонент в очередь на обновление.
3387
- */
3388
- markForCheck() {
3389
- this.cdr.markForCheck();
3390
- }
3391
3334
  }
3392
- ScPriceCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceCardComponent, deps: [{ token: UnitsHelper }, { token: i1.ScAuthService }, { token: i1.ScWarehouseService }, { token: SC_URLS }, { token: SC_PATH_IMAGE_NOT_FOUND }, { token: SEARCH_TERM }, { token: i0.ChangeDetectorRef }, { token: i1.ScImageHelper }], target: i0.ɵɵFactoryTarget.Component });
3393
- ScPriceCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScPriceCardComponent, selector: "sc-price-card", inputs: { cartItem: "cartItem", showQuantityControl: "showQuantityControl", product: "product", size: "size" }, outputs: { clickFavoriteEvent: "clickFavoriteEvent", clickAddToCartEvent: "clickAddToCartEvent", clickClearEvent: "clickClearEvent", clickCardEvent: "clickCardEvent", quantityValueChanges: "quantityValueChanges" }, host: { properties: { "attr.data-size": "this.size" } }, providers: [SEARCH_TERM_PROVIDERS], ngImport: i0, template: "<!-- TODO: \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u0442\u044C \u0434\u0430\u043D\u043D\u044B\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 \u0438 \u0434\u043B\u044F \u0434\u0435\u0441\u043A\u0442\u043E\u043F\u0430 \u0438 \u0434\u043B\u044F \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F. \u0418\u0441\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u044B\u0435 \u0442\u0430\u0439\u0433\u043E\u0432\u0441\u043A\u0438\u0435 \u0441\u0442\u0438\u043B\u0438, \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u0441\u043E\u0433\u043B\u0430\u0441\u043D\u043E \u0441 \u0434\u0438\u0437\u0430\u0439\u043D\u043E\u043C. -->\n<div\n *ngIf=\"product; else skeleton\"\n class=\"relative grid h-[19rem] w-auto min-w-40 rounded-xl p-2 text-xs shadow-md\"\n>\n <div class=\"overflow-hidden\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImagePreview()\"\n [alt]=\"product.name\"\n class=\"max-h-full w-full rounded-xl object-cover\"\n />\n </div>\n <sc-favorite-btn\n *ngIf=\"authStatus$ | async\"\n class=\"absolute left-0 top-0\"\n (clickEvent)=\"clickFavoriteEvent.emit()\"\n [showLoader]=\"favoriteShowLoader\"\n [isFavorite]=\"product.isFavorite\"\n [disabled]=\"!!product.primaryCategory?.isFavorite\"\n ></sc-favorite-btn>\n <tui-svg\n *ngIf=\"product.isPreviouslyOrdered\"\n src=\"scIconStar\"\n class=\"absolute right-0 top-0 text-red-700\"\n ></tui-svg>\n\n <a\n class=\"m-0 p-0\"\n tuiLink\n iconAlign=\"left\"\n (click)=\"clickCardEvent.emit()\"\n >\n <p\n class=\"line-clamp-3 text-sm font-bold\"\n style=\"word-break: break-word\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n >\n {{ product.name }}\n </p>\n </a>\n <p\n *ngIf=\"product?.pack\"\n class=\"text-tui-text-02\"\n >\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n </p>\n\n <p\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"text-tui-text-02\"\n >\n \u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}\n </p>\n <p\n *ngIf=\"(authStatus$ | async) && product?.costDate\"\n class=\"text-tui-text-02\"\n >\n \u0414\u0430\u0442\u0430: {{ product.costDate }}\n </p>\n <div\n *ngIf=\"warehouseSelect$ | async as warehouseSelect\"\n class=\"flex flex-col\"\n >\n <span\n *ngIf=\"product.discount && !isMobile\"\n class=\"flex items-center text-tui-text-02\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <tui-svg\n src=\"tuiIconInfoLarge\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"!h-4 !text-xs text-black\"\n ></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <span\n [class.text-tui-text-02]=\"!product.isWarehouseStockExist(warehouseSelect.id)\"\n class=\"cost font-bold\"\n >{{ product.costRubString }}</span\n >\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"hidden text-xs font-bold text-tui-text-02 group-hover:block\"\n >{{ product.costString }}</span\n >\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n <div\n *ngIf=\"!showQuantityControl\"\n class=\"mt-1 flex max-w-full items-center justify-stretch gap-2\"\n >\n <button\n tuiButton\n (click)=\"clickAddToCartEvent.emit(product)\"\n [showLoader]=\"quantityShowLoader\"\n [size]=\"size\"\n class=\"grow\"\n >\n <tui-svg\n src=\"scIconCart\"\n class=\"!h-4 !text-xs\"\n >\n </tui-svg>\n \u0412 \u043A\u043E\u0440\u0437\u0438\u043D\u0443\n </button>\n <div\n *ngIf=\"cartItem\"\n class=\"flex justify-center\"\n >\n <tui-svg\n src=\"tuiIconCheck\"\n class=\"!h-5 !w-5 rounded-md bg-tui-primary text-black\"\n ></tui-svg>\n </div>\n </div>\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n [size]=\"getQuantitySize\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [showLoader]=\"quantityShowLoader\"\n (clickClearEvent)=\"clickClearEvent.emit(cartItem)\"\n class=\"mt-2 w-full\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n ></sc-input-quantity>\n</div>\n\n<ng-template #skeleton>\n <div class=\"card-wrapper flex flex-col overflow-hidden rounded-xl bg-white shadow-sc-1\">\n <!-- \u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <div class=\"h-3/5 w-full rounded-t bg-tui-base-02\"></div>\n <!-- \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0442\u043E\u0432\u0430\u0440\u0435 -->\n <div class=\"flex grow flex-col gap-2.5 rounded-b bg-white p-5\">\n <div class=\"h-4 w-full rounded bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded bg-tui-base-02\"></div>\n <div class=\"h-4 w-full rounded bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n", styles: [":host[data-size=s] .card-wrapper{width:10rem;height:16rem}:host[data-size=s] .card-wrapper .wrapper-info{padding:8px}:host[data-size=s] .card-wrapper .wrapper-info .cost{font-size:.875rem;line-height:1.25rem}:host[data-size=s] .card-wrapper .button-wrapper tui-svg{font-size:.75rem;line-height:1rem;width:1rem}:host[data-size=m] .card-wrapper{width:12.5rem;height:20rem}:host[data-size=m] .card-wrapper .wrapper-info{padding-inline:16px;padding-block:8px}:host[data-size=m] .card-wrapper .name{font-size:.875rem;line-height:1.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;max-height:3rem}:host[data-size=m] .card-wrapper .info{max-height:1rem}:host[data-size=m] .card-wrapper .cost{font-size:1.125rem;line-height:1.75rem}:host[data-size=m] .card-wrapper .button-wrapper{max-height:0px;font-size:.75rem;line-height:1rem}:host[data-size=m] .card-wrapper:hover .name{-webkit-line-clamp:unset;max-height:6rem}:host[data-size=m] .card-wrapper:hover .info{max-height:3rem}:host[data-size=m] .card-wrapper:hover .button-wrapper{max-height:3rem}\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: "component", type: i4.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHint", "tuiHintContext", "tuiHintAppearance"] }, { kind: "directive", type: i4.TuiHintDriverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)" }, { kind: "directive", type: i4.TuiHintHoverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintShowDelay", "tuiHintHideDelay"], exportAs: ["tuiHintHover"] }, { kind: "directive", type: i4.TuiHintPositionDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintDirection"] }, { kind: "component", type: i4.TuiLinkComponent, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo", "icon", "iconAlign", "iconRotated", "mode"], exportAs: ["tuiLink"] }, { kind: "directive", type: i4$1.TuiHighlightDirective, selector: "[tuiHighlight]", inputs: ["tuiHighlight", "tuiHighlightColor"] }, { kind: "component", type: ScFavoriteBtnComponent, selector: "sc-favorite-btn", inputs: ["isFavorite", "showLoader", "disabled"], outputs: ["clickEvent"] }, { kind: "component", type: ScInputQuantityComponent, selector: "sc-input-quantity", inputs: ["step", "showLoader", "showCross", "appearance", "isDisabled", "size"], outputs: ["clickClearEvent"] }, { kind: "component", type: ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint", "fromMain"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3394
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceCardComponent, decorators: [{
3395
- type: Component,
3396
- args: [{ selector: 'sc-price-card', changeDetection: ChangeDetectionStrategy.OnPush, providers: [SEARCH_TERM_PROVIDERS], template: "<!-- TODO: \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u0442\u044C \u0434\u0430\u043D\u043D\u044B\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 \u0438 \u0434\u043B\u044F \u0434\u0435\u0441\u043A\u0442\u043E\u043F\u0430 \u0438 \u0434\u043B\u044F \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F. \u0418\u0441\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u044B\u0435 \u0442\u0430\u0439\u0433\u043E\u0432\u0441\u043A\u0438\u0435 \u0441\u0442\u0438\u043B\u0438, \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u0441\u043E\u0433\u043B\u0430\u0441\u043D\u043E \u0441 \u0434\u0438\u0437\u0430\u0439\u043D\u043E\u043C. -->\n<div\n *ngIf=\"product; else skeleton\"\n class=\"relative grid h-[19rem] w-auto min-w-40 rounded-xl p-2 text-xs shadow-md\"\n>\n <div class=\"overflow-hidden\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImagePreview()\"\n [alt]=\"product.name\"\n class=\"max-h-full w-full rounded-xl object-cover\"\n />\n </div>\n <sc-favorite-btn\n *ngIf=\"authStatus$ | async\"\n class=\"absolute left-0 top-0\"\n (clickEvent)=\"clickFavoriteEvent.emit()\"\n [showLoader]=\"favoriteShowLoader\"\n [isFavorite]=\"product.isFavorite\"\n [disabled]=\"!!product.primaryCategory?.isFavorite\"\n ></sc-favorite-btn>\n <tui-svg\n *ngIf=\"product.isPreviouslyOrdered\"\n src=\"scIconStar\"\n class=\"absolute right-0 top-0 text-red-700\"\n ></tui-svg>\n\n <a\n class=\"m-0 p-0\"\n tuiLink\n iconAlign=\"left\"\n (click)=\"clickCardEvent.emit()\"\n >\n <p\n class=\"line-clamp-3 text-sm font-bold\"\n style=\"word-break: break-word\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n >\n {{ product.name }}\n </p>\n </a>\n <p\n *ngIf=\"product?.pack\"\n class=\"text-tui-text-02\"\n >\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n </p>\n\n <p\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"text-tui-text-02\"\n >\n \u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}\n </p>\n <p\n *ngIf=\"(authStatus$ | async) && product?.costDate\"\n class=\"text-tui-text-02\"\n >\n \u0414\u0430\u0442\u0430: {{ product.costDate }}\n </p>\n <div\n *ngIf=\"warehouseSelect$ | async as warehouseSelect\"\n class=\"flex flex-col\"\n >\n <span\n *ngIf=\"product.discount && !isMobile\"\n class=\"flex items-center text-tui-text-02\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <tui-svg\n src=\"tuiIconInfoLarge\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"!h-4 !text-xs text-black\"\n ></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <span\n [class.text-tui-text-02]=\"!product.isWarehouseStockExist(warehouseSelect.id)\"\n class=\"cost font-bold\"\n >{{ product.costRubString }}</span\n >\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"hidden text-xs font-bold text-tui-text-02 group-hover:block\"\n >{{ product.costString }}</span\n >\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n <div\n *ngIf=\"!showQuantityControl\"\n class=\"mt-1 flex max-w-full items-center justify-stretch gap-2\"\n >\n <button\n tuiButton\n (click)=\"clickAddToCartEvent.emit(product)\"\n [showLoader]=\"quantityShowLoader\"\n [size]=\"size\"\n class=\"grow\"\n >\n <tui-svg\n src=\"scIconCart\"\n class=\"!h-4 !text-xs\"\n >\n </tui-svg>\n \u0412 \u043A\u043E\u0440\u0437\u0438\u043D\u0443\n </button>\n <div\n *ngIf=\"cartItem\"\n class=\"flex justify-center\"\n >\n <tui-svg\n src=\"tuiIconCheck\"\n class=\"!h-5 !w-5 rounded-md bg-tui-primary text-black\"\n ></tui-svg>\n </div>\n </div>\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n [size]=\"getQuantitySize\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [showLoader]=\"quantityShowLoader\"\n (clickClearEvent)=\"clickClearEvent.emit(cartItem)\"\n class=\"mt-2 w-full\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n ></sc-input-quantity>\n</div>\n\n<ng-template #skeleton>\n <div class=\"card-wrapper flex flex-col overflow-hidden rounded-xl bg-white shadow-sc-1\">\n <!-- \u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <div class=\"h-3/5 w-full rounded-t bg-tui-base-02\"></div>\n <!-- \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0442\u043E\u0432\u0430\u0440\u0435 -->\n <div class=\"flex grow flex-col gap-2.5 rounded-b bg-white p-5\">\n <div class=\"h-4 w-full rounded bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded bg-tui-base-02\"></div>\n <div class=\"h-4 w-full rounded bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n", styles: [":host[data-size=s] .card-wrapper{width:10rem;height:16rem}:host[data-size=s] .card-wrapper .wrapper-info{padding:8px}:host[data-size=s] .card-wrapper .wrapper-info .cost{font-size:.875rem;line-height:1.25rem}:host[data-size=s] .card-wrapper .button-wrapper tui-svg{font-size:.75rem;line-height:1rem;width:1rem}:host[data-size=m] .card-wrapper{width:12.5rem;height:20rem}:host[data-size=m] .card-wrapper .wrapper-info{padding-inline:16px;padding-block:8px}:host[data-size=m] .card-wrapper .name{font-size:.875rem;line-height:1.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;max-height:3rem}:host[data-size=m] .card-wrapper .info{max-height:1rem}:host[data-size=m] .card-wrapper .cost{font-size:1.125rem;line-height:1.75rem}:host[data-size=m] .card-wrapper .button-wrapper{max-height:0px;font-size:.75rem;line-height:1rem}:host[data-size=m] .card-wrapper:hover .name{-webkit-line-clamp:unset;max-height:6rem}:host[data-size=m] .card-wrapper:hover .info{max-height:3rem}:host[data-size=m] .card-wrapper:hover .button-wrapper{max-height:3rem}\n"] }]
3397
- }], ctorParameters: function () {
3398
- return [{ type: UnitsHelper }, { type: i1.ScAuthService }, { type: i1.ScWarehouseService }, { type: undefined, decorators: [{
3399
- type: Inject,
3400
- args: [SC_URLS]
3401
- }] }, { type: undefined, decorators: [{
3402
- type: Inject,
3403
- args: [SC_PATH_IMAGE_NOT_FOUND]
3404
- }] }, { type: i10.Observable, decorators: [{
3405
- type: Inject,
3406
- args: [SEARCH_TERM]
3407
- }] }, { type: i0.ChangeDetectorRef }, { type: i1.ScImageHelper }];
3408
- }, propDecorators: { cartItem: [{
3409
- type: Input
3410
- }], showQuantityControl: [{
3335
+ AbstractScPriceCard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AbstractScPriceCard, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3336
+ AbstractScPriceCard.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: AbstractScPriceCard, inputs: { cartItem: "cartItem", product: "product", showQuantityControl: "showQuantityControl" }, outputs: { clickFavoriteEvent: "clickFavoriteEvent", clickAddToCartEvent: "clickAddToCartEvent", clickClearEvent: "clickClearEvent", clickCardEvent: "clickCardEvent", clickPriceHistoryEvent: "clickPriceHistoryEvent", quantityValueChanges: "quantityValueChanges" }, ngImport: i0 });
3337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AbstractScPriceCard, decorators: [{
3338
+ type: Directive
3339
+ }], propDecorators: { cartItem: [{
3411
3340
  type: Input
3412
3341
  }], product: [{
3413
3342
  type: Input
3343
+ }], showQuantityControl: [{
3344
+ type: Input
3414
3345
  }], clickFavoriteEvent: [{
3415
3346
  type: Output
3416
3347
  }], clickAddToCartEvent: [{
@@ -3419,13 +3350,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
3419
3350
  type: Output
3420
3351
  }], clickCardEvent: [{
3421
3352
  type: Output
3353
+ }], clickPriceHistoryEvent: [{
3354
+ type: Output
3422
3355
  }], quantityValueChanges: [{
3423
3356
  type: Output
3424
- }], size: [{
3357
+ }] } });
3358
+
3359
+ /**
3360
+ * Компонент карточки товара.
3361
+ */
3362
+ class ScPriceCardComponent extends AbstractScPriceCard {
3363
+ /**
3364
+ * Инициирует экземпляр класса {@link ScPriceCardComponent}.
3365
+ *
3366
+ * @param cdr Объект для работы с обнаружением изменений.
3367
+ */
3368
+ constructor(cdr) {
3369
+ super();
3370
+ this.cdr = cdr;
3371
+ /**
3372
+ * Размер компонента.
3373
+ */
3374
+ this.size = 'm';
3375
+ /**
3376
+ * Признак того, что этот компонент отображается на мобильном устройстве.
3377
+ */
3378
+ this.isMobile = inject(TUI_IS_MOBILE);
3379
+ }
3380
+ /**
3381
+ * Устанавливает компонент в очередь на обновление.
3382
+ */
3383
+ markForCheck() {
3384
+ this.cdr.markForCheck();
3385
+ }
3386
+ }
3387
+ ScPriceCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceCardComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3388
+ ScPriceCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScPriceCardComponent, selector: "sc-price-card", inputs: { size: "size" }, host: { properties: { "attr.data-size": "this.size", "attr.is_mobile": "this.isMobile" } }, providers: [SEARCH_TERM_PROVIDERS], usesInheritance: true, ngImport: i0, template: "<div\n *ngIf=\"product; else skeleton\"\n class=\"card-wrapper relative flex w-auto min-w-40 flex-col rounded-xl shadow-md\"\n>\n <div class=\"flex grow flex-col justify-center overflow-hidden rounded-xl p-2\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImagePreview()\"\n [alt]=\"product.name\"\n class=\"max-h-full w-full rounded-xl object-cover\"\n />\n <sc-favorite-btn\n *ngIf=\"authStatus$ | async\"\n class=\"absolute left-2 top-2\"\n (clickEvent)=\"clickFavoriteEvent.emit()\"\n [showLoader]=\"favoriteShowLoader\"\n [isFavorite]=\"product.isFavorite\"\n [disabled]=\"!!product.primaryCategory?.isFavorite\"\n ></sc-favorite-btn>\n <tui-svg\n *ngIf=\"product.isPreviouslyOrdered\"\n src=\"scIconStar\"\n class=\"absolute right-2 top-2 text-red-700\"\n ></tui-svg>\n </div>\n <div class=\"p-2\">\n <tui-elastic-container class=\"shrink-0\">\n <a\n tuiLink\n class=\"name\"\n iconAlign=\"left\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n (click)=\"clickCardEvent.emit()\"\n >\n {{ product.name }}\n </a>\n </tui-elastic-container>\n <tui-elastic-container class=\"shrink-0\">\n <p\n *ngIf=\"product?.pack\"\n class=\"text-tui-text-02\"\n >\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n </p>\n <p\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"code text-tui-text-02\"\n >\n \u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}\n </p>\n\n <a\n tuiLink\n *ngIf=\"!isMobile && (authStatus$ | async) && product?.costDate\"\n iconAlign=\"left\"\n aria-disabled=\"true\"\n class=\"history\"\n (click)=\"clickPriceHistoryEvent.emit()\"\n >\n \u0414\u0430\u0442\u0430: {{ product.costDate }}\n </a>\n </tui-elastic-container>\n <div\n *ngIf=\"warehouseSelect$ | async as warehouseSelect\"\n class=\"flex flex-col\"\n >\n <span\n *ngIf=\"product.discount && !isMobile\"\n class=\"flex items-center text-tui-text-02\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <tui-svg\n src=\"tuiIconInfoLarge\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"!h-4 text-black\"\n ></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <span\n [class.text-tui-text-02]=\"!product.isWarehouseStockExist(warehouseSelect.id)\"\n class=\"cost font-bold\"\n >{{ product.costRubString }}</span\n >\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"hidden font-bold text-tui-text-02 group-hover:block\"\n >{{ product.costString }}</span\n >\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n <div class=\"cart-actions flex shrink-0 overflow-hidden\">\n <button\n *ngIf=\"!showQuantityControl\"\n tuiButton\n (click)=\"clickAddToCartEvent.emit(product)\"\n [showLoader]=\"quantityShowLoader\"\n [size]=\"size === 's' ? 'xs' : 's'\"\n class=\"mt-2 grow\"\n icon=\"tuiIconShoppingCart\"\n >\n \u0412 \u043A\u043E\u0440\u0437\u0438\u043D\u0443\n </button>\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n [size]=\"size\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [showLoader]=\"quantityShowLoader\"\n (clickClearEvent)=\"clickClearEvent.emit(cartItem)\"\n class=\"mt-2 w-full\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n ></sc-input-quantity>\n </div>\n </div>\n</div>\n\n<ng-template #skeleton>\n <div class=\"card-wrapper flex flex-col overflow-hidden rounded-xl bg-white shadow-sc-1\">\n <!-- \u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <div class=\"h-3/5 w-full rounded-t bg-tui-base-02\"></div>\n <!-- \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0442\u043E\u0432\u0430\u0440\u0435 -->\n <div class=\"flex grow flex-col gap-2.5 rounded-b bg-white p-5\">\n <div class=\"h-4 w-full rounded bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded bg-tui-base-02\"></div>\n <div class=\"h-4 w-full rounded bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n", styles: [":host[data-size=s] .card-wrapper{height:16rem;font:var(--tui-font-text-xs)}:host[data-size=s] .card-wrapper .name,:host[data-size=s] .card-wrapper .cost{font:var(--tui-font-text-s);font-weight:800}:host[data-size=m] .card-wrapper{height:20rem;font:var(--tui-font-text-s)}:host[data-size=m] .card-wrapper .name,:host[data-size=m] .card-wrapper .cost{font:var(--tui-font-text-m);font-weight:800}:host[is_mobile=false] .name{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}:host[is_mobile=false] .code,:host[is_mobile=false] .history{display:none}:host[is_mobile=false] .cart-actions{max-height:0;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out}:host[is_mobile=false]:hover .code,:host[is_mobile=false]:hover .history,:host[is_mobile=false]:hover .name{overflow:visible;display:block;-webkit-box-orient:horizontal;-webkit-line-clamp:none}:host[is_mobile=false]:hover .cart-actions{max-height:3rem}\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: "component", type: i4.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHint", "tuiHintContext", "tuiHintAppearance"] }, { kind: "directive", type: i4.TuiHintDriverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)" }, { kind: "directive", type: i4.TuiHintHoverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintShowDelay", "tuiHintHideDelay"], exportAs: ["tuiHintHover"] }, { kind: "directive", type: i4.TuiHintPositionDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintDirection"] }, { kind: "component", type: i4.TuiLinkComponent, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo", "icon", "iconAlign", "iconRotated", "mode"], exportAs: ["tuiLink"] }, { kind: "component", type: i4$1.TuiElasticContainerComponent, selector: "tui-elastic-container" }, { kind: "directive", type: i4$1.TuiHighlightDirective, selector: "[tuiHighlight]", inputs: ["tuiHighlight", "tuiHighlightColor"] }, { kind: "component", type: ScFavoriteBtnComponent, selector: "sc-favorite-btn", inputs: ["isFavorite", "showLoader", "disabled"], outputs: ["clickEvent"] }, { kind: "component", type: ScInputQuantityComponent, selector: "sc-input-quantity", inputs: ["step", "showLoader", "showCross", "appearance", "isDisabled", "size"], outputs: ["clickClearEvent"] }, { kind: "component", type: ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint", "fromMain"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3389
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceCardComponent, decorators: [{
3390
+ type: Component,
3391
+ args: [{ selector: 'sc-price-card', providers: [SEARCH_TERM_PROVIDERS], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"product; else skeleton\"\n class=\"card-wrapper relative flex w-auto min-w-40 flex-col rounded-xl shadow-md\"\n>\n <div class=\"flex grow flex-col justify-center overflow-hidden rounded-xl p-2\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImagePreview()\"\n [alt]=\"product.name\"\n class=\"max-h-full w-full rounded-xl object-cover\"\n />\n <sc-favorite-btn\n *ngIf=\"authStatus$ | async\"\n class=\"absolute left-2 top-2\"\n (clickEvent)=\"clickFavoriteEvent.emit()\"\n [showLoader]=\"favoriteShowLoader\"\n [isFavorite]=\"product.isFavorite\"\n [disabled]=\"!!product.primaryCategory?.isFavorite\"\n ></sc-favorite-btn>\n <tui-svg\n *ngIf=\"product.isPreviouslyOrdered\"\n src=\"scIconStar\"\n class=\"absolute right-2 top-2 text-red-700\"\n ></tui-svg>\n </div>\n <div class=\"p-2\">\n <tui-elastic-container class=\"shrink-0\">\n <a\n tuiLink\n class=\"name\"\n iconAlign=\"left\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n (click)=\"clickCardEvent.emit()\"\n >\n {{ product.name }}\n </a>\n </tui-elastic-container>\n <tui-elastic-container class=\"shrink-0\">\n <p\n *ngIf=\"product?.pack\"\n class=\"text-tui-text-02\"\n >\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n </p>\n <p\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"code text-tui-text-02\"\n >\n \u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}\n </p>\n\n <a\n tuiLink\n *ngIf=\"!isMobile && (authStatus$ | async) && product?.costDate\"\n iconAlign=\"left\"\n aria-disabled=\"true\"\n class=\"history\"\n (click)=\"clickPriceHistoryEvent.emit()\"\n >\n \u0414\u0430\u0442\u0430: {{ product.costDate }}\n </a>\n </tui-elastic-container>\n <div\n *ngIf=\"warehouseSelect$ | async as warehouseSelect\"\n class=\"flex flex-col\"\n >\n <span\n *ngIf=\"product.discount && !isMobile\"\n class=\"flex items-center text-tui-text-02\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <tui-svg\n src=\"tuiIconInfoLarge\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"!h-4 text-black\"\n ></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <span\n [class.text-tui-text-02]=\"!product.isWarehouseStockExist(warehouseSelect.id)\"\n class=\"cost font-bold\"\n >{{ product.costRubString }}</span\n >\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"hidden font-bold text-tui-text-02 group-hover:block\"\n >{{ product.costString }}</span\n >\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n <div class=\"cart-actions flex shrink-0 overflow-hidden\">\n <button\n *ngIf=\"!showQuantityControl\"\n tuiButton\n (click)=\"clickAddToCartEvent.emit(product)\"\n [showLoader]=\"quantityShowLoader\"\n [size]=\"size === 's' ? 'xs' : 's'\"\n class=\"mt-2 grow\"\n icon=\"tuiIconShoppingCart\"\n >\n \u0412 \u043A\u043E\u0440\u0437\u0438\u043D\u0443\n </button>\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n [size]=\"size\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [showLoader]=\"quantityShowLoader\"\n (clickClearEvent)=\"clickClearEvent.emit(cartItem)\"\n class=\"mt-2 w-full\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n ></sc-input-quantity>\n </div>\n </div>\n</div>\n\n<ng-template #skeleton>\n <div class=\"card-wrapper flex flex-col overflow-hidden rounded-xl bg-white shadow-sc-1\">\n <!-- \u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <div class=\"h-3/5 w-full rounded-t bg-tui-base-02\"></div>\n <!-- \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0442\u043E\u0432\u0430\u0440\u0435 -->\n <div class=\"flex grow flex-col gap-2.5 rounded-b bg-white p-5\">\n <div class=\"h-4 w-full rounded bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded bg-tui-base-02\"></div>\n <div class=\"h-4 w-full rounded bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n", styles: [":host[data-size=s] .card-wrapper{height:16rem;font:var(--tui-font-text-xs)}:host[data-size=s] .card-wrapper .name,:host[data-size=s] .card-wrapper .cost{font:var(--tui-font-text-s);font-weight:800}:host[data-size=m] .card-wrapper{height:20rem;font:var(--tui-font-text-s)}:host[data-size=m] .card-wrapper .name,:host[data-size=m] .card-wrapper .cost{font:var(--tui-font-text-m);font-weight:800}:host[is_mobile=false] .name{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}:host[is_mobile=false] .code,:host[is_mobile=false] .history{display:none}:host[is_mobile=false] .cart-actions{max-height:0;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out}:host[is_mobile=false]:hover .code,:host[is_mobile=false]:hover .history,:host[is_mobile=false]:hover .name{overflow:visible;display:block;-webkit-box-orient:horizontal;-webkit-line-clamp:none}:host[is_mobile=false]:hover .cart-actions{max-height:3rem}\n"] }]
3392
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { size: [{
3425
3393
  type: Input
3426
3394
  }, {
3427
3395
  type: HostBinding,
3428
3396
  args: ['attr.data-size']
3397
+ }], isMobile: [{
3398
+ type: HostBinding,
3399
+ args: ['attr.is_mobile']
3429
3400
  }] } });
3430
3401
 
3431
3402
  /**
@@ -3529,7 +3500,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
3529
3500
  type: Component,
3530
3501
  args: [{ selector: 'sc-price-history', changeDetection: ChangeDetectionStrategy.OnPush, template: "<tui-loader [showLoader]=\"!!(loadingHistory$ | async)\"> </tui-loader>\n\n<div\n *ngIf=\"(loadingHistory$ | async) === false\"\n class=\"flex flex-col items-center\"\n>\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" }]
3531
3502
  }], ctorParameters: function () {
3532
- return [{ type: i1.ScCatalogService }, { type: i10.Observable, decorators: [{
3503
+ return [{ type: i1.ScCatalogService }, { type: i5.Observable, decorators: [{
3533
3504
  type: Inject,
3534
3505
  args: [TUI_MONTHS]
3535
3506
  }] }, { type: i1.ScUserMetrikaService }, { type: undefined, decorators: [{
@@ -4627,13 +4598,13 @@ class ScOrderItemMobileComponent {
4627
4598
  return (_b = (_a = this.product) === null || _a === void 0 ? void 0 : _a.getImage(this.urls.imgServerUrl)) !== null && _b !== void 0 ? _b : this.urls.imgServerUrl + this.pathImageNotFound;
4628
4599
  }
4629
4600
  }
4630
- ScOrderItemMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScOrderItemMobileComponent, deps: [{ token: UnitsHelper }, { token: TuiPreviewDialogService }, { token: SC_URLS }, { token: SC_PATH_IMAGE_NOT_FOUND }], target: i0.ɵɵFactoryTarget.Component });
4601
+ ScOrderItemMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScOrderItemMobileComponent, deps: [{ token: ScUnitsHelper }, { token: TuiPreviewDialogService }, { token: SC_URLS }, { token: SC_PATH_IMAGE_NOT_FOUND }], target: i0.ɵɵFactoryTarget.Component });
4631
4602
  ScOrderItemMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScOrderItemMobileComponent, selector: "sc-order-item-mobile", inputs: { orderItem: "orderItem" }, outputs: { clickCardEvent: "clickCardEvent", clickActionsEvent: "clickActionsEvent" }, viewQueries: [{ propertyName: "specificationPreviewRef", first: true, predicate: ["specificationPreview"], descendants: true }], ngImport: i0, template: "<div class=\"relative flex flex-wrap gap-x-4 gap-y-2 rounded-xl border border-tui-base-04 bg-white p-4 shadow-sc-2\">\n <ng-container *ngIf=\"orderItem && product; else skeleton\">\n <button\n tuiIconButton\n (click)=\"clickActionsEvent.emit()\"\n size=\"m\"\n icon=\"scIconVerticalThreeDots\"\n appearance=\"float\"\n tuiMode=\"onLight\"\n class=\"!absolute right-0 top-0 !hidden\"\n ></button>\n <div class=\"flex grow gap-2\">\n <div class=\"flex size-20 shrink-0 items-center justify-center overflow-hidden\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage()\"\n [alt]=\"product.name\"\n [class.p-5]=\"!product.images?.length\"\n class=\"cursor-pointer\"\n />\n </div>\n\n <div class=\"flex grow flex-wrap gap-x-8 self-center\">\n <div class=\"flex grow basis-min-content flex-col\">\n <a\n tuiLink\n (click)=\"clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n <div class=\"flex flex-col gap-y-0.5 text-xs text-tui-text-02\">\n <div class=\"flex flex-wrap gap-y-0.5\">\n <p class=\"w-40\">\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n <p\n class=\"w-40\"\n *ngIf=\"product.pack\"\n >\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n </p>\n </div>\n <a\n tuiLink\n *ngIf=\"orderItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a\n >\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItem.specificationImgUrl\"\n />\n <button\n icon=\"tuiIconClose\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n </div>\n <div class=\"flex flex-wrap content-center\">\n <div class=\"flex w-40 flex-col gap-x-8 gap-y-0.5\">\n <span\n *ngIf=\"product.discount\"\n class=\"flex items-center text-xs text-tui-text-02\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <p class=\"flex flex-col items-baseline gap-x-2 font-bold\">\n <span>{{ product.costRubString }}</span>\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"text-xs text-tui-text-02\"\n >{{ product.costString }}</span\n >\n </p>\n <sc-price-warehouse-stock\n [product]=\"product\"\n [fromMain]=\"false\"\n ></sc-price-warehouse-stock>\n </div>\n\n <div class=\"w-40 text-xs text-tui-text-02\">\n <ng-container *ngIf=\"orderItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ orderItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"orderItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ orderItem.length }} \u043C.</p>\n </ng-template>\n <p *ngIf=\"orderItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ orderItem.width }} \u043C.</p>\n <p class=\"text-sm text-tui-base-09\">\n \u0421\u0443\u043C\u043C\u0430: <span class=\"whitespace-nowrap font-bold\"> {{ orderItem.getCostRubStr() }} </span>\n </p>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-template #skeleton>\n <div class=\"flex w-full gap-2\">\n <div class=\"size-20 rounded-xl bg-tui-base-02\"></div>\n <div class=\"flex grow flex-col gap-2.5 bg-white\">\n <div class=\"h-4 w-full rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-4/5 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "directive", type: i4.TuiModeDirective, selector: "[tuiMode]", inputs: ["tuiMode"] }, { kind: "component", type: i7$1.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { kind: "directive", type: i7$1.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }, { kind: "component", type: ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint", "fromMain"] }, { kind: "directive", type: i2$1.PolymorpheusOutletDirective, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4632
4603
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScOrderItemMobileComponent, decorators: [{
4633
4604
  type: Component,
4634
4605
  args: [{ selector: 'sc-order-item-mobile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative flex flex-wrap gap-x-4 gap-y-2 rounded-xl border border-tui-base-04 bg-white p-4 shadow-sc-2\">\n <ng-container *ngIf=\"orderItem && product; else skeleton\">\n <button\n tuiIconButton\n (click)=\"clickActionsEvent.emit()\"\n size=\"m\"\n icon=\"scIconVerticalThreeDots\"\n appearance=\"float\"\n tuiMode=\"onLight\"\n class=\"!absolute right-0 top-0 !hidden\"\n ></button>\n <div class=\"flex grow gap-2\">\n <div class=\"flex size-20 shrink-0 items-center justify-center overflow-hidden\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage()\"\n [alt]=\"product.name\"\n [class.p-5]=\"!product.images?.length\"\n class=\"cursor-pointer\"\n />\n </div>\n\n <div class=\"flex grow flex-wrap gap-x-8 self-center\">\n <div class=\"flex grow basis-min-content flex-col\">\n <a\n tuiLink\n (click)=\"clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n <div class=\"flex flex-col gap-y-0.5 text-xs text-tui-text-02\">\n <div class=\"flex flex-wrap gap-y-0.5\">\n <p class=\"w-40\">\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n <p\n class=\"w-40\"\n *ngIf=\"product.pack\"\n >\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n </p>\n </div>\n <a\n tuiLink\n *ngIf=\"orderItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a\n >\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItem.specificationImgUrl\"\n />\n <button\n icon=\"tuiIconClose\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n </div>\n <div class=\"flex flex-wrap content-center\">\n <div class=\"flex w-40 flex-col gap-x-8 gap-y-0.5\">\n <span\n *ngIf=\"product.discount\"\n class=\"flex items-center text-xs text-tui-text-02\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <p class=\"flex flex-col items-baseline gap-x-2 font-bold\">\n <span>{{ product.costRubString }}</span>\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"text-xs text-tui-text-02\"\n >{{ product.costString }}</span\n >\n </p>\n <sc-price-warehouse-stock\n [product]=\"product\"\n [fromMain]=\"false\"\n ></sc-price-warehouse-stock>\n </div>\n\n <div class=\"w-40 text-xs text-tui-text-02\">\n <ng-container *ngIf=\"orderItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ orderItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"orderItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ orderItem.length }} \u043C.</p>\n </ng-template>\n <p *ngIf=\"orderItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ orderItem.width }} \u043C.</p>\n <p class=\"text-sm text-tui-base-09\">\n \u0421\u0443\u043C\u043C\u0430: <span class=\"whitespace-nowrap font-bold\"> {{ orderItem.getCostRubStr() }} </span>\n </p>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-template #skeleton>\n <div class=\"flex w-full gap-2\">\n <div class=\"size-20 rounded-xl bg-tui-base-02\"></div>\n <div class=\"flex grow flex-col gap-2.5 bg-white\">\n <div class=\"h-4 w-full rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-4/5 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n </ng-template>\n</div>\n" }]
4635
4606
  }], ctorParameters: function () {
4636
- return [{ type: UnitsHelper }, { type: i7$1.TuiPreviewDialogService, decorators: [{
4607
+ return [{ type: ScUnitsHelper }, { type: i7$1.TuiPreviewDialogService, decorators: [{
4637
4608
  type: Inject,
4638
4609
  args: [TuiPreviewDialogService]
4639
4610
  }] }, { type: undefined, decorators: [{
@@ -4858,7 +4829,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
4858
4829
  type: Component,
4859
4830
  args: [{ selector: 'sc-update-user-info-dialog', providers: [SC_USER_PROVIDERS], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\" *ngIf=\"user$ | async as user\" (ngSubmit)=\"onSubmit.next()\" class=\"flex flex-col gap-4\">\n <label [tuiLabel]=\"user.isOrg ? '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' : '\u0424.\u0418.\u041E.'\">\n <tui-input formControlName=\"name\">\n {{ user.isOrg ? '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' : '\u0424.\u0418.\u041E.' }}\n <ng-container *ngIf=\"user.isOrg\">\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.organization\"></sc-suggestion-field>\n </ng-container>\n </tui-input>\n <tui-error formControlName=\"name\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <sc-verification-phone-check-form\n *tuiLet=\"user.contacts.phone.value === form.value.phone as phoneIsChange\"\n [showCodeFields]=\"!phoneIsChange\"\n [shouldBeBusy]=\"phoneIsChange\"\n class=\"w-full\"\n ></sc-verification-phone-check-form>\n <label tuiLabel=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\" class=\"w-full\">\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field *tuiDataList [type]=\"suggestionType.email\"></sc-suggestion-field>\n </tui-input>\n <tui-error formControlName=\"email\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label>\n <sc-addresses-selection-field></sc-addresses-selection-field>\n <tui-checkbox-labeled formControlName=\"getNews\" class=\"w-full\"> \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435. </tui-checkbox-labeled>\n <div class=\"flex gap-4 justify-center\">\n <button tuiButton (click)=\"context ? context.$implicit.complete() : cancelButtonClick.emit()\" type=\"button\" icon=\"tuiIconXLarge\" appearance=\"secondary\">\u041E\u0442\u043C\u0435\u043D\u0430</button>\n <button tuiButton tuiMode=\"onLight\" [disabled]=\"form.invalid\" [showLoader]=\"!!(loading$ | async)\" type=\"submit\" icon=\"scIconSave\">\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C</button>\n </div>\n</form>\n" }]
4860
4831
  }], ctorParameters: function () {
4861
- return [{ type: i10.Observable, decorators: [{
4832
+ return [{ type: i5.Observable, decorators: [{
4862
4833
  type: Inject,
4863
4834
  args: [SC_USER_INFO]
4864
4835
  }] }, { type: i1.ScUserService }, { type: undefined, decorators: [{
@@ -4975,7 +4946,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
4975
4946
  type: Component,
4976
4947
  args: [{ selector: 'sc-user-phone-approve-dialog', providers: [SC_USER_PROVIDERS], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"user$ | async as user\">\n <form [formGroup]=\"form\" *tuiLet=\"!!(loading$ | async) as loadingApproveCode\" (ngSubmit)=\"onSubmit.next()\" class=\"flex flex-col gap-3\">\n <sc-verification-phone-check-form\n [(haveCode)]=\"haveCode\"\n [shouldBeConfirmed]=\"false\"\n [showCodeFields]=\"!user.contacts.phone.isApproved\"\n [readOnly]=\"true\"\n class=\"w-full\"\n ></sc-verification-phone-check-form>\n <div *ngIf=\"user.contacts.phone.isApproved || haveCode\" class=\"flex gap-4 justify-center\">\n <button *ngIf=\"user.contacts.phone.isApproved && context\" tuiButton (click)=\"context.$implicit.complete()\" type=\"button\" appearance=\"secondary\">\u0417\u0430\u043A\u0440\u044B\u0442\u044C</button>\n <button *ngIf=\"haveCode\" tuiButton type=\"submit\" [showLoader]=\"loadingApproveCode\" [disabled]=\"form.invalid || loadingApproveCode\" icon=\"scIconLogIn\">\n \u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C\n </button>\n </div>\n </form>\n</ng-container>\n" }]
4977
4948
  }], ctorParameters: function () {
4978
- return [{ type: i1.ScVerificationService }, { type: i10.Observable, decorators: [{
4949
+ return [{ type: i1.ScVerificationService }, { type: i5.Observable, decorators: [{
4979
4950
  type: Inject,
4980
4951
  args: [SC_USER_INFO]
4981
4952
  }] }, { type: i1.ScUserService }, { type: undefined, decorators: [{
@@ -5192,7 +5163,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
5192
5163
  type: Component,
5193
5164
  args: [{ selector: 'sc-profile-accordions-content', providers: [SC_USER_PROVIDERS], animations: [tuiFadeIn], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *tuiLet=\"user$ | async as user\" class=\"flex flex-col gap-4\">\n <sc-accordion [showArrow]=\"false\" [showAddButton]=\"false\" [open]=\"true\">\n \u041E\u0431\u0449\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0435\n <ng-template scAccordionContent>\n <tui-loader [overlay]=\"true\" [showLoader]=\"user === null\">\n <div class=\"flex gap-2 pl-4\">\n <div *ngIf=\"user\" class=\"flex flex-col flex-grow gap-2\">\n <span class=\"font-medium\">{{ user.name }}</span>\n <div *ngIf=\"user.city && (getUserCity$(user.city) | async) as city\" class=\"flex items-center gap-1\">\n <tui-svg src=\"tuiIconMapPin\"></tui-svg>\n <div class=\"flex flex-wrap\">\n <span>\u0433. {{ city.name }}, </span>\n <span *ngIf=\"city.region\">{{ city.region.name }}</span>\n </div>\n </div>\n <div class=\"flex flex-wrap gap-2\">\n <a\n tuiLink\n tuiMode=\"onLight\"\n icon=\"tuiIconPhone\"\n iconAlign=\"left\"\n [pseudo]=\"true\"\n href=\"tel:{{ user.contacts.phone.value}}\"\n >{{ user.contacts.phone.value | tuiFormatPhone }}</a\n >\n <span *ngIf=\"!user.contacts.phone.isApproved\" class=\"text-tui-text-03\">\n (\u0422\u0435\u043B\u0435\u0444\u043E\u043D \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D. <button tuiLink [pseudo]=\"true\" (click)=\"approvePhoneClick.emit()\">\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C</button>)\n </span>\n </div>\n <div *tuiLet=\"!!(isSendApproveEmail$ | async) as isSendApproveEmail\" class=\"flex flex-wrap gap-x-2\">\n <a tuiLink tuiMode=\"onLight\" icon=\"tuiIconMail\" iconAlign=\"left\" [pseudo]=\"true\" href=\"mailto:{{ user.contacts.email.value }}\">\n {{ user.contacts.email.value }}\n </a>\n <span *ngIf=\"!isSendApproveEmail && !user.contacts.email.isApproved\" class=\"text-tui-text-03 inline-flex flex-wrap gap-1\">\n E-mail \u043D\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D.\n <tui-loader [showLoader]=\"!!(approveEmailLoading$ | async)\" [overlay]=\"true\">\n <button tuiLink [pseudo]=\"true\" (click)=\"onSendApproveEmail.next(user.contacts.email.value)\">\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C</button>\n </tui-loader>\n </span>\n <span *ngIf=\"isSendApproveEmail\" class=\"text-tui-success-fill\" @tuiFadeIn>\n \u041F\u0438\u0441\u044C\u043C\u043E \u0434\u043B\u044F \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u0443\u0441\u043F\u0435\u0448\u043D\u043E \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E. \u041F\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043F\u043E \u0441\u0441\u044B\u043B\u043A\u0435 \u0432 \u043F\u0438\u0441\u044C\u043C\u0435 \u0438 \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 \u044D\u0442\u0443 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443.\n </span>\n </div>\n <tui-loader [showLoader]=\"!!(getNewsLoading$ | async)\" [overlay]=\"true\">\n <tui-checkbox-labeled size=\"m\" class=\"w-full\" [formControl]=\"getNewsControl\" [ngModel]=\"user.getNews\">\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </tui-checkbox-labeled>\n </tui-loader>\n </div>\n\n <button tuiIconButton size=\"m\" type=\"button\" icon=\"tuiIconEdit3Large\" tuiMode=\"onLight\" appearance=\"flat\" (click)=\"editProfileClick.emit()\"></button>\n </div>\n </tui-loader>\n </ng-template>\n </sc-accordion>\n <sc-contragents-accordion\n (addContragentClick)=\"addContragentClick.emit()\"\n (deleteContragentClick)=\"deleteContragentClick.emit($event)\"\n (addContragentBankAccountClick)=\"addContragentBankAccountClick.emit($event)\"\n (deleteContragentBankAccountClick)=\"deleteContragentBankAccountClick.emit($event)\"\n (addContragentContactClick)=\"addContragentContactClick.emit($event)\"\n (deleteContragentContactClick)=\"deleteContragentContactClick.emit($event)\"\n ></sc-contragents-accordion>\n <sc-delivery-address-accordion\n (addDeliveryAddressClick)=\"addDeliveryAddressClick.emit()\"\n (deleteDeliveryAddressClick)=\"deleteDeliveryAddressClick.emit($event)\"\n (addDeliveryAddressContactClick)=\"addDeliveryAddressContactClick.emit($event)\"\n (deleteDeliveryAddressContactClick)=\"deleteDeliveryAddressContactClick.emit($event)\"\n ></sc-delivery-address-accordion>\n <sc-contacts-accordion *ngIf=\"user\" [contacts$]=\"userContacts$\" (addContactClick)=\"addUserContactClick.emit(user.id)\" (deleteButtonClick)=\"deleteUserContactClick.emit($event)\"></sc-contacts-accordion>\n <sc-accordion #passwordAccordion [showArrow]=\"false\" [showAddButton]=\"false\">\n \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044C\n <ng-template scAccordionContent>\n <sc-reset-user-password (successResetPassword)=\"passwordAccordion.close()\"></sc-reset-user-password>\n </ng-template>\n </sc-accordion>\n</div>\n" }]
5194
5165
  }], ctorParameters: function () {
5195
- return [{ type: i10.Observable, decorators: [{
5166
+ return [{ type: i5.Observable, decorators: [{
5196
5167
  type: Inject,
5197
5168
  args: [SC_USER_INFO]
5198
5169
  }] }, { type: i1.ScLocationsService }, { type: i1.ScUserService }, { type: i1.ScVerificationService }];
@@ -5301,5 +5272,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
5301
5272
  * Generated bundle index. Do not edit.
5302
5273
  */
5303
5274
 
5304
- 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, ScAddContactDialogComponent, ScAddContragentBankAccountsDialogComponent, ScAddContragentDialogComponent, ScAddDeliveryAddressDialogComponent, ScAddressesSelectionFieldComponent, ScAuthModule, ScBannerComponent, ScBannerModule, ScCarouselItemHiddenDirective, ScCarouselItemHiddenModule, ScCartItemMobileComponent, ScCartModule, ScCatalogModule, ScCategoriesListComponent, ScCategoryCardComponent, ScContactsAccordionComponent, ScContactsModule, ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScContragentsModule, ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScDeliveryAddressModule, ScFavoriteBtnComponent, ScFormFieldsModule, ScInputQuantityComponent, ScNewContactFormComponent, ScNewContragentBankAccountsFormComponent, ScNewContragentFormComponent, ScNewsCardComponent, ScNewsCardSkeletonComponent, ScNewsModule, ScNextInputFocusDirective, ScNextInputFocusModule, ScOrderItemMobileComponent, ScOrderModule, ScPaymentStatusComponent, ScPriceCardComponent, ScPriceHistoryComponent, ScPriceListPaginationComponent, ScPriceWarehouseStockComponent, ScProfileAccordionsContentComponent, ScProfileModule, ScResetUserPasswordComponent, ScShareButtonComponent, ScShareButtonModule, ScSignInFormByEmailComponent, ScSignInFormByPhoneComponent, ScSignInFormComponent, ScSignUpFormComponent, ScSuggestionFieldComponent, ScUpdateUserInfoDialogComponent, ScUserManagersComponent, ScUserModule, ScUserPhoneApproveDialogComponent, ScVerificationModule, ScVerificationPhoneCheckFormComponent, TreeDirective, TreeIconService, TreeLoaderService, TreeTopDirective, nextPageClickEvent, paginationParams$, scBicValidator, scClientUiIconsName, scCorrespondentAccountValidator, scPasswordConfirmMatchingValidator, scUserFactory, stepValidator };
5275
+ export { AbstractScPriceCard, 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, ScAddContactDialogComponent, ScAddContragentBankAccountsDialogComponent, ScAddContragentDialogComponent, ScAddDeliveryAddressDialogComponent, ScAddressesSelectionFieldComponent, ScAuthModule, ScBannerComponent, ScBannerModule, ScCartItemMobileComponent, ScCartModule, ScCatalogModule, ScCategoriesListComponent, ScCategoryCardComponent, ScContactsAccordionComponent, ScContactsModule, ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScContragentsModule, ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScDeliveryAddressModule, ScFavoriteBtnComponent, ScFormFieldsModule, ScInputQuantityComponent, ScNewContactFormComponent, ScNewContragentBankAccountsFormComponent, ScNewContragentFormComponent, ScNewsCardComponent, ScNewsCardSkeletonComponent, ScNewsModule, ScNextInputFocusDirective, ScNextInputFocusModule, ScOrderItemMobileComponent, ScOrderModule, ScPaymentStatusComponent, ScPriceCardComponent, ScPriceHistoryComponent, ScPriceListPaginationComponent, ScPriceWarehouseStockComponent, ScProfileAccordionsContentComponent, ScProfileModule, ScResetUserPasswordComponent, ScShareButtonComponent, ScShareButtonModule, ScSignInFormByEmailComponent, ScSignInFormByPhoneComponent, ScSignInFormComponent, ScSignUpFormComponent, ScSuggestionFieldComponent, ScUpdateUserInfoDialogComponent, ScUserManagersComponent, ScUserModule, ScUserPhoneApproveDialogComponent, ScVerificationModule, ScVerificationPhoneCheckFormComponent, TreeDirective, TreeIconService, TreeLoaderService, TreeTopDirective, nextPageClickEvent, paginationParams$, scBicValidator, scClientUiIconsName, scCorrespondentAccountValidator, scPasswordConfirmMatchingValidator, scUserFactory, stepValidator };
5305
5276
  //# sourceMappingURL=snabcentr-client-ui.mjs.map