@snabcentr/client-ui 3.10.0 → 3.11.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"snabcentr-client-ui.mjs","sources":["../../../projects/client-ui/auth/enums/auth-method.ts","../../../projects/client-ui/masks/sc-account-number-mask.ts","../../../projects/client-ui/masks/sc-bic-mask.ts","../../../projects/client-ui/masks/sc-correspondent-account-mask.ts","../../../projects/client-ui/masks/sc-inn-mask.ts","../../../projects/client-ui/masks/sc-kpp-mask.ts","../../../projects/client-ui/masks/sc-okpo-mask.ts","../../../projects/client-ui/masks/sc-phone-verification-code-mask.ts","../../../projects/client-ui/verification/verification-phone-check-form/sc-verification-phone-check-form.component.ts","../../../projects/client-ui/verification/verification-phone-check-form/sc-verification-phone-check-form.component.html","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.ts","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.html","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.ts","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.html","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form.component.ts","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form.component.html","../../../projects/client-ui/validators/sc-bic-validator.ts","../../../projects/client-ui/validators/sc-correspondent-account-validator.ts","../../../projects/client-ui/validators/sc-password-confirm-matching-validator.ts","../../../projects/client-ui/validators/step-validator.ts","../../../projects/client-ui/form-fields/addresses-selection-field/sc-addresses-selection-field.component.ts","../../../projects/client-ui/form-fields/addresses-selection-field/sc-addresses-selection-field.component.html","../../../projects/client-ui/form-fields/suggestion-field/sc-suggestion-field.component.ts","../../../projects/client-ui/form-fields/suggestion-field/sc-suggestion-field.component.html","../../../projects/client-ui/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.ts","../../../projects/client-ui/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.html","../../../projects/client-ui/contragents/new-contragent-form/sc-new-contragent-form.component.ts","../../../projects/client-ui/contragents/new-contragent-form/sc-new-contragent-form.component.html","../../../projects/client-ui/contacts/new-contact-form/sc-new-contact-form.component.ts","../../../projects/client-ui/contacts/new-contact-form/sc-new-contact-form.component.html","../../../projects/client-ui/auth/sign-up-form/sc-sign-up-form.component.ts","../../../projects/client-ui/auth/sign-up-form/sc-sign-up-form.component.html","../../../projects/client-ui/accordion/sc-accordion-content.directive.ts","../../../projects/client-ui/accordion/sc-accordion.component.ts","../../../projects/client-ui/accordion/sc-accordion.component.html","../../../projects/client-ui/accordion/sc-accordion.module.ts","../../../projects/client-ui/pipes/sc-formatted-phone.ts","../../../projects/client-ui/directives/links/sc-email-link.directive.ts","../../../projects/client-ui/directives/links/sc-tel-link.directive.ts","../../../projects/client-ui/directives/links/sc-links.ts","../../../projects/client-ui/form-fields/form-fields.module.ts","../../../projects/client-ui/contacts/add-contact-dialog/sc-add-contact-dialog.component.ts","../../../projects/client-ui/contacts/add-contact-dialog/sc-add-contact-dialog.component.html","../../../projects/client-ui/contacts/contacts-accordion/sc-contacts-accordion.component.ts","../../../projects/client-ui/contacts/contacts-accordion/sc-contacts-accordion.component.html","../../../projects/client-ui/contacts/sc-contacts.module.ts","../../../projects/client-ui/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.ts","../../../projects/client-ui/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.html","../../../projects/client-ui/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.ts","../../../projects/client-ui/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.html","../../../projects/client-ui/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.ts","../../../projects/client-ui/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.html","../../../projects/client-ui/contragents/contragents-accordion/sc-contragents-accordion.component.ts","../../../projects/client-ui/contragents/contragents-accordion/sc-contragents-accordion.component.html","../../../projects/client-ui/contragents/sc-contragents.module.ts","../../../projects/client-ui/verification/sc-verification.module.ts","../../../projects/client-ui/auth/sc-auth.module.ts","../../../projects/client-ui/helpers/sc-px-converter.ts","../../../projects/client-ui/banner/sc-banner.component.ts","../../../projects/client-ui/banner/sc-banner.component.html","../../../projects/client-ui/banner/sc-banner.module.ts","../../../projects/client-ui/catalog/sc-favorite-button/sc-favorite-button.component.ts","../../../projects/client-ui/catalog/sc-favorite-button/sc-favorite-button.component.html","../../../projects/client-ui/catalog/category-card/sc-category-card.component.ts","../../../projects/client-ui/catalog/category-card/sc-category-card.component.html","../../../projects/client-ui/catalog/input-quantity/sc-input-quantity.component.ts","../../../projects/client-ui/catalog/input-quantity/sc-input-quantity.component.html","../../../projects/client-ui/directives/next-input-focus/sc-next-input-focus.directive.ts","../../../projects/client-ui/directives/next-input-focus/sc-next-input-focus.module.ts","../../../projects/client-ui/directives/abstract-price-card/abstract-sc-price-card.directive.ts","../../../projects/client-ui/qrcode/qrcode-dialog/sc-qrcode-dialog.component.ts","../../../projects/client-ui/qrcode/qrcode-dialog/sc-qrcode-dialog.component.html","../../../projects/client-ui/qrcode/sc-qrcode.module.ts","../../../projects/client-ui/directives/terminal-link/sc-terminal-link.directive.ts","../../../projects/client-ui/catalog/hover-image-carousel/hover-image-carousel.component.ts","../../../projects/client-ui/catalog/hover-image-carousel/hover-image-carousel.component.html","../../../projects/client-ui/catalog/cost-with-discount/cost-with-discount.component.ts","../../../projects/client-ui/catalog/cost-with-discount/cost-with-discount.component.html","../../../projects/client-ui/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.ts","../../../projects/client-ui/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.html","../../../projects/client-ui/catalog/price-card/sc-price-card.component.ts","../../../projects/client-ui/catalog/price-card/sc-price-card.component.html","../../../projects/client-ui/catalog/price-card-inline/sc-price-card-inline.component.ts","../../../projects/client-ui/catalog/price-card-inline/sc-price-card-inline.component.html","../../../projects/client-ui/catalog/price-history/sc-price-history.component.ts","../../../projects/client-ui/catalog/price-history/sc-price-history.component.html","../../../projects/client-ui/catalog/price-list-pagination/sc-price-list-pagination.component.ts","../../../projects/client-ui/catalog/price-list-pagination/sc-price-list-pagination.component.html","../../../projects/client-ui/catalog/sc-catalog.module.ts","../../../projects/client-ui/cart/cart-item-mobile/sc-cart-item-mobile.component.ts","../../../projects/client-ui/cart/cart-item-mobile/sc-cart-item-mobile.component.html","../../../projects/client-ui/cart/sc-cart.module.ts","../../../projects/client-ui/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.ts","../../../projects/client-ui/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.html","../../../projects/client-ui/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.ts","../../../projects/client-ui/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.html","../../../projects/client-ui/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.ts","../../../projects/client-ui/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.html","../../../projects/client-ui/delivery-address/sc-delivery-address.module.ts","../../../projects/client-ui/dialogs/sc-resource-preview/sc-resource-preview.component.ts","../../../projects/client-ui/dialogs/sc-resource-preview/sc-resource-preview.component.html","../../../projects/client-ui/error-handler/consts/error-change-handler.providers.ts","../../../projects/client-ui/error-handler/error-block-status/error-block-status.component.ts","../../../projects/client-ui/error-handler/error-block-status/error-block-status.component.html","../../../projects/client-ui/error-handler/sc-error-handler.component.ts","../../../projects/client-ui/error-handler/sc-error-handler.component.html","../../../projects/client-ui/files/services/tree-icon.service.ts","../../../projects/client-ui/files/services/tree-loader.service.ts","../../../projects/client-ui/files/directives/tree.directive.ts","../../../projects/client-ui/files/file-tree-item/file-tree-item.component.ts","../../../projects/client-ui/files/file-tree-item/file-tree-item.component.html","../../../projects/client-ui/files/directives/tree-top.directive.ts","../../../projects/client-ui/files/files-and-documents/files-and-documents.component.ts","../../../projects/client-ui/files/files-and-documents/files-and-documents.component.html","../../../projects/client-ui/files/files-and-documents.module.ts","../../../projects/client-ui/icons/sc-client-ui-icons-name.ts","../../../projects/client-ui/brands-list/sc-brands-list.component.ts","../../../projects/client-ui/brands-list/sc-brands-list.component.html","../../../projects/client-ui/brands-list/sc-brands-list.module.ts","../../../projects/client-ui/news/news-card/sc-news-card.component.ts","../../../projects/client-ui/news/news-card/sc-news-card.component.html","../../../projects/client-ui/news/news-card-skeleton/sc-news-card-skeleton.component.ts","../../../projects/client-ui/news/news-card-skeleton/sc-news-card-skeleton.component.html","../../../projects/client-ui/share-button/sc-share-button.component.ts","../../../projects/client-ui/share-button/sc-share-button.component.html","../../../projects/client-ui/share-button/sc-share-button.module.ts","../../../projects/client-ui/news/sc-news.module.ts","../../../projects/client-ui/order/order-item-mobile/sc-order-item-mobile.component.ts","../../../projects/client-ui/order/order-item-mobile/sc-order-item-mobile.component.html","../../../projects/client-ui/order/sc-payment-status/sc-payment-status.component.ts","../../../projects/client-ui/order/sc-payment-status/sc-payment-status.component.html","../../../projects/client-ui/order/sc-order.module.ts","../../../projects/client-ui/providers/sc-max-files-in-form-input.ts","../../../projects/client-ui/providers/sc-qa-info.ts","../../../projects/client-ui/providers/sc-user-providers.ts","../../../projects/client-ui/pages/questions-and-answers/questions-and-answers.component.ts","../../../projects/client-ui/pages/questions-and-answers/questions-and-answers.component.html","../../../projects/client-ui/samples/preview-sample/sc-preview-sample.component.ts","../../../projects/client-ui/samples/preview-sample/sc-preview-sample.component.html","../../../projects/client-ui/samples/sc-sample.module.ts","../../../projects/client-ui/feedback/feedback-form/sc-feedback-form.component.ts","../../../projects/client-ui/feedback/feedback-form/sc-feedback-form.component.html","../../../projects/client-ui/feedback/gratitude/sc-gratitude.component.ts","../../../projects/client-ui/feedback/gratitude/sc-gratitude.component.html","../../../projects/client-ui/user/reset-user-password/sc-reset-user-password.component.ts","../../../projects/client-ui/user/reset-user-password/sc-reset-user-password.component.html","../../../projects/client-ui/user/update-user-info-dialog/sc-update-user-info-dialog.component.ts","../../../projects/client-ui/user/update-user-info-dialog/sc-update-user-info-dialog.component.html","../../../projects/client-ui/user/user-managers/sc-user-managers.component.ts","../../../projects/client-ui/user/user-managers/sc-user-managers.component.html","../../../projects/client-ui/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.ts","../../../projects/client-ui/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.html","../../../projects/client-ui/user/sc-user.module.ts","../../../projects/client-ui/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.ts","../../../projects/client-ui/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.html","../../../projects/client-ui/profile/sc-profile.module.ts","../../../projects/client-ui/public-api.ts","../../../projects/client-ui/snabcentr-client-ui.ts"],"sourcesContent":["/**\n * Перечисление типов аутентификации.\n */\nexport enum AuthMethod {\n /**\n * Аутентификация по номеру телефона и коду подтверждения.\n */\n byPhone = 'by_phone',\n\n /**\n * Аутентификация по логину и паролю.\n */\n byEmail = 'by_email',\n}\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода номера счета.\n */\nexport const scAccountNumberMask = {\n mask: /^\\d{0,20}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода БИК.\n */\nexport const scBicMask = {\n mask: /^\\d{0,9}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода номера корреспондентского счета.\n */\nexport const scCorrespondentAccount = {\n mask: /^\\d{0,20}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода ИНН индивидуального предпринимателя.\n */\nexport const scEntrepreneurInnMask = {\n mask: /^\\d{0,12}$/,\n} as MaskitoOptions;\n\n/**\n * Маска поля ввода ИНН юридического лица.\n */\nexport const scLegalInnMask = {\n mask: /^\\d{0,10}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода КПП.\n */\nexport const scKppMask = {\n mask: /^\\d{0,9}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода ОКПО индивидуального предпринимателя.\n */\nexport const scEntrepreneurOkpoMask = {\n mask: /^\\d{0,10}$/,\n} as MaskitoOptions;\n\n/**\n * Маска поля ввода ОКПО юридического лица.\n */\nexport const scLegalOkpoMask = {\n mask: /^\\d{0,8}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода кода подтверждения телефона.\n */\nexport const scPhoneVerificationCodeMask: MaskitoOptions = {\n mask: /^\\d{0,6}$/,\n} as MaskitoOptions;\n","/* eslint-disable no-underscore-dangle,lodash/prefer-constant */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup, FormGroupDirective } from '@angular/forms';\nimport { MaskitoOptions } from '@maskito/core';\nimport { ScVerificationService } from '@snabcentr/client-core';\nimport { tuiControlValue } from '@taiga-ui/cdk';\nimport { catchError, distinctUntilChanged, endWith, filter, finalize, map, Observable, of, scan, share, startWith, Subject, switchMap, takeWhile, tap, timer } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { scPhoneVerificationCodeMask } from '../../masks';\n\n/**\n * Компонент формы проверки телефона и получения кода подтверждения.\n */\n@Component({\n selector: 'sc-verification-phone-check-form',\n templateUrl: './sc-verification-phone-check-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScVerificationPhoneCheckFormComponent implements OnInit {\n /**\n * Признак, следует ли отображать функционал кода подтверждения.\n */\n @Input()\n public set showCodeFields(showCodeFields: boolean) {\n this._showCodeFields = showCodeFields;\n this.form.controls.verificationCode[showCodeFields ? 'enable' : 'disable']();\n }\n\n /**\n * Признак, следует ли отображать функционал кода подтверждения.\n */\n public get showCodeFields(): boolean {\n return this._showCodeFields;\n }\n\n /**\n * Признак, что поле ввода телефона только для чтения.\n */\n @Input()\n public readOnly: boolean = false;\n\n /**\n * Признак, следует ли телефону быть в системе. От этого признака зависит в каких случаях выдавать ошибку при проверки занятости телефона.\n */\n @Input()\n public shouldBeBusy: boolean = true;\n\n /**\n * Признак, следует ли проверять подтверждён ли телефона в системе. При `true` будет вызывать ошибку при наличие телефона в системе без подтверждения.\n */\n @Input()\n public shouldBeConfirmed?: boolean = undefined;\n\n /**\n * Наличие кода подтверждения у пользователя.\n */\n @Input()\n public haveCode: boolean = false;\n\n /**\n * Событие для обратной привязки наличия кода подтверждения\n */\n @Output()\n public haveCodeChange = new EventEmitter<boolean>();\n\n /**\n * {@link Observable} запроса проверки номера телефона.\n */\n public phoneCheck$?: Observable<boolean | null>;\n\n /**\n * {@link Subject} события отправки кода подтверждения.\n */\n public readonly onSendCode: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса данных получения кода подтверждения.\n */\n public readonly loadingApproveCode$: Observable<boolean> = this.onSendCode.pipe(\n map(() => this.phoneControl.value),\n filter((value): value is string => this.phoneControl.valid),\n switchMap((value) =>\n this.verificationService.sendPhoneApproveCode(value).pipe(\n tap(() => {\n this.reloadTimer$.next(60);\n }),\n map(() => false),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const errorResponse = error.error as ApiErrorResponse;\n\n const regex = /(\\d{2}):\\d{2}/;\n const match = regex.exec(errorResponse.message);\n\n if (match && match.length > 1) {\n const timeParts = match[0].split(':');\n const seconds = Number.parseInt(timeParts[1], 10);\n\n this.reloadTimer$.next(seconds);\n } else {\n this.phoneControl.setErrors({ serverResponse: errorResponse.errors?.['phone'] ?? [errorResponse.message] });\n }\n }\n\n return of(false);\n }),\n finalize(() => {\n this.setHaveCode(true);\n }),\n startWith(true)\n )\n ),\n startWith(false),\n share()\n );\n\n /**\n * Маска поля ввода кода для подтверждения.\n */\n public readonly verificationCodeMask: MaskitoOptions = scPhoneVerificationCodeMask;\n\n /**\n * {@link Subject} события запуска/остановки таймера.\n */\n public readonly reloadTimer$: Subject<number> = new Subject<number>();\n\n /**\n * {@link Observable} Таймера.\n *\n * TODO: Вынести таймер в отдельную директиву TASK:[#9260].\n */\n public readonly timer$: Observable<string | null> = this.reloadTimer$.pipe(\n switchMap((sec) =>\n timer(0, 1000).pipe(\n scan((total) => -1 + total, sec),\n takeWhile((total) => total >= 0),\n map((total) => {\n const minutes = Math.floor(total / 60);\n const seconds = total % 60;\n\n return `${Math.round(minutes).toString().padStart(2, '0')}:${Math.round(seconds).toString().padStart(2, '0')}`;\n }),\n endWith(null),\n startWith(null),\n distinctUntilChanged()\n )\n )\n );\n\n /**\n * Признак, следует ли отображать функционал кода подтверждения.\n */\n private _showCodeFields: boolean = true;\n\n /**\n * Инициализирует экземпляр класса {@link ScVerificationPhoneCheckFormComponent}.\n *\n * @param verificationService Сервис верификации.\n * @param formGroupDirective Директива c `FormGroup` из DOM.\n */\n public constructor(\n private readonly verificationService: ScVerificationService,\n @Inject(FormGroupDirective)\n private readonly formGroupDirective?: FormGroupDirective\n ) {}\n\n /**\n * Группа полей ввода для формы «Вход на сайт».\n */\n public get form(): FormGroup<{\n phone: FormControl<string | null>;\n verificationCode: FormControl<string | null>;\n }> {\n return this.formGroupDirective?.form as FormGroup<{\n phone: FormControl<string | null>;\n verificationCode: FormControl<string | null>;\n }>;\n }\n\n /**\n * Поле ввода 'Номер телефона'.\n */\n public get phoneControl(): FormControl<string | null> {\n return this.form.controls.phone;\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.phoneCheck$ = tuiControlValue<string | null>(this.phoneControl).pipe(\n tap(() => {\n this.reloadTimer$.next(0);\n }),\n switchMap((value) => {\n if (this.phoneControl.valid && !!value) {\n return this.verificationService.getPhoneCheck$(value).pipe(\n map((result) => {\n if (this.shouldBeBusy !== result.isBusy) {\n this.phoneControl.setErrors({\n serverResponse: [\n result.isBusy ? 'Пользователь с таким номером телефона уже существует' : 'Пользователя с таким номером телефона не существует',\n ],\n });\n this.phoneControl.markAsTouched();\n\n return false;\n }\n\n if (this.shouldBeConfirmed !== undefined && this.shouldBeConfirmed !== result.isConfirmed) {\n this.phoneControl.setErrors({\n serverResponse: [\n result.isConfirmed\n ? 'Телефон уже подтверждён'\n : 'Номер телефона не подтверждён или вход по нему невозможен. Обратитесь к вашему персональному менеджеру или войдите с использованием e-mail и пароля.',\n ],\n });\n this.phoneControl.markAsTouched();\n\n return false;\n }\n\n return true;\n }),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const errorResponse = error.error as ApiErrorResponse;\n this.phoneControl.setErrors({ serverResponse: errorResponse.errors?.['phone'] ?? [errorResponse.message] });\n }\n\n return of(false);\n }),\n startWith(null)\n );\n }\n\n this.setHaveCode(false);\n\n return of(false);\n }),\n share()\n );\n\n this.setHaveCode(false);\n }\n\n /**\n * Устанавливает состояние наличия кода подтверждения у пользователя.\n *\n * @param haveCode Признак того есть ли код подтверждения или нет.\n */\n public setHaveCode(haveCode: boolean): void {\n this.haveCode = haveCode;\n this.haveCodeChange.emit(haveCode);\n }\n}\n","<form\n [formGroup]=\"form\"\n *tuiLet=\"loadingApproveCode$ | async as loadingApproveCode\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel\n >Номер телефона\n <tui-input-phone\n formControlName=\"phone\"\n [readOnly]=\"readOnly\"\n [tuiTextfieldCustomContent]=\"checkingPhone\"\n >\n Номер телефона\n <input\n tuiTextfieldLegacy\n autocomplete=\"phone\"\n />\n </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <ng-container *ngIf=\"showCodeFields && form.enabled\">\n <label\n *ngIf=\"loadingApproveCode === false && haveCode\"\n tuiLabel\n >Код из СМС\n <tui-input formControlName=\"verificationCode\">\n Код из СМС\n <input\n tuiTextfieldLegacy\n [maskito]=\"verificationCodeMask\"\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"verificationCode\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <div\n *tuiLet=\"!!loadingApproveCode as loadingApproveCode\"\n class=\"flex justify-center gap-4\"\n >\n <button\n *ngIf=\"!haveCode\"\n tuiButton\n (click)=\"onSendCode.next()\"\n [disabled]=\"loadingApproveCode || !!!(phoneCheck$ | async) || phoneControl.invalid\"\n [loading]=\"loadingApproveCode\"\n iconStart=\"@tui.sc.send\"\n >\n Получить код\n </button>\n <button\n *ngIf=\"!loadingApproveCode && !haveCode\"\n tuiLink\n [pseudo]=\"true\"\n [disabled]=\"!!!(phoneCheck$ | async) || phoneControl.invalid\"\n (click)=\"setHaveCode(true)\"\n >\n У меня есть код\n </button>\n\n <ng-container *tuiLet=\"timer$ | async as timer\">\n <tui-loader\n *ngIf=\"haveCode\"\n [showLoader]=\"loadingApproveCode\"\n >\n <button\n tuiLink\n [pseudo]=\"true\"\n [disabled]=\"loadingApproveCode || timer\"\n (click)=\"onSendCode.next()\"\n >\n Повторно отправить код\n <ng-container\n *ngIf=\"timer\"\n class=\"!text-tui-base-08\"\n >(через {{ timer }})</ng-container\n >\n </button>\n </tui-loader>\n </ng-container>\n </div>\n </ng-container>\n</form>\n\n<ng-template #checkingPhone>\n <tui-loader\n *ngIf=\"!!!(phoneCheck$ | async) && phoneControl.valid\"\n class=\"size-4\"\n >\n </tui-loader>\n</ng-template>\n","/* eslint-disable no-restricted-syntax,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { IAuthToken, IPhoneLogin, ScAuthService } from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../interfaces/api-error-response';\n\n/**\n * Компонент аутентификации по номеру телефона и коду подтверждения.\n */\n@Component({\n selector: 'sc-sign-in-form-by-phone',\n templateUrl: './sc-sign-in-form-by-phone.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSignInFormByPhoneComponent {\n /**\n * Наличие кода подтверждения у пользователя.\n */\n public haveCode: boolean = false;\n\n /**\n * Группа полей ввода для формы «Вход на сайт».\n */\n public readonly form = new FormGroup({\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n verificationCode: new FormControl<string | null>(null, [Validators.required, Validators.minLength(6)]),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса данных аутентификации.\n */\n private readonly request$: Observable<IAuthToken | null> = this.onSubmit.pipe(\n map(() => this.form.value),\n filter((value): value is IPhoneLogin => this.form.valid),\n switchMap((value) =>\n this.authService.getSignIn$(value).pipe(\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n }\n\n return of({} as IAuthToken);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по номеру телефона.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScSignInFormByPhoneComponent}.\n *\n * @param authService Сервис аутентификации.\n */\n public constructor(private readonly authService: ScAuthService) {}\n}\n","<form\n [formGroup]=\"form\"\n *tuiLet=\"!!(loading$ | async) as loading\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"mb-4 flex flex-col items-center gap-4\"\n>\n <sc-verification-phone-check-form\n [(haveCode)]=\"haveCode\"\n [shouldBeBusy]=\"true\"\n [shouldBeConfirmed]=\"true\"\n class=\"w-full\"\n ></sc-verification-phone-check-form>\n <button\n *ngIf=\"haveCode\"\n tuiButton\n type=\"submit\"\n [loading]=\"loading\"\n [disabled]=\"form.invalid || loading\"\n iconStart=\"@tui.sc.circle-arrow-in-right\"\n >\n Войти\n </button>\n</form>\n","/* eslint-disable no-restricted-syntax,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { IAuthToken, ILogin, ScAuthService } from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../interfaces/api-error-response';\n\n/**\n * Компонент аутентификации по адресу электронной почты и паролю.\n */\n@Component({\n selector: 'sc-sign-in-form-by-email',\n templateUrl: './sc-sign-in-form-by-email.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSignInFormByEmailComponent {\n /**\n * Группа полей ввода для формы «Вход на сайт».\n */\n public readonly formByEmail: FormGroup = new FormGroup({\n login: new FormControl<string | null>(null, [Validators.required, Validators.email]),\n password: new FormControl<string | null>(null, Validators.required),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса данных аутентификации.\n */\n private readonly emailRequest$: Observable<IAuthToken | null> = this.onSubmit.pipe(\n filter(() => this.formByEmail.valid),\n map(() => this.formByEmail.value as ILogin),\n switchMap((value) =>\n this.authService.getSignIn$(value).pipe(\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.formByEmail.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.formByEmail.setErrors({ serverResponse: [message] });\n }\n }\n\n return of({} as IAuthToken);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по email.\n */\n public readonly loadingEmailAuth$: Observable<boolean> = this.emailRequest$.pipe(map(tuiIsFalsy));\n\n /**\n * Сигнал нажатия на кнопку \"Забыли пароль\".\n */\n @Output() public readonly forgotPassword: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Инициализирует экземпляр класса {@link ScSignInFormByEmailComponent}.\n *\n * @param authService Сервис аутентификации.\n */\n public constructor(private readonly authService: ScAuthService) {}\n}\n","<form\n [formGroup]=\"formByEmail\"\n (ngSubmit)=\"onSubmit.next()\"\n>\n <div class=\"mb-8 flex flex-col gap-4\">\n <label tuiLabel\n >Адрес электронной почты\n <tui-input formControlName=\"login\">\n Адрес электронной почты\n <input\n tuiTextfieldLegacy\n autocomplete=\"email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"login\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\n >Пароль\n <tui-input-password formControlName=\"password\">\n Пароль\n <input\n tuiTextfieldLegacy\n autocomplete=\"current-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <tui-error [error]=\"[] | tuiFieldError | async\"></tui-error>\n </div>\n <div class=\"mb-4 flex flex-col items-center gap-4\">\n <a\n tuiLink\n [pseudo]=\"true\"\n (click)=\"forgotPassword.emit()\"\n class=\"text-base\"\n >Забыли пароль?</a\n >\n <button\n tuiButton\n type=\"submit\"\n [loading]=\"!!(loadingEmailAuth$ | async)\"\n [disabled]=\"formByEmail.invalid || !!(loadingEmailAuth$ | async)\"\n iconStart=\"@tui.sc.circle-arrow-in-right\"\n >\n Войти\n </button>\n </div>\n</form>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ScAuthService, ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';\nimport { filter, Observable } from 'rxjs';\n\nimport { AuthMethod } from '../enums/auth-method';\n\n/**\n * Компонент аутентификации пользователя.\n */\n@Component({\n selector: 'sc-sign-in-form',\n templateUrl: './sc-sign-in-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSignInFormComponent implements OnInit {\n /**\n * Выбранный способ аутентификации.\n */\n @Input() public authMethod: AuthMethod = AuthMethod.byEmail;\n\n /**\n * Перечисление способов аутентификации.\n */\n public method: typeof AuthMethod = AuthMethod;\n\n /**\n * Сигнал нажатия на кнопку \"Забыли пароль\".\n */\n @Output() public readonly forgotPassword: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Сигнал нажатия на кнопку \"Зарегистрироваться\".\n */\n @Output() public readonly signUp: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Сигнал события аутентификации.\n */\n @Output() public readonly successAuth: Observable<boolean> = this.authService.getAuthChange().pipe(filter((state) => state));\n\n /**\n * Инициализирует экземпляр класса {@link ScSignInFormComponent}.\n *\n * @param authService Сервис аутентификации.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly authService: ScAuthService,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {}\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signInShow,\n params: {\n type: this.authMethod,\n },\n });\n }\n\n /**\n * Осуществляет переключение способов аутентификации.\n *\n * @param authMethod Выбранный способ аутентификации.\n */\n public switchAuth(authMethod: AuthMethod): void {\n this.authMethod = authMethod;\n\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signInShow,\n params: {\n type: authMethod,\n },\n });\n }\n\n /**\n * Обрабатывает нажатие на кнопку \"Забыли пароль\" и выдает сигнал об этом.\n */\n public onForgotPassword(): void {\n this.forgotPassword.emit();\n }\n}\n","<div class=\"mb-4 flex justify-center\">\n <button\n tuiButton\n [appearance]=\"authMethod === 'by_phone' ? 'primary' : 'secondary'\"\n (click)=\"switchAuth(method.byPhone)\"\n class=\"tui-space_right-3 tui-space_bottom-3 !font-bold\"\n >\n По телефону\n </button>\n\n <button\n tuiButton\n [appearance]=\"authMethod === 'by_email' ? 'primary' : 'secondary'\"\n (click)=\"switchAuth(method.byEmail)\"\n class=\"tui-space_left-3 tui-space_bottom-3 !font-bold\"\n >\n По e-mail\n </button>\n</div>\n\n<sc-sign-in-form-by-email\n *ngIf=\"authMethod === 'by_email'\"\n (forgotPassword)=\"onForgotPassword()\"\n></sc-sign-in-form-by-email>\n\n<sc-sign-in-form-by-phone [class.hidden]=\"authMethod !== 'by_phone'\"></sc-sign-in-form-by-phone>\n\n<div class=\"flex flex-col items-center gap-4\">\n <span class=\"font-medium text-tui-text-02\">Еще не зарегистрированы?</span>\n <button\n tuiButton\n (click)=\"signUp.emit()\"\n type=\"button\"\n iconStart=\"@tui.user-plus\"\n appearance=\"secondary\"\n >\n Зарегистрироваться\n </button>\n</div>\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Проверяет БИК.\n *\n * @param root0 Проверяемое значение.\n * @param root0.value Проверяемое значение.\n */\nexport const scBicValidator: ValidatorFn = ({ value }: AbstractControl<string | null>): ValidationErrors | null => {\n return !value || /^0[,14]\\d{7}$/.test(value) ? null : { bic: true };\n};\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Проверяет корреспондентский счет.\n *\n * @param root0 Проверяемое значение.\n * @param root0.value Проверяемое значение.\n */\nexport const scCorrespondentAccountValidator: ValidatorFn = ({ value }: AbstractControl<string | null>): ValidationErrors | null => {\n return !value || /^[,34]01\\d{17}$|^03\\d{18}$/.test(value) ? null : { correspondentAccount: true };\n};\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Проверяет повторный ввод пароля на эквивалентность паролю.\n *\n * @param passwordKey Ключ поля ввода пароля.\n * @param passwordConfirmKey Ключ поля повторного ввода пароля.\n */\nexport function scPasswordConfirmMatchingValidator(passwordKey: string, passwordConfirmKey: string): ValidatorFn | null {\n return (control: AbstractControl): ValidationErrors | null => {\n const passwordInput: AbstractControl<string | null> | null = control.get(passwordKey);\n const passwordConfirmInput: AbstractControl<string | null> | null = control.get(passwordConfirmKey);\n\n if (!passwordInput || !passwordConfirmInput || passwordInput.invalid || passwordConfirmInput.invalid || !passwordInput.value || !passwordConfirmInput.value) {\n return null;\n }\n\n return passwordInput.value === passwordConfirmInput.value ? null : { passwordNotEquivalent: true };\n };\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Проверяет кратность значения.\n *\n * @param step Шаг кратности.\n * @param precision Точность, количество чисел после запятой.\n */\nexport function stepValidator(step: number, precision: number = 3): ValidatorFn {\n return ({ value }: AbstractControl<number | null>): ValidationErrors | null => {\n if (!step) {\n return null;\n }\n\n if (value) {\n return Number((value / step).toFixed(precision)) % 1 === 0 ? null : { error: `Число не кратно ${step}` };\n }\n\n return null;\n };\n}\n","/* eslint-disable no-unused-expressions,class-methods-use-this,@typescript-eslint/unbound-method */\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, Inject, inject, OnInit, SkipSelf } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroupDirective, Validators } from '@angular/forms';\nimport { ScICity, ScICountry, ScIRegion, ScLocationsService } from '@snabcentr/client-core';\nimport { tuiControlValue, tuiIsPresent, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { combineLatest, debounceTime, filter, Observable, of, share, startWith, switchMap } from 'rxjs';\n\n/**\n * Компонент поля ввода страны/региона/города.\n */\n@Component({\n selector: 'sc-addresses-selection-field',\n templateUrl: './sc-addresses-selection-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddressesSelectionFieldComponent implements OnInit {\n /**\n * FormControl для поля страны.\n */\n public countryControl: FormControl<ScICountry | null> = new FormControl<ScICountry | null>(\n {\n id: 3159,\n name: 'Россия',\n },\n Validators.required\n );\n\n /**\n * FormControl для поля региона.\n */\n public regionControl: FormControl<ScIRegion | null> = new FormControl<ScIRegion | null>(null, Validators.required);\n\n /**\n * FormControl для поля города.\n */\n public cityControl: FormControl<ScICity | null> = new FormControl<ScICountry | null>(null, Validators.required);\n\n /**\n * {@link Observable} изменения списка стран.\n */\n public countries$: Observable<ScICountry[] | null> = this.locationsService.getCountries$().pipe(share(), startWith(null));\n\n /**\n * {@link Observable} изменения списка регионов.\n */\n public regions$: Observable<ScIRegion[] | null> = tuiControlValue<ScIRegion | null>(this.countryControl).pipe(\n filter(tuiIsPresent),\n switchMap((country: ScICountry) => this.locationsService.getRegions$(country.id).pipe(startWith(null))),\n share()\n );\n\n /**\n * {@link Observable} изменения списка городов.\n */\n public cities$: Observable<ScICity[] | null> = combineLatest({\n country: tuiControlValue<ScIRegion | null>(this.countryControl),\n region: tuiControlValue<ScICity | null>(this.regionControl),\n }).pipe(\n debounceTime(0),\n switchMap(({ country, region }: { country: ScIRegion | null; region: ScICity | null }) =>\n country && region ? this.locationsService.getCities$(country.id, region.id).pipe(startWith(null)) : of([])\n ),\n share()\n );\n\n /**\n * Ссылка для автоматического управления уничтожением зависимостей.\n */\n private destroyRef: DestroyRef = inject(DestroyRef);\n\n /**\n * Функция преобразования объекта сортировки в значение, отображаемое в поле ввода.\n *\n * @param item Выбранный объект выпадающего списка.\n * @param item.name Название страны/региона/города, которое будет отображено в поле.\n */\n public readonly stringify = (item: { name: string }): string => item.name;\n\n /**\n * Инициализирует экземпляр класса {@link ScAddressesSelectionFieldComponent}.\n *\n * @param formGroupDirective Директива c `FormGroup` из DOM.\n * @param locationsService Сервис для получения списков стран, регионов, городов.\n */\n public constructor(\n @SkipSelf() @Inject(FormGroupDirective) private readonly formGroupDirective: FormGroupDirective,\n private readonly locationsService: ScLocationsService\n ) {}\n\n /**\n * `FormControl` поля идентификатора города.\n */\n public get cityIdControl(): FormControl<string | null> {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.formGroupDirective.form.get('cityId')! as FormControl<string | null>;\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n if (this.cityIdControl.valid) {\n this.locationsService\n .getUserCity$(Number(this.cityIdControl.value))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((city: ScICity) => {\n this.countryControl.patchValue(city.region?.country ?? null);\n this.regionControl.patchValue(city.region ?? null);\n this.cityControl.patchValue(city);\n });\n }\n\n this.countryControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((country) => {\n this.regionControl.reset(null);\n this.cityControl.reset(null);\n if (country) {\n this.regionControl.enable();\n } else {\n this.regionControl.disable();\n }\n this.cityControl.disable();\n });\n\n this.regionControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((region) => {\n this.cityControl.reset(null);\n this.cityIdControl.reset(null);\n if (region) {\n this.cityControl.enable();\n } else {\n this.cityControl.disable();\n }\n });\n }\n\n /**\n * Заполнение полей банковских реквизитов на основе выбранной подсказки.\n *\n * @param city Идентификатор записи города.\n */\n public onSelectedCity(city: ScICity | null): void {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.cityIdControl) {\n this.cityIdControl.setValue(city?.id.toString() ?? null);\n tuiMarkControlAsTouchedAndValidate(this.cityIdControl);\n }\n }\n}\n","<div class=\"grid items-start gap-4 sm:grid-cols-2\">\n <!-- TODO: Открыть поле выбора страны при добавлении возможности выбора страны для клиента. -->\n <!-- <label tuiLabel=\"Страна\" class=\"w-full\">\n <tui-combo-box *tuiLet=\"countries$ | async as countries\" [formControl]=\"countryControl\" [stringify]=\"stringify\">\n Страна\n <input tuiTextfield autocomplete=\"new-password\" />\n <tui-data-list-wrapper *tuiDataList [itemContent]=\"stringify | tuiStringifyContent\" [items]=\"countries | tuiFilterByInputWith: stringify\"></tui-data-list-wrapper>\n </tui-combo-box>\n <tui-error [formControl]=\"countryControl\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label> -->\n <!-- TODO: [TASK:9383]: Доработать компонент выбора города, как на портале -->\n <label tuiLabel>\n Регион\n <tui-combo-box\n *tuiLet=\"(regions$ | async) ?? [] as regions\"\n [formControl]=\"regionControl\"\n [stringify]=\"stringify\"\n >\n Регион\n <input\n tuiTextfieldLegacy\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n />\n <tui-data-list-wrapper\n *tuiDataList\n [itemContent]=\"stringify | tuiStringifyContent\"\n [items]=\"regions | tuiFilterByInput\"\n ></tui-data-list-wrapper>\n </tui-combo-box>\n <tui-error\n [formControl]=\"regionControl\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Город\n <tui-combo-box\n *tuiLet=\"(cities$ | async) ?? [] as cities\"\n [formControl]=\"cityControl\"\n [stringify]=\"stringify\"\n (ngModelChange)=\"onSelectedCity($event)\"\n >\n Город\n <input\n tuiTextfieldLegacy\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n />\n <tui-data-list-wrapper\n *tuiDataList\n [itemContent]=\"stringify | tuiStringifyContent\"\n [items]=\"cities | tuiFilterByInput\"\n ></tui-data-list-wrapper>\n </tui-combo-box>\n <tui-error\n [formControl]=\"cityIdControl\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n <tui-error\n *ngIf=\"cityIdControl.untouched\"\n [formControl]=\"cityControl\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n</div>\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Inject, inject, Input, OnInit, Output, SkipSelf } from '@angular/core';\nimport { FormGroup, NgControl } from '@angular/forms';\nimport { SC_MIN_LENGTH_SEARCH_TERM, ScISuggestionType, ScSuggestion, ScSuggestionService } from '@snabcentr/client-core';\nimport { tuiControlValue, tuiIsFalsy, tuiIsPresent, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { TUI_DATA_LIST_HOST, TuiDataListHost } from '@taiga-ui/core';\nimport { catchError, debounceTime, filter, map, Observable, of, share, startWith, switchMap, throwError } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\n\n/**\n * Компонент подсказок для поля ввода.\n */\n@Component({\n selector: 'sc-suggestion-field',\n templateUrl: './sc-suggestion-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSuggestionFieldComponent implements OnInit {\n /**\n * Тип подсказок.\n */\n @Input()\n public type: ScISuggestionType = ScISuggestionType.fio;\n\n /**\n * Событие выбора результата подсказки.\n */\n @Output()\n public selectedClick: EventEmitter<ScSuggestion> = new EventEmitter<ScSuggestion>();\n\n /**\n * {@link Observable} подсказок.\n */\n public suggestions$?: Observable<ScSuggestion[] | null>;\n\n /**\n * {@link Observable} состояние запроса подсказок.\n */\n public loading$?: Observable<boolean>;\n\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Компонент обёртка выпадающего списка.\n */\n private readonly host: TuiDataListHost<unknown> | null = inject<TuiDataListHost<unknown>>(TUI_DATA_LIST_HOST, {\n optional: true,\n });\n\n /**\n * Минимальная длина поискового запроса для получения данных.\n */\n private readonly minLengthSearchTerm: number = inject(SC_MIN_LENGTH_SEARCH_TERM);\n\n /**\n * Инициализирует экземпляр класса {@link ScSuggestionFieldComponent}.\n *\n * @param control Контрол поля ввода.\n * @param suggestionService Сервис работы с API подсказок.\n */\n public constructor(\n @SkipSelf()\n @Inject(NgControl)\n public readonly control: NgControl,\n private readonly suggestionService: ScSuggestionService\n ) {}\n\n /** @inheritDoc */\n public ngOnInit(): void {\n const request$ = tuiControlValue<string | null>(this.control).pipe(\n debounceTime(500),\n filter(tuiIsPresent),\n map((term) => term.trim()),\n filter((term) => term.length >= this.minLengthSearchTerm),\n switchMap((term: string) => this.suggestionService.getData<ScSuggestion>(term, this.type).pipe(startWith(null))),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const errorResponse = error.error as ApiErrorResponse;\n\n if (this.control.control) {\n tuiMarkControlAsTouchedAndValidate(this.control.control);\n\n this.control.control.setErrors({\n serverResponse: [errorResponse.message || 'Ошибка сервера: пожалуйста, перезагрузите страницу и/или выполните запрос позже.'],\n });\n }\n }\n\n return throwError(() => of([]));\n }),\n share()\n );\n\n this.suggestions$ = request$.pipe(filter(tuiIsPresent), startWith(null));\n this.loading$ = request$.pipe(map(tuiIsFalsy));\n }\n\n /**\n * Заполнение полей основе выбранной подсказки.\n *\n * @param suggestion Объект подсказки.\n */\n public onSelected(suggestion: ScSuggestion): void {\n switch (this.type) {\n case ScISuggestionType.fio:\n if ('fio' in suggestion) {\n this.control.control?.patchValue(suggestion.fio, { emitEvent: false });\n }\n break;\n case ScISuggestionType.address:\n if ('addressString' in suggestion) {\n this.control.control?.patchValue(suggestion.addressString, { emitEvent: false });\n }\n break;\n case ScISuggestionType.bank:\n if ('inn' in suggestion && 'bic' in suggestion) {\n (this.control.control?.parent as FormGroup).patchValue(\n {\n bankName: suggestion.name,\n bic: suggestion.bic,\n correspondentAccount: suggestion.correspondentAccount,\n },\n { emitEvent: false }\n );\n }\n break;\n case ScISuggestionType.organization:\n if ('inn' in suggestion && !('bic' in suggestion)) {\n (this.control.control?.parent as FormGroup).patchValue(\n {\n name: suggestion.name,\n inn: suggestion.inn,\n kpp: suggestion.kpp,\n okpo: suggestion.okpo,\n directorName: suggestion.directorName,\n directorPosition: suggestion.directorPosition,\n legalAddress: suggestion.legalAddress,\n postalAddress: suggestion.postalAddress,\n actualAddress: suggestion.actualAddress,\n },\n { emitEvent: false }\n );\n }\n break;\n case ScISuggestionType.email:\n if ('email' in suggestion) {\n this.control.control?.patchValue(suggestion.email, { emitEvent: false });\n }\n break;\n default:\n break;\n }\n\n if (this.host?.handleOption) {\n // Дёргаем внутренний обработчик выбора элемента выпадающего списка для решения проблемы закрытия выпадающего списка подсказки.\n this.host.handleOption(this.control.value);\n }\n this.selectedClick.emit(suggestion);\n }\n}\n","<tui-loader\n size=\"m\"\n [overlay]=\"true\"\n [showLoader]=\"!!(loading$ | async)\"\n>\n <tui-data-list *tuiLet=\"suggestions$ | async as options\">\n <button\n *ngFor=\"let option of options\"\n tuiOption\n (click)=\"onSelected(option)\"\n class=\"flex-col !items-start\"\n >\n <ng-container *tuiLet=\"$any(option) as option\">\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"suggestionType.fio\">\n <span class=\"text-tui-link\">{{ option.fio }}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"suggestionType.organization\">\n <span class=\"text-tui-link\">\n {{ option.name }}\n <span class=\"ml-2 text-tui-text-02\">инн: {{ option.inn }}</span>\n </span>\n <span class=\"text-tui-text-02\">{{ option?.legalAddress }}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"suggestionType.bank\">\n <span class=\"text-tui-link\">{{ option.name }}</span>\n <span class=\"text-tui-text-02\">{{ option.bic }}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"suggestionType.email\">\n <span class=\"text-tui-link\">{{ option.email }}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"suggestionType.address\">\n <span class=\"text-tui-link\">{{ option.addressString }}</span>\n </ng-container>\n </ng-container>\n </ng-container>\n </button>\n </tui-data-list>\n</tui-loader>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MaskitoOptions } from '@maskito/core';\nimport { ScICurrency, ScISuggestionType, ScReferencesService } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\nimport { scAccountNumberMask, scBicMask, scCorrespondentAccount } from '../../masks';\n\n/**\n * Компонент формы банковских реквизитов.\n */\n@Component({\n selector: 'sc-new-contragent-bank-account-form',\n templateUrl: './sc-new-contragent-bank-account-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewContragentBankAccountsFormComponent {\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Маска поля ввода БИК.\n */\n public readonly bicMask: MaskitoOptions = scBicMask;\n\n /**\n * Маска поля ввода номера счета.\n */\n public readonly accountNumberMask: MaskitoOptions = scAccountNumberMask;\n\n /**\n * Маска поля ввода номера корреспондентского счета.\n */\n public readonly correspondentAccount: MaskitoOptions = scCorrespondentAccount;\n\n /**\n * {@link Observable} списка валют.\n */\n public readonly currencies$: Observable<ScICurrency[]> = this.referencesService.currencies$;\n\n /**\n * Группа с полем банковских реквизитов.\n */\n @Input()\n public form: FormGroup<{\n bankName: FormControl<string | null>;\n bic: FormControl<string | null>;\n accountNumber: FormControl<string | null>;\n correspondentAccount: FormControl<string | null>;\n currencyId: FormControl<number | null>;\n }>;\n\n /**\n * Инициализирует экземпляр класса {@link ScContragentBankAccountsFormComponent}.\n *\n * @param referencesService Сервис справочников.\n */\n public constructor(private readonly referencesService: ScReferencesService) {}\n\n /**\n * Возвращает {@link Observable} валюты по идентификатору.\n *\n * @param currencyId Идентификатор валюты.\n */\n public getCurrencyById$(currencyId: number): Observable<ScICurrency | undefined> {\n return this.referencesService.getCurrencyById$(currencyId);\n }\n}\n","<div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel>\n Наименование банка\n <tui-input formControlName=\"bankName\">\n Наименование банка\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.bank\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"bankName\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n БИК\n <tui-input formControlName=\"bic\">\n БИК\n <input\n tuiTextfieldLegacy\n [maskito]=\"bicMask\"\n autocomplete=\"bic\"\n />\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.bank\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"bic\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Номер счета\n <tui-input formControlName=\"accountNumber\">\n Номер счета\n <input\n tuiTextfieldLegacy\n [maskito]=\"accountNumberMask\"\n autocomplete=\"accountNumber\"\n />\n </tui-input>\n <tui-error\n formControlName=\"accountNumber\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Корреспондентский счет\n <tui-input formControlName=\"correspondentAccount\">\n Корреспондентский счет\n <input\n tuiTextfieldLegacy\n [maskito]=\"correspondentAccount\"\n autocomplete=\"correspondentAccount\"\n />\n </tui-input>\n <tui-error\n formControlName=\"correspondentAccount\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Валюта расчётов\n <tui-select\n formControlName=\"currencyId\"\n [valueContent]=\"currencyContent\"\n >\n Валюта расчётов\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of currencies$ | async; let index = index\"\n tuiOption\n [value]=\"item.id\"\n >\n {{ item.name }} ({{ item.symbol }})\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #currencyContent\n let-data\n >\n <div>{{ (getCurrencyById$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error\n formControlName=\"currencyId\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n</div>\n","/* eslint-disable class-methods-use-this,@typescript-eslint/unbound-method */\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, Inject, inject, Input, OnDestroy, OnInit, SkipSelf } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormArray, FormControl, FormGroup, FormGroupDirective, Validators } from '@angular/forms';\nimport { ScICountry, ScIReferencesTypes, ScISalesDirection, ScISuggestionType, ScLocationsService, ScOpfList, ScReferencesService } from '@snabcentr/client-core';\nimport { tuiControlValue, tuiIsPresent } from '@taiga-ui/cdk';\nimport { distinctUntilChanged, filter, map, Observable, tap } from 'rxjs';\n\nimport { ScBankAccountFormGroup, ScContactFormGroup } from '../../auth/interfaces';\nimport { scEntrepreneurInnMask, scEntrepreneurOkpoMask, scKppMask, scLegalInnMask, scLegalOkpoMask } from '../../masks';\nimport { scBicValidator, scCorrespondentAccountValidator } from '../../validators';\n\n/**\n * Форма создания нового контрагента.\n */\n@Component({\n selector: 'sc-new-contragent-form',\n templateUrl: './sc-new-contragent-form.component.html',\n styleUrls: ['./sc-new-contragent-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewContragentFormComponent implements OnInit, OnDestroy {\n /**\n * Поле выбора организационно-правовой формы.\n */\n @Input()\n public opfControl?: FormControl<keyof typeof ScOpfList | null>;\n\n /**\n * Группа полей данных о контрагенте - индивидуальном предпринимателе.\n */\n private readonly entrepreneurGroup = new FormGroup({\n inn: new FormControl<string | null>(null, Validators.required),\n okpo: new FormControl<string | null>(null, Validators.required),\n directorName: new FormControl<string | null>(null, Validators.required),\n directorPosition: new FormControl<string | null>(null, Validators.required),\n directorActsOn: new FormControl<string | null>(null, Validators.required),\n legalAddress: new FormControl<string | null>(null, Validators.required),\n postalAddress: new FormControl<string | null>(null, Validators.required),\n actualAddress: new FormControl<string | null>(null, Validators.required),\n bankAccounts: new FormArray<ScBankAccountFormGroup>(\n [\n new FormGroup({\n bankName: new FormControl<string | null>(null, Validators.required),\n bic: new FormControl<string | null>(null, [Validators.required, Validators.minLength(9), scBicValidator]),\n accountNumber: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20)]),\n correspondentAccount: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20), scCorrespondentAccountValidator]),\n currencyId: new FormControl<number | null>(null, Validators.required),\n }),\n ],\n [Validators.minLength(1), Validators.required]\n ),\n });\n\n /**\n * Группа полей данных о контрагенте - юридическом лице.\n */\n private readonly legalGroup = new FormGroup({\n kpp: new FormControl<string | null>(null, [Validators.required, Validators.minLength(9)]),\n });\n\n /**\n * Группа полей данных о контрагенте - юридическом лице нерезиденте.\n */\n private readonly nonResidentLegalGroup = new FormGroup({\n registrationCountryId: new FormControl<number | null>(null, Validators.required),\n registrationNumber: new FormControl<string | null>(null, Validators.required),\n taxNumber: new FormControl<string | null>(null, Validators.required),\n });\n\n /**\n * Форма для создания нового контрагента физического лица.\n */\n public readonly form = new FormGroup({\n name: new FormControl<string | null>(null, Validators.required),\n opf: new FormControl<keyof typeof ScOpfList>('individual', Validators.required),\n salesDirectionId: new FormControl<number | null>(null, Validators.required),\n contacts: new FormArray<ScContactFormGroup>(\n [\n new FormGroup({\n name: new FormControl<string | null>(null, Validators.required),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n email: new FormControl<string | null>(null, Validators.email),\n position: new FormControl<string | null>(null, Validators.required),\n }),\n ],\n [Validators.minLength(1), Validators.required]\n ),\n });\n\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * {@link Observable} выбора ОПФ.\n */\n public readonly selectOpf$: Observable<keyof typeof ScOpfList> = tuiControlValue<keyof typeof ScOpfList>(this.form.controls.opf).pipe(\n distinctUntilChanged(),\n tap((opf) => {\n Object.keys({ ...this.entrepreneurGroup.controls, ...this.legalGroup.controls, ...this.nonResidentLegalGroup.controls }).forEach((key) => {\n this.form.get(key)?.disable();\n });\n\n const addControls = (formGroup: FormGroup) => {\n Object.keys({ ...formGroup.controls }).forEach((key) => {\n formGroup.get(key)?.enable();\n (this.form as FormGroup).setControl<typeof key>(key, formGroup.get(key));\n });\n };\n\n // eslint-disable-next-line security/detect-object-injection\n if (ScOpfList[opf] > ScOpfList.individual) {\n addControls(this.entrepreneurGroup);\n this.entrepreneurGroup.controls.inn.setValidators([Validators.required, Validators.minLength(12)]);\n this.entrepreneurGroup.controls.okpo.setValidators([Validators.required, Validators.minLength(10)]);\n }\n\n // eslint-disable-next-line security/detect-object-injection\n if (ScOpfList[opf] > ScOpfList.entrepreneur) {\n addControls(this.legalGroup);\n this.entrepreneurGroup.controls.inn.setValidators([Validators.required, Validators.minLength(10)]);\n this.entrepreneurGroup.controls.okpo.setValidators([Validators.required, Validators.minLength(8)]);\n }\n\n // eslint-disable-next-line security/detect-object-injection\n if (ScOpfList[opf] > ScOpfList.legal) {\n addControls(this.nonResidentLegalGroup);\n }\n })\n );\n\n /**\n * Маска поля ввода КПП.\n */\n public readonly kppMask = scKppMask;\n\n /**\n * Перечисление организационно-правовых форм.\n */\n public readonly opfListEnum: typeof ScOpfList = ScOpfList;\n\n /**\n * Ссылка для автоматического управления уничтожением зависимостей.\n */\n private destroyRef: DestroyRef = inject(DestroyRef);\n\n /**\n * Маска поля ввода ИНН.\n *\n * @param opf Организационно-правовая форма.\n */\n // eslint-disable-next-line security/detect-object-injection\n public readonly innMask = (opf: keyof typeof ScOpfList) => (ScOpfList[opf] > ScOpfList.entrepreneur ? scLegalInnMask : scEntrepreneurInnMask);\n\n /**\n * Маска поля ввода ОКПО.\n *\n * @param opf Организационно-правовая форма.\n */\n // eslint-disable-next-line security/detect-object-injection\n public readonly okpoMask = (opf: keyof typeof ScOpfList) => (ScOpfList[opf] > ScOpfList.entrepreneur ? scLegalOkpoMask : scEntrepreneurOkpoMask);\n\n /**\n * Инициализирует экземпляр класса {@link ScNewContragentFormComponent}.\n *\n * @param referencesService Сервис справочников.\n * @param locationsService Сервис для получения списков стран, регионов, городов.\n * @param formGroupDirective Директива c `FormGroup` из DOM.\n */\n public constructor(\n private readonly referencesService: ScReferencesService,\n private readonly locationsService: ScLocationsService,\n @SkipSelf()\n @Inject(FormGroupDirective)\n private readonly formGroupDirective: FormGroupDirective | null\n ) {\n this.referencesService.directions$\n .pipe(\n filter(tuiIsPresent),\n filter((directions) => directions.length > 0),\n takeUntilDestroyed()\n )\n .subscribe((directions) => {\n this.form.patchValue({ salesDirectionId: directions[0].id });\n });\n }\n\n /**\n * Родительская `FormGroup`.\n */\n public get parentForm(): FormGroup | undefined {\n return this.formGroupDirective?.form;\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.parentForm?.setControl('contragent', this.form);\n if (this.parentForm && this.opfControl) {\n tuiControlValue<keyof typeof ScOpfList | null>(this.opfControl)\n .pipe(filter(tuiIsPresent), takeUntilDestroyed(this.destroyRef))\n .subscribe((opf) => {\n this.form.controls.opf.patchValue(opf);\n });\n }\n }\n\n /** @inheritDoc */\n public ngOnDestroy(): void {\n this.parentForm?.removeControl('contragent');\n }\n\n /**\n * Возвращает {@link Observable} списка направлений продаж.\n *\n * @param directionId Идентификатор направления продаж.\n */\n public getDirectionById$(directionId: number): Observable<ScISalesDirection | undefined> {\n return this.referencesService.getDirectionById$(directionId);\n }\n\n /**\n * Возвращает {@link Observable} список организационно-правовых форм..\n */\n public getOpf$(): Observable<Array<ScIReferencesTypes<ScOpfList, typeof ScOpfList>>> {\n return this.referencesService.opf$;\n }\n\n /**\n * Возвращает {@link Observable} организационно-правовой формы, соответствующий символьному обозначению (slug) на входе.\n *\n * @param slug Символьное обозначение (slug).\n */\n public getOpfBySlug$(slug: keyof typeof ScOpfList): Observable<ScIReferencesTypes<ScOpfList, typeof ScOpfList> | undefined> {\n return this.referencesService.getOpfBySlug$(slug);\n }\n\n /**\n * Возвращает {@link Observable} списка стран\n */\n public getCountries$(): Observable<ScICountry[]> {\n return this.locationsService.getCountries$();\n }\n\n /**\n * Возвращает {@link Observable} страны по идентификатору.\n *\n * @param countryId — Идентификатор страны.\n */\n public getCountriesById$(countryId: number): Observable<ScICountry | undefined> {\n return this.locationsService.getCountries$().pipe(map((countries) => countries.find((country) => country.id === countryId)));\n }\n}\n","<div\n [formGroup]=\"form\"\n *ngIf=\"selectOpf$ | async as selectOpf\"\n class=\"flex flex-col gap-3 pb-1\"\n>\n <p class=\"text-lg font-bold\">Общие данные контрагента</p>\n <label tuiLabel>\n Тип контрагента (организационно-правовая форма)\n <tui-select\n formControlName=\"opf\"\n [valueContent]=\"opfContent\"\n [readOnly]=\"!!opfControl\"\n >\n Тип контрагента (организационно-правовая форма)\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getOpf$() | async; let index = index\"\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error\n formControlName=\"opf\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n {{ opfListEnum[selectOpf] > opfListEnum.individual ? 'Название организации' : 'Ф.И.О.' }}\n <tui-input formControlName=\"name\">\n <ng-template #fio>\n Ф.И.О.\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n ></sc-suggestion-field>\n </ng-template>\n <ng-container *ngIf=\"opfListEnum[selectOpf] > opfListEnum.individual; else fio\">\n Название организации\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n ></sc-suggestion-field>\n </ng-container>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <ng-container>\n <ng-container *ngIf=\"opfListEnum[selectOpf] > opfListEnum.individual\">\n <label tuiLabel>\n ИНН организации или ИП\n <tui-input formControlName=\"inn\">\n ИНН организации или ИП\n <input\n tuiTextfieldLegacy\n [maskito]=\"innMask(selectOpf)\"\n autocomplete=\"inn\"\n />\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"inn\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Код ОКПО\n <tui-input formControlName=\"okpo\">\n Код ОКПО\n <input\n tuiTextfieldLegacy\n [maskito]=\"okpoMask(selectOpf)\"\n autocomplete=\"okpo\"\n />\n </tui-input>\n <tui-error\n formControlName=\"okpo\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Ф.И.О. руководителя\n <tui-input formControlName=\"directorName\">\n Ф.И.О. руководителя\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"directorName\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Должность руководителя\n <tui-input formControlName=\"directorPosition\"> Должность руководителя </tui-input>\n <tui-error\n formControlName=\"directorPosition\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Основания полномочий руководителя\n <tui-input formControlName=\"directorActsOn\"> Основания полномочий руководителя </tui-input>\n <tui-error\n formControlName=\"directorActsOn\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Юридический адрес\n <tui-input formControlName=\"legalAddress\">\n Юридический адрес\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"legalAddress\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Почтовый адрес\n <tui-input formControlName=\"postalAddress\">\n Почтовый адрес\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"postalAddress\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Фактический адрес\n <tui-input formControlName=\"actualAddress\">\n Фактический адрес\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"actualAddress\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </ng-container>\n <ng-container *ngIf=\"opfListEnum[selectOpf] > opfListEnum.entrepreneur\">\n <label tuiLabel>\n КПП организации\n <tui-input formControlName=\"kpp\">\n КПП организации\n <input\n tuiTextfieldLegacy\n [maskito]=\"kppMask\"\n autocomplete=\"kpp\"\n />\n </tui-input>\n <tui-error\n formControlName=\"kpp\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </ng-container>\n <ng-container *ngIf=\"opfListEnum[selectOpf] > opfListEnum.legal\">\n <label tuiLabel>\n Страна регистрации юридического лица\n <tui-select\n formControlName=\"registrationCountryId\"\n [valueContent]=\"CountryContent\"\n >\n Страна регистрации юридического лица\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getCountries$() | async; let index = index\"\n tuiOption\n [value]=\"item.id\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #CountryContent\n let-data\n >\n <div>{{ (getCountriesById$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error\n formControlName=\"registrationCountryId\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Регистрационный номер юридического лица\n <tui-input formControlName=\"registrationNumber\"> Регистрационный номер юридического лица </tui-input>\n <tui-error\n formControlName=\"registrationNumber\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Налоговый номер юридического лица\n <tui-input formControlName=\"taxNumber\"> Налоговый номер юридического лица </tui-input>\n <tui-error\n formControlName=\"taxNumber\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </ng-container>\n </ng-container>\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { ScISuggestionType } from '@snabcentr/client-core';\n\n/**\n * Компонент формы контактного лица.\n */\n@Component({\n selector: 'sc-new-contact-form',\n templateUrl: './sc-new-contact-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewContactFormComponent {\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Группа с полями контактного лица.\n */\n @Input()\n public form: FormGroup<{\n name: FormControl<string | null>;\n phone: FormControl<string | null>;\n email: FormControl<string | null>;\n position: FormControl<string | null>;\n }>;\n}\n","<div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel>\n Ф.И.О.\n <tui-input formControlName=\"name\">\n Ф.И.О.\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Телефон\n <tui-input-phone formControlName=\"phone\"> Телефон </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Адрес электронной почты\n <tui-input formControlName=\"email\">\n Адрес электронной почты\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <label tuiLabel>\n Должность контактного лица\n <tui-input formControlName=\"position\"> Должность контактного лица </tui-input>\n <tui-error\n formControlName=\"position\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n</div>\n","/* eslint-disable lodash/prefer-lodash-method,@typescript-eslint/no-unnecessary-condition,class-methods-use-this,@typescript-eslint/no-explicit-any,@typescript-eslint/unbound-method,no-restricted-syntax */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n IAuthToken,\n ScAuthService,\n ScConvertersService,\n ScIReferencesTypes,\n ScISuggestionType,\n ScIUserOnDataCreate,\n ScOpfList,\n ScReferencesService,\n ScSuggestion,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n ScUserService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { tuiDropdownOptionsProvider } from '@taiga-ui/core';\nimport { catchError, distinctUntilChanged, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { scBicValidator, scCorrespondentAccountValidator, scPasswordConfirmMatchingValidator } from '../../validators';\nimport { ApiErrorResponse, ScBankAccountFormGroup, ScContactFormGroup } from '../interfaces';\n\n/**\n * Компонент формы регистрация пользователя.\n */\n@Component({\n selector: 'sc-sign-up-form',\n templateUrl: './sc-sign-up-form.component.html',\n providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSignUpFormComponent implements OnInit {\n /**\n * Поле ввода организационно-правовых форм.\n */\n public opfControl: FormControl<keyof typeof ScOpfList | null> = new FormControl<keyof typeof ScOpfList>('individual', Validators.required);\n\n /**\n * Группа полей ввода для формы регистрации.\n */\n public form = new FormGroup(\n {\n name: new FormControl<string | null>(null, [Validators.required, Validators.minLength(3)]),\n email: new FormControl<string | null>(null, [Validators.required, Validators.email]),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n verificationCode: new FormControl<string | null>(null, [Validators.required, Validators.minLength(6)]),\n cityId: new FormControl<number | null>(null, Validators.required),\n password: new FormControl<string | null>(null, [Validators.required, Validators.minLength(8)]),\n passwordConfirm: new FormControl<string | null>(null, [Validators.required, Validators.minLength(8)]),\n getNews: new FormControl<boolean>(false),\n acceptRules: new FormControl<boolean>(false, Validators.requiredTrue),\n contragent: new FormGroup<any>({}),\n },\n {\n validators: scPasswordConfirmMatchingValidator('password', 'passwordConfirm'),\n }\n );\n\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Перечисление организационно-правовых форм.\n */\n public readonly opfListEnum: typeof ScOpfList = ScOpfList;\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса данных регистрации.\n */\n private readonly request$ = this.onSubmit.pipe(\n tap(() => {\n tuiMarkControlAsTouchedAndValidate(this.form);\n }),\n filter(() => this.form.valid),\n map(() => this.form.value as ScIUserOnDataCreate),\n tap((value) => {\n this.createBaseContragent(value);\n }),\n switchMap((value) =>\n this.userService.signUp$(this.convertersService.removeNullRecursive(value)).pipe(\n switchMap(() => this.authService.getSignIn$({ login: value.email, password: value.password })),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n\n this.stepIndex = this.steps.findIndex((_, index) => !this.canNextStep(index));\n }\n\n return of({} as IAuthToken);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * Индекс этапа.\n */\n public stepIndex: number = 0;\n\n /**\n * {@link Observable} изменения состояния загрузки данных.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Сигнал события аутентификации после успешной регистрации.\n */\n @Output()\n public readonly successAuth: Observable<boolean> = this.authService.getAuthChange().pipe(filter((state) => state));\n\n /**\n * Сигнал нажатия на \"Договор оферты\".\n */\n @Output()\n public readonly clickOfferEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Список этапов регистрации.\n */\n readonly steps: string[] = ['Данные о клиенте', 'Общие данные контрагента', 'Контакты пользователя', 'Банковские реквизиты пользователя'];\n\n /**\n * Инициализирует экземпляр класса {@link ScSignUpFormComponent}.\n *\n * @param userService Сервис данных о пользователе.\n * @param authService Сервис аутентификации.\n * @param referencesService Сервис справочников.\n * @param convertersService Сервис конвертации данных.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly userService: ScUserService,\n private readonly authService: ScAuthService,\n private readonly referencesService: ScReferencesService,\n private readonly convertersService: ScConvertersService,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {\n this.opfControl.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed()).subscribe(() => {\n this.form.patchValue({ name: null });\n this.form.get('contragent')?.reset();\n });\n }\n\n /**\n * Список групп полей банковских реквизитов.\n */\n public get bankAccounts(): FormArray<ReturnType<ScSignUpFormComponent['createBankAccountGroup']>> {\n return this.form.controls.contragent.get('bankAccounts') as FormArray;\n }\n\n /**\n * Список групп полей контактных лиц.\n */\n public get contacts(): FormArray<ReturnType<ScSignUpFormComponent['createContactGroup']>> {\n return this.form.controls.contragent.get('contacts') as FormArray;\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n (this.form as FormGroup).removeControl('contragent');\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signUpShow,\n });\n }\n\n /**\n * Проверяет, может ли пользователь перейти к следующему шагу регистрации.\n * При проверке каждого этапа регистрации последовательно проверяется корректность заполнения данных на предыдущих этапах.\n *\n * @param index Индекс этапа для которого нужно проверить валидность.\n * @returns Выводит значение `boolean` на основании {@link index}.\n */\n // eslint-disable-next-line sonarjs/cognitive-complexity\n public canNextStep(index: number): boolean {\n const { controls } = this.form;\n\n // Проверяем валидность данных пользователя.\n for (const key in controls) {\n if (Object.prototype.hasOwnProperty.call(controls, key) && key !== 'contragent' && controls[key as keyof typeof this.form.controls].invalid) {\n return false;\n }\n }\n\n // Для этапа 0 просто возвращаем true, так как данные пользователя проверены.\n if (index === 0) {\n return true;\n }\n\n // Проверяем валидность полей контрагента.\n const contragentControls = controls.contragent.controls;\n\n if (contragentControls) {\n for (const key in contragentControls) {\n if (Object.prototype.hasOwnProperty.call(contragentControls, key)) {\n // eslint-disable-next-line security/detect-object-injection\n const control = contragentControls[key];\n if (!Array.isArray(control.value) && control.invalid) {\n return false;\n }\n }\n }\n }\n\n // Для этапа 1 возвращаем true, если все поля контрагента валидны.\n if (index === 1) {\n return true;\n }\n\n // Проверяем список контактов внутри контрагента.\n if (contragentControls['contacts'].invalid) {\n return false;\n }\n\n // Для этапа 2 возвращаем true, если список контактов внутри контрагента валидный.\n if (index === 2) {\n return true;\n }\n\n // Проверяем список банковских реквизитов внутри контрагента.\n return contragentControls['bankAccounts'].valid ?? false;\n }\n\n /**\n * Выполняет навигацию по форме регистрации.\n *\n * @param delta Значение, на которое необходимо выполнить навигацию.\n */\n public navigate(delta: number): void {\n this.stepIndex = (this.stepIndex + delta) % 4;\n }\n\n /**\n * Создаёт базового контрагента для клиента физического лица.\n *\n * @param formValue Значение формы при регистрации\n */\n private createBaseContragent(formValue: ScSignUpFormComponent['form']['value']): void {\n if (this.form.invalid || this.opfControl.value !== 'individual') {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n formValue.contragent = {\n name: this.form.controls.name.value,\n opf: 'individual',\n salesDirectionId: 1,\n contacts: [\n {\n name: this.form.controls.name.value,\n phone: this.form.controls.phone.value,\n email: this.form.controls.email.value,\n },\n ],\n };\n }\n\n /**\n * Возвращает {@link Observable} список организационно-правовых форм.\n */\n public getOpf$(): Observable<Array<ScIReferencesTypes<ScOpfList, typeof ScOpfList>>> {\n return this.referencesService.opf$;\n }\n\n /**\n * Возвращает {@link Observable} организационно-правовой формы, соответствующий символьному обозначению (slug) на входе.\n *\n * @param slug Символьное обозначение (slug).\n */\n public getOpfBySlug$(slug: keyof typeof ScOpfList): Observable<ScIReferencesTypes<ScOpfList, typeof ScOpfList> | undefined> {\n return this.referencesService.getOpfBySlug$(slug);\n }\n\n /**\n * Создаёт группу полей банковских реквизитов.\n */\n private createBankAccountGroup(): ScBankAccountFormGroup {\n return new FormGroup({\n bankName: new FormControl<string | null>(null, Validators.required),\n bic: new FormControl<string | null>(null, [Validators.required, Validators.minLength(9), scBicValidator]),\n accountNumber: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20)]),\n correspondentAccount: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20), scCorrespondentAccountValidator]),\n currencyId: new FormControl<number | null>(null, Validators.required),\n });\n }\n\n /**\n * Добавляет Банковские реквизиты.\n */\n public addBankAccountGroup(): void {\n this.bankAccounts.push(this.createBankAccountGroup());\n }\n\n /**\n * Удаляет банковские реквизиты.\n *\n * @param index Индекс банковских реквизитов.\n */\n public removeBankAccountGroup(index: number): void {\n this.bankAccounts.removeAt(index);\n }\n\n /**\n * Создаёт группу полей контактного лица.\n */\n public createContactGroup(): ScContactFormGroup {\n return new FormGroup({\n name: new FormControl<string | null>(null, Validators.required),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n email: new FormControl<string | null>(null, Validators.email),\n position: new FormControl<string | null>(null, Validators.required),\n });\n }\n\n /**\n * Обработчик выбора адреса доставки.\n *\n * @param suggestion Объект подсказки ареса.\n */\n public onSelectedOrganization(suggestion: ScSuggestion): void {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.form.controls.contragent && 'inn' in suggestion && !('bic' in suggestion)) {\n if (suggestion.opf && suggestion.opf.slug !== this.opfControl.value) {\n this.opfControl.patchValue(suggestion.opf.slug as keyof typeof ScOpfList, { emitEvent: false });\n this.form.controls.contragent.patchValue({\n opf: suggestion.opf.slug as keyof typeof ScOpfList,\n });\n }\n\n this.form.controls.contragent.patchValue({\n name: suggestion.name,\n inn: suggestion.inn,\n kpp: suggestion.kpp ?? null,\n okpo: suggestion.okpo ?? null,\n directorName: suggestion.directorName ?? null,\n directorPosition: suggestion.directorPosition ?? null,\n legalAddress: suggestion.legalAddress ?? null,\n postalAddress: suggestion.postalAddress ?? null,\n actualAddress: suggestion.actualAddress ?? null,\n });\n\n this.form.controls.contragent.markAllAsTouched();\n this.form.get(['contragent', 'contacts'])?.markAsUntouched();\n this.form.get(['contragent', 'bankAccounts'])?.markAsUntouched();\n }\n }\n\n /**\n * Добавляет контактное лицо контрагента.\n */\n public addContactGroup(): void {\n this.contacts.push(this.createContactGroup());\n }\n\n /**\n * Удаляет контактное лицо контрагента.\n *\n * @param index Индекс контактного лица.\n */\n public removeContactGroup(index: number): void {\n this.contacts.removeAt(index);\n }\n\n /**\n * Обрабатывает событие нажатия на \"Договор оферты\".\n */\n public onClickOffer(): void {\n this.clickOfferEvent.emit();\n }\n}\n","<form\n *tuiLet=\"opfControl.value as selectOpf\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n>\n <ng-container *tuiLet=\"!!selectOpf && opfListEnum[selectOpf] === opfListEnum.individual as isIndividual\">\n <tui-stepper\n *ngIf=\"!isIndividual && form.controls.contragent\"\n [(activeItemIndex)]=\"stepIndex\"\n >\n <button\n *tuiRepeatTimes=\"let index of 4\"\n [stepState]=\"index && !canNextStep(index) ? 'error' : 'pass'\"\n [attr.disabled]=\"index && !canNextStep(index - 1) ? '' : null\"\n type=\"button\"\n tuiStep\n >\n {{ steps[index] }}\n </button>\n </tui-stepper>\n <tui-elastic-container>\n <div\n [class.!hidden]=\"stepIndex !== 0\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel>\n Тип клиента\n <tui-select\n [formControl]=\"opfControl\"\n [valueContent]=\"opfContent\"\n >\n Тип клиента\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getOpf$() | async; let index = index\"\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n </label>\n <label tuiLabel>\n {{ isIndividual ? 'Ф.И.О.' : 'Название организации или ИП' }}\n <tui-input formControlName=\"name\">\n {{ isIndividual ? 'Ф.И.О.' : 'Название организации или ИП' }}\n <ng-container *ngIf=\"!isIndividual\">\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n (selectedClick)=\"onSelectedOrganization($event)\"\n ></sc-suggestion-field>\n </ng-container>\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <sc-verification-phone-check-form [shouldBeBusy]=\"false\"></sc-verification-phone-check-form>\n <label tuiLabel\n >Адрес электронной почты\n <tui-input formControlName=\"email\">\n Адрес электронной почты\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n\n <sc-addresses-selection-field></sc-addresses-selection-field>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <label tuiLabel>\n Пароль\n <tui-input-password formControlName=\"password\">\n Пароль\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Повтор пароля\n <tui-input-password formControlName=\"passwordConfirm\">\n Повтор пароля\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"passwordConfirm\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n ></tui-error>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n />\n Я хочу получать рассылку Снабцентр о скидках и новостях по электронной почте.\n </label>\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n required=\"true\"\n formControlName=\"acceptRules\"\n />\n <div>\n <span>\n Регистрируясь на сайте, я соглашаюсь с\n <a\n tuiLink\n [pseudo]=\"true\"\n (click)=\"$event.preventDefault(); onClickOffer()\"\n >Договором оферты</a\n >.</span\n >\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </div>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"!isIndividual\">\n <sc-new-contragent-form\n [opfControl]=\"opfControl\"\n [class.!hidden]=\"stepIndex !== 1\"\n ></sc-new-contragent-form>\n\n <div [class.!hidden]=\"stepIndex !== 2\">\n <div\n *ngIf=\"contacts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">Контакты</p>\n <div\n *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">Контактное лицо №{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contact-form [form]=\"contact\"></sc-new-contact-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n Добавить контакт\n </button>\n </div>\n </div>\n\n <div [class.!hidden]=\"stepIndex !== 3\">\n <div\n *ngIf=\"bankAccounts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">Банковские реквизиты</p>\n <div\n *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">Банковские реквизиты №{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contragent-bank-account-form [form]=\"bankAccount\"></sc-new-contragent-bank-account-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n Добавить банковские реквизиты\n </button>\n </div>\n </div>\n </ng-container>\n </tui-elastic-container>\n <div class=\"flex justify-center gap-2\">\n <button\n *ngIf=\"stepIndex > 0\"\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"navigate(-1)\"\n >\n Назад\n </button>\n <button\n *ngIf=\"isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3; else nextIndexBtn\"\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n class=\"self-center\"\n >\n Зарегистрироваться\n </button>\n <ng-template #nextIndexBtn>\n <button\n tuiButton\n type=\"button\"\n [disabled]=\"!canNextStep(stepIndex)\"\n (click)=\"navigate(1)\"\n >\n Далее\n </button>\n </ng-template>\n </div>\n </ng-container>\n</form>\n","import { Directive } from '@angular/core';\nimport { PolymorpheusTemplate } from '@taiga-ui/polymorpheus';\n\n/**\n * Директива содержимого компонента, позволяющего отображать и скрывать содержимое в разделах.\n */\n@Directive({\n selector: 'ng-template[scAccordionContent]',\n})\nexport class ScAccordionContentDirective extends PolymorpheusTemplate<Record<string, unknown>> {}\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';\nimport { TuiSizeS } from '@taiga-ui/core';\nimport { TuiAccordionItem } from '@taiga-ui/kit';\n\nimport { ScAccordionContentDirective } from './sc-accordion-content.directive';\n\n/**\n * Компонент, позволяющий отображать и скрывать содержимое в разделах.\n */\n@Component({\n selector: 'sc-accordion',\n templateUrl: './sc-accordion.component.html',\n styleUrls: ['./sc-accordion.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAccordionComponent {\n /**\n * Состояние отображения кнопки добавления.\n */\n @Input()\n @HostBinding('class._has-add-button')\n public showAddButton = true;\n\n /**\n * Состояние отображения кнопки удаления.\n */\n @Input()\n @HostBinding('class._has-delete-button')\n public showDeleteButton: boolean = false;\n\n /**\n * Состояние отображения стрелки.\n */\n @Input()\n @HostBinding('class._has-arrow')\n public showArrow: boolean = true;\n\n /**\n * Состояние открытия содержимого компонента.\n */\n @Input()\n public open: boolean = false;\n\n /**\n * Размер элементов {@link TuiAccordionItemComponent}.\n */\n @Input()\n @HostBinding('attr.data-size')\n public size: TuiSizeS = 's';\n\n /**\n * Дочерний элемент контента.\n */\n @ContentChild(ScAccordionContentDirective)\n protected readonly content?: ScAccordionContentDirective;\n\n /**\n * Ссылка на шаблон превью-просмотра в разметке.\n */\n @ViewChild(TuiAccordionItem)\n public readonly accordion?: TuiAccordionItem;\n\n /**\n * Событие нажатия на кнопку добавления.\n */\n @Output()\n public addButtonClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления.\n */\n @Output()\n public deleteButtonClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Закрывает акордион.\n */\n public close(): void {\n this.accordion?.close();\n }\n}\n","<tui-accordion [rounded]=\"false\">\n <tui-accordion-item\n #accordion\n [size]=\"size\"\n [borders]=\"null\"\n [showArrow]=\"showArrow\"\n [open]=\"open\"\n >\n <div class=\"flex grow justify-between\">\n <div class=\"self-center font-bold\">\n <ng-content></ng-content>\n </div>\n <div\n *ngIf=\"showAddButton || showDeleteButton\"\n class=\"flex\"\n >\n <ng-container *ngIf=\"showDeleteButton\">\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n iconStart=\"@tui.trash-2\"\n appearance=\"secondary\"\n (click)=\"$event.stopPropagation(); deleteButtonClick.emit()\"\n ></button>\n </ng-container>\n <ng-container *ngIf=\"showAddButton\">\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"$event.stopPropagation(); addButtonClick.emit()\"\n ></button>\n </ng-container>\n </div>\n </div>\n <ng-template tuiAccordionItemContent>\n <tui-elastic-container *ngIf=\"content\">\n <ng-container *polymorpheusOutlet=\"content as text\">\n {{ text }}\n </ng-container>\n </tui-elastic-container>\n </ng-template>\n </tui-accordion-item>\n</tui-accordion>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiButton } from '@taiga-ui/core';\nimport { TuiAccordion, TuiElasticContainer } from '@taiga-ui/kit';\nimport { PolymorpheusOutlet, PolymorpheusTemplate } from '@taiga-ui/polymorpheus';\n\nimport { ScAccordionComponent } from './sc-accordion.component';\nimport { ScAccordionContentDirective } from './sc-accordion-content.directive';\n\n/**\n * Модуль для отображение контента разделами, с возможностью скрывать и отображать содержимое.\n */\n@NgModule({\n declarations: [ScAccordionComponent, ScAccordionContentDirective],\n imports: [CommonModule, PolymorpheusTemplate, PolymorpheusOutlet, TuiButton, ...TuiAccordion, TuiElasticContainer],\n exports: [ScAccordionComponent, ScAccordionContentDirective],\n})\nexport class ScAccordionModule {}\n","/* eslint-disable class-methods-use-this */\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { ScPhoneService } from '@snabcentr/client-core';\n\n/**\n * Пайп для форматирования номера телефона.\n *\n * Если переданный номер телефона валиден, он будет отформатирован с использованием метода `formatPhoneNumber` сервиса `ScPhoneService`.\n * Если номер невалиден, возвращается исходное значение.\n */\n@Pipe({\n standalone: true,\n name: 'scFormatePhone',\n})\nexport class ScFormatePhonePipe implements PipeTransform {\n /**\n * Преобразует строковое значение номера телефона.\n *\n * @param value Строка, содержащая номер телефона.\n * @param format Формат возвращаемого значения. `normal` - удобочитаемое представление номера телефона, `clean` - очищенное от лишних символов представление номера телефона, `cleanWithPlus` - очищенное от лишних символов представление номера телефона с `+` в начале.\n *\n * @returns Отформатированный номер телефона, если он валиден, или исходное значение, если он невалиден.\n */\n public transform(value: string, format: 'normal' | 'clean' | 'cleanWithPlus' = 'normal'): string {\n if (ScPhoneService.isValidPhoneNumber(value)) {\n // eslint-disable-next-line default-case\n switch (format) {\n case 'normal':\n return ScPhoneService.formatPhoneNumber(value);\n case 'clean':\n return ScPhoneService.cleanPhoneNumber(value);\n case 'cleanWithPlus':\n return `+${ScPhoneService.cleanPhoneNumber(value)}`;\n }\n }\n\n return value; // Возвращаем оригинальный номер, если он невалиден.\n }\n}\n","import { Directive, ElementRef, HostListener, inject, Input } from '@angular/core';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';\n\nimport { ScLinkLocation } from './sc-link-location';\n\n/**\n * Директива, которая управляет свойствами ссылки адреса электронной почты.\n */\n@Directive({\n standalone: true,\n selector: 'a[scEmailLink]',\n})\nexport class ScEmailLinkDirective {\n /**\n * Ссылка на HTML элемент тега `<a>`.\n */\n private elementReference: ElementRef<HTMLAnchorElement> = inject<ElementRef<HTMLAnchorElement>>(ElementRef);\n\n /**\n * Условное название блока где расположена ссылка.\n */\n @Input({ required: true })\n public linkLocation!: ScLinkLocation;\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Обработчик клика по ссылке.\n */\n @HostListener('click')\n private click(): void {\n const email = /mailto:([^?]+)/.exec(this.elementReference.nativeElement.href)?.at(1);\n\n if (email) {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.emailClick,\n params: {\n emailLocation: this.linkLocation,\n email: email,\n },\n });\n }\n }\n}\n","import { Directive, ElementRef, HostListener, inject, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\nimport { ScPhoneService, ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';\n\nimport { ScLinkLocation } from './sc-link-location';\n\n/**\n * Директива, которая управляет свойствами ссылки номера телефона для валидации значения номера телефона.\n */\n@Directive({\n standalone: true,\n selector: 'a[scTelLink]',\n})\nexport class ScTelLinkDirective implements OnChanges {\n /**\n * Экземпляр базового класса для реализации пользовательского рендеринга.\n */\n private readonly renderer: Renderer2 = inject(Renderer2);\n\n /**\n * Ссылка на HTML элемент тега `<a>`.\n */\n private elementReference: ElementRef<HTMLAnchorElement> = inject<ElementRef<HTMLAnchorElement>>(ElementRef);\n\n /**\n * Номер телефона, который будет проверен на валидность.\n */\n @Input({ alias: 'scTelLink', required: true })\n public tel!: string;\n\n /**\n * Условное название блока где расположена ссылка.\n */\n @Input({ required: true })\n public linkLocation!: ScLinkLocation;\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /** @inheritDoc */\n public ngOnChanges(changes: SimpleChanges): void {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (changes['tel']) {\n this.updateLinkState();\n }\n }\n\n /**\n * Обработчик клика по ссылке.\n */\n @HostListener('click')\n private click(): void {\n if (ScPhoneService.isValidPhoneNumber(this.tel)) {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.phoneClick,\n params: {\n phoneLocation: this.linkLocation,\n phone: this.tel,\n },\n });\n }\n }\n\n /**\n * Обновляет состояние ссылки на основе валидности номера телефона.\n */\n private updateLinkState(): void {\n if (ScPhoneService.isValidPhoneNumber(this.tel)) {\n // Если номер валиден, активируем ссылку.\n this.renderer.removeAttribute(this.elementReference.nativeElement, 'aria-disabled');\n this.renderer.removeClass(this.elementReference.nativeElement, 'disabled');\n this.renderer.setAttribute(this.elementReference.nativeElement, 'href', `tel:${ScPhoneService.formatPhoneNumber(this.tel)}`);\n } else {\n // Если номер невалиден, отключаем ссылку.\n this.renderer.setAttribute(this.elementReference.nativeElement, 'aria-disabled', 'true');\n this.renderer.addClass(this.elementReference.nativeElement, 'disabled');\n this.renderer.removeAttribute(this.elementReference.nativeElement, 'href');\n }\n }\n}\n","import { ScFormatePhonePipe } from '../../pipes/sc-formatted-phone';\nimport { ScEmailLinkDirective } from './sc-email-link.directive';\nimport { ScTelLinkDirective } from './sc-tel-link.directive';\n\n/**\n * Список директив ссылок.\n */\nexport const ScLinks = [ScTelLinkDirective, ScEmailLinkDirective, ScFormatePhonePipe] as const;\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MaskitoDirective } from '@maskito/angular';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLoader } from '@taiga-ui/core';\nimport { TuiDataListWrapper, TuiFieldErrorPipe, TuiFilterByInputPipe, TuiStringifyContentPipe } from '@taiga-ui/kit';\nimport { TuiComboBoxModule, TuiInputModule, TuiInputPhoneModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScAddressesSelectionFieldComponent } from './addresses-selection-field/sc-addresses-selection-field.component';\nimport { ScSuggestionFieldComponent } from './suggestion-field/sc-suggestion-field.component';\n\n/**\n * Модуль полей ввода.\n */\n@NgModule({\n declarations: [ScAddressesSelectionFieldComponent, ScSuggestionFieldComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TuiInputModule,\n TuiTextfieldControllerModule,\n TuiLabel,\n TuiLet,\n TuiFieldErrorPipe,\n TuiError,\n ...TuiDataList,\n TuiLoader,\n TuiComboBoxModule,\n ...TuiDataListWrapper,\n TuiFilterByInputPipe,\n TuiStringifyContentPipe,\n TuiInputPhoneModule,\n TuiButton,\n MaskitoDirective,\n ],\n exports: [ScAddressesSelectionFieldComponent, ScSuggestionFieldComponent],\n})\nexport class ScFormFieldsModule {}\n","/* eslint-disable no-restricted-syntax,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n ScContactsService,\n ScConvertersService,\n ScIBankAccount,\n ScIContactBase,\n ScIContactOnDataCreate,\n ScIContactWithRelations,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\n\n/**\n * Компонент формы создания нового контактного лица.\n */\n@Component({\n selector: 'sc-add-contact-dialog',\n templateUrl: './sc-add-contact-dialog.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddContactDialogComponent implements AfterViewInit {\n /**\n * Группа с полями контактного лица.\n */\n public form = new FormGroup<{\n name: FormControl<string | null>;\n phone: FormControl<string | null>;\n email: FormControl<string | null>;\n position: FormControl<string | null>;\n }>({\n name: new FormControl<string | null>(null, Validators.required),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n email: new FormControl<string | null>(null, Validators.email),\n position: new FormControl<string | null>(null, Validators.required),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса добавления контактного лица.\n */\n private readonly request$ = this.onSubmit.pipe(\n map(() => this.form.value),\n filter((value): value is ScIContactOnDataCreate => this.form.valid),\n map((value) => this.convertersService.removeNull<ScIContactOnDataCreate>({ ...value, ...this.context.data })),\n switchMap((data) => {\n return this.contactsService.createContact$(data).pipe(\n tap((contact) => {\n this.context.completeWith(contact);\n }),\n catchError((error: unknown) => {\n tuiMarkControlAsTouchedAndValidate(this.form);\n\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n }\n return of({} as ScIBankAccount);\n }),\n startWith(null)\n );\n }),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по номеру телефона.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScAddContactDialogComponent}.\n *\n * @param contactsService Сервис для работы с контактными лицами.\n * @param convertersService Сервис конвертации данных.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n private readonly contactsService: ScContactsService,\n public readonly convertersService: ScConvertersService,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context: TuiDialogContext<ScIContactWithRelations, Omit<ScIContactOnDataCreate, keyof ScIContactBase>>\n ) {}\n\n /** @inheritdoc */\n public ngAfterViewInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileContactAddShow,\n });\n }\n}\n","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-3\"\n>\n <sc-new-contact-form [form]=\"form\"></sc-new-contact-form>\n <div class=\"flex justify-center gap-4\">\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n iconStart=\"@tui.x\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.save\"\n >\n Сохранить\n </button>\n </div>\n</form>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ScIContact } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент контактного лица в списке.\n */\n@Component({\n selector: 'sc-contacts-accordion',\n templateUrl: './sc-contacts-accordion.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScContactsAccordionComponent {\n /**\n * Контактные лица.\n */\n @Input()\n public contacts$: Observable<ScIContact[] | null>;\n\n /**\n * Событие нажатия на кнопку добавления контактного лица.\n */\n @Output()\n public addContactClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица.\n */\n @Output()\n public deleteButtonClick: EventEmitter<ScIContact> = new EventEmitter<ScIContact>();\n}\n","<sc-accordion (addButtonClick)=\"addContactClick.emit()\">\n Контакты\n <ng-template scAccordionContent>\n <tui-loader\n *tuiLet=\"contacts$ | async as contacts\"\n [overlay]=\"true\"\n [showLoader]=\"contacts === null\"\n >\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!contacts || contacts.length; else contactsNotExist\">\n <div\n *ngFor=\"let contact of contacts\"\n class=\"flex gap-2 border-b border-tui-base-03\"\n >\n <div class=\"flex grow flex-col gap-2\">\n {{ contact.name }}\n <a\n *ngIf=\"contact.phone\"\n tuiLink\n [scTelLink]=\"contact.phone\"\n linkLocation=\"contact\"\n iconStart=\"@tui.phone\"\n [pseudo]=\"true\"\n href=\"tel:{{ contact.phone | scFormatePhone }}\"\n >\n {{ contact.phone | scFormatePhone }}\n </a>\n <a\n *ngIf=\"contact.email\"\n tuiLink\n scEmailLink\n linkLocation=\"contact\"\n iconStart=\"@tui.mail\"\n [pseudo]=\"true\"\n href=\"mailto:{{ contact.email }}\"\n >\n {{ contact.email }}\n </a>\n </div>\n <!-- Функционал удаления временно не доступен пользователю. -->\n <!-- <div class=\"flex flex-col md:flex-row gap-1\">\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"@tui.trash-2\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteButtonClick.emit(contact)\"\n ></button>\n </div> -->\n </div>\n </ng-container>\n\n <ng-template #contactsNotExist>\n <tui-notification size=\"l\">\n <div>\n <div class=\"flex flex-wrap gap-2 font-medium\">Контакты не указаны.</div>\n </div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n</sc-accordion>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MaskitoDirective } from '@maskito/angular';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLink, TuiLoader, TuiNotification } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiDataListWrapper, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule, TuiSelectModule } from '@taiga-ui/legacy';\n\nimport { ScAccordionModule } from '../accordion';\nimport { ScLinks } from '../directives/links/sc-links';\nimport { ScFormFieldsModule } from '../form-fields/form-fields.module';\nimport { ScAddContactDialogComponent } from './add-contact-dialog/sc-add-contact-dialog.component';\nimport { ScContactsAccordionComponent } from './contacts-accordion/sc-contacts-accordion.component';\nimport { ScNewContactFormComponent } from './new-contact-form/sc-new-contact-form.component';\n\n/**\n * Модуль контактных лиц.\n */\n@NgModule({\n declarations: [ScContactsAccordionComponent, ScNewContactFormComponent, ScAddContactDialogComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ScAccordionModule,\n TuiButton,\n TuiLoader,\n TuiLet,\n TuiNotification,\n TuiLink,\n ScFormFieldsModule,\n MaskitoDirective,\n TuiFieldErrorPipe,\n TuiSelectModule,\n ...TuiDataList,\n ...TuiDataListWrapper,\n TuiLabel,\n TuiInputModule,\n TuiInputPhoneModule,\n TuiError,\n ...ScLinks,\n TuiButtonLoading,\n ],\n exports: [ScContactsAccordionComponent, ScNewContactFormComponent, ScAddContactDialogComponent],\n})\nexport class ScContactsModule {}\n","/* eslint-disable no-restricted-syntax,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ScContragentService, ScIBankAccount, ScIBankAccountOnDataCreate } from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { scBicValidator, scCorrespondentAccountValidator } from '../../validators';\n\n/**\n * Компонент формы создания нового банковского счета контрагента.\n */\n@Component({\n selector: 'sc-add-contragent-bank-account-dialog',\n templateUrl: './sc-add-contragent-bank-account-dialog.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddContragentBankAccountsDialogComponent {\n /**\n * Группа с полем банковских реквизитов.\n */\n public form = new FormGroup<{\n bankName: FormControl<string | null>;\n bic: FormControl<string | null>;\n accountNumber: FormControl<string | null>;\n correspondentAccount: FormControl<string | null>;\n currencyId: FormControl<number | null>;\n }>({\n bankName: new FormControl<string | null>(null, Validators.required),\n bic: new FormControl<string | null>(null, [Validators.required, Validators.minLength(9), scBicValidator]),\n accountNumber: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20)]),\n correspondentAccount: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20), scCorrespondentAccountValidator]),\n currencyId: new FormControl<number | null>(null, Validators.required),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса создания банковского счёта контрагента.\n */\n private readonly request$ = this.onSubmit.pipe(\n map(() => this.form.value),\n filter((value): value is ScIBankAccountOnDataCreate => this.form.valid),\n switchMap((value) => {\n return this.contragentService.createContragentBankAccount$(this.context.data.contragentId, value).pipe(\n tap((bankAccount) => {\n this.context.completeWith(bankAccount);\n }),\n catchError((error: unknown) => {\n tuiMarkControlAsTouchedAndValidate(this.form);\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n }\n\n return of({} as ScIBankAccount);\n }),\n startWith(null)\n );\n }),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по номеру телефона.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScAddContragentBankAccountsFormComponent}.\n *\n * @param contragentService Сервис работы с контрагентами.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n private readonly contragentService: ScContragentService,\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context: TuiDialogContext<ScIBankAccount, { contragentId: number }>\n ) {}\n}\n","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-3\"\n>\n <sc-new-contragent-bank-account-form [form]=\"form\"></sc-new-contragent-bank-account-form>\n <div class=\"flex justify-center gap-4\">\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n iconStart=\"@tui.x\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.save\"\n >\n Сохранить\n </button>\n </div>\n</form>\n","/* eslint-disable class-methods-use-this,@typescript-eslint/unbound-method,no-restricted-syntax */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, Inject, Optional } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n ScContragent,\n ScContragentOnDataCreate,\n ScContragentService,\n ScConvertersService,\n ScIBankAccount,\n ScICountry,\n ScICurrency,\n ScIReferencesTypes,\n ScISalesDirection,\n ScLocationsService,\n ScOpfList,\n ScReferencesService,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { scBicValidator, scCorrespondentAccountValidator } from '../../validators';\n\n/**\n * Компотен добавления контрагента.\n */\n@Component({\n selector: 'sc-add-contragent-dialog',\n templateUrl: './sc-add-contragent-dialog.component.html',\n styleUrls: ['./sc-add-contragent-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddContragentDialogComponent implements AfterViewInit {\n /**\n * Перечисление организационно-правовых форм.\n */\n public readonly opfListEnum: typeof ScOpfList = ScOpfList;\n\n /**\n * Расположение баннера.\n */\n public stepIndex = 0;\n\n /**\n * Родительская `FormGroup`.\n */\n public form = new FormGroup({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n contragent: new FormGroup<any>({}),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса добавления контрагента.\n */\n private readonly request$ = this.onSubmit.pipe(\n map(() => this.form.value.contragent as ScContragentOnDataCreate),\n filter((value): value is ScContragentOnDataCreate => this.form.valid),\n switchMap((value) => {\n return this.contragentService.createContragent$(this.convertersService.removeNullRecursive(value)).pipe(\n tap((contragent) => {\n this.context.completeWith(contragent);\n }),\n catchError((error: unknown) => {\n tuiMarkControlAsTouchedAndValidate(this.form);\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n\n this.stepIndex = 0;\n }\n\n return of({} as ScIBankAccount);\n }),\n startWith(null)\n );\n }),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по номеру телефона.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScAddContragentDialogComponent}.\n *\n * @param referencesService Сервис справочников.\n * @param contragentService Сервис работы с контрагентами.\n * @param convertersService Сервис конвертации данных.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param locationsService Сервис для получения списков стран, регионов, городов.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n private readonly referencesService: ScReferencesService,\n private readonly contragentService: ScContragentService,\n private readonly convertersService: ScConvertersService,\n private readonly userMetrikaService: ScUserMetrikaService,\n private readonly locationsService: ScLocationsService,\n @Optional()\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context: TuiDialogContext<ScContragent, void>\n ) {}\n\n /** @inheritdoc */\n public ngAfterViewInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileContragentAddShow,\n });\n }\n\n /**\n * Текущий выбранный ОПФ.\n */\n public get selectOpf(): ScOpfList {\n return this.opfListEnum[this.form.controls.contragent.controls['opf'].value as keyof typeof ScOpfList];\n }\n\n /**\n * Список групп полей банковских реквизитов.\n */\n public get bankAccounts(): FormArray<ReturnType<ScAddContragentDialogComponent['createBankAccountGroup']>> {\n return this.form.controls.contragent.get('bankAccounts') as FormArray<ReturnType<ScAddContragentDialogComponent['createBankAccountGroup']>>;\n }\n\n /**\n * Список групп полей контактных лиц.\n */\n public get contacts(): FormArray<ReturnType<ScAddContragentDialogComponent['createContactGroup']>> {\n return this.form.controls.contragent.get('contacts') as FormArray<ReturnType<ScAddContragentDialogComponent['createContactGroup']>>;\n }\n\n /**\n * Выполняет навигацию по форме создания контрагента.\n *\n * @param delta Значение, на которое необходимо выполнить навигацию.\n */\n public navigate(delta: number): void {\n this.stepIndex = (this.stepIndex + delta) % 3;\n }\n\n /**\n * Проверяет, может ли пользователь перейти к следующему шагу создания контрагента.\n *\n * @returns Выводит значение `boolean` на основании {@link stepIndex}.\n */\n public canNextStep(): boolean {\n switch (this.stepIndex) {\n case 0:\n for (const key in this.form.controls.contragent.controls) {\n if (\n Object.prototype.hasOwnProperty.call(this.form.controls.contragent.controls, key) &&\n // eslint-disable-next-line security/detect-object-injection\n !Array.isArray(this.form.controls.contragent.controls[key].value) &&\n // eslint-disable-next-line security/detect-object-injection\n this.form.controls.contragent.controls[key].invalid\n ) {\n return false;\n }\n }\n\n return true;\n case 1:\n return this.form.controls.contragent.controls['contacts'].valid;\n case 2:\n return this.form.controls.contragent.controls['bankAccounts'].valid;\n default:\n return true;\n }\n }\n\n /**\n * Возвращает {@link Observable} списка направлений продаж.\n */\n public getSalesDirections$(): Observable<ScISalesDirection[]> {\n return this.referencesService.directions$;\n }\n\n /**\n * Возвращает {@link Observable} списка направлений продаж.\n *\n * @param directionId Идентификатор направления продаж.\n */\n public getDirectionById$(directionId: number): Observable<ScISalesDirection | undefined> {\n return this.referencesService.getDirectionById$(directionId);\n }\n\n /**\n * Возвращает {@link Observable} список организационно-правовых форм.\n */\n public getOpf$(): Observable<Array<ScIReferencesTypes<ScOpfList, typeof ScOpfList>>> {\n return this.referencesService.opf$;\n }\n\n /**\n * Возвращает {@link Observable} организационно-правовой формы, соответствующий символьному обозначению (slug) на входе.\n *\n * @param slug Символьное обозначение (slug).\n */\n public getOpfBySlug$(slug: keyof typeof ScOpfList): Observable<ScIReferencesTypes<ScOpfList, typeof ScOpfList> | undefined> {\n return this.referencesService.getOpfBySlug$(slug);\n }\n\n /**\n * Возвращает {@link Observable} списка валют.\n */\n public getCurrencies$(): Observable<ScICurrency[]> {\n return this.referencesService.currencies$;\n }\n\n /**\n * Возвращает {@link Observable} валюты, соответствующий идентификатору на входе.\n *\n * @param currencyId — Идентификатор валюты.\n */\n public getCurrencyById$(currencyId: number): Observable<ScICurrency | undefined> {\n return this.referencesService.getCurrencyById$(currencyId);\n }\n\n /**\n * Возвращает {@link Observable} списка стран.\n */\n public getCountries$(): Observable<ScICountry[]> {\n return this.locationsService.getCountries$();\n }\n\n /**\n * Возвращает {@link Observable} страны, соответствующий идентификатору на входе.\n *\n * @param countryId — Идентификатор страны.\n */\n public getCountriesById$(countryId: number): Observable<ScICountry | undefined> {\n return this.locationsService.getCountries$().pipe(map((countries) => countries.find((country) => country.id === countryId)));\n }\n\n /**\n * Создаёт группу полей банковских реквизитов.\n */\n private createBankAccountGroup(): FormGroup<{\n bankName: FormControl<string | null>;\n bic: FormControl<string | null>;\n accountNumber: FormControl<string | null>;\n correspondentAccount: FormControl<string | null>;\n currencyId: FormControl<number | null>;\n }> {\n return new FormGroup({\n bankName: new FormControl<string | null>(null, Validators.required),\n bic: new FormControl<string | null>(null, [Validators.required, Validators.minLength(9), scBicValidator]),\n accountNumber: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20)]),\n correspondentAccount: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20), scCorrespondentAccountValidator]),\n currencyId: new FormControl<number | null>(null, Validators.required),\n });\n }\n\n /**\n * Добавляет Банковские реквизиты.\n */\n public addBankAccountGroup(): void {\n this.bankAccounts.push(this.createBankAccountGroup());\n }\n\n /**\n * Удаляет банковские реквизиты.\n *\n * @param index Индекс банковских реквизитов.\n */\n public removeBankAccountGroup(index: number): void {\n this.bankAccounts.removeAt(index);\n }\n\n /**\n * Создаёт группу полей контактного лица.\n */\n public createContactGroup(): FormGroup<{\n name: FormControl<string | null>;\n phone: FormControl<string | null>;\n email: FormControl<string | null>;\n position: FormControl<string | null>;\n }> {\n return new FormGroup({\n name: new FormControl<string | null>(null, Validators.required),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n email: new FormControl<string | null>(null, Validators.email),\n position: new FormControl<string | null>(null, Validators.required),\n });\n }\n\n /**\n * Добавляет контактное лицо контрагента.\n */\n public addContactGroup(): void {\n this.contacts.push(this.createContactGroup());\n }\n\n /**\n * Удаляет контактное лицо контрагента.\n *\n * @param index Индекс контактного лица.\n */\n public removeContactGroup(index: number): void {\n this.contacts.removeAt(index);\n }\n}\n","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-4\"\n>\n <tui-elastic-container>\n <sc-new-contragent-form [class.!hidden]=\"stepIndex !== 0\"></sc-new-contragent-form>\n\n <div [class.!hidden]=\"stepIndex !== 1\">\n <div\n *ngIf=\"contacts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">Контакты</p>\n <div\n *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">Контакт №{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contact-form [form]=\"contact\"></sc-new-contact-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n Добавить контакт\n </button>\n </div>\n </div>\n\n <div [class.!hidden]=\"stepIndex !== 2\">\n <div\n *ngIf=\"bankAccounts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">Банковские реквизиты</p>\n <div\n *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">Банковские реквизиты №{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contragent-bank-account-form [form]=\"bankAccount\"></sc-new-contragent-bank-account-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n Добавить банковские реквизиты\n </button>\n </div>\n </div>\n </tui-elastic-container>\n <div class=\"flex justify-center gap-2\">\n <button\n *ngIf=\"stepIndex > 0\"\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"stepIndex = (stepIndex - 1) % 3\"\n >\n Назад\n </button>\n <button\n *ngIf=\"stepIndex === 0\"\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n <button\n *ngIf=\"stepIndex === 2 || (stepIndex === 1 && !form.controls.contragent.controls['bankAccounts']); else nextIndexBtn\"\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n class=\"self-center\"\n >\n Создать\n </button>\n <ng-template #nextIndexBtn>\n <button\n tuiButton\n [disabled]=\"!canNextStep()\"\n type=\"button\"\n (click)=\"stepIndex = (stepIndex + 1) % 3\"\n >\n Далее\n </button>\n </ng-template>\n </div>\n</form>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ScContragent, ScContragentService, ScIBankAccount, ScIContact } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент контрагента пользователя.\n */\n@Component({\n selector: 'sc-contragents-accordion-item',\n templateUrl: './sc-contragents-accordion-item.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScContragentsAccordionItemComponent implements OnInit {\n /**\n * Контрагент пользователя.\n */\n @Input()\n public contragent: ScContragent;\n\n /**\n * Событие нажатия на кнопку удаления контрагента.\n */\n @Output()\n public deleteContragentClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку добавления банковского счёта контрагенту.\n */\n @Output()\n public addContragentBankAccountClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления банковского счёта контрагента.\n */\n @Output()\n public deleteContragentBankAccountClick: EventEmitter<ScIBankAccount> = new EventEmitter<ScIBankAccount>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица контрагенту.\n */\n @Output()\n public addContragentContactClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у контрагента.\n */\n @Output()\n public deleteContragentContactClick: EventEmitter<{ contact: ScIContact; contragent: ScContragent }> = new EventEmitter<{ contact: ScIContact; contragent: ScContragent }>();\n\n /**\n * Список банковских счетов контрагента.\n */\n public bankAccounts$?: Observable<ScIBankAccount[] | null>;\n\n /**\n * Список банковских счетов контрагента.\n */\n public contacts$?: Observable<ScIContact[] | null>;\n\n /**\n * Инициализирует экземпляр класса {@link ScContragentsAccordionItemComponent}.\n *\n * @param contragentService Сервис работы с контрагентами.\n */\n public constructor(private readonly contragentService: ScContragentService) {}\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.bankAccounts$ = this.contragentService.getContragentBankAccounts$(this.contragent.id);\n this.contacts$ = this.contragentService.getContragentContacts$(this.contragent.id);\n }\n\n /**\n * Обработчик нажатия на кнопку удаления контактного лица у контрагента.\n *\n * @param contact Контактное лицо.\n * @param contragent Контрагент.\n */\n public onDeleteContragentContactClick(contact: ScIContact, contragent: ScContragent): void {\n this.deleteContragentContactClick.emit({ contact: contact, contragent: contragent });\n }\n}\n","<sc-accordion [showAddButton]=\"false\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">ИНН: {{ 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 grow flex-col gap-2\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">ИНН: {{ inn }}</span>\n <span *ngIf=\"$any(contragent).kpp as kpp\">КПП: {{ kpp }}</span>\n </div>\n <!-- Функционал удаления и редактирования временно не доступен пользователю. -->\n <!-- <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"@tui.pencil\"\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=\"@tui.trash-2\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteContragentClick.emit(contragent)\"\n ></button> -->\n </div>\n\n <sc-accordion (addButtonClick)=\"addContragentBankAccountClick.emit(contragent)\">\n Банковские реквизиты\n <ng-template scAccordionContent>\n <tui-loader\n *tuiLet=\"bankAccounts$ | async as bankAccounts\"\n [overlay]=\"true\"\n [showLoader]=\"bankAccounts === null\"\n >\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!bankAccounts || bankAccounts.length; else bankAccountsNotExist\">\n <div\n *ngFor=\"let bankAccount of bankAccounts\"\n class=\"flex gap-2 border-b border-tui-base-03\"\n >\n <div class=\"flex grow flex-col gap-2\">\n <span>Банк: {{ bankAccount.bankName }}</span>\n <span>БИК: {{ bankAccount.bic }}</span>\n <span>Р/счёт: {{ bankAccount.accountNumber }}</span>\n <span>Кор/счёт: {{ bankAccount.correspondentAccount }}</span>\n <span>Валюта: {{ 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=\"@tui.pencil\"\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=\"@tui.trash-2\"\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>\n <div class=\"flex flex-wrap gap-2 font-medium\">\n У контрагента <span class=\"font-bold\">{{ contragent.name }}</span> не указаны банковские реквизиты.\n </div>\n </div></tui-notification\n >\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","import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';\nimport { ScContragent, ScContragentService, ScIBankAccount, ScIContact } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент контрагента пользователя.\n */\n@Component({\n selector: 'sc-contragents-accordion',\n templateUrl: './sc-contragents-accordion.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScContragentsAccordionComponent {\n /**\n * {@link Observable} данных о контрагентах пользователя.\n */\n public contragents$: Observable<ScContragent[] | null> = this.contragentService.contragents$;\n\n /**\n * Событие нажатия на кнопку удаления контрагента.\n */\n @Output()\n public addContragentClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления контрагента.\n */\n @Output()\n public deleteContragentClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку добавления банковского счёта контрагенту.\n */\n @Output()\n public addContragentBankAccountClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления банковского счёта контрагента.\n */\n @Output()\n public deleteContragentBankAccountClick: EventEmitter<ScIBankAccount> = new EventEmitter<ScIBankAccount>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица контрагенту.\n */\n @Output()\n public addContragentContactClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у контрагента.\n */\n @Output()\n public deleteContragentContactClick: EventEmitter<{ contact: ScIContact; contragent: ScContragent }> = new EventEmitter<{ contact: ScIContact; contragent: ScContragent }>();\n\n /**\n * Инициализирует экземпляр класса {@link ScContragentsAccordionComponent}.\n *\n * @param contragentService Сервис работы с контрагентами.\n */\n public constructor(private readonly contragentService: ScContragentService) {}\n}\n","<sc-accordion (addButtonClick)=\"addContragentClick.emit()\">\n Контрагенты\n <ng-template scAccordionContent>\n <tui-loader\n *tuiLet=\"contragents$ | async as contragents\"\n [overlay]=\"true\"\n [showLoader]=\"contragents === null\"\n >\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>\n <div class=\"flex flex-wrap gap-2 font-medium\">Контрагенты не указаны.</div>\n </div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n</sc-accordion>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MaskitoDirective } from '@maskito/angular';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLoader, TuiNotification } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiCarousel, TuiDataListWrapper, TuiElasticContainer, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule, TuiSelectModule } from '@taiga-ui/legacy';\n\nimport { ScAccordionModule } from '../accordion';\nimport { ScContactsModule } from '../contacts/sc-contacts.module';\nimport { ScFormFieldsModule } from '../form-fields/form-fields.module';\nimport { ScAddContragentBankAccountsDialogComponent } from './add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component';\nimport { ScAddContragentDialogComponent } from './add-contragent-dialog/sc-add-contragent-dialog.component';\nimport { ScContragentsAccordionItemComponent } from './contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component';\nimport { ScContragentsAccordionComponent } from './contragents-accordion/sc-contragents-accordion.component';\nimport { ScNewContragentBankAccountsFormComponent } from './new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component';\nimport { ScNewContragentFormComponent } from './new-contragent-form/sc-new-contragent-form.component';\n\n/**\n * Модуль для отображение контента разделами, с возможностью скрывать и отображать содержимое.\n */\n@NgModule({\n declarations: [\n ScContragentsAccordionComponent,\n ScContragentsAccordionItemComponent,\n ScNewContragentBankAccountsFormComponent,\n ScAddContragentBankAccountsDialogComponent,\n ScAddContragentDialogComponent,\n ScNewContragentFormComponent,\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n ScAccordionModule,\n TuiButton,\n TuiLoader,\n TuiLet,\n TuiNotification,\n ScContactsModule,\n TuiFieldErrorPipe,\n TuiError,\n TuiSelectModule,\n ...TuiDataList,\n ...TuiDataListWrapper,\n TuiLabel,\n TuiInputModule,\n TuiInputPhoneModule,\n MaskitoDirective,\n ScFormFieldsModule,\n TuiElasticContainer,\n ...TuiCarousel,\n TuiButtonLoading,\n ],\n exports: [\n ScContragentsAccordionComponent,\n ScNewContragentBankAccountsFormComponent,\n ScAddContragentBankAccountsDialogComponent,\n ScAddContragentDialogComponent,\n ScNewContragentFormComponent,\n ],\n})\nexport class ScContragentsModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MaskitoDirective } from '@maskito/angular';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiError, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPasswordModule, TuiInputPhoneModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScVerificationPhoneCheckFormComponent } from './verification-phone-check-form/sc-verification-phone-check-form.component';\n\n/**\n * Модуль отправки кодов подтверждения (номера телефона, адреса эл. почты и т.д.).\n */\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TuiInputPasswordModule,\n TuiInputModule,\n TuiTextfieldControllerModule,\n TuiLink,\n TuiButton,\n TuiLabel,\n TuiFieldErrorPipe,\n TuiError,\n TuiLet,\n TuiLoader,\n TuiInputPhoneModule,\n MaskitoDirective,\n TuiButtonLoading,\n ],\n exports: [ScVerificationPhoneCheckFormComponent],\n declarations: [ScVerificationPhoneCheckFormComponent],\n})\nexport class ScVerificationModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MaskitoDirective } from '@maskito/angular';\nimport { TuiLet, TuiRepeatTimes } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiCheckbox, TuiDataListWrapper, TuiElasticContainer, TuiFieldErrorPipe, TuiStepper } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPasswordModule, TuiInputPhoneModule, TuiSelectModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScContactsModule } from '../contacts/sc-contacts.module';\nimport { ScContragentsModule } from '../contragents/sc-contragents.module';\nimport { ScFormFieldsModule } from '../form-fields/form-fields.module';\nimport { ScVerificationModule } from '../verification';\nimport { ScSignInFormComponent } from './sc-sign-in-form/sc-sign-in-form.component';\nimport { ScSignInFormByEmailComponent } from './sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component';\nimport { ScSignInFormByPhoneComponent } from './sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component';\nimport { ScSignUpFormComponent } from './sign-up-form/sc-sign-up-form.component';\n\n/**\n * Модуль аутентификации.\n */\n@NgModule({\n declarations: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TuiInputPasswordModule,\n TuiInputModule,\n TuiTextfieldControllerModule,\n TuiLink,\n TuiButton,\n TuiLabel,\n TuiFieldErrorPipe,\n TuiError,\n TuiLet,\n TuiLoader,\n TuiInputPhoneModule,\n MaskitoDirective,\n ScVerificationModule,\n ScFormFieldsModule,\n ...TuiDataList,\n TuiCheckbox,\n TuiElasticContainer,\n ...TuiDataListWrapper,\n TuiSelectModule,\n ScContragentsModule,\n ScContactsModule,\n ...TuiStepper,\n TuiRepeatTimes,\n TuiButtonLoading,\n ],\n exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent],\n})\nexport class ScAuthModule {}\n","import { Injectable } from '@angular/core';\n\n/**\n * Класс-помощник для конвертации пикселей.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScPxConverter {\n private rootFontSize = 16;\n\n /**\n * Конвертирует пиксели в rem.\n *\n * @param px Значение которое необходимо конвертировать.\n */\n public pxToRem(px: number): number {\n return px / this.rootFontSize;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n Output,\n QueryList,\n TemplateRef,\n} from '@angular/core';\nimport { IntersectionObserverService } from '@ng-web-apis/intersection-observer';\nimport { ScBanner, ScBannerService, ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';\nimport { map, Observable, shareReplay, Subject, tap } from 'rxjs';\n\nimport { ScPxConverter } from '../helpers';\n\n/**\n * Баннер с прокруткой переданных {@link TemplateRef} элементов, и баннеров локации.\n */\n@Component({\n selector: 'sc-banner',\n templateUrl: './sc-banner.component.html',\n styleUrls: ['./sc-banner.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [IntersectionObserverService],\n})\nexport class ScBannerComponent {\n /**\n * Признак, что необходимо показывать кнопки навигации.\n */\n @Input()\n public navigateButton: boolean = true;\n\n /**\n * Интервал автоматической смены слайдов в миллисекундах (используйте 0, чтобы отключить автоматическую смену слайда).\n */\n @Input()\n public duration: number = 5000;\n\n /**\n * Местоположение баннера.\n */\n @Input()\n public bannerLocation?: string;\n\n /**\n * Признак, что компонент должен растягиваться.\n */\n @Input()\n public resizable: boolean = false;\n\n /**\n * Событие загрузки баннеров с количеством полученных баннеров.\n */\n @Output()\n public loadBannersEvent: EventEmitter<number> = new EventEmitter<number>();\n\n /**\n * Событие нажатия на изображение баннера.\n */\n @Output()\n public clickBannerEvent: EventEmitter<ScBanner> = new EventEmitter<ScBanner>();\n\n /**\n * Список ссылок на элемент представлений шаблонов.\n */\n @ContentChildren('banner')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public bannersListRef: QueryList<TemplateRef<any>>;\n\n /**\n * Идентификатор текущего баннера.\n */\n public currentBannerId: number = 0;\n\n /**\n * {@link Subject} изменения состояния таймера.\n */\n public readonly toggleTimer$: Subject<boolean> = new Subject<boolean>();\n\n /**\n * {@link Observable} обновления списка баннеров.\n */\n public readonly banners$: Observable<ScBanner[]> = this.bannerService.banners$.pipe(\n map((banners) => banners.filter((banner) => banner.location === this.bannerLocation).reverse()),\n tap((banners) => {\n if (banners.length > 0) {\n if (!this.resizable) {\n this.aspectRatio = `${banners[0].width} / ${banners[0].height}`;\n }\n\n this.banners = banners;\n this.toggleTimer$.next(true);\n }\n\n this.loadBannersEvent.emit(banners.length);\n }),\n // eslint-disable-next-line rxjs/no-sharereplay\n shareReplay(1)\n );\n\n /**\n * Список баннеров.\n */\n public banners?: ScBanner[] = [];\n\n /**\n * Свойство, от которого зависит соотношение `:host` компонента.\n */\n @HostBinding('style.aspect-ratio')\n public aspectRatio: string = '';\n\n /**\n * Инициализирует экземпляр класса {@link ScBannerComponent}.\n *\n * @param cdr Объект для работы с обнаружением изменений.\n * @param bannerService Сервис для работы с баннерами.\n * @param entries$ Intersection Observer Service.\n * @param element Элемент баннера.\n * @param pxConverter Экземпляр класса-помощника для конвертации пикселей.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly cdr: ChangeDetectorRef,\n private readonly bannerService: ScBannerService,\n @Inject(IntersectionObserverService) private readonly entries$: IntersectionObserverService,\n @Inject(ElementRef) private readonly element: ElementRef<Element>,\n private pxConverter: ScPxConverter,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {}\n\n /**\n * Свойство, от которого зависит наличие класса `!hidden` у `:host` компонента.\n */\n @HostBinding('class.!hidden')\n private get isHidden(): boolean {\n return !this.banners || this.bannersListRef.length + this.banners.length === 0;\n }\n\n /**\n * Обработчик нажатия на баннер, генерирующий событие {@link clickBannerImgEvent}.\n *\n * @param banner Баннер, по ссылке которого совершён переход.\n */\n public onClick(banner: ScBanner): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.bannerClick,\n params: {\n banner_id: banner.id,\n },\n });\n\n if (banner.url) {\n this.clickBannerEvent.emit(banner);\n }\n }\n}\n","<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel\n [duration]=\"duration\"\n #carousel\n [attr.resizable]=\"resizable\"\n class=\"size-full overflow-hidden rounded-xl bg-white\"\n [(index)]=\"currentBannerId\"\n >\n <ng-container *ngFor=\"let banner of banners; let index = index\">\n <ng-container [ngSwitch]=\"banner.mediaType\">\n <ng-container *ngSwitchCase=\"'image'\">\n <a\n *tuiItem\n (click)=\"onClick(banner)\"\n target=\"_blank\"\n [title]=\"banner.title\"\n [style.aspect-ratio]=\"aspectRatio\"\n [attr.href]=\"banner.url ? banner.url : null\"\n [style.background-image]=\"'url(' + banner.mediaFile + ')'\"\n class=\"size-full bg-[length:100%_100%]\"\n >\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div\n *tuiItem\n [style.aspect-ratio]=\"aspectRatio\"\n class=\"size-full overflow-hidden\"\n >\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n\n <div\n *ngIf=\"navigateButton && duration && this.banners && this.bannersListRef.length + this.banners.length > 1\"\n tuiTheme=\"light\"\n class=\"flex items-center\"\n >\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.prev()\"\n class=\"!absolute left-2\"\n ></button>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.next()\"\n class=\"!absolute right-2\"\n ></button>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { WaIntersectionObserver } from '@ng-web-apis/intersection-observer';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiLoader } from '@taiga-ui/core';\nimport { TuiCarousel } from '@taiga-ui/kit';\n\nimport { ScBannerComponent } from './sc-banner.component';\n\n/**\n * Модуль баннеров.\n */\n@NgModule({\n declarations: [ScBannerComponent],\n imports: [CommonModule, RouterModule, TuiButton, ...TuiCarousel, TuiLoader, ...WaIntersectionObserver, TuiLet],\n exports: [ScBannerComponent],\n})\nexport class ScBannerModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n/**\n * Компонент кнопки избранных товаров и категорий.\n */\n@Component({\n selector: 'sc-favorite-button',\n templateUrl: './sc-favorite-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFavoriteButtonComponent {\n /**\n * Событие нажатия на кнопку.\n */\n @Output()\n public clickEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Признак наличия товара или категории в избранных.\n */\n @Input()\n public isFavorite: boolean = false;\n\n /**\n * Признак, что необходимо отобразить загрузку на кнопке.\n */\n @Input()\n public showLoader: boolean = false;\n\n /**\n * Признак, что кнопка деактивирована.\n */\n @Input()\n public disabled: boolean = false;\n}\n","<button\n tuiIconButton\n (click)=\"clickEvent.emit()\"\n [disabled]=\"disabled\"\n [loading]=\"showLoader\"\n appearance=\"flat\"\n size=\"s\"\n>\n <tui-icon\n class=\"!text-xl text-tui-primary\"\n [icon]=\"isFavorite ? '@tui.bookmark-filled' : '@tui.bookmark'\"\n ></tui-icon>\n</button>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Inject, inject, Input, input, InputSignal, Output } from '@angular/core';\nimport { SC_PATH_IMAGE_NOT_FOUND, SC_URLS, ScAuthService, ScCategory, ScIUrls } from '@snabcentr/client-core';\nimport { TUI_IS_MOBILE, TuiLooseUnion } from '@taiga-ui/cdk';\nimport { TuiSizeS } from '@taiga-ui/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Карточка категории.\n */\n@Component({\n selector: 'sc-category-card',\n templateUrl: './sc-category-card.component.html',\n styleUrls: ['./sc-category-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScCategoryCardComponent {\n /**\n * Данные о категории.\n */\n @Input()\n public category?: ScCategory;\n\n /**\n * Размер карточки категории.\n */\n @Input()\n @HostBinding('attr.data-size')\n public size: TuiSizeS = 'm';\n\n // TODO: Переделать на HostBinding.\n /**\n * Вид отображения карточки.\n */\n public appearance: InputSignal<TuiLooseUnion<'root' | 'normal'>> = input<TuiLooseUnion<'root' | 'normal'>>('normal');\n\n /**\n * Признак, что необходимо отобразить лоадер для кнопки избранных товаров и категорий.\n */\n public favoriteShowLoader: boolean = false;\n\n /**\n * {@link Observable} изменения статуса авторизации.\n */\n public readonly authStatus$: Observable<boolean> = inject(ScAuthService).getAuthChange();\n\n /**\n * Признак наведения на карточку.\n */\n protected isHover: boolean = false;\n\n /**\n * Признак что категория имеет поведение наведения и скрытия названия.\n */\n @Input()\n public enableHover: boolean = false;\n\n /**\n * Признак того, отображается этот компонент на мобильном устройстве или нет.\n */\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n\n /**\n * Событие нажатия на кнопку избранной категории.\n */\n @Output()\n public clickOnFavoriteEvent: EventEmitter<ScCategory> = new EventEmitter<ScCategory>();\n\n /**\n * Ссылка на страницу категории. Используется именно `href`, так как остановить событие клика для `routerLink` не вышло.\n */\n @Input()\n public href?: string;\n\n /**\n * Инициализирует экземпляр класса {@link CategoryCardComponent}.\n *\n * @param urls Список ссылок на разделы backend'a.\n * @param pathImageNotFound Путь до изображения 'Товар не найден'.\n * @param cdr Объект для работы с обнаружением изменений.\n */\n public constructor(\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n @Inject(SC_PATH_IMAGE_NOT_FOUND) private readonly pathImageNotFound: string,\n private readonly cdr: ChangeDetectorRef\n ) {}\n\n /**\n * Обработчик события наведения.\n *\n * @param isHover Признак наведения на карточку.\n */\n protected onHovered(isHover: boolean): void {\n this.isHover = isHover;\n }\n\n /**\n * Возвращает путь к изображению категории. Если путь отсутствует, то вернёт изображение по-умолчанию (\"product_not_found\").\n *\n * @param category Данные о категории.\n */\n protected getCategoryImgURL(category: ScCategory): string {\n return category.properties?.image ? `${this.urls.imgServerUrl}/${category.properties.image}` : this.pathImageNotFound;\n }\n\n /**\n * Устанавливает компонент в очередь на обновление.\n *\n * @deprecated\n */\n public markForCheck(): void {\n this.cdr.markForCheck();\n }\n}\n","<div class=\"relative\">\n <a\n (tuiHoveredChange)=\"onHovered($event)\"\n [routerLink]=\"href ?? null\"\n class=\"category-button rounded-tui-radius-m border-tui-base-04 flex flex-col overflow-hidden border text-center\"\n >\n <div class=\"img-wrapper w-full grow overflow-hidden\">\n <img\n *ngIf=\"category\"\n [src]=\"getCategoryImgURL(category)\"\n [alt]=\"category.name\"\n [ngClass]=\"{ '!object-contain p-2': appearance() === 'normal' || !getCategoryImgURL(category) }\"\n class=\"size-full rounded-xl object-cover\"\n />\n\n <!-- Блок для скелетона карточки -->\n <div\n *ngIf=\"!category\"\n class=\"img-wrapper bg-tui-base-02 size-full\"\n ></div>\n </div>\n\n <div class=\"name flex w-full items-center justify-center\">\n @if (category) {\n @if (enableHover && !isMobile) {\n <tui-line-clamp\n [content]=\"category.name\"\n class=\"pointer-events-none\"\n [lineHeight]=\"size === 'm' ? 26 : 24\"\n [linesLimit]=\"isHover ? 4 : 2\"\n />\n } @else {\n {{ category.name }}\n }\n } @else {\n <div class=\"skeleton-name rounded-tui-radius-s bg-tui-base-02\"></div>\n }\n </div>\n </a>\n <sc-favorite-button\n *ngIf=\"category && (authStatus$ | async)\"\n [showLoader]=\"favoriteShowLoader\"\n [isFavorite]=\"category.isFavorite\"\n (clickEvent)=\"clickOnFavoriteEvent.emit()\"\n class=\"absolute left-1 top-1\"\n />\n</div>\n","/* eslint-disable @typescript-eslint/dot-notation */\n\nimport { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { TuiSizeL, TuiSizeM, TuiSizeS } from '@taiga-ui/core';\nimport { AbstractTuiNullableControl, TuiInputNumberComponent } from '@taiga-ui/legacy';\n\nimport { stepValidator } from '../../validators';\n\n/**\n * Компонент поля ввода количества.\n */\n@Component({\n selector: 'sc-input-quantity',\n templateUrl: './sc-input-quantity.component.html',\n styleUrls: ['./sc-input-quantity.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScInputQuantityComponent extends AbstractTuiNullableControl<number> implements OnInit {\n /**\n * Компонент поля ввода.\n */\n @ViewChild(TuiInputNumberComponent)\n private readonly numberInput?: TuiInputNumberComponent;\n\n /**\n * Шаг увеличения количества. Отвечает за проверку кратности ввода.\n */\n @Input()\n public step: number = 1;\n\n /**\n * Признак, что необходимо отобразить {@link TuiLoaderComponent} над компонентом.\n */\n @Input()\n public showLoader: boolean = false;\n\n /**\n * Признак, что необходимо отобразить кнопку очистки поля ввода.\n */\n @Input()\n public showCross: boolean = true;\n\n /**\n * Признак, что необходимо игнорировать валидацию кратности и минимального количества.\n */\n @Input()\n public ignoreStepValidators: boolean = false;\n\n /**\n * Формат внешнего вида компонента.\n */\n @Input()\n @HostBinding('attr.data-appearance')\n public appearance: 'primary' | 'secondary' = 'primary';\n\n /**\n * Признак, что компонент деактивирован.\n */\n @Input()\n @HostBinding('attr.data-disabled')\n public isDisabled: boolean = false;\n\n /**\n * Размер компонента.\n */\n @Input()\n @HostBinding('attr.data-size')\n public size: TuiSizeL | TuiSizeM | TuiSizeS = 'm';\n\n /**\n * Событие нажатия на кнопку \"Очистить\".\n */\n @Output()\n public clickClearEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Возвращает элемент, который может быть сфокусирован.\n */\n public get nativeFocusableElement(): HTMLInputElement | null | undefined {\n return this.numberInput?.nativeFocusableElement;\n }\n\n /** @inheritDoc */\n public get focused(): boolean {\n return !!this.numberInput?.focused;\n }\n\n /**\n * Элемент формы ввода количества.\n */\n public get formControl(): FormControl | null {\n return this.control as FormControl | null;\n }\n\n /** @inheritDoc */\n public override ngOnInit(): void {\n if (this.control) {\n this.control.setValidators(stepValidator(this.ignoreStepValidators ? 1 : this.step));\n }\n }\n\n /**\n * Обработчик события нажатия стрелок клавиатуры.\n *\n * @param step Шаг изменения количества.\n */\n @HostListener('keydown.arrowDown', ['-step'])\n @HostListener('keydown.arrowUp', ['step'])\n public onArrow(step: number | null): void {\n if (!step) {\n return;\n }\n\n if (step > 0) {\n this.incident();\n } else {\n this.decrement();\n }\n }\n\n /**\n * Увеличивает значение в поле ввода на 1 шаг. Если число в поле ввода не кратно шагу, то увеличит до ближайшего кратного значения.\n *\n * @param checkUpdateOn Признак, что нужно проверить `updateOn` свойство `formControl`.\n */\n public incident(checkUpdateOn = false): void {\n this.numberInput?.['onArrow'](this.step - ((this.numberInput.value ?? 0) % this.step));\n\n // eslint-disable-next-line no-underscore-dangle, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n if (checkUpdateOn && (this.formControl as any)?._updateOn === 'blur') {\n this.control?.setValue(this.numberInput?.value);\n }\n }\n\n /**\n * Уменьшает значение в поле ввода на 1 шаг. Если число в поле ввода не кратно шагу, то уменьшит до ближайшего кратного значения.\n *\n * @param checkUpdateOn Признак, что нужно проверить `updateOn` свойство `formControl`.\n */\n public decrement(checkUpdateOn = false): void {\n this.numberInput?.['onArrow'](-((this.numberInput.value ?? 0) % this.step) || -this.step);\n\n // eslint-disable-next-line no-underscore-dangle, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n if (checkUpdateOn && (this.formControl as any)?._updateOn === 'blur') {\n this.control?.setValue(this.numberInput?.value);\n }\n }\n\n /**\n * Очищает поля ввода.\n */\n public clear(): void {\n this.control?.patchValue(null);\n this.clickClearEvent.emit();\n }\n}\n","<tui-loader\n *ngIf=\"formControl\"\n class=\"w-full\"\n [overlay]=\"true\"\n [showLoader]=\"showLoader\"\n [size]=\"size\"\n>\n <div class=\"flex items-center gap-1 text-center\">\n <div class=\"field-with-button flex grow rounded-xl\">\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canDecrement']\"\n (click.prevent)=\"decrement(true)\"\n >\n <tui-icon icon=\"@tui.minus\"></tui-icon>\n </button>\n <tui-input-number\n #numberInput\n [formControl]=\"formControl\"\n [tuiHint]=\"([] | tuiFieldError | async)?.message\"\n [tuiTextfieldLabelOutside]=\"true\"\n [min]=\"ignoreStepValidators ? 1 : step\"\n [tuiTextfieldSize]=\"size\"\n [required]=\"true\"\n [style.text-align]=\"'center'\"\n [style.font-weight]=\"700\"\n (focusin)=\"$any($event.target).select()\"\n oncontextmenu=\"return false;\"\n class=\"grow\"\n >\n </tui-input-number>\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"incident(true)\"\n >\n <tui-icon icon=\"@tui.plus\"></tui-icon>\n </button>\n </div>\n <button\n *ngIf=\"showCross\"\n tuiIconButton\n appearance=\"secondary\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"clear()\"\n >\n <tui-icon icon=\"@tui.x\"></tui-icon>\n </button>\n </div>\n</tui-loader>\n","/* eslint-disable lodash/prefer-lodash-method */\n\nimport { ContentChildren, Directive, HostListener, QueryList } from '@angular/core';\nimport { AbstractTuiControl, TuiFocusableElementAccessor } from '@taiga-ui/legacy';\n\n/**\n * Директива для перехода по нажатию клавиши enter на следующее поле ввода формы.\n */\n@Directive({\n selector: 'form[ScNextInputFocus]',\n})\nexport class ScNextInputFocusDirective {\n /**\n * Все поля ввода внутри формы, на которой применяется данная директива.\n */\n @ContentChildren(AbstractTuiControl, { descendants: true })\n private focusableElements: QueryList<TuiFocusableElementAccessor>;\n\n /**\n * Слушатель нажатия на клавишу enter. Предотвращает событие submit, выполняет смену фокуса на следующее поле ввода TuiFocusableElementAccessor.\n *\n * @param event Объект события нажатия на клавишу.\n */\n @HostListener('keydown', ['$event'])\n public onFormKeyDownEnter(event: KeyboardEvent): void {\n if (event.code !== 'Enter' && event.key !== 'Enter') {\n return;\n }\n\n event.preventDefault();\n\n const elements: TuiFocusableElementAccessor[] = this.focusableElements.toArray();\n\n const focusedIndex = elements.findIndex((control) => control.focused);\n\n if (focusedIndex !== -1) {\n const nextElement = elements[focusedIndex + 1]?.nativeFocusableElement;\n\n if (nextElement) {\n nextElement.focus();\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { ScNextInputFocusDirective } from './sc-next-input-focus.directive';\n\n/**\n * Модуль директивы для перехода по нажатию клавиши enter на следующее поле ввода формы.\n */\n@NgModule({\n declarations: [ScNextInputFocusDirective],\n exports: [ScNextInputFocusDirective],\n})\nexport class ScNextInputFocusModule {}\n","/* eslint-disable no-underscore-dangle */\n\nimport { ChangeDetectorRef, Directive, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { SC_PATH_IMAGE_NOT_FOUND, ScAuthService, ScCartItem, ScImageHelper, ScProduct, ScUnitsHelper, SEARCH_TERM } from '@snabcentr/client-core';\nimport { TUI_IS_MOBILE } from '@taiga-ui/cdk';\nimport { Observable } from 'rxjs';\n\n/**\n * Директива абстрактной карточки товара.\n */\n@Directive() // Абстрактный класс имеет декоратор @Directive() для внедрения его в DI, с целью получения функционала inject внутри абстракции, и возможности получать потомков через DI или через декоратор @ViewChild.\nexport class AbstractScPriceCard {\n /**\n * Позиция товара в корзине.\n *\n * TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].\n */\n public get cartItem(): ScCartItem | undefined {\n return this._cartItem;\n }\n\n /**\n * Позиция товара в корзине\n *\n * TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].\n */\n @Input()\n public set cartItem(value: ScCartItem | undefined) {\n this._cartItem = value;\n\n this.quantityControl.patchValue(this._cartItem?.quantity ?? null, { emitEvent: false });\n this.quantityShowLoader = false;\n }\n\n /**\n * Объект товара.\n */\n public get product(): ScProduct | undefined {\n return this._product;\n }\n\n /**\n * Объект товара.\n */\n @Input()\n public set product(value: ScProduct | undefined) {\n this._product = value;\n }\n\n /**\n * Признак того, что этот компонент отображается на мобильном устройстве.\n */\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n\n /**\n * {@link FormControl} поля ввода количества товара в корзине.\n */\n public quantityControl: FormControl<number | null> = new FormControl<number | null>(3, { updateOn: 'blur' });\n\n /**\n * Признак, что необходимо отобразить лоадер для поля ввода количества товара.\n */\n public quantityShowLoader: boolean = false;\n\n /**\n * Признак, что необходимо отобразить лоадер для кнопки избранных товаров и категорий.\n */\n public favoriteShowLoader: boolean = false;\n\n /**\n * {@link Observable} изменения статуса авторизации.\n */\n public readonly authStatus$: Observable<boolean> = inject(ScAuthService).getAuthChange();\n\n /**\n * {@link Observable} поиска терма.\n */\n public readonly search$ = inject(SEARCH_TERM);\n\n /**\n * Признак, что необходимо отобразить поле ввода количества товара.\n */\n @Input()\n public showQuantityControl: boolean = false;\n\n /**\n * Ссылка на страницу товара. Используется именно `href`, так как остановить событие клика для `routerLink` не вышло.\n */\n @Input()\n public href?: string;\n\n /**\n * Событие нажатия на кнопку \"В избранное\".\n */\n @Output()\n public readonly clickFavoriteEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку \"В корзину\".\n */\n @Output()\n public readonly clickAddToCartEvent: EventEmitter<ScProduct> = new EventEmitter<ScProduct>();\n\n /**\n * Событие нажатия на кнопку очистки количества товара.\n */\n @Output()\n public readonly clickClearEvent: EventEmitter<ScCartItem> = new EventEmitter<ScCartItem>();\n\n /**\n * Событие нажатия на карточку товара.\n */\n @Output()\n public readonly clickCardEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на историю цен.\n */\n @Output()\n public readonly clickPriceHistoryEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * {@link Observable} изменения количества товара в корзине.\n */\n @Output()\n public readonly quantityValueChanges: Observable<number | null> = this.quantityControl.valueChanges;\n\n /**\n * Экземпляр класса-помощника для работы со значениями единиц измерения товара.\n */\n protected readonly unitsHelper: ScUnitsHelper = inject(ScUnitsHelper);\n\n /**\n * Хелпер для работы с изображениями товара.\n */\n protected readonly imageHelper: ScImageHelper = inject(ScImageHelper);\n\n /**\n * Путь до изображения 'Товар не найден'.\n */\n private readonly pathImageNotFound: string = inject(SC_PATH_IMAGE_NOT_FOUND);\n\n /**\n * Объект слежения за изменениями.\n */\n private readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n /**\n * Объект товара.\n */\n private _product: ScProduct | undefined;\n\n /**\n * Позиция товара в корзине.\n *\n * TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].\n */\n private _cartItem: ScCartItem | undefined;\n\n /**\n * Признак, что нужно показать скелетон.\n */\n public get skeletonVisible(): boolean {\n return !this.product;\n }\n\n /**\n * Возвращает ссылку на preview-изображение карточки товара.\n */\n public getCardImagePreview(): string {\n return this.product ? this.imageHelper.getImagePreview(this.product) : this.pathImageNotFound;\n }\n\n /**\n * Возвращает массив превью-изображений товара.\n *\n * @param product Объект товара.\n */\n public getCardImagePreviewList(product: ScProduct): string[] {\n const images = this.imageHelper.getProductImagePreviewList(product);\n\n return images.length > 0 ? images : [this.pathImageNotFound];\n }\n\n /**\n * Устанавливает компонент в очередь на обновление.\n */\n public markForCheck(): void {\n this.cdr.markForCheck();\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Inject } from '@angular/core';\nimport { IS_RUNNING_ON_TERMINAL, ScITerminalProvider, ScVCardService } from '@snabcentr/client-core';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\n\n/**\n * Компонент QR кода.\n */\n@Component({\n selector: 'sc-qrcode-dialog',\n templateUrl: './sc-qrcode-dialog.component.html',\n styleUrls: ['./sc-qrcode-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScQRCodeDialogComponent {\n /**\n * Свойство, от которого зависит наличие атрибута `data-terminal-view` у `:host` компонента.\n */\n @HostBinding('attr.data-terminal-view')\n private terminalView = this.terminal.isRunningOnTerminal;\n\n /**\n * Инициализирует экземпляр класса {@link ScQRCodeDialogComponent}.\n *\n * @param vCardService Сервис для работы с vCard.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n * @param terminal Провайдер данных о терминале.\n */\n public constructor(\n private readonly vCardService: ScVCardService,\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context: TuiDialogContext<void, { qrdata: string }>,\n @Inject(IS_RUNNING_ON_TERMINAL)\n public readonly terminal: ScITerminalProvider\n ) {}\n\n /**\n * Выполняет скачивание генерируемого vCard файла контакта.\n */\n public downloadVCard(): void {\n if (!this.terminal.isRunningOnTerminal && this.isVCardData()) {\n this.vCardService.downloadVCard(this.context.data.qrdata);\n }\n }\n\n /**\n * Проверяет что в диалоговое окно были переданы данные в формате `vCard`.\n */\n public isVCardData(): boolean {\n // eslint-disable-next-line unicorn/better-regex\n return /BEGIN:VCARD[\\s\\S]*END:VCARD/i.test(this.context.data.qrdata);\n }\n}\n","<p class=\"-mt-2 mb-3 text-tui-text-02\">{{ !terminal.isRunningOnTerminal && this.isVCardData() ? 'Нажмите или о' : 'О' }}тсканируйте QR-код вашим мобильным устройством.</p>\n<qrcode\n (click)=\"downloadVCard()\"\n [margin]=\"0\"\n [qrdata]=\"this.context.data.qrdata\"\n [width]=\"800\"\n elementType=\"img\"\n class=\"cursor-pointer\"\n></qrcode>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiButton, TuiDialog } from '@taiga-ui/core';\nimport { TuiPreview } from '@taiga-ui/kit';\nimport { QRCodeModule as AngularxQRCodeModule } from 'angularx-qrcode';\n\nimport { ScQRCodeDialogComponent } from './qrcode-dialog/sc-qrcode-dialog.component';\n\n/**\n * Модуль QR кода.\n */\n@NgModule({\n declarations: [ScQRCodeDialogComponent],\n imports: [CommonModule, AngularxQRCodeModule, TuiButton, TuiDialog, ...TuiPreview],\n exports: [ScQRCodeDialogComponent],\n})\nexport class ScQRCodeModule {}\n","/* eslint-disable lodash/prefer-lodash-method */\n\nimport { Directive, ElementRef, HostListener, inject } from '@angular/core';\nimport { IS_RUNNING_ON_TERMINAL, ScITerminalProvider } from '@snabcentr/client-core';\nimport { TuiDialogService } from '@taiga-ui/core';\nimport { PolymorpheusComponent } from '@taiga-ui/polymorpheus';\n\nimport { ScQRCodeDialogComponent } from '../../qrcode';\n\n/**\n * Директива открытия диалогового окна с QRCode для ссылок `tel:` и `mailto:` на терминале.\n */\n@Directive({\n standalone: true,\n selector: 'a[href]',\n})\nexport class ScTerminalLinkDirective {\n /**\n * Ссылка на HTML элемент тега `<a>`.\n */\n private elementReference: ElementRef<HTMLAnchorElement> = inject<ElementRef<HTMLAnchorElement>>(ElementRef);\n\n /**\n * Сервис для работы с диалоговыми окнами TuiDialog.\n */\n private dialog: TuiDialogService = inject<TuiDialogService>(TuiDialogService);\n\n /**\n * Провайдер данных о терминале.\n */\n private terminal: ScITerminalProvider = inject<ScITerminalProvider>(IS_RUNNING_ON_TERMINAL);\n\n /**\n * Обработчик клика по ссылке.\n *\n * @param event Событие клика.\n */\n @HostListener('click', ['$event'])\n public onClick(event: Event): void {\n if (this.terminal.isRunningOnTerminal && this.isLinkTelOrMail()) {\n // Отключение базового события для терминала.\n event.preventDefault();\n this.openQRCodeDialog();\n }\n }\n\n /**\n * Открывает диалоговое окно с QR-кодом.\n */\n public openQRCodeDialog(): void {\n this.dialog\n .open(new PolymorpheusComponent(ScQRCodeDialogComponent), {\n size: 's',\n // Передаём ссылку формата `mailto:example@example.com` `tel:+70000000000` вместо vCard, так как для vCard данных недостаточно.\n data: { qrdata: this.elementReference.nativeElement.href },\n })\n .subscribe();\n }\n\n /**\n * Проверяет ведёт ли ссылка на телефон или адрес электронной почты.\n */\n private isLinkTelOrMail(): boolean {\n return this.elementReference.nativeElement.href.startsWith('tel:') || this.elementReference.nativeElement.href.startsWith('mailto:');\n }\n}\n","import { ChangeDetectionStrategy, Component, HostListener, Input, signal, WritableSignal } from '@angular/core';\nimport { TuiHovered, TuiRepeatTimes } from '@taiga-ui/cdk';\nimport { TuiButton } from '@taiga-ui/core';\n\n/**\n * Компонент просмотра изображений через событие наведения.\n */\n@Component({\n standalone: true,\n selector: 'sc-hover-image-carousel',\n imports: [TuiRepeatTimes, TuiButton, TuiHovered],\n templateUrl: './hover-image-carousel.component.html',\n styleUrl: './hover-image-carousel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HoverImageCarouselComponent {\n /**\n * Массив изображений.\n */\n @Input()\n public images: string[] = [];\n\n /**\n * Признак что необходимо отобразить элементы управления.\n */\n @Input()\n public isShowActions: boolean = true;\n\n /**\n * {@link WritableSignal} для отслеживания текущего индекса изображения.\n */\n public currentIndex: WritableSignal<number> = signal(0);\n\n /**\n * Обработчик события `mousemove.silent`.\n *\n * @param offsetX Отступ курсора мыши по оси X от края {@link HTMLElement}.\n * @param target Объект {@link HTMLElement} в котором лежат изображения\n */\n @HostListener('mousemove.silent', ['$event.offsetX', '$event.target'])\n private onHover(offsetX: number, target: HTMLElement): void {\n if (this.images.length <= 1 || offsetX < 0) {\n return;\n }\n // new Event().preventDefault\n const elementWidth = target.offsetWidth;\n const hoverPercentage = offsetX / elementWidth;\n const newIndex = Math.floor(hoverPercentage * this.images.length);\n this.currentIndex.set(newIndex);\n }\n\n /**\n * Обработчик события `mouseleave.silent`.\n */\n @HostListener('mouseleave.silent')\n private onLeave(): void {\n if (this.images.length <= 1) {\n return;\n }\n\n this.currentIndex.set(0);\n }\n\n /**\n * Обработчик события наведения указателя мыши на точку.\n *\n * @param hovered Признак что указатель мыши наведен на точку.\n * @param index Индекс изображения, который соответствует точке.\n */\n protected onDotHovered(hovered: boolean, index: number): void {\n if (hovered) {\n this.currentIndex.set(index);\n }\n }\n}\n","<div\n class=\"overflow-hidden rounded-xl\"\n [class.mb-2]=\"images.length <= 1 && isShowActions\"\n [style.aspect-ratio]=\"'20/19'\"\n>\n <img\n [src]=\"images[currentIndex()]\"\n class=\"size-full rounded-xl object-contain\"\n />\n</div>\n\n@if (images.length > 1 && isShowActions) {\n <div\n (mousemove.silent)=\"$event.stopPropagation()\"\n class=\"flex justify-center\"\n >\n <button\n *tuiRepeatTimes=\"let indexItem of images.length\"\n #element\n tuiButton\n type=\"button\"\n class=\"button button_small\"\n [appearance]=\"indexItem === currentIndex() ? 'primary' : 'secondary'\"\n (tuiHoveredChange)=\"onDotHovered($event, indexItem)\"\n ></button>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, inject, Input } from '@angular/core';\nimport { ScIWarehouse, ScProduct, ScWarehouseService } from '@snabcentr/client-core';\nimport { TuiHint, TuiSizeL, TuiSizeS } from '@taiga-ui/core';\nimport { TuiBadge } from '@taiga-ui/kit';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент центы товара с отображением скидки.\n */\n@Component({\n standalone: true,\n selector: 'sc-cost-with-discount',\n imports: [CommonModule, TuiBadge, ...TuiHint],\n templateUrl: './cost-with-discount.component.html',\n styleUrl: './cost-with-discount.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CostWithDiscountComponent {\n /**\n * {@link Observable} изменения выбранного склада.\n */\n public readonly warehouseSelect$: Observable<ScIWarehouse | null> = inject(ScWarehouseService).getWarehouseSelectChange$();\n\n /**\n * Объект товара.\n */\n @Input()\n public product: ScProduct;\n\n /**\n * Размер компонента.\n */\n @Input()\n @HostBinding('attr.data-size')\n public size: TuiSizeS | TuiSizeL = 'm';\n}\n","@if (product) {\n <div\n *ngIf=\"warehouseSelect$ | async as warehouseSelect\"\n class=\"flex flex-wrap items-center gap-x-2 gap-y-1\"\n >\n <div class=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n <span\n [class.text-tui-text-02]=\"!product.isWarehouseStockExist(warehouseSelect.id)\"\n class=\"cost\"\n >{{ product.costRubString }}</span\n >\n <tui-badge\n *ngIf=\"product.discount as discount\"\n size=\"m\"\n [style.background]=\"'var(--tui-status-positive)'\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"text-body-xs\"\n >\n <tui-badge\n *ngIf=\"product.discount as discount\"\n size=\"s\"\n [style.background]=\"'var(--tui-background-base)'\"\n class=\"text-body-xs-bold text-tui-text-02\"\n >\n {{ discount.percent }}%\n </tui-badge>\n <span class=\"line-through\">{{ product.discountCostString }}</span>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">Дата окончания: {{ expiredAt }}</div>\n </ng-template>\n </tui-badge>\n </div>\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"font-extrabold text-tui-text-02\"\n >{{ product.costString }}</span\n >\n </div>\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { ScIWarehouse, ScIWarehouseStockCount, ScProduct, ScWarehouseService } from '@snabcentr/client-core';\nimport { map, Observable, switchMap } from 'rxjs';\n\n/**\n * Компонент данных о наличии товара на складе.\n */\n@Component({\n selector: 'sc-price-warehouse-stock',\n templateUrl: './sc-price-warehouse-stock.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['sc-price-warehouse-stock.component.scss'],\n})\nexport class ScPriceWarehouseStockComponent implements OnInit {\n /**\n * Строка классов для свойств статусов.\n */\n @Input() public classList: string;\n\n /**\n * Данные о товаре/услуге.\n */\n @Input() public product: ScProduct;\n\n /**\n * Признак, что необходимо отобразить подсказку по складам.\n */\n @Input() public withStockHint: boolean = true;\n\n /**\n * Признак, что необходимо отобразить список остатков по складам при выбранном основном складе.\n */\n @Input() public fromMain: boolean = true;\n\n /**\n * {@link Observable} изменения выбранного склада.\n */\n public selectedWarehouse$: Observable<ScIWarehouse | null>;\n\n /**\n * {@link Observable} изменения списка складов.\n */\n public warehousesList$?: Observable<Array<{ sc: ScIWarehouseStockCount; w: ScIWarehouse | undefined }> | undefined>;\n\n /**\n * Инициализирует экземпляр класса {@link ScPriceWarehouseStockComponent}.\n *\n * @param warehouseService Сервис для работы со складами.\n */\n public constructor(private readonly warehouseService: ScWarehouseService) {}\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.selectedWarehouse$ = this.fromMain ? this.warehouseService.getCatalogWarehouseChange$() : this.warehouseService.getWarehouseSelectChange$();\n\n this.warehousesList$ = this.selectedWarehouse$.pipe(\n switchMap((warehouse) =>\n this.warehouseService.getWarehouses$().pipe(\n map((warehouses: ScIWarehouse[]) => this.product.stockCount?.map((sc) => ({ w: warehouses.find((w) => w.id === sc.warehouseId), sc: sc }))),\n map((items) => items?.sort((item) => (item.w?.id === warehouse?.id ? -1 : 1)))\n )\n )\n );\n }\n}\n","<ng-container *ngIf=\"product\">\n <ng-container *ngIf=\"selectedWarehouse$ | async as warehouseSelect\">\n <span\n *tuiLet=\"withStockHint && !!(warehousesList$ | async)?.length as showStockHint\"\n [tuiHint]=\"showStockHint && stockHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n >\n <ng-container *ngIf=\"product.getNotStockMessage(warehouseSelect) as message\">\n <a\n *tuiLet=\"!!(product.properties?.planingIncomingDate || product.properties?.planingProductionDate) as showPlaningHint\"\n tuiLink\n [pseudo]=\"showPlaningHint\"\n [tuiHint]=\"showPlaningHint && planingHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [style.color]=\"'var(--tui-status-negative)'\"\n [ngClass]=\"classList\"\n >\n {{ message }}\n </a>\n </ng-container>\n <ng-template #planingHint>\n <span *ngIf=\"product.properties?.planingIncomingDate\">\n Планируемая дата поступления <br />\n на Основной склад:\n <span class=\"font-bold\">{{ product.properties?.planingIncomingDate }}</span>\n </span>\n <span *ngIf=\"product.properties?.planingProductionDate\">\n Планируемая дата <br />\n производства:\n <span class=\"font-bold\">{{ product.properties?.planingProductionDate }}</span>\n </span>\n </ng-template>\n <a\n *ngIf=\"product.isWarehouseStockExist(warehouseSelect.id)\"\n tuiLink\n [pseudo]=\"showStockHint\"\n [style.color]=\"'var(--tui-status-positive)'\"\n [ngClass]=\"classList\"\n >\n В наличии<ng-container *ngIf=\"product.getWarehouseStockCount(warehouseSelect.id) as count\"\n >:\n <span class=\"whitespace-nowrap\">{{ count }} {{ product.quantityUnit }}</span>\n </ng-container>\n </a>\n <span\n *ngIf=\"product.onOrder\"\n [style.color]=\"'var(--tui-status-warning)'\"\n [ngClass]=\"classList\"\n >Под заказ</span\n >\n </span>\n </ng-container>\n\n <ng-template #stockHint>\n <table\n *ngIf=\"selectedWarehouse$ | async as warehouseSelect\"\n class=\"stock-table table-auto text-body-s\"\n [ngClass]=\"classList\"\n >\n <tbody>\n <tr\n *ngFor=\"let item of warehousesList$ | async\"\n class=\"border-b\"\n >\n <ng-container>\n <td class=\"px-1\">{{ item.w?.name }}:</td>\n <td class=\"px-1\">{{ item.sc.count ? item.sc.count + ' ' + product.quantityUnit : 'В наличии' }}</td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </ng-template>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\nimport { SEARCH_TERM_PROVIDERS } from '@snabcentr/client-core';\nimport { TuiSizeL, TuiSizeS } from '@taiga-ui/core';\n\nimport { AbstractScPriceCard } from '../../directives';\n\n/**\n * Компонент карточки товара.\n */\n@Component({\n selector: 'sc-price-card',\n templateUrl: './sc-price-card.component.html',\n styleUrls: ['./sc-price-card.component.scss'],\n providers: [SEARCH_TERM_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPriceCardComponent extends AbstractScPriceCard {\n /**\n * Размер компонента.\n */\n @Input()\n @HostBinding('attr.data-size')\n public size: TuiSizeS | TuiSizeL = 'm';\n\n /**\n * Возвращает размер кнопки \"В корзину\".\n */\n protected getToCartButtonSize() {\n switch (this.size) {\n case 's':\n return 'xs';\n case 'm':\n return 's';\n case 'l':\n return 'm';\n default:\n return 's';\n }\n }\n}\n","<div\n *ngIf=\"product; else skeleton\"\n class=\"card-wrapper relative flex h-full w-auto flex-col rounded-xl p-1\"\n>\n <div class=\"flex min-h-8 items-center justify-between\">\n <span\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"code text-tui-text-02\"\n >\n Артикул: {{ product.code }}\n </span>\n\n <div class=\"flex items-center\">\n <tui-icon\n *ngIf=\"product.isPreviouslyOrdered\"\n icon=\"@tui.history\"\n class=\"text-lg\"\n [style.color]=\"'var(--tui-text-action)'\"\n ></tui-icon>\n <sc-favorite-button\n *ngIf=\"authStatus$ | async\"\n (clickEvent)=\"clickFavoriteEvent.emit()\"\n [showLoader]=\"favoriteShowLoader\"\n [isFavorite]=\"product.isFavorite\"\n [disabled]=\"!!product.primaryCategory?.isFavorite\"\n ></sc-favorite-button>\n </div>\n </div>\n\n <sc-hover-image-carousel\n (click)=\"clickCardEvent.emit()\"\n [images]=\"!isMobile ? getCardImagePreviewList(product) : [getCardImagePreview()]\"\n class=\"cursor-pointer\"\n ></sc-hover-image-carousel>\n <div\n class=\"flex grow flex-col justify-end\"\n [class.gap-1]=\"size === 'm'\"\n >\n <div\n class=\"flex grow flex-col\"\n [class.gap-1]=\"size === 'm'\"\n >\n <a\n tuiLink\n [attr.href]=\"href ?? null\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n class=\"name mb-auto\"\n >\n {{ product.name }}\n </a>\n <div\n *ngIf=\"product?.pack\"\n class=\"flex items-center gap-1 text-tui-text-02\"\n >\n Норма упаковки: {{ product.pack }}\n <tui-icon\n *ngIf=\"product.ignoreMinCountCheck\"\n icon=\"@tui.package\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n class=\"text-body-xl text-tui-text-01 opacity-90\"\n tuiHintDirection=\"top\"\n ></tui-icon>\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </div>\n <span *ngIf=\"!isMobile && (authStatus$ | async) && product?.costDate\">\n Дата:\n <a\n tuiLink\n [pseudo]=\"true\"\n class=\"text-tui-text-02\"\n (click)=\"clickPriceHistoryEvent.emit()\"\n >\n {{ product.costDate }}\n </a>\n </span>\n <sc-cost-with-discount\n [product]=\"product\"\n [size]=\"size\"\n ></sc-cost-with-discount>\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n <div class=\"mt-2 flex gap-2\">\n <button\n *ngIf=\"!showQuantityControl\"\n tuiButton\n (click)=\"clickAddToCartEvent.emit(product)\"\n [loading]=\"quantityShowLoader\"\n [size]=\"getToCartButtonSize()\"\n class=\"grow !font-extrabold\"\n iconStart=\"@tui.shopping-cart\"\n >\n В корзину\n </button>\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n [size]=\"size\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n [showLoader]=\"quantityShowLoader\"\n (clickClearEvent)=\"clickClearEvent.emit(cartItem)\"\n class=\"w-full\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-full\"\n ></sc-input-quantity>\n <tui-avatar\n *ngIf=\"product.cartItem && !showQuantityControl\"\n src=\"@tui.check\"\n size=\"s\"\n [style.background]=\"'var(--tui-status-warning-pale)'\"\n [style.color]=\"'var(--tui-background-accent-1)'\"\n ></tui-avatar>\n </div>\n </div>\n</div>\n\n<ng-template #skeleton>\n <div class=\"card-wrapper relative flex h-full w-auto flex-col rounded-xl p-1\"></div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { SEARCH_TERM_PROVIDERS } from '@snabcentr/client-core';\n\nimport { AbstractScPriceCard } from '../../directives';\n\n/**\n * Компонент карточки товара во всю строку.\n */\n@Component({\n selector: 'sc-price-card-inline',\n templateUrl: './sc-price-card-inline.component.html',\n styleUrls: ['./sc-price-card-inline.component.scss'],\n providers: [SEARCH_TERM_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPriceCardInlineComponent extends AbstractScPriceCard {}\n","<div\n *ngIf=\"product; else skeleton\"\n class=\"card-wrapper relative flex w-full gap-4 rounded-xl p-1 hover:bg-tui-background-neutral-1\"\n>\n <sc-hover-image-carousel\n (click)=\"clickCardEvent.emit()\"\n [images]=\"!isMobile ? getCardImagePreviewList(product) : [getCardImagePreview()]\"\n [isShowActions]=\"false\"\n class=\"size-24 shrink-0 cursor-pointer self-center\"\n ></sc-hover-image-carousel>\n <div class=\"flex grow flex-col gap-1\">\n <div\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"text-tui-text-02\"\n >\n Артикул: {{ product.code }}\n </div>\n <div class=\"flex flex-col gap-1\">\n <a\n tuiLink\n [attr.href]=\"href ?? null\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n class=\"!text-body-m-bold\"\n >\n {{ product.name }}\n </a>\n <div\n *ngIf=\"product?.pack\"\n class=\"flex items-center gap-1 text-tui-text-02\"\n >\n Норма упаковки: {{ product.pack }}\n <tui-icon\n *ngIf=\"product.ignoreMinCountCheck\"\n icon=\"@tui.package\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"text-body-xl text-tui-text-01 opacity-90\"\n ></tui-icon>\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-x-4\">\n <sc-cost-with-discount [product]=\"product\"></sc-cost-with-discount>\n\n <span *ngIf=\"(authStatus$ | async) && product?.costDate\">\n Дата:\n <a\n tuiLink\n [pseudo]=\"true\"\n (click)=\"clickPriceHistoryEvent.emit()\"\n class=\"text-tui-text-02\"\n >\n {{ product.costDate }}\n </a>\n </span>\n </div>\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n </div>\n <div class=\"flex w-40 shrink-0 flex-col justify-between\">\n <div class=\"flex justify-end\">\n <tui-avatar\n *ngIf=\"product.isPreviouslyOrdered\"\n src=\"@tui.history\"\n size=\"s\"\n [style.background]=\"'none'\"\n [style.color]=\"'var(--tui-text-action)'\"\n ></tui-avatar>\n <sc-favorite-button\n *ngIf=\"authStatus$ | async\"\n (clickEvent)=\"clickFavoriteEvent.emit()\"\n [showLoader]=\"favoriteShowLoader\"\n [isFavorite]=\"product.isFavorite\"\n [disabled]=\"!!product.primaryCategory?.isFavorite\"\n ></sc-favorite-button>\n </div>\n <div class=\"flex gap-2\">\n <button\n *ngIf=\"!showQuantityControl\"\n tuiButton\n (click)=\"clickAddToCartEvent.emit(product)\"\n [loading]=\"quantityShowLoader\"\n size=\"s\"\n iconStart=\"@tui.shopping-cart\"\n class=\"grow !font-extrabold\"\n >\n В корзину\n </button>\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n size=\"m\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n [showLoader]=\"quantityShowLoader\"\n (clickClearEvent)=\"clickClearEvent.emit(cartItem)\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-full\"\n ></sc-input-quantity>\n <tui-avatar\n *ngIf=\"product.cartItem && !showQuantityControl\"\n src=\"@tui.check\"\n size=\"s\"\n [style.background]=\"'var(--tui-status-warning-pale)'\"\n [style.color]=\"'var(--tui-background-accent-1)'\"\n ></tui-avatar>\n </div>\n </div>\n</div>\n\n<ng-template #skeleton>\n <div class=\"tui-skeleton flex h-[8.25rem] w-full overflow-hidden rounded-xl\"></div>\n</ng-template>\n","/* eslint-disable class-methods-use-this,lodash/prefer-lodash-method */\n\nimport { ChangeDetectionStrategy, Component, Inject, inject, Input, OnInit, Optional } from '@angular/core';\nimport { ScCatalogService, ScProduct, ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';\nimport { TUI_IS_MOBILE, TuiDay, TuiDayRange, tuiIsFalsy, tuiIsPresent, TuiMonth, tuiPure, TuiStringHandler } from '@taiga-ui/cdk';\nimport { TUI_MONTHS, TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { filter, map, Observable, shareReplay, startWith, tap } from 'rxjs';\n\n/**\n * График истории цен товара или услуги.\n */\n@Component({\n selector: 'sc-price-history',\n templateUrl: './sc-price-history.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPriceHistoryComponent implements OnInit {\n /**\n * {@link Observable} временного промежутка истории цен.\n */\n public range$: Observable<TuiDayRange>;\n\n /**\n * Товар или услуга, для которого необходимо отобразить историю цен.\n */\n @Input() public product: ScProduct;\n\n /**\n * {@link Observable} истории цен.\n */\n public history$?: Observable<ReadonlyArray<[TuiDay, number]> | null>;\n\n /**\n * {@link Observable} изменения состояния загрузки данных истории цен.\n */\n public loadingHistory$?: Observable<boolean>;\n\n /**\n * Максимальная цена товара.\n */\n public priceInfo$?: Observable<{\n min: number;\n max: number;\n }>;\n\n /**\n * Признак того, отображается этот компонент на мобильном устройстве или нет.\n */\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n\n /**\n * {@link Observable} функция для преобразования значения number в строку в подсказке по оси X.\n */\n public readonly xStringify$: Observable<TuiStringHandler<TuiDay>> = this.months$.pipe(\n map(\n (months) =>\n ({ month, day }) =>\n // eslint-disable-next-line security/detect-object-injection\n `${months[month]}, ${day}`\n )\n );\n\n /**\n * Относительные отступы от верхнего и нижнего края в процентах.\n */\n public readonly paddingPercent: number = 10;\n\n /**\n * Функция для преобразования значения number в строку в подсказке по оси Y.\n *\n * @param value Значение оси Y.\n */\n public readonly yStringify: TuiStringHandler<number> = (value) => `${value.toLocaleString('ru-RU')} ₽`;\n\n /**\n * Инициализирует экземпляр класса {@link ScPriceHistoryComponent}.\n *\n * @param catalogService Сервис для работы с каталогом.\n * @param months$ Перечисление месяцев.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n private readonly catalogService: ScCatalogService,\n @Inject(TUI_MONTHS) private readonly months$: Observable<readonly string[]>,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Optional()\n @Inject(POLYMORPHEUS_CONTEXT)\n private readonly context?: TuiDialogContext<void, { product: ScProduct }>\n ) {\n if (context) {\n this.product = context.data.product;\n }\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.history$ = this.catalogService.getPriceHistory$(this.product).pipe(\n filter(tuiIsPresent),\n map((history) =>\n Object.keys(history)\n .map((item): [TuiDay, number] => [TuiDay.normalizeParse(item, 'DMY'), history[String(item)].cost])\n .sort((a, b) => (a[0] > b[0] ? 1 : -1))\n ),\n startWith(null),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n\n this.loadingHistory$ = this.history$.pipe(map(tuiIsFalsy));\n\n this.priceInfo$ = this.history$.pipe(\n filter(tuiIsPresent),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.productPriceHistoryShow,\n params: {\n product_id: this.product.id,\n },\n });\n }),\n filter((history) => history.length > 1),\n map((history) => history.map((item) => item[1])),\n map((values) => ({\n min: Math.min(...values),\n max: Math.max(...values),\n }))\n );\n\n this.range$ = this.history$.pipe(\n filter(tuiIsPresent),\n filter((history) => history.length > 1),\n map((value: ReadonlyArray<[TuiDay, number]>) => ({ from: value.at(0)?.[0], to: value.at(-1)?.[0] })),\n filter((range): range is { from: TuiDay; to: TuiDay } => !!range.from && !!range.to),\n map((range) => new TuiDayRange(range.from, range.to))\n );\n }\n\n /**\n * Вычисляет подписи даты к оси X.\n *\n * @param param0 {@link TuiDayRange} Временной промежуток истории цен.\n * @param param0.from {@link TuiDay} Дата начала истории цен.\n * @param param0.to {@link TuiDay} Дата конца истории цен.\n */\n @tuiPure\n public computeLabels$({ from, to }: TuiDayRange): Observable<readonly string[]> {\n return this.months$.pipe(\n map((months) => [\n ...Array.from({ length: TuiMonth.lengthBetween(from, to) + 1 }, (_, index) => {\n const previousYear = from.append({ month: index - 1 }).year; // Начальный год\n const currentYear = from.append({ month: index }).year;\n\n return `${this.isMobile || previousYear === currentYear ? '' : currentYear} ${months[from.append({ month: index }).month]}`;\n }),\n '',\n ])\n );\n }\n\n /**\n * Вычисляет данные для отображения на графике.\n *\n * @param param0 {@link TuiDayRange} Временной промежуток истории цен.\n * @param param0.from {@link TuiDay} Дата начала истории цен.\n * @param param0.to {@link TuiDay} Дата конца истории цен.\n * @param history История цен.\n */\n @tuiPure\n public computeValue({ from, to }: TuiDayRange, history: ReadonlyArray<[TuiDay, number]>): ReadonlyArray<[TuiDay, number]> {\n return (\n Array.from({ length: TuiDay.lengthBetween(from, to) + 1 })\n .fill(0)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce<ReadonlyArray<[TuiDay, number]>>((array, _, index) => {\n const data = from.append({ day: index });\n return [\n ...array,\n [\n data,\n (history.find((valueHistory, indexHistory, arrayHistory) => data.daySame(valueHistory[0]) || data.dayBefore(arrayHistory[indexHistory + 1][0])) ??\n history[0])[1],\n ],\n ];\n }, [])\n );\n }\n}\n","<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\">от {{ priceInfo.min.toLocaleString() }} ₽ до {{ priceInfo.max.toLocaleString() }} ₽</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 <ng-container *tuiLet=\"priceInfo.max - priceInfo.min as height\">\n <tui-line-days-chart\n *ngIf=\"(height / 100) * paddingPercent as padding\"\n [height]=\"height + (height / 100) * paddingPercent * 2\"\n [smoothingFactor]=\"10\"\n [y]=\"priceInfo.min - (height / 100) * paddingPercent\"\n [value]=\"computeValue(range, history)\"\n [xStringify]=\"xStringify$ | async\"\n [yStringify]=\"yStringify\"\n [hintContent]=\"hint\"\n class=\"chart\"\n ></tui-line-days-chart>\n </ng-container>\n </tui-axes>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #isNotExist>\n <p class=\"text-base font-bold\">Цена на товар не изменялась</p>\n </ng-template>\n <ng-template\n #hint\n let-data\n >\n <div class=\"font-bold\">{{ data[1].toLocaleString() }} ₽</div>\n <div>{{ data[0] }}</div>\n </ng-template>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, inject } from '@angular/core';\nimport {\n SC_NEXT_PAGE_PAGINATION_CLICK,\n SC_PRODUCT_PAGINATION_OPTIONS,\n ScICategoryProductPaginationParams,\n ScIPaginationMeta,\n ScPaginationService,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiIsPresent } from '@taiga-ui/cdk';\nimport { filter, map, Observable } from 'rxjs';\n\n/**\n * Компонент элементов управления пагинацией списка товаров.\n */\n@Component({\n selector: 'sc-price-list-pagination',\n templateUrl: './sc-price-list-pagination.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPriceListPaginationComponent {\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Сервис пагинации.\n */\n private readonly paginationService = inject<ScPaginationService<ScICategoryProductPaginationParams>>(ScPaginationService<ScICategoryProductPaginationParams>, {\n skipSelf: true,\n });\n\n /**\n * Дополнительные данные пагинации.\n */\n public meta$: Observable<ScIPaginationMeta> = this.paginationService.dataAccumulated$.pipe(\n filter(tuiIsPresent),\n map((pagination) => pagination.meta)\n );\n\n /**\n * Признак, что кнопка неактивна.\n */\n public disabled$: Observable<boolean> = this.paginationService.dataAccumulated$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScPriceListPaginationComponent}.\n *\n * @param nextPageClickEvent Событие нажатия на кнопку \"Показать следующие N позиций\".\n * @param options Значения пагинации списка товаров категории по умолчанию.\n */\n public constructor(\n @Inject(SC_NEXT_PAGE_PAGINATION_CLICK) public readonly nextPageClickEvent: EventEmitter<void>,\n @Inject(SC_PRODUCT_PAGINATION_OPTIONS) public readonly options: ScICategoryProductPaginationParams\n ) {}\n\n /**\n * Обработка нажатия на кнопку \"Показать следующие N позиций\".\n */\n public showMore(): void {\n this.nextPageClickEvent.emit();\n\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.showMoreClick,\n params: {\n category_id: this.options.categoryId,\n },\n });\n }\n}\n","<ng-container *ngIf=\"meta$ | async as meta\">\n <button\n *ngIf=\"meta?.currentPage !== meta?.lastPage\"\n tuiButton\n (click)=\"showMore()\"\n [disabled]=\"!!(disabled$ | async)\"\n appearance=\"secondary\"\n class=\"!font-bold\"\n >\n Показать ещё {{ options.perPage }} товаров\n </button>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { TuiAxes, TuiLineDaysChart, TuiLineDaysChartHint } from '@taiga-ui/addon-charts';\nimport { TuiHovered, TuiLet, TuiRepeatTimes } from '@taiga-ui/cdk';\nimport { TuiButton, TuiHint, TuiIcon, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiAvatar, TuiBadge, TuiButtonLoading, TuiElasticContainer, TuiFieldErrorPipe, TuiHighlight, TuiLineClamp } from '@taiga-ui/kit';\nimport { TuiInputNumberModule, TuiIslandDirective, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScCategoryCardComponent } from './category-card/sc-category-card.component';\nimport { CostWithDiscountComponent } from './cost-with-discount/cost-with-discount.component';\nimport { HoverImageCarouselComponent } from './hover-image-carousel/hover-image-carousel.component';\nimport { ScInputQuantityComponent } from './input-quantity/sc-input-quantity.component';\nimport { ScPriceCardComponent } from './price-card/sc-price-card.component';\nimport { ScPriceCardInlineComponent } from './price-card-inline/sc-price-card-inline.component';\nimport { ScPriceHistoryComponent } from './price-history/sc-price-history.component';\nimport { ScPriceListPaginationComponent } from './price-list-pagination/sc-price-list-pagination.component';\nimport { ScPriceWarehouseStockComponent } from './price-warehouse-stock/sc-price-warehouse-stock.component';\nimport { ScFavoriteButtonComponent } from './sc-favorite-button/sc-favorite-button.component';\n\n/**\n * Модуль каталога.\n */\n@NgModule({\n declarations: [\n ScPriceListPaginationComponent,\n ScCategoryCardComponent,\n ScFavoriteButtonComponent,\n ScInputQuantityComponent,\n ScPriceCardComponent,\n ScPriceWarehouseStockComponent,\n ScPriceHistoryComponent,\n ScPriceCardInlineComponent,\n ],\n exports: [\n ScPriceListPaginationComponent,\n ScCategoryCardComponent,\n ScFavoriteButtonComponent,\n ScInputQuantityComponent,\n ScPriceCardComponent,\n ScPriceWarehouseStockComponent,\n ScPriceHistoryComponent,\n ScPriceCardInlineComponent,\n ],\n imports: [\n CommonModule,\n RouterModule,\n TuiButton,\n TuiIcon,\n TuiIslandDirective,\n TuiInputNumberModule,\n TuiLabel,\n TuiTextfieldControllerModule,\n FormsModule,\n ReactiveFormsModule,\n ...TuiHint,\n TuiFieldErrorPipe,\n TuiLoader,\n TuiLink,\n TuiElasticContainer,\n TuiLet,\n TuiRepeatTimes,\n TuiHighlight,\n TuiLineDaysChart,\n TuiLineDaysChartHint,\n TuiAxes,\n TuiButtonLoading,\n TuiAvatar,\n TuiBadge,\n HoverImageCarouselComponent,\n TuiLineClamp,\n TuiHovered,\n CostWithDiscountComponent,\n ],\n})\nexport class ScCatalogModule {}\n","/* eslint-disable no-underscore-dangle */\n\nimport { ChangeDetectionStrategy, Component, EventEmitter, Inject, inject, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ScCartItem, ScImageHelper, ScProduct, ScUnitsHelper } from '@snabcentr/client-core';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { TuiPreviewDialogService } from '@taiga-ui/kit';\nimport { Observable, skip } from 'rxjs';\n\n/**\n * Компонент карточки элемента корзины.\n */\n@Component({\n selector: 'sc-cart-item-mobile',\n templateUrl: './sc-cart-item-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScCartItemMobileComponent implements OnInit {\n /**\n * Элемент корзины.\n */\n @Input()\n public set cartItem(data: ScCartItem | undefined) {\n this._cartItem = data;\n\n if (data) {\n this.quantityControl.patchValue(data.quantity);\n }\n }\n\n /**\n * Элемент корзины.\n */\n public get cartItem(): ScCartItem | undefined {\n return this._cartItem;\n }\n\n /**\n * Ссылка на представление спецификации.\n */\n @ViewChild('specificationPreview')\n private readonly specificationPreviewRef?: TemplateRef<TuiDialogContext>;\n\n /**\n * {@link FormControl} поля ввода количества товара в корзине.\n */\n public quantityControl: FormControl<number | null> = new FormControl<number | null>(0, { updateOn: 'blur' });\n\n /**\n * {@link Observable} изменения количества товара в корзине.\n */\n @Output()\n public quantityValueChanges: Observable<number | null> = this.quantityControl.valueChanges.pipe(skip(1));\n\n /**\n * Событие нажатия на кнопку \"Удалить из корзины\".\n */\n @Output()\n public clickDeleteEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку \"Удалить из корзины\".\n */\n @Output()\n public clickSettingsEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на карточку.\n */\n @Output()\n public clickCardEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Хелпер для работы с изображениями товара.\n */\n private readonly imageHelper = inject(ScImageHelper);\n\n /**\n * Элемент корзины.\n */\n private _cartItem?: ScCartItem;\n\n /**\n * Инициирует экземпляр класса {@link ScCartItemMobileComponent}.\n *\n * @param unitsHelper Экземпляр класса-помощника для работы со значениями единиц измерения товара.\n * @param previewDialogService Сервис диалогового окна предварительного просмотра.\n */\n public constructor(\n public readonly unitsHelper: ScUnitsHelper,\n @Inject(TuiPreviewDialogService)\n private readonly previewDialogService: TuiPreviewDialogService\n ) {}\n\n /**\n * Продукт элемента корзины.\n */\n public get product(): ScProduct | undefined {\n return this.cartItem?.product;\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.quantityValueChanges = this.quantityControl.valueChanges;\n }\n\n /**\n * Отобразить спецификацию.\n */\n public showSpecification(): void {\n this.previewDialogService.open(this.specificationPreviewRef ?? '').subscribe();\n }\n\n /**\n * Возвращает ссылку на изображение карточки товара.\n *\n * @param product Позиция товара/услуги.\n */\n public getCardImage(product: ScProduct): string {\n return this.imageHelper.getImage(product);\n }\n}\n","<ng-container *ngIf=\"cartItem && product; else skeleton\">\n <div class=\"flex min-w-72 gap-2 rounded-xl border border-tui-base-04 bg-white p-2 shadow-sc-2\">\n <div class=\"flex w-40 items-center\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage(product)\"\n [alt]=\"product.name\"\n class=\"max-h-full w-full rounded-xl object-cover\"\n />\n </div>\n <div class=\"flex w-full flex-col items-center justify-between gap-2 sm:flex-row sm:gap-5\">\n <div class=\"flex max-w-full flex-col gap-1 self-start\">\n <a\n tuiLink\n (click)=\"clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n\n <div class=\"flex w-full flex-wrap gap-x-2 gap-y-1 text-xs text-tui-base-07\">\n <p *ngIf=\"product.pack\">\n Норма упаковки: {{ product.pack }}\n <tui-icon\n *ngIf=\"product.ignoreMinCountCheck\"\n icon=\"@tui.package\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"text-sm\"\n ></tui-icon>\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </p>\n <p>Артикул: {{ product.code }}</p>\n </div>\n\n <div class=\"flex w-full flex-wrap items-center gap-x-2 gap-y-1\">\n <p\n *ngIf=\"!product.priceInRub\"\n class=\"font-bold\"\n >\n {{ product.costString }}\n </p>\n <p class=\"text-xs font-bold text-tui-text-01\">{{ product.costRubString }}</p>\n <span\n *ngIf=\"product.discount\"\n class=\"flex items-center\"\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-icon\n icon=\"@tui.info\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"!h-4 !text-xs\"\n ></tui-icon>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">Дата окончания: {{ expiredAt }}</div>\n </ng-template>\n </span>\n </div>\n\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n\n <div\n *ngIf=\"cartItem.height || cartItem.length || cartItem.width\"\n class=\"flex items-center gap-1\"\n >\n <button\n tuiIconButton\n iconStart=\"@tui.settings\"\n (click)=\"clickSettingsEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-wrap gap-x-2 text-xs text-tui-base-07\">\n <p *ngIf=\"cartItem.marker\">Маркировка: {{ cartItem.marker }}</p>\n <p *ngIf=\"cartItem.width\">Ширина: {{ cartItem.width }} м.</p>\n <ng-container *ngIf=\"cartItem.height; else length\">\n <p>Высота: {{ cartItem.height }} м.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"cartItem.length\">Длина: {{ cartItem.length }} м.</p>\n </ng-template>\n </div>\n </div>\n\n <a\n tuiLink\n *ngIf=\"cartItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >Спецификация</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=\"cartItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"cartItem.specificationImgUrl\"\n />\n <button\n iconStart=\"@tui.x\"\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 class=\"flex flex-col gap-1 self-start 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 [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-28\"\n ></sc-input-quantity>\n <button\n tuiIconButton\n iconStart=\"@tui.trash-2\"\n [style.border-radius.%]=\"100\"\n size=\"xs\"\n (click)=\"clickDeleteEvent.emit()\"\n ></button>\n </div>\n <p class=\"text-sm font-bold text-tui-text-01\">\n Итого: {{ cartItem.costRub | tuiFormatNumber: { precision: 2, decimalSeparator: '.', rounding: 'ceil' } | async }} {{ 'RUB' | tuiCurrency }}\n </p>\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","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TuiCurrencyPipe } from '@taiga-ui/addon-commerce';\nimport { TuiButton, TuiFormatNumberPipe, TuiHint, TuiIcon, TuiLink } from '@taiga-ui/core';\nimport { TuiPreview } from '@taiga-ui/kit';\nimport { PolymorpheusOutlet, PolymorpheusTemplate } from '@taiga-ui/polymorpheus';\n\nimport { ScCatalogModule } from '../catalog';\nimport { ScCartItemMobileComponent } from './cart-item-mobile/sc-cart-item-mobile.component';\n\n/**\n * Модуль корзины.\n */\n@NgModule({\n declarations: [ScCartItemMobileComponent],\n exports: [ScCartItemMobileComponent],\n imports: [\n CommonModule,\n TuiLink,\n ScCatalogModule,\n TuiButton,\n TuiCurrencyPipe,\n TuiFormatNumberPipe,\n TuiIcon,\n ...TuiHint,\n FormsModule,\n ReactiveFormsModule,\n ...TuiPreview,\n PolymorpheusTemplate,\n PolymorpheusOutlet,\n ],\n})\nexport class ScCartModule {}\n","/* eslint-disable @typescript-eslint/unbound-method,lodash/prefer-lodash-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, DestroyRef, Inject, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n ScConvertersService,\n ScDeliveryAddressService,\n ScIDeliveryAddress,\n ScIDeliveryAddressOnDataCreate,\n ScISuggestionAddress,\n ScISuggestionType,\n ScSuggestion,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n} from '@snabcentr/client-core';\nimport { TUI_IS_MOBILE } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { YaReadyEvent } from 'angular8-yandex-maps';\nimport { ApiErrorResponse } from 'projects/client-ui/auth';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\n/**\n * Компонент добавления адреса доставки.\n */\n@Component({\n selector: 'sc-add-delivery-address-dialog',\n templateUrl: './sc-add-delivery-address-dialog.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddDeliveryAddressDialogComponent implements AfterViewInit {\n /**\n * Округляет координаты до 6 цифр после запятой.\n *\n * @param coords Координаты точки.\n */\n private static roundCoordinate(coords: number[]): number[] {\n return coords.map((coord) => Math.round(coord * 1e6) / 1e6);\n }\n\n /**\n * Ссылка для автоматического управления уничтожением зависимостей.\n */\n private destroyRef: DestroyRef = inject(DestroyRef);\n\n /**\n * Признак того, отображается этот компонент на мобильном устройстве или нет.\n */\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit$: Subject<void> = new Subject<void>();\n\n /**\n * Координаты центра карты по умолчанию.\n */\n public readonly defaultCenterMap: number[] = [57.000353, 40.97393];\n\n /**\n * Масштаб карты по умолчанию.\n */\n public readonly defaultZoomMap: number = 11;\n\n /**\n * {@link Observable} запроса данных добавления адрес доставки.\n */\n private readonly request$: Observable<ScIDeliveryAddress | null> = this.onSubmit$.pipe(\n filter(() => this.form.valid),\n map(() => this.form.value as ScIDeliveryAddressOnDataCreate),\n switchMap((value) =>\n this.deliveryAddressService.createDeliveryAddress$(this.convertersService.removeNullRecursive<ScIDeliveryAddressOnDataCreate>(value)).pipe(\n tap(() => {\n this.context.completeWith();\n }),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n if (errors) {\n Object.keys(errors).forEach((key) => {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n });\n } else if (message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n }\n\n return of({} as ScIDeliveryAddress);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map((data) => data === null));\n\n /**\n * Группа с полями адресов.\n */\n public addressControl: FormControl<ScISuggestionAddress | string | null> = new FormControl<ScISuggestionAddress | string | null>(null, Validators.required);\n\n /**\n * Настройки карты.\n */\n public options: ymaps.IMapOptions = {\n autoFitToViewport: 'always',\n yandexMapDisablePoiInteractivity: false,\n maxZoom: 19,\n };\n\n /**\n * Форма для создания адреса доставки.\n */\n public readonly form = new FormGroup({\n address: this.addressControl,\n coordinates: new FormGroup({\n lat: new FormControl<number | null>(null, Validators.required),\n long: new FormControl<number | null>(null, Validators.required),\n }),\n contact: new FormGroup({\n name: new FormControl<string | null>(null, Validators.required),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n email: new FormControl<string | null>(null, Validators.email),\n position: new FormControl<string | null>(null, Validators.required),\n }),\n });\n\n /**\n * Точка адреса на карте.\n */\n public addressPlacemark?: ymaps.Placemark;\n\n /**\n * Яндекс карта.\n */\n public yaMap?: ymaps.Map;\n\n /**\n * Инициализирует экземпляр класса {@link ScAddDeliveryAddressDialogComponent}.\n *\n * @param deliveryAddressService Сервис работы с адресами доставки.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n * @param convertersService Сервис конвертации данных.\n */\n public constructor(\n private readonly deliveryAddressService: ScDeliveryAddressService,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Inject(POLYMORPHEUS_CONTEXT) public readonly context: TuiDialogContext<void, void>,\n private readonly convertersService: ScConvertersService\n ) {}\n\n /** @inheritdoc */\n public ngAfterViewInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileDeliveryAddressAddShow,\n });\n\n this.addressControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.removeGeoCoordinates();\n });\n }\n\n /**\n * Обработчик загрузки карты на странице.\n *\n * @param target Экземпляр целевого объекта.\n * @param target.target Экземпляр целевого объекта.\n */\n public onMapReadyHandle({ target }: YaReadyEvent<ymaps.Map>): void {\n this.yaMap = target;\n\n if (this.addressPlacemark) {\n target.geoObjects.add(this.addressPlacemark);\n\n const bounds = this.addressPlacemark.geometry?.getBounds();\n\n if (bounds) {\n target.setBounds(bounds);\n }\n }\n }\n\n /**\n * Обработчик выбора адреса доставки.\n *\n * @param suggestion Объект подсказки ареса.\n */\n public onSelectedAddress(suggestion: ScSuggestion): void {\n if ('addressString' in suggestion && suggestion.geoCoordinates) {\n const coords = ScAddDeliveryAddressDialogComponent.roundCoordinate([suggestion.geoCoordinates.lat, suggestion.geoCoordinates.long]);\n\n if (!this.addressPlacemark) {\n this.addressPlacemark = this.createPlacemark(coords);\n }\n\n this.setGeoCoordinates(coords);\n\n if (!this.yaMap?.geoObjects.getLength()) {\n this.yaMap?.geoObjects.add(this.addressPlacemark);\n }\n\n const bounds = this.addressPlacemark.geometry?.getBounds();\n\n if (bounds) {\n this.yaMap?.setBounds(bounds);\n this.yaMap?.setZoom(17);\n }\n }\n }\n\n /**\n * Устанавливает {@link addressPlacemark} точку на определённые координаты.\n *\n * @param coords Координаты точки.\n */\n private setGeoCoordinates(coords: number[]): void {\n if (this.addressPlacemark) {\n this.addressPlacemark.geometry?.setCoordinates(coords);\n\n this.form.patchValue({\n coordinates: {\n lat: Number(coords[0].toFixed(6)),\n long: Number(coords[1].toFixed(6)),\n },\n });\n }\n }\n\n /**\n * Устанавливает {@link addressPlacemark} точку на определённые координаты.\n */\n private removeGeoCoordinates(): void {\n if (this.addressPlacemark) {\n this.yaMap?.geoObjects.remove(this.addressPlacemark);\n\n this.form.patchValue({\n coordinates: {\n lat: null,\n long: null,\n },\n });\n\n this.yaMap?.setCenter(this.defaultCenterMap);\n this.yaMap?.setZoom(this.defaultZoomMap);\n }\n }\n\n /**\n * Создаёт объект точки и устанавливает события для него.\n *\n * @param coords Координаты точки.\n */\n private createPlacemark(coords: number[]): ymaps.Placemark {\n const placemark = new ymaps.Placemark(\n coords,\n {\n iconCaption: '',\n },\n {\n preset: 'islands',\n draggable: true,\n }\n );\n\n placemark.events.add('dragend', () => {\n const coord = this.addressPlacemark?.geometry?.getCoordinates();\n\n if (coord) {\n this.setGeoCoordinates(ScAddDeliveryAddressDialogComponent.roundCoordinate(coord));\n }\n });\n\n return placemark;\n }\n}\n","<div class=\"relative flex flex-col gap-3 md:flex-row\">\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit$.next()\"\n class=\"flex w-full flex-col gap-3\"\n >\n <label tuiLabel>\n Адрес доставки\n <tui-input\n [pseudoInvalid]=\"(addressControl.valid && form.controls.coordinates.invalid) || null\"\n formControlName=\"address\"\n >\n Адрес доставки\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n (selectedClick)=\"onSelectedAddress($event)\"\n ></sc-suggestion-field>\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"address\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n <tui-error\n *ngIf=\"addressControl.valid && form.controls.coordinates.invalid\"\n error=\"Выберите вариант из списка\"\n ></tui-error>\n </label>\n <div\n formGroupName=\"contact\"\n class=\"flex grow flex-col gap-2\"\n >\n <p class=\"w-full font-bold\">Контактное лицо:</p>\n <label tuiLabel>\n Ф.И.О.\n <tui-input formControlName=\"name\">\n Ф.И.О.\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Телефон\n <tui-input-phone formControlName=\"phone\"> Телефон </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Адрес электронной почты\n <tui-input formControlName=\"email\">\n <input\n tuiTextfieldLegacy\n type=\"email\"\n />\n Адрес электронной почты\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Должность\n <tui-input formControlName=\"position\"> Должность </tui-input>\n <tui-error\n formControlName=\"position\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n <div class=\"flex justify-center gap-8\">\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n [iconStart]=\"isMobile ? '@tui.x' : '@tui.x'\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n <button\n tuiButton\n [iconStart]=\"isMobile ? '@tui.save' : '@tui.save'\"\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n >\n Добавить\n </button>\n </div>\n </form>\n\n <div\n class=\"absolute -z-10 flex size-full md:w-1/2\"\n [ngClass]=\"{ 'z-0 relative': addressPlacemark }\"\n >\n <div\n class=\"flex-auto\"\n [ngClass]=\"{ 'pointer-events-none opacity-50': form.controls.coordinates.invalid }\"\n >\n <ya-map\n [zoom]=\"11\"\n [state]=\"{ controls: [] }\"\n (ready)=\"onMapReadyHandle($event)\"\n [options]=\"options\"\n ></ya-map>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ScDeliveryAddressService, ScIContact, ScIDeliveryAddress } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент адреса доставки.\n */\n@Component({\n selector: 'sc-delivery-address-accordion-item',\n templateUrl: './sc-delivery-address-accordion-item.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScDeliveryAddressAccordionItemComponent implements OnInit {\n /**\n * Адрес доставки.\n */\n @Input()\n public deliveryAddress: ScIDeliveryAddress;\n\n /**\n * Список банковских счетов контрагента.\n */\n public contacts$?: Observable<ScIContact[] | null>;\n\n /**\n * Событие нажатия на кнопку удаления адреса доставки.\n */\n @Output()\n public deleteDeliveryAddressClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица адресу доставки.\n */\n @Output()\n public addDeliveryAddressContactClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица адреса доставки.\n */\n @Output()\n public deleteDeliveryAddressContactClick: EventEmitter<{ contact: ScIContact; address: ScIDeliveryAddress }> = new EventEmitter<{\n contact: ScIContact;\n address: ScIDeliveryAddress;\n }>();\n\n /**\n * Инициализирует экземпляр класса {@link ScDeliveryAddressAccordionItemComponent}.\n *\n * @param deliveryAddressService Сервис работы с адресами доставки.\n */\n public constructor(private readonly deliveryAddressService: ScDeliveryAddressService) {}\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.contacts$ = this.deliveryAddressService.getDeliveryAddressContacts$(this.deliveryAddress.id);\n }\n\n /**\n * Обработчик нажатия на кнопку удаления контактного лица у адреса доставки.\n *\n * @param contact Контактное лицо.\n * @param address Адрес доставки клиента.\n */\n public onDeleteContragentContactClick(contact: ScIContact, address: ScIDeliveryAddress): void {\n this.deleteDeliveryAddressContactClick.emit({ contact: contact, address: address });\n }\n}\n","<sc-accordion [showAddButton]=\"false\">\n {{ deliveryAddress.address }}\n\n <ng-template scAccordionContent>\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex gap-2\">\n <div class=\"flex grow flex-col gap-2\">\n <span> Адрес: {{ deliveryAddress.address }} </span>\n <span *ngIf=\"deliveryAddress.comment\"> Комментарий: {{ deliveryAddress.comment }} </span>\n </div>\n <!-- Функционал удаления временно не доступен пользователю. -->\n <!-- <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"@tui.trash-2\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteDeliveryAddressClick.emit(deliveryAddress)\"\n ></button> -->\n </div>\n\n <sc-contacts-accordion\n *ngIf=\"contacts$\"\n [contacts$]=\"contacts$\"\n (addContactClick)=\"addDeliveryAddressContactClick.next(deliveryAddress)\"\n (deleteButtonClick)=\"onDeleteContragentContactClick($event, deliveryAddress)\"\n ></sc-contacts-accordion>\n </div>\n </ng-template>\n</sc-accordion>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';\nimport { ScDeliveryAddressService, ScIContact, ScIDeliveryAddress } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент адресов доставки.\n */\n@Component({\n selector: 'sc-delivery-address-accordion',\n templateUrl: './sc-delivery-address-accordion.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScDeliveryAddressAccordionComponent {\n /**\n * {@link Observable} данных адресов доставки.\n */\n public deliveryAddress$: Observable<ScIDeliveryAddress[] | null> = this.deliveryAddressService.deliveryAddresses$;\n\n /**\n * Событие нажатия на кнопку добавления адреса доставки клиента.\n */\n @Output()\n public addDeliveryAddressClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления адреса доставки клиента.\n */\n @Output()\n public deleteDeliveryAddressClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица для адреса доставки.\n */\n @Output()\n public addDeliveryAddressContactClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у адреса доставки.\n */\n @Output()\n public deleteDeliveryAddressContactClick: EventEmitter<{ contact: ScIContact; address: ScIDeliveryAddress }> = new EventEmitter<{\n contact: ScIContact;\n address: ScIDeliveryAddress;\n }>();\n\n /**\n * Инициализирует экземпляр класса {@link ScDeliveryAddressAccordionComponent}.\n *\n * @param deliveryAddressService Сервис работы с адресами доставки.\n */\n public constructor(private readonly deliveryAddressService: ScDeliveryAddressService) {}\n}\n","<sc-accordion (addButtonClick)=\"addDeliveryAddressClick.emit()\">\n Адреса доставки\n <ng-template scAccordionContent>\n <tui-loader\n *tuiLet=\"deliveryAddress$ | async as deliveryAddress\"\n [overlay]=\"true\"\n [showLoader]=\"deliveryAddress === null\"\n >\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!deliveryAddress || deliveryAddress.length; else contragentsNotExist\">\n <sc-delivery-address-accordion-item\n *ngFor=\"let address of deliveryAddress\"\n [deliveryAddress]=\"address\"\n (deleteDeliveryAddressClick)=\"deleteDeliveryAddressClick.emit($event)\"\n (addDeliveryAddressContactClick)=\"addDeliveryAddressContactClick.emit($event)\"\n (deleteDeliveryAddressContactClick)=\"deleteDeliveryAddressContactClick.emit($event)\"\n ></sc-delivery-address-accordion-item>\n </ng-container>\n\n <ng-template #contragentsNotExist>\n <tui-notification size=\"l\">\n <div>\n <div class=\"flex flex-wrap gap-2 font-medium\">Адреса доставки не указаны.</div>\n </div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n</sc-accordion>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLoader, TuiNotification } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiElasticContainer, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule } from '@taiga-ui/legacy';\nimport { AngularYandexMapsModule } from 'angular8-yandex-maps';\n\nimport { ScAccordionModule } from '../accordion';\nimport { ScContactsModule } from '../contacts/sc-contacts.module';\nimport { ScFormFieldsModule } from '../form-fields/form-fields.module';\nimport { ScAddDeliveryAddressDialogComponent } from './add-delivery-address-dialog/sc-add-delivery-address-dialog.component';\nimport { ScDeliveryAddressAccordionItemComponent } from './delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component';\nimport { ScDeliveryAddressAccordionComponent } from './delivery-address-accordion/sc-delivery-address-accordion.component';\n\n/**\n * Модуль для отображение адресов доставки разделами, с возможностью скрывать и отображать содержимое.\n */\n@NgModule({\n declarations: [ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScAddDeliveryAddressDialogComponent],\n imports: [\n CommonModule,\n ScAccordionModule,\n TuiButton,\n TuiLoader,\n TuiLet,\n TuiNotification,\n ScContactsModule,\n FormsModule,\n ReactiveFormsModule,\n TuiLabel,\n TuiFieldErrorPipe,\n TuiError,\n TuiInputModule,\n TuiInputPhoneModule,\n ScFormFieldsModule,\n ...TuiDataList,\n AngularYandexMapsModule.forRoot({\n lang: 'ru_RU',\n }),\n TuiElasticContainer,\n TuiButtonLoading,\n ],\n exports: [ScDeliveryAddressAccordionComponent, ScAddDeliveryAddressDialogComponent],\n})\nexport class ScDeliveryAddressModule {}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n\nimport { ChangeDetectionStrategy, Component, inject, OnDestroy } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { SC_URLS } from '@snabcentr/client-core';\nimport { TuiButton, TuiDialogContext, TuiNotification } from '@taiga-ui/core';\nimport { injectContext } from '@taiga-ui/polymorpheus';\n\n/**\n * Компонент представления ресурсов.\n */\n@Component({\n standalone: true,\n selector: 'sc-resource-preview',\n templateUrl: './sc-resource-preview.component.html',\n styleUrl: './sc-resource-preview.component.scss',\n imports: [TuiNotification, TuiButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScResourcePreviewComponent implements OnDestroy {\n /**\n * Название файла из URL.\n */\n protected readonly name: string = inject(ActivatedRoute).snapshot.url.join('/');\n\n /**\n * Путь к ресурсу.\n */\n protected readonly src?: string = inject(SC_URLS).res?.[this.name]?.src ?? '';\n\n /**\n * MIME type файла {@link HTMLSourceElement}.\n */\n protected readonly type?: string = inject(SC_URLS).res?.[this.name]?.type ?? '';\n\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context: TuiDialogContext | null = injectContext<TuiDialogContext>({ optional: true });\n\n /**\n * Таймер автоматического включения проигрывателя.\n */\n private playAttempt?: NodeJS.Timeout;\n\n /**\n * Проверяет что MIME type ресурса подходит для `<video>`.\n */\n protected isVideoResource = () => this.type?.startsWith('video');\n\n /**\n * Обработчик события готовности видео к запуску.\n *\n * @param videoElement HTML элемент видео.\n */\n protected onCanPlay(videoElement: HTMLVideoElement): void {\n this.playAttempt = setInterval(() => {\n videoElement\n .play()\n .then(() => {\n if (this.playAttempt) {\n clearInterval(this.playAttempt);\n }\n })\n // eslint-disable-next-line lodash/prefer-noop\n .catch(() => {\n // Do nothing.\n });\n }, 2000); // Каждые 2 секунды пытается запустить видео.\n }\n\n /** @inheritDoc */\n public ngOnDestroy(): void {\n // Исправляет ошибку фонового воспроизведения после закрытия диалога.\n if (this.playAttempt) {\n clearInterval(this.playAttempt);\n }\n }\n}\n","@if (src && isVideoResource()) {\n <video\n #video\n controls\n (canplay)=\"onCanPlay(video)\"\n class=\"size-full bg-black\"\n >\n <source\n [src]=\"src\"\n [type]=\"type\"\n />\n </video>\n} @else {\n <tui-notification\n appearance=\"warning\"\n size=\"l\"\n >\n <div\n tuiTitle\n [style.padding-inline-end.rem]=\"2\"\n class=\"flex flex-col\"\n >\n {{ !src || !type ? 'Извините, ресурс не найден.' : 'Извините, данный формат ресурса не поддерживается.' }}\n <button\n tuiButton\n type=\"button\"\n size=\"m\"\n appearance=\"primary\"\n (click)=\"context?.$implicit?.complete()\"\n class=\"mt-4 self-center\"\n >\n Закрыть\n </button>\n </div>\n </tui-notification>\n}\n","import { tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\nimport { noop } from 'rxjs';\n\nimport { IBlockError } from '../interfaces/i-block-error';\n\n/**\n * Токен обработчика смены ошибки.\n */\n// eslint-disable-next-line unicorn/consistent-function-scoping\nexport const SC_ERROR_CHANGE_HANDLER = tuiCreateTokenFromFactory<(error: IBlockError) => void>(() => () => noop);\n","import { ChangeDetectionStrategy, Component, computed, effect, inject, output, Signal } from '@angular/core';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { TuiAppearance, TuiButton, TuiIcons, TuiWithAppearance, TuiWithIcons } from '@taiga-ui/core';\n\nimport { IBlockError } from '../interfaces/i-block-error';\nimport { ScErrorHandlerComponent } from '../sc-error-handler.component';\n\n/**\n * Компонент представления данных об ошибке.\n */\n@Component({\n standalone: true,\n selector: 'sc-error-block-status',\n templateUrl: './error-block-status.component.html',\n imports: [TuiAppearance, TuiWithAppearance, TuiIcons, TuiWithIcons, TuiButton, RouterLink],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScErrorBlockStatusComponent {\n /**\n * Компонент управляющий кодом ошибки отображаемой на странице.\n */\n protected readonly errorHandlerComponent: ScErrorHandlerComponent = inject(ScErrorHandlerComponent, { skipSelf: true });\n\n /**\n * Сигнал кода ошибки.\n */\n protected readonly code: Signal<number | null> = this.errorHandlerComponent.getErrorCode();\n\n /**\n * Данные об ошибке.\n */\n // eslint-disable-next-line unicorn/consistent-function-scoping\n protected readonly error: Signal<IBlockError> = computed(() => this.getErrorMessage(this.code()));\n\n /**\n * Создает сигнал изменения строкового представления об ошибке.\n */\n protected readonly pageErrorChange = output<IBlockError>();\n\n /**\n * Инициализирует экземпляр класса {@link ErrorPageComponent}.\n */\n public constructor() {\n // Если компонент отображён маршрутизацией из-за перехода по неизвестному маршруту, то устанавливаем код 404.\n if (inject(ActivatedRoute).snapshot.data['routes_key'] === 'error') {\n this.errorHandlerComponent.setErrorCode(404);\n }\n\n effect(() => {\n if (this.code() !== null) {\n this.pageErrorChange.emit(this.error());\n }\n });\n }\n\n /**\n * Возвращает описание ошибки.\n *\n * @param code Код ошибки.\n */\n // eslint-disable-next-line class-methods-use-this\n protected getErrorMessage(code: number | null): IBlockError {\n switch (code) {\n case 403:\n return {\n message: 'К сожалению, у вас нет доступа к этому ресурсу',\n description: 'Воспользуйтесь навигацией в шапке или подвале сайта, чтобы перейти в интересующий вас раздел',\n code,\n };\n\n case 404:\n return {\n message: 'К сожалению, такой страницы нет',\n description: 'Воспользуйтесь навигацией в шапке или подвале сайта, чтобы перейти в интересующий вас раздел',\n code,\n };\n\n default:\n return {\n message: 'Неизвестная ошибка',\n description: 'Пожалуйста обновите страницу или обратитесь к менеджеру',\n code: 0,\n };\n }\n }\n}\n","<div class=\"flex flex-col items-center gap-8\">\n <div class=\"border-20 border-solid border-tui-primary text-center sm:border-32\">\n <div class=\"text-8xl leading-1.15 text-black sm:text-44\">\n {{ error().code }}\n </div>\n <div class=\"text-6xl leading-1.15 text-tui-primary sm:text-8xl\">ERROR</div>\n </div>\n <div class=\"flex flex-col gap-2 text-center\">\n <div class=\"text-h5 sm:text-h4\">{{ error().message }}</div>\n <div class=\"text-body-m-bold sm:text-h6\">{{ error().description }}</div>\n </div>\n <button\n tuiButton\n appearance=\"primary\"\n routerLink=\"/\"\n >\n Вернуться на главную\n </button>\n</div>\n","import { ChangeDetectionStrategy, Component, inject, input, Signal, signal } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { filter } from 'rxjs';\n\nimport { SC_ERROR_CHANGE_HANDLER } from './consts/error-change-handler.providers';\nimport { ScErrorBlockStatusComponent } from './error-block-status/error-block-status.component';\nimport { IBlockError } from './interfaces/i-block-error';\n\n/**\n * Компонент для управления кодом ошибки отображаемой на странице.\n */\n@Component({\n standalone: true,\n selector: 'sc-error-handler',\n templateUrl: './sc-error-handler.component.html',\n imports: [ScErrorBlockStatusComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScErrorHandlerComponent {\n /**\n * Сигнал для хранения кода ошибки.\n */\n protected readonly code = signal<number | null>(null);\n\n /**\n * Сигнал дефолтного передаваемого из вне значения ошибки.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n public defaultCode = input<number | null>(null, { alias: 'code' });\n\n /**\n * Сервис маршрутизации.\n */\n private readonly router = inject(Router);\n\n /**\n * Обработчик изменения ошибки.\n */\n protected readonly errorChangeHandler: (error: IBlockError) => void = inject(SC_ERROR_CHANGE_HANDLER);\n\n /**\n * Инициирует экземпляр класса {@link ErrorHandlerComponent}.\n */\n public constructor() {\n this.router.events.pipe(filter((event) => event instanceof NavigationStart)).subscribe(() => {\n // Сбрасываем ошибку при переходе на новый маршрут.\n this.code.set(this.defaultCode());\n });\n }\n\n /**\n * Возвращает текущий сигнал с кодом ошибки.\n */\n public getErrorCode(): Signal<number | null> {\n return this.code;\n }\n\n /**\n * Устанавливает новый код ошибки.\n *\n * @param code Новый код ошибки.\n */\n public setErrorCode(code: number): void {\n this.code.set(code);\n }\n}\n","@if (code() === null) {\n <ng-content />\n} @else {\n <sc-error-block-status (pageErrorChange)=\"errorChangeHandler($event)\"></sc-error-block-status>\n}\n","/* eslint-disable class-methods-use-this */\n\nimport { Injectable } from '@angular/core';\nimport { ScDocumentInfo, ScDocumentInfoTypesEnum, ScIconTypesEnum } from '@snabcentr/client-core';\n\n/**\n * Сервис работающий с значками элементов дерева.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class TreeIconService {\n /**\n * Назначает значок элементу дерева в зависимости от типа файла.\n *\n * @param info Объект пришедших данных о файле.\n * @returns Возвращает название значка в виде строки.\n */\n public getIconName(info: ScDocumentInfo): string {\n switch (info.icon) {\n case ScIconTypesEnum.iconImage:\n return '@tui.image';\n case ScIconTypesEnum.iconPdfFile:\n return '@tui.sc.file-p';\n case ScIconTypesEnum.iconWordFile:\n return '@tui.sc.file-w';\n case ScIconTypesEnum.iconExcelFile:\n return '@tui.sc.file-x';\n case ScIconTypesEnum.iconFolder:\n return '@tui.folder';\n default:\n return '@tui.file';\n }\n }\n\n /**\n * Проверяет на признак наличия дочерних элементов.\n *\n * @param info Объект пришедших данных о файле.\n * @returns Возвращает true при наличии дочерних элементов и false при их отсутствии.\n */\n public hasChildren(info: ScDocumentInfo): boolean {\n return info.type === ScDocumentInfoTypesEnum.dir;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ScDocumentInfo, ScFilesService } from '@snabcentr/client-core';\nimport { TuiTreeLoader } from '@taiga-ui/kit';\nimport { map, Observable } from 'rxjs';\n\nimport { TreeNode } from '../interfaces/tree-node';\nimport { TreeIconService } from './tree-icon.service';\n\n/**\n * Сервис для асинхронного раскрытия вложенности.\n */\n@Injectable()\nexport class TreeLoaderService implements TuiTreeLoader<TreeNode> {\n /**\n * Инициализирует экземпляр класса {@link TreeLoaderService}\n *\n * @param filesService Сервис для получения файлов директории.\n * @param iconService Сервис для определения и назначения значка элементу дерева.\n */\n public constructor(\n private readonly filesService: ScFilesService,\n private readonly iconService: TreeIconService\n ) {}\n\n /**\n * Загружает дочерние элементы дерева.\n *\n * @param item Элемент дерева.\n * @returns Массив дочерних элементов.\n */\n public loadChildren(item: TreeNode): Observable<TreeNode[]> {\n // eslint-disable-next-line unicorn/no-useless-undefined\n return item.id ? this.initData(item.id) : this.initData(undefined);\n }\n\n /**\n * Проверяет указанный элемент дерева на наличие дочерних элементов и возвращает массив дочерних элементов, если они есть, либо пустой массив.\n *\n * @param node Элемент дерева.\n * @returns Возвращает массив типа TreeNode[].\n */\n // eslint-disable-next-line class-methods-use-this\n public hasChildren(node: TreeNode): boolean {\n return node.hasChildren && !!node.id;\n }\n\n /**\n * Загружает и заполняет массив дочерних элементов.\n *\n * @param id Идентификатор директории, чьи дочернии элементы загружаются.\n * @returns Возвращает массив дочерних элементов.\n */\n private initData(id: number | undefined): Observable<TreeNode[]> {\n return this.filesService.getFiles(id).pipe(\n map((data: ScDocumentInfo[]) =>\n data.map((item) => ({\n text: item.name,\n icon: this.iconService.getIconName(item),\n hasChildren: this.iconService.hasChildren(item),\n createdAt: item.createdAt,\n id: item.id,\n link: item.link,\n }))\n )\n );\n }\n}\n","import { Directive } from '@angular/core';\nimport { TuiHandler } from '@taiga-ui/cdk';\nimport { TuiTreeService } from '@taiga-ui/kit';\n\nimport { TreeNode } from '../interfaces/tree-node';\n\n/**\n * Директива отвечающая за обработку действий над элементами дерева.\n */\n@Directive({\n selector: '[scTree]',\n exportAs: 'scTree',\n providers: [TuiTreeService],\n})\nexport class TreeDirective {\n /**\n * Карта данных дерева.\n */\n public map = new Map<TreeNode, boolean>();\n\n /**\n * Проверяет указанный элемент дерева на наличие дочерних элементов и возвращает массив дочерних элементов, если они есть, либо пустой массив.\n *\n * @param node Элемент дерева.\n * @returns Возвращает массив типа TreeNode[].\n */\n public childrenHandler: TuiHandler<TreeNode, readonly TreeNode[]> = (node) => (node.hasChildren ? this.service.getChildren(node) : []);\n\n /**\n * Инициализирует экземпляр класса {@link TreeDirective}.\n *\n * @param service Сервис для работы с деревом.\n */\n public constructor(public readonly service: TuiTreeService<TreeNode>) {}\n\n /**\n * Обрабатывает нажатие на указанный элемент дерева.\n *\n * @param node Элемент дерева.\n */\n public onToggled(node: TreeNode): void {\n this.service.loadChildren(node);\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { TuiTreeItemContent } from '@taiga-ui/kit';\n\n/**\n * Компонент для удаления стандартного значка элемента дерева.\n */\n@Component({\n selector: 'sc-file-tree-item',\n templateUrl: './file-tree-item.component.html',\n styleUrls: ['./file-tree-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n '(click)': 'onClick()',\n },\n})\nexport class FileTreeItemComponent extends TuiTreeItemContent {}\n","<ng-container [ngTemplateOutlet]=\"context.template\"></ng-container>\n","/* eslint-disable no-use-before-define,@angular-eslint/no-input-rename */\n\nimport { Directive, forwardRef, Input } from '@angular/core';\nimport { TUI_TREE_CONTENT, TUI_TREE_START } from '@taiga-ui/kit';\nimport { PolymorpheusComponent } from '@taiga-ui/polymorpheus';\n\nimport { FileTreeItemComponent } from '../file-tree-item/file-tree-item.component';\nimport { TreeNode } from '../interfaces/tree-node';\n\n/**\n * Директива отвечающая за корневые элементы дерева.\n */\n@Directive({\n selector: '[scTopNodeText]',\n providers: [\n {\n provide: TUI_TREE_START,\n useExisting: forwardRef(() => TreeTopDirective),\n },\n {\n provide: TUI_TREE_CONTENT,\n useValue: new PolymorpheusComponent(FileTreeItemComponent),\n },\n ],\n})\nexport class TreeTopDirective implements TreeNode {\n /**\n * Отображаемое имя корневого элемента дерева.\n */\n @Input('scTopNodeText')\n public text = '';\n\n /**\n * Значок корневого элемента дерева.\n */\n @Input('scTopNodeIcon')\n public icon: string;\n\n /**\n * Ссылка корневого элемента дерева.\n */\n @Input('scTopNodeLink')\n public link?: string;\n\n /**\n * Признак наличия дочерних элементов.\n */\n @Input('scTopNodeChilds')\n public hasChildren: boolean;\n\n /**\n * Идентификатор корневого элемента дерева.\n */\n @Input('scTopNodeParent')\n public id?: number;\n\n /**\n * Дата создания корневого элемента дерева.\n */\n @Input('scTopNodeDate')\n public createdAt?: string;\n}\n","import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { ScDocumentInfo, ScFilesService } from '@snabcentr/client-core';\nimport { TUI_TREE_LOADER, TUI_TREE_LOADING } from '@taiga-ui/kit';\nimport { map, Observable } from 'rxjs';\n\nimport { TreeNode } from '../interfaces/tree-node';\nimport { TreeIconService } from '../services/tree-icon.service';\nimport { TreeLoaderService } from '../services/tree-loader.service';\n\n/**\n * Компонент файлов и документов.\n */\n@Component({\n selector: 'sc-files-and-documents',\n templateUrl: './files-and-documents.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TUI_TREE_LOADER,\n useClass: TreeLoaderService,\n },\n ],\n})\nexport class FilesAndDocumentsComponent {\n /**\n * Данные визуализации и их начальное получение.\n */\n public data$: Observable<TreeNode[]> = this.filesService.getFiles().pipe(\n map((data: ScDocumentInfo[]) =>\n data.map((item) => ({\n text: item.name,\n icon: this.iconService.getIconName(item),\n hasChildren: this.iconService.hasChildren(item),\n createdAt: item.createdAt,\n id: item.id,\n link: item.link,\n }))\n )\n );\n\n /**\n * Инициализирует экземпляр класса {@link FilesAndDocumentsComponent}.\n *\n * @param loading Объект отвечающий за значок загрузки, в момент раскрытия элемента дерева.\n * @param iconService Сервис для определения и назначения значка элементу дерева.\n * @param filesService Сервис для загрузки файлов.\n */\n public constructor(\n @Inject(TUI_TREE_LOADING) public readonly loading: unknown,\n public readonly iconService: TreeIconService,\n private readonly filesService: ScFilesService\n ) {}\n}\n","<ng-container *ngIf=\"data$ | async as data; else skeleton\">\n <tui-tree\n *ngFor=\"let node of data\"\n #tree=\"scTree\"\n scTree\n [scTopNodeText]=\"node.text\"\n [scTopNodeIcon]=\"node.icon\"\n [scTopNodeLink]=\"node.link\"\n [scTopNodeChilds]=\"node.hasChildren\"\n [scTopNodeParent]=\"node.id\"\n [scTopNodeDate]=\"node.createdAt\"\n [childrenHandler]=\"tree.childrenHandler\"\n [content]=\"content\"\n [map]=\"tree.map\"\n [tuiTreeController]=\"false\"\n [value]=\"tree.service.data$ | async\"\n (toggled)=\"tree.onToggled($event)\"\n class=\"overflow-hidden\"\n ></tui-tree>\n</ng-container>\n\n<ng-template\n #content\n let-item\n>\n <tui-loader\n *ngIf=\"item === loading; else text\"\n class=\"my-4 w-8\"\n ></tui-loader>\n <ng-template #text>\n <tui-icon\n [icon]=\"item.icon\"\n class=\"tui-space_right-2\"\n ></tui-icon>\n <a\n tuiLink\n [pseudo]=\"true\"\n *ngIf=\"item.link\"\n href=\"{{ item.link }}\"\n class=\"grow\"\n >{{ item.text }}</a\n >\n <p\n *ngIf=\"!item.link\"\n class=\"grow\"\n >\n {{ item.text }}\n </p>\n <p>{{ item.createdAt }}</p>\n </ng-template>\n</ng-template>\n\n<ng-template #skeleton>\n <div class=\"flex flex-col gap-2\">\n <div\n *ngFor=\"let _ of [].constructor(7)\"\n class=\"flex items-center gap-2\"\n >\n <div class=\"tui-skeleton size-6\"></div>\n <div class=\"tui-skeleton h-4 w-40\"></div>\n </div>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiIcon, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiTree } from '@taiga-ui/kit';\n\nimport { TreeTopDirective } from './directives';\nimport { TreeDirective } from './directives/tree.directive';\nimport { FileTreeItemComponent } from './file-tree-item/file-tree-item.component';\nimport { FilesAndDocumentsComponent } from './files-and-documents/files-and-documents.component';\n\n/**\n * Модуль файлов и документов.\n */\n@NgModule({\n imports: [CommonModule, ...TuiTree, TuiIcon, TuiLoader, TuiLink],\n declarations: [FilesAndDocumentsComponent, TreeDirective, TreeTopDirective, FileTreeItemComponent],\n exports: [FilesAndDocumentsComponent],\n})\nexport class FilesAndDocumentsModule {}\n","/**\n * Список иконок.\n */\nexport const scClientUiIconsName = [\n 'application',\n 'back',\n 'bag',\n 'banknote-arrow-in-top',\n 'chart-column-plus',\n 'circle-arrow-in-right',\n 'contacts',\n 'file-p',\n 'file-search',\n 'file-w',\n 'file-x',\n 'instagram',\n 'layout-list-tree',\n 'list',\n 'reclamation',\n 'send',\n 'telegram',\n 'vk',\n 'whatsapp',\n 'catalog.aluminum-systems',\n 'catalog.arm-profile',\n 'catalog.batten',\n 'catalog.brusbox',\n 'catalog.canopy',\n 'catalog.configurator',\n 'catalog.covering-material',\n 'catalog.door-accessories',\n 'catalog.drainage-system',\n 'catalog.fastener',\n 'catalog.finishing-materials',\n 'catalog.fixing-impost',\n 'catalog.flask',\n 'catalog.foam-balloon',\n 'catalog.foam',\n 'catalog.glue',\n 'catalog.handle',\n 'catalog.instrument',\n 'catalog.kve-profile',\n 'catalog.lubricants',\n 'catalog.mosquito-net',\n 'catalog.mounting-accessories',\n 'catalog.net-order',\n 'catalog.panel-1',\n 'catalog.panel',\n 'catalog.polyethylene-film',\n 'catalog.profile-plastic',\n 'catalog.promo-materials',\n 'catalog.psul',\n 'catalog.rehau-profile',\n 'catalog.sandwich-plastic',\n 'catalog.sealer',\n 'catalog.siding',\n 'catalog.start-finish-profile',\n 'catalog.steam-waterproofing',\n 'catalog.stiz',\n 'catalog.thermometer',\n 'catalog.windowsill',\n 'img.email',\n 'img.facebook',\n 'img.instagram',\n 'img.qr-code',\n 'img.telegram',\n 'img.viber',\n 'img.vk',\n 'img.whatsapp',\n 'img.copy',\n 'landing.catalog',\n 'landing.construction-chemicals',\n 'landing.fastener',\n 'landing.foam-balloon',\n 'landing.mosquito-net',\n 'landing.profile-plastic',\n 'landing.sandwich-panel',\n 'landing.siding',\n 'landing.strip',\n 'landing.windowsill',\n 'solid.facebook',\n 'solid.instagram',\n 'solid.telegram',\n 'solid.vk-rounded',\n 'solid.vk',\n 'solid.whatsapp',\n];\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n/**\n * Компонент списка брэндов.\n */\n@Component({\n selector: 'sc-brands-list',\n templateUrl: './sc-brands-list.component.html',\n styleUrls: ['./sc-brands-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScBrandsListComponent {\n /**\n * Список элементов брендов.\n */\n @Input()\n public items: Array<{\n src: string;\n alt: string;\n }> = [];\n}\n","<!-- TODO: TASK:[#9893] Добавить разделение на несколько строк изображений, при увеличении количества брендов. -->\n<div class=\"flex flex-col gap-4\">\n <div class=\"relative\">\n <div class=\"absolute -left-1 top-0 z-10 block h-full w-12 bg-gradient-to-r from-tui-base-01 to-transparent\"></div>\n <div class=\"flex select-none items-center justify-center gap-12 overflow-hidden contrast-150 saturate-0\">\n <div\n *ngFor=\"let _ of [].constructor(3)\"\n class=\"animate-scroll-slow scroll-slow-revert flex shrink-0 items-center gap-16\"\n >\n <div\n *tuiRepeatTimes=\"let index of items.length - (items.length - (items.length % 2)) / 2\"\n class=\"flex items-center justify-center\"\n >\n <img\n [src]=\"items[index + (items.length - (items.length % 2)) / 2].src\"\n [alt]=\"items[index].alt\"\n />\n </div>\n </div>\n </div>\n <div class=\"absolute -right-1 top-0 z-10 block h-full w-12 bg-gradient-to-r from-transparent to-tui-base-01\"></div>\n </div>\n <div class=\"relative\">\n <div class=\"absolute -left-1 top-0 z-10 block h-full w-12 bg-gradient-to-r from-tui-base-01 to-transparent\"></div>\n <div class=\"flex select-none items-center justify-center gap-12 overflow-hidden contrast-150 saturate-0\">\n <div\n *ngFor=\"let _ of [].constructor(3)\"\n class=\"animate-scroll-slow flex shrink-0 items-center gap-16\"\n >\n <div\n *tuiRepeatTimes=\"let index of (items.length - (items.length % 2)) / 2\"\n class=\"flex items-center justify-center\"\n >\n <img\n [src]=\"items[index].src\"\n [alt]=\"items[index].alt\"\n />\n </div>\n </div>\n </div>\n <div class=\"absolute -right-1 top-0 z-10 block h-full w-12 bg-gradient-to-r from-transparent to-tui-base-01\"></div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiRepeatTimes } from '@taiga-ui/cdk';\n\nimport { ScBrandsListComponent } from './sc-brands-list.component';\n\n/**\n * Модуль списка брэндов.\n */\n@NgModule({\n imports: [CommonModule, TuiRepeatTimes],\n declarations: [ScBrandsListComponent],\n exports: [ScBrandsListComponent],\n})\nexport class ScBrandsListModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, inject, Input, Output } from '@angular/core';\nimport { ScNewsTile } from '@snabcentr/client-core';\nimport { TUI_IS_MOBILE } from '@taiga-ui/cdk';\n\n/**\n * Компонент карточки новости.\n */\n@Component({\n selector: 'sc-news-card',\n templateUrl: './sc-news-card.component.html',\n styleUrls: ['./sc-news-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewsCardComponent {\n /**\n * Данные о новости.\n */\n @Input()\n public news: ScNewsTile;\n\n /**\n * Событие клика по карточке новости.\n */\n @Output()\n public clickCardEvent: EventEmitter<ScNewsTile> = new EventEmitter<ScNewsTile>();\n\n /**\n * Признак того, что этот компонент отображается на мобильном устройстве.\n */\n @HostBinding('class.is_mobile')\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n}\n","<div\n (click)=\"clickCardEvent.emit(news)\"\n class=\"shadow-sc relative flex h-full cursor-pointer flex-col gap-2 overflow-hidden rounded-xl bg-white px-2 pb-4 pt-2\"\n>\n <div\n [style.background-image]=\"'url(' + news.image + ')'\"\n class=\"bg-tui-base-02 w-full grow rounded-xl bg-cover bg-center bg-no-repeat\"\n ></div>\n <div class=\"flex w-full flex-col justify-between gap-2 overflow-hidden bg-white align-baseline\">\n <p class=\"text-tui-text-02 text-sm font-medium\">{{ news.createdAt }}</p>\n\n <div class=\"line-clamp-3 font-extrabold\">{{ news.subject }}</div>\n </div>\n</div>\n\n<!-- <div\n[style.background-image]=\"'url(' + news.image + ')'\"\nclass=\"h-50 w-full bg-tui-base-02 bg-cover bg-center bg-no-repeat\"\n></div> -->\n","import { ChangeDetectionStrategy, Component, HostBinding, inject, Input } from '@angular/core';\nimport { TUI_IS_MOBILE } from '@taiga-ui/cdk';\n\n/**\n * Компонент скелетона карточки новости.\n */\n@Component({\n selector: 'sc-news-card-skeleton',\n templateUrl: './sc-news-card-skeleton.component.html',\n styleUrls: ['./sc-news-card-skeleton.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewsCardSkeletonComponent {\n /**\n * Признак, что необходимо отобразить скелетон изображения новости.\n */\n @Input() public hasImg: boolean = true;\n\n /**\n * Признак того, что этот компонент отображается на мобильном устройстве.\n */\n @HostBinding('class.is_mobile')\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n}\n","<div class=\"relative flex h-full cursor-pointer flex-col gap-2 overflow-hidden rounded-xl bg-white px-2 pb-4 pt-2 shadow-sc-2\">\n <div\n *ngIf=\"hasImg; else textBlock\"\n class=\"w-full grow rounded-xl bg-tui-base-02\"\n ></div>\n <ng-template #textBlock>\n <div class=\"py-4.5 flex w-full flex-col gap-2 px-6\">\n <div class=\"h-3 w-full rounded bg-tui-base-02\"></div>\n <div class=\"h-3 w-3/4 rounded bg-tui-base-02\"></div>\n <div class=\"h-3 w-full rounded bg-tui-base-02\"></div>\n <div class=\"h-3 w-3/4 rounded bg-tui-base-02\"></div>\n <div class=\"h-3 w-full rounded bg-tui-base-02\"></div>\n </div>\n </ng-template>\n\n <div class=\"w-3/4\">\n <ng-container *ngTemplateOutlet=\"textBlock\"></ng-container>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TuiSizeL, TuiSizeM, TuiSizeS } from '@taiga-ui/core';\n\n/**\n * Компонент кнопки \"Поделиться\".\n */\n@Component({\n selector: 'sc-share-button',\n templateUrl: './sc-share-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScShareButtonComponent {\n /**\n * Формат внешнего вида кнопки.\n */\n @Input()\n public appearance: 'primary' | 'secondary' | 'outline' | 'flat' = 'secondary';\n\n /**\n * Размер кнопки.\n */\n @Input()\n public size: TuiSizeL | TuiSizeM | TuiSizeS = 'm';\n\n /**\n * Событие клика по кнопке \"Поделиться\".\n */\n @Output()\n public clickShareEvent: EventEmitter<void> = new EventEmitter<void>();\n}\n","<button\n tuiIconButton\n iconStart=\"@tui.share-2\"\n [appearance]=\"appearance\"\n [size]=\"size\"\n (click)=\"$event.stopPropagation(); clickShareEvent.emit()\"\n></button>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiButton } from '@taiga-ui/core';\n\nimport { ScShareButtonComponent } from './sc-share-button.component';\n\n/**\n * Модуль работы кнопки \"Поделиться\".\n */\n@NgModule({\n declarations: [ScShareButtonComponent],\n imports: [CommonModule, TuiButton],\n exports: [ScShareButtonComponent],\n})\nexport class ScShareButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { ScShareButtonModule } from '../share-button';\nimport { ScNewsCardComponent } from './news-card/sc-news-card.component';\nimport { ScNewsCardSkeletonComponent } from './news-card-skeleton/sc-news-card-skeleton.component';\n\n/**\n * Модуль работы с новостями.\n */\n@NgModule({\n declarations: [ScNewsCardComponent, ScNewsCardSkeletonComponent],\n imports: [CommonModule, RouterModule, ScShareButtonModule],\n exports: [ScNewsCardComponent, ScNewsCardSkeletonComponent],\n})\nexport class ScNewsModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { ScCartItem, ScProduct } from '@snabcentr/client-core';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { TuiPreviewDialogService } from '@taiga-ui/kit';\n\nimport { AbstractScPriceCard } from '../../directives';\n\n/**\n * Компонент карточки элемента заказа.\n */\n@Component({\n selector: 'sc-order-item-mobile',\n templateUrl: './sc-order-item-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScOrderItemMobileComponent extends AbstractScPriceCard {\n /**\n * Ссылка на представление спецификации.\n */\n @ViewChild('specificationPreview')\n private readonly specificationPreviewRef?: TemplateRef<TuiDialogContext>;\n\n /**\n * Элемент заказа.\n */\n @Input()\n public orderItem?: ScCartItem;\n\n /**\n * Событие нажатия на дополнительные действия.\n */\n @Output()\n public clickActionsEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Инициирует экземпляр класса {@link ScOrderItemMobileComponent}.\n *\n * @param previewDialogService Сервис диалогового окна предварительного просмотра.\n */\n public constructor(\n @Inject(TuiPreviewDialogService)\n private readonly previewDialogService: TuiPreviewDialogService\n ) {\n super();\n }\n\n /**\n * Продукт элемента заказа.\n */\n public override get product(): ScProduct | undefined {\n return this.orderItem?.product;\n }\n\n /**\n * Отобразить спецификацию.\n */\n public showSpecification(): void {\n this.previewDialogService.open(this.specificationPreviewRef ?? '').subscribe();\n }\n\n /**\n * Возвращает ссылку на изображение карточки товара.\n *\n * @param product Позиция товара/услуги.\n */\n public getCardImage(product: ScProduct): string {\n return this.imageHelper.getImage(product);\n }\n}\n","<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 iconStart=\"@tui.ellipsis-vertical\"\n appearance=\"float\"\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(product)\"\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 [attr.href]=\"href ?? null\"\n tuiLink\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n <div class=\"flex flex-col gap-y-0.5 text-tui-text-02\">\n <div class=\"flex flex-wrap\">\n <p class=\"w-40\">Артикул: {{ product.code }}</p>\n <p\n class=\"w-40\"\n *ngIf=\"product.pack\"\n >\n Норма упаковки: {{ product.pack }}\n </p>\n </div>\n <a\n tuiLink\n *ngIf=\"orderItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >Спецификация</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 iconStart=\"@tui.x\"\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\n <div class=\"flex flex-wrap gap-y-0.5\">\n <span\n *ngIf=\"product.discount\"\n class=\"w-50 items-center gap-x-2 gap-y-0.5 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\">Дата окончания: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <p class=\"w-50 flex items-baseline gap-x-2 gap-y-0.5 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 </div>\n </div>\n <div class=\"flex flex-wrap content-center\">\n <div class=\"w-50 flex flex-col gap-x-8 gap-y-0.5\">\n <ng-container *ngIf=\"orderItem.height; else length\">\n <p>Высота: {{ orderItem.height }} м.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"orderItem.length\">Длина: {{ orderItem.length }} м.</p>\n </ng-template>\n <p *ngIf=\"orderItem.width\">Ширина: {{ orderItem.width }} м.</p>\n <p class=\"flex flex-col items-baseline gap-x-2\">\n <span class=\"whitespace-nowrap text-body-m-bold\">\n Количество: <span class=\"whitespace-nowrap\">{{ orderItem.quantity }}</span>\n </span>\n </p>\n </div>\n\n <div class=\"w-50 flex flex-col gap-y-0.5\">\n <p class=\"whitespace-nowrap text-body-m-bold\">\n Сумма: <span class=\"whitespace-nowrap\"> {{ orderItem.getCostRubStr() }} </span>\n </p>\n <sc-price-warehouse-stock\n [product]=\"product\"\n [fromMain]=\"false\"\n ></sc-price-warehouse-stock>\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","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n/**\n * Компонент статуса оплаты заказа.\n */\n@Component({\n selector: 'sc-payment-status',\n templateUrl: './sc-payment-status.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPaymentStatusComponent {\n /**\n * Признак того, успешна ли прошла оплата, или нет.\n */\n @Input()\n public status: 'success' | 'error' | null;\n\n /**\n * Номер оплаченного заказа.\n */\n @Input()\n public orderId: string | null;\n\n /**\n * Событие нажатия на кнопку \"Вернуться к списку заказов\".\n */\n @Output()\n public backToOrdersClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку \"На главную\".\n */\n @Output()\n public backToOrderClick: EventEmitter<void> = new EventEmitter<void>();\n}\n","<ng-container *ngIf=\"status && orderId; else failed\">\n <ng-container [ngSwitch]=\"status\">\n <tui-block-status *ngSwitchCase=\"'success'\">\n <tui-icon\n icon=\"@tui.circle-check\"\n tuiSlot=\"top\"\n class=\"!h-20 scale-[3] !text-green-500\"\n ></tui-icon>\n <h4>Спасибо!</h4>\n <br />\n <div class=\"font-bold\">Ваш заказ успешно оплачен. Мы свяжемся с вами в ближайшее время.</div>\n <br />\n <div class=\"font-bold\">\n Номер вашего заказа:\n <a\n tuiLink\n [pseudo]=\"true\"\n (click)=\"backToOrderClick.emit()\"\n >{{ orderId }}</a\n >\n </div>\n\n <button\n tuiButton\n (click)=\"backToOrdersClick.emit()\"\n >\n Вернуться к заказам\n </button>\n </tui-block-status>\n <tui-block-status *ngSwitchCase=\"'error'\">\n <tui-icon\n icon=\"@tui.circle-x\"\n class=\"!h-20 scale-[3] !text-red-500\"\n tuiSlot=\"top\"\n ></tui-icon>\n <h4>Оплата не прошла!</h4>\n <br />\n <div class=\"font-bold\">При обработке платежа произошла ошибка.</div>\n <button\n tuiButton\n tuiItem\n (click)=\"backToOrderClick.emit()\"\n >\n Вернуться к заказу\n </button>\n </tui-block-status>\n </ng-container>\n</ng-container>\n\n<ng-template #failed>\n <tui-block-status>\n <tui-icon\n icon=\"@tui.info\"\n class=\"!h-20 scale-[3] !text-yellow-500\"\n tuiSlot=\"top\"\n ></tui-icon>\n <h4>Что-то пошло не так!</h4>\n <button\n tuiButton\n tuiItem\n (click)=\"backToOrdersClick.emit()\"\n >\n Вернуться к заказам\n </button>\n </tui-block-status>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiButton, TuiIcon, TuiLink } from '@taiga-ui/core';\nimport { TuiPreview } from '@taiga-ui/kit';\nimport { TuiBlockStatus } from '@taiga-ui/layout';\nimport { PolymorpheusOutlet, PolymorpheusTemplate } from '@taiga-ui/polymorpheus';\n\nimport { ScCatalogModule } from '../catalog';\nimport { ScOrderItemMobileComponent } from './order-item-mobile/sc-order-item-mobile.component';\nimport { ScPaymentStatusComponent } from './sc-payment-status/sc-payment-status.component';\n\n/**\n * Модуль заказов.\n */\n@NgModule({\n declarations: [ScOrderItemMobileComponent, ScPaymentStatusComponent],\n exports: [ScOrderItemMobileComponent, ScPaymentStatusComponent],\n imports: [CommonModule, TuiLink, TuiButton, TuiIcon, ...TuiBlockStatus, ...TuiPreview, ScCatalogModule, PolymorpheusTemplate, PolymorpheusOutlet],\n})\nexport class ScOrderModule {}\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен максимального количества файлов, отправляемых в форме в байтах.\n */\nexport const MAX_FILES_IN_FORM_INPUT: InjectionToken<number> = tuiCreateToken<number>(5);\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\nimport { ScIQAInfo } from '../pages/questions-and-answers/sc-i-qa-info';\n\n/**\n * Токен данных для страницы \"Вопросы-ответы\".\n */\nexport const SC_QA_INFO: InjectionToken<ScIQAInfo> = tuiCreateToken<ScIQAInfo>();\n","import { InjectionToken, Provider } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ScUser, ScUserService } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Токен потока данных о текущем пользователе.\n */\nexport const SC_USER_INFO = new InjectionToken<Observable<ScUser | undefined>>('A stream with current user information');\n\n/**\n * Фабрика создания потока данных о текущем пользователе.\n *\n * @param userService Сервис данных о пользователе.\n */\nexport function scUserFactory(userService: ScUserService): Observable<ScUser | undefined> {\n // TODO: TASK[#7615] Отслеживать выполнение запроса изменения данными о пользователе после доработки snabcentr-core-lib.\n return userService.getUserChange$().pipe(takeUntilDestroyed());\n}\n\n/**\n * Провайдер потока данных о текущем пользователе.\n */\nexport const SC_USER_PROVIDERS: Provider[] = [\n {\n provide: SC_USER_INFO,\n deps: [ScUserService],\n useFactory: scUserFactory,\n },\n];\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { ScRequisitesService } from '@snabcentr/client-core';\nimport { TuiFormatNumberPipe, TuiLink } from '@taiga-ui/core';\nimport { TuiAccordion } from '@taiga-ui/kit';\nimport { map, Observable } from 'rxjs';\n\nimport { ScEmailLinkDirective } from '../../directives/links/sc-email-link.directive';\nimport { SC_QA_INFO } from '../../providers';\nimport { ScIQAInfo } from './sc-i-qa-info';\n\n/**\n * Компонент \"Вопросы-ответы\".\n */\n@Component({\n standalone: true,\n selector: 'app-questions-and-answers',\n imports: [TuiAccordion, TuiFormatNumberPipe, AsyncPipe, NgIf, TuiLink, ScEmailLinkDirective],\n templateUrl: './questions-and-answers.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class QuestionsAndAnswersComponent {\n /**\n * {@link Observable} изменения Email для связи по вопросам рекламаций.\n */\n protected readonly reclamationsEmail$: Observable<string | undefined> = inject(ScRequisitesService).personal$.pipe(\n map((contacts) => contacts.find((contact) => contact.type === 'reclamation')?.email)\n );\n\n /**\n * Данные для страницы \"Вопросы-ответы\"\n */\n protected readonly data: ScIQAInfo = inject(SC_QA_INFO);\n}\n","<tui-accordion [closeOthers]=\"false\">\n <tui-accordion-item borders=\"top-bottom\">\n <span class=\"text-body-m-bold\">Доставка заказов по областям</span>\n <ng-template tuiAccordionItemContent>\n <p>\n Парк автомобилей Снабцентр насчитывает {{ data.carsInfo.count }} большегрузных автомобилей от {{ data.carsInfo.loadCapacity.min }} до\n {{ data.carsInfo.loadCapacity.max }} тонн.\n </p>\n <p>Осуществляем доставку сборных грузов еженедельно более чем по {{ data.deliveryData.length }} направлениям.</p>\n <p>Минимальная сумма бесплатной доставки варьируется в зависимости от области.</p>\n <br />\n\n <ul\n *ngIf=\"data.deliveryData.length\"\n class=\"ml-2 list-disc\"\n >\n @for (deliveryItem of data.deliveryData; track $index) {\n <li class=\"list-inside\">\n {{ deliveryItem.region }} / бесплатная доставка от\n {{ deliveryItem.minFreeCost | tuiFormatNumber: { precision: 2, decimalSeparator: '.', rounding: 'ceil' } | async }} ₽ / доставка\n {{ deliveryItem.frequency }}\n </li>\n }\n </ul>\n\n <p>*Количество доставок в неделю может меняться в зависимости от сезона в меньшую и большую сторону.</p>\n <br />\n <div class=\"flex flex-col gap-2\">\n <p>Доставка оформляется через клиентский портал. Вы выбираете адрес, дату, склад.</p>\n <p>\n Доставку возможно оформить минимум за день до плановой отправки машины на определенное направление. Все доставки в области происходит на установленному\n расписанию.\n </p>\n <p>При необходимости заказы могут комплектоваться на паллеты.</p>\n <p>Доставка осуществляется с {{ data.deliveryTime.start }} до {{ data.deliveryTime.end }}</p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n <span class=\"text-body-m-bold\">Взаиморасчеты и оплата</span>\n <ng-template tuiAccordionItemContent>\n <div class=\"flex flex-col gap-2\">\n <p>Оплата для физических лиц возможна онлайн с условием самовывоза товара или в оптово-розничном отделении Снабцентр в вашем городе.</p>\n <p>Оплата для юридических лиц возможна по безналичному расчету для самовывоза и для доставки.</p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n <span class=\"text-body-m-bold\">Рекламации</span>\n <ng-template tuiAccordionItemContent>\n <div class=\"flex flex-col gap-2\">\n <p>\n В случае возникновения предмета основания для составления рекламации, заполняется бланк рекламации, который можно\n <a\n tuiLink\n [pseudo]=\"true\"\n [href]=\"data.reclamationBlankDownloadLink\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"black-link\"\n >\n скачать здесь\n </a>\n или в разделе\n <a\n tuiLink\n [pseudo]=\"true\"\n routerLink=\"/files\"\n class=\"black-link\"\n >\n файлы и документы\n </a>\n .\n </p>\n <p>Рекламация заполняется в случае обнаружения поставки бракованного товара.</p>\n <p>\n Рекламация отправляется в рекламационный комитет компания, рассматривается предмет претензии и выносится решение. Возможные решение: возврат товара для осмотра\n для принятия решения, возврат товара, замена товара, компенсация.\n </p>\n <p *ngIf=\"reclamationsEmail$ | async as reclamationsEmail\">\n Почта отдела рекламаций:\n\n <a\n tuiLink\n [pseudo]=\"true\"\n scEmailLink\n linkLocation=\"questions-and-answers\"\n href=\"mailto:{{ reclamationsEmail }}\"\n class=\"black-link\"\n >\n {{ reclamationsEmail }}\n </a>\n </p>\n\n <br />\n\n <p>В случае обнаружения недовоза или пересорта оформляется соответствующий акт по факту приема товара. Форма акта стандартная.</p>\n <p>Заполненный акт отправляется в отдел работы с заказами.</p>\n </div>\n </ng-template>\n </tui-accordion-item>\n</tui-accordion>\n","import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { TUI_IS_MOBILE, tuiIsPresent } from '@taiga-ui/cdk';\nimport { filter, interval, map, startWith, switchMap, tap } from 'rxjs';\n\nimport { ScIPreviewSample } from '../interfaces/sc-i-preview-sample';\n\n/**\n * Компонент представления образцов товара.\n */\n@Component({\n selector: 'sc-preview-sample',\n templateUrl: './sc-preview-sample.component.html',\n styleUrls: ['./sc-preview-sample.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPreviewSampleComponent {\n /**\n * Индекс элемента в галерее.\n */\n @Input()\n public index: number = 0;\n\n /**\n * {@link EventEmitter} изменения индекса элемента в галерее.\n */\n @Output()\n public readonly indexChange: EventEmitter<number> = new EventEmitter<number>();\n\n /**\n * Объект данных товара.\n */\n @Input()\n public sample: ScIPreviewSample;\n\n /**\n * Признак, что необходимо отображать переключатели на карусели.\n */\n @Input()\n public isShowCarouselSwitches: boolean = !inject(TUI_IS_MOBILE);\n\n /**\n * Признак, что при горизонтальном отображении компонент должен быть развёрнут.\n */\n @Input()\n public isReverse: boolean = false;\n\n /**\n * {@link Observable} изменения индекса элемента в галерее для автоматического переключения по таймеру.\n */\n public indexChangeInterval = this.indexChange.pipe(\n startWith(0),\n filter(() => Boolean(this.sample.items && this.sample.items.length > 1)),\n switchMap(() => interval(5000).pipe()),\n map(() => this.sample.items?.length),\n filter(tuiIsPresent),\n tap((itemsLength) => {\n this.onChangeIndex((this.index + 1) % itemsLength);\n })\n );\n\n /**\n * Переключает на предыдущее изображение в галерее.\n */\n public onPrevious(): void {\n if (this.sample.items?.length) {\n // eslint-disable-next-line unicorn/explicit-length-check\n this.onChangeIndex((this.index || this.sample.items.length) - 1);\n }\n }\n\n /**\n * Переключает на следующее изображение в галерее.\n */\n public onNext(): void {\n if (this.sample.items?.length) {\n this.onChangeIndex((this.index + 1) % this.sample.items.length);\n }\n }\n\n /**\n * Обработчик изменения индекса элемента в галерее.\n *\n * @param index Индекс элемента в галерее.\n */\n public onChangeIndex(index: number): void {\n if (index !== this.index) {\n this.index = index;\n this.indexChange.emit(index);\n }\n }\n}\n","<div\n *tuiLet=\"sample.items && sample.items.length > 1 as isShownSwitches\"\n class=\"mb-4 flex flex-col-reverse gap-4 md:mb-0 md:flex-row md:gap-8\"\n [class.md:!flex-row-reverse]=\"isReverse\"\n>\n <div class=\"flex max-w-96 flex-1 flex-col justify-center self-center md:max-w-none md:gap-4\">\n <div class=\"flex w-full flex-col gap-3 md:gap-4 md:px-8\">\n <div class=\"text-body-l-bold\">{{ sample.title }}</div>\n <div\n *ngIf=\"isShownSwitches\"\n class=\"flex gap-4\"\n >\n <tui-avatar\n [src]=\"item.buttonImageUrl\"\n [round]=\"false\"\n *ngFor=\"let item of sample.items; let itemIndex = index\"\n (tuiHoveredChange)=\"onChangeIndex(itemIndex)\"\n [class.active]=\"index === itemIndex\"\n ></tui-avatar>\n </div>\n <div\n *ngIf=\"sample.items\"\n class=\"text-body-m-bold\"\n >\n {{ sample.items[index].color }}\n </div>\n <div>{{ sample.description }}</div>\n <img\n *ngIf=\"sample.descriptionImageUrl\"\n [src]=\"sample.descriptionImageUrl\"\n alt=\"Конструкция образца {{ sample.title }}\"\n class=\"w-fit\"\n />\n <div\n *ngIf=\"sample.items && sample.items[index].actions?.length\"\n class=\"flex flex-wrap gap-3 md:gap-4\"\n >\n <button\n *ngFor=\"let action of sample.items[index].actions\"\n tuiButton\n (click)=\"action.handler()\"\n [iconStart]=\"action.icon\"\n appearance=\"secondary\"\n >\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"relative h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:h-[28rem]\">\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches\"\n tuiIconButton\n (click)=\"onPrevious()\"\n iconStart=\"@tui.chevron-left\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n *tuiLet=\"indexChangeInterval | async\"\n [(index)]=\"index\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n <ng-container *ngFor=\"let item of sample.items\">\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item.carouselItemImage + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n </ng-container>\n </tui-carousel>\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches\"\n tuiIconButton\n (click)=\"onNext()\"\n iconStart=\"@tui.chevron-right\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TuiHovered, TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiError, TuiLabel } from '@taiga-ui/core';\nimport { TuiAvatar, TuiButtonLoading, TuiCarousel, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule } from '@taiga-ui/legacy';\nimport { RecaptchaFormsModule, RecaptchaModule } from 'ng-recaptcha-2';\n\nimport { ScFormFieldsModule } from '../form-fields';\nimport { ScPreviewSampleComponent } from './preview-sample/sc-preview-sample.component';\n\n/**\n * Модуль представления образцов товара.\n */\n@NgModule({\n declarations: [ScPreviewSampleComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TuiError,\n TuiFieldErrorPipe,\n ScFormFieldsModule,\n TuiInputModule,\n TuiInputPhoneModule,\n ...TuiCarousel,\n TuiAvatar,\n TuiHovered,\n TuiLet,\n TuiButton,\n TuiButtonLoading,\n TuiLabel,\n RecaptchaFormsModule,\n RecaptchaModule,\n ],\n exports: [ScPreviewSampleComponent],\n})\nexport class ScPreviewSampleModule {}\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport { ScConvertersService, ScFeedbackForm, ScFeedbackService, ScIFeedbackMessage, ScISuggestionType, ScUploadedFile, ScUser, ScUserService } from '@snabcentr/client-core';\nimport { TuiValidationError } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDialogContext, TuiError, TuiLabel, TuiLink } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiFieldErrorPipe, TuiFileLike, TuiFiles, tuiFilesAccepted } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule, TuiTextareaModule } from '@taiga-ui/legacy';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { RecaptchaFormsModule, RecaptchaModule } from 'ng-recaptcha-2';\nimport { ApiErrorResponse } from 'projects/client-ui/auth';\nimport { ScFormFieldsModule } from 'projects/client-ui/form-fields';\nimport { MAX_FILES_IN_FORM_INPUT } from 'projects/client-ui/providers/sc-max-files-in-form-input';\nimport { catchError, filter, map, merge, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\n/**\n * Компонент формы обратной связи.\n */\n@Component({\n standalone: true,\n selector: 'sc-feedback-form',\n templateUrl: './sc-feedback-form.component.html',\n imports: [\n AsyncPipe,\n ReactiveFormsModule,\n NgClass,\n NgFor,\n TuiError,\n TuiFieldErrorPipe,\n ScFormFieldsModule,\n TuiInputModule,\n TuiInputPhoneModule,\n TuiButton,\n TuiButtonLoading,\n TuiLabel,\n RecaptchaFormsModule,\n RecaptchaModule,\n TuiLink,\n NgIf,\n TuiTextareaModule,\n TuiFiles,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFeedbackFormComponent {\n /**\n * Условное название блока где расположена ссылка.\n */\n public readonly formSlag: InputSignal<keyof typeof ScFeedbackForm> = input.required<keyof typeof ScFeedbackForm>();\n\n /**\n * Событие нажатия на кнопку договора оферты.\n */\n public readonly onClickOffer: OutputEmitterRef<void> = output();\n\n /**\n * Событие успешной отправки формы.\n */\n public readonly onSendSuccess: OutputEmitterRef<void> = output();\n\n /**\n * Сервис обратной связи.\n */\n private readonly feedbackService: ScFeedbackService = inject(ScFeedbackService);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * Максимальное количество файлов, отправляемых в форме.\n */\n private readonly maxFilesInForm: number = inject(MAX_FILES_IN_FORM_INPUT);\n\n /**\n * Сервис данных о пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(ScUserService)\n .getUserChange$()\n .pipe(\n tap((user) => {\n if (user.isGuest) {\n (this.form as FormGroup).addControl('recaptcha', this.recaptchaControl);\n this.resetForm();\n } else {\n (this.form as FormGroup).removeControl('recaptcha');\n // eslint-disable-next-line default-case\n switch (this.formSlag()) {\n case 'common':\n this.form.patchValue({ name: user.name, email: user.contacts.email.value });\n break;\n\n case 'contacts':\n case 'vacancies':\n this.form.patchValue({ name: user.name, phone: user.contacts.phone.value });\n break;\n\n case 'samples':\n this.form.patchValue({ name: user.name, phone: user.contacts.phone.value, email: user.contacts.email.value });\n break;\n }\n }\n })\n );\n\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context: TuiDialogContext<void, { onClickOfferHandler: () => void; formSlag: keyof typeof ScFeedbackForm }> | null = inject<\n TuiDialogContext<void, { onClickOfferHandler: () => void; formSlag: keyof typeof ScFeedbackForm }>\n >(POLYMORPHEUS_CONTEXT, { optional: true });\n\n /**\n * Поле ввода для recaptcha.\n */\n protected readonly recaptchaControl: FormControl<string | null> = new FormControl<string | null>(null);\n\n /**\n * Группа полей ввода для формы «Пожелания и предложения по улучшению сайта».\n */\n protected readonly form = new FormGroup({\n name: new FormControl<string | null>(null, [Validators.required, Validators.minLength(3)]),\n phone: new FormControl<string | null>(null),\n email: new FormControl<string | null>(null),\n message: new FormControl<string | null>(null, []),\n files: new FormControl<ScUploadedFile[] | null>([], [this.maxFilesLength(5)]),\n });\n\n /**\n * Перечисление типов подсказок.\n */\n protected readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * {@link Subject} события отправки формы.\n */\n protected readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса на отправку данных.\n */\n protected readonly request$: Observable<undefined | null> = this.onSubmit.pipe(\n filter(() => this.form.valid),\n map(() => this.form.value as ScIFeedbackMessage),\n switchMap((value) =>\n this.feedbackService.sendFeedback(this.context?.data.formSlag ?? this.formSlag(), this.convertersService.removeNullRecursive(value)).pipe(\n tap(() => {\n if (this.context) {\n this.context.completeWith();\n } else {\n this.resetForm();\n this.onSendSuccess.emit();\n }\n }),\n // eslint-disable-next-line rxjs/no-implicit-any-catch\n catchError((error: HttpErrorResponse) => {\n this.form.markAllAsTouched();\n\n const { errors, message } = error.error as ApiErrorResponse;\n\n if (errors) {\n Object.keys(errors).forEach((key) => {\n const control = this.form.get(key);\n\n if (control) {\n // eslint-disable-next-line security/detect-object-injection\n control.setErrors({ serverResponse: errors[key] });\n }\n });\n } else if (message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n\n return of(null);\n }),\n // eslint-disable-next-line unicorn/no-useless-undefined\n startWith(undefined)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных.\n */\n protected readonly loading$: Observable<boolean> = this.request$.pipe(map((value) => value === undefined));\n\n /**\n * Управляет состоянием загруженных файлов.\n */\n protected readonly loadedFile: FormControl<TuiFileLike[] | null> = new FormControl<TuiFileLike[] | null>([], [this.maxFilesLength()]);\n\n /**\n * Observable, который отслеживает, приняты ли файлы в соответствии с требованиями по типу размеру и т.д.\n */\n protected readonly accepted$: Observable<File[]> = this.loadedFile.valueChanges.pipe(map(() => tuiFilesAccepted(this.loadedFile)));\n\n /**\n * Список файлов, которые были отклонены при загрузке.\n */\n protected rejected: readonly File[] = [];\n\n /**\n * Инициализирует экземпляр класса {@link ScFeedbackFormComponent}.\n */\n public constructor() {\n merge(\n this.accepted$,\n this.user$,\n this.loadedFile.valueChanges.pipe(\n tap((files) => {\n this.form.controls.files.reset([]);\n this.onUploadFile(files);\n })\n )\n )\n .pipe(takeUntilDestroyed())\n .subscribe();\n\n // Валидация полей ввода в зависимости от формы.\n effect(() => {\n switch (this.formSlag()) {\n case 'common':\n this.form.get('email')?.setValidators([Validators.required, Validators.email]);\n this.form.get('phone')?.clearValidators();\n break;\n\n case 'contacts':\n case 'vacancies':\n this.form.get('email')?.clearValidators();\n this.form.get('phone')?.setValidators([Validators.required, Validators.minLength(12)]);\n break;\n\n case 'samples':\n this.form.get('email')?.setValidators([Validators.required, Validators.email]);\n this.form.get('phone')?.setValidators([Validators.required, Validators.minLength(12)]);\n break;\n\n default:\n this.form.get('email')?.clearValidators();\n this.form.get('phone')?.clearValidators();\n break;\n }\n\n // Обновляем состояние валидации\n this.form.get('email')?.updateValueAndValidity();\n this.form.get('phone')?.updateValueAndValidity();\n });\n }\n\n /**\n * Обрабатывает отклоненные файлы.\n *\n * @param files Список файлов, которые были отклонены.\n */\n protected onReject(files: readonly File[]): void {\n this.rejected = [...new Set([...this.rejected, ...files])];\n }\n\n /**\n * Удаляет файл из списка загруженных и отклоненных файлов.\n *\n * @param file Файл, который нужно удалить.\n */\n protected onRemove(file: File): void {\n this.rejected = this.rejected.filter((rejected) => rejected !== file);\n this.loadedFile.setValue(this.loadedFile.value?.filter((current) => current !== file) ?? []);\n }\n\n /**\n * Загружает файл в форму обратной связи.\n *\n * @param files Набор файлов.\n */\n private onUploadFile(files: TuiFileLike[] | null): void {\n files?.forEach((file) => {\n const reader = new FileReader();\n\n reader.addEventListener('load', () => {\n if (reader.result) {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string,sonarjs/no-base-to-string\n this.form.controls.files.setValue([...(this.form.controls.files.value ?? []), new ScUploadedFile(file.name, reader.result.toString())]);\n }\n });\n\n reader.readAsDataURL(file as unknown as Blob);\n });\n }\n\n /**\n * Проверяет количество файлов загруженных пользователем.\n *\n * @param maxLength максимальное допустимое количество файлов для отправки.\n */\n private maxFilesLength(maxLength: number = this.maxFilesInForm): ValidatorFn {\n return ({ value }: AbstractControl<TuiFileLike[]>) =>\n value.length > maxLength ? { maxLength: new TuiValidationError(`Максимальное количество файлов - ${maxLength}`) } : null;\n }\n\n /**\n * Выполняет очистку полей формы.\n */\n private resetForm(): void {\n this.form.reset({\n email: null,\n name: null,\n phone: null,\n message: null,\n files: [],\n });\n }\n}\n","@let formSlug = formSlag();\n<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <!-- ФИО -->\n <label tuiLabel>\n ФИО\n <tui-input formControlName=\"name\"> Укажите Ваши Ф.И.О. </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Телефон -->\n <label\n *ngIf=\"formSlug === 'contacts' || formSlug === 'vacancies'\"\n tuiLabel\n >\n Телефон\n <tui-input-phone formControlName=\"phone\"> Телефон </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Адрес электронной почты -->\n <label\n *ngIf=\"formSlug !== 'contacts' && formSlug !== 'vacancies'\"\n tuiLabel\n >\n Адрес электронной почты\n <tui-input formControlName=\"email\">\n Адрес электронной почты\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Комментарий -->\n <label\n *ngIf=\"formSlug === 'common'\"\n tuiLabel\n >\n Комментарий\n <tui-textarea formControlName=\"message\"> Комментарий </tui-textarea>\n <tui-error\n formControlName=\"message\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Файлы -->\n <div\n *ngIf=\"formSlug === 'vacancies'\"\n class=\"flex flex-col gap-1\"\n >\n <label tuiInputFiles>\n <input\n #validator=\"tuiInputFilesValidator\"\n accept=\".doc,.docx,.pdf,image/*\"\n tuiInputFiles\n [formControl]=\"loadedFile\"\n [multiple]=\"true\"\n (reject)=\"onReject($event)\"\n />\n </label>\n\n <tui-error\n *ngIf=\"loadedFile.invalid\"\n [error]=\"['maxLength'] | tuiFieldError | async\"\n [formControl]=\"loadedFile\"\n />\n\n @let accepted = accepted$ | async;\n <tui-files\n *ngIf=\"accepted?.length || rejected.length\"\n class=\"tui-space_top-1\"\n >\n <tui-file\n *ngFor=\"let file of accepted\"\n [file]=\"file\"\n (remove)=\"onRemove(file)\"\n />\n <tui-file\n *ngFor=\"let file of rejected\"\n state=\"error\"\n [file]=\"(file | tuiFileRejected: validator | async) || file\"\n (remove)=\"onRemove(file)\"\n />\n </tui-files>\n </div>\n\n <!-- recaptcha -->\n @if (form.get('recaptcha')) {\n <div\n class=\"mb-3 max-h-20 overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': form.get('recaptcha')?.valid }\"\n >\n <re-captcha formControlName=\"recaptcha\" />\n </div>\n }\n\n <!-- Элементы управления -->\n <div class=\"flex gap-3\">\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n Оставить\n </button>\n <div class=\"flex items-center\">\n <span class=\"text-body-s\">\n Нажимая на кнопку, вы соглашаетесь с\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); onClickOffer.emit()\"\n >\n Политикой конфиденциальности\n </button>\n .\n </span>\n </div>\n </div>\n</form>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TuiDialogContext, TuiIcon } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { EMPTY, of, switchMap, timer } from 'rxjs';\n\n/**\n * Компонент «Спасибо!».\n */\n@Component({\n standalone: true,\n selector: 'sc-gratitude',\n templateUrl: './sc-gratitude.component.html',\n imports: [TuiIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScGratitudeComponent {\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context = inject<TuiDialogContext<void, { autoClose: number; subTitle: string }>>(POLYMORPHEUS_CONTEXT, { optional: true });\n\n /**\n * Инициализирует экземпляр класса {@link ScGratitudeComponent}.\n */\n public constructor() {\n of(this.context?.data.autoClose)\n .pipe(\n switchMap((autoClose) => (autoClose ? timer(autoClose) : EMPTY)),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n this.context?.$implicit.complete();\n });\n }\n}\n","<div class=\"flex flex-col items-center gap-4 py-14 text-center\">\n <tui-icon\n icon=\"@tui.circle-check\"\n class=\"text-tui-success-fill !size-20 !text-5xl\"\n />\n <p class=\"text-h5\">Спасибо!</p>\n <p\n [innerHTML]=\"context?.data?.subTitle ?? 'Ваш данные успешно отправлены. Мы свяжемся с вами в ближайшее время.'\"\n class=\"text-body-m mx-2\"\n ></p>\n</div>\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ScIChangePassword, ScUserService } from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiIsPresent } from '@taiga-ui/cdk';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth';\nimport { scPasswordConfirmMatchingValidator } from '../../validators';\n\n/**\n * Компонент смены пароля пользователя.\n */\n@Component({\n selector: 'sc-reset-user-password',\n templateUrl: './sc-reset-user-password.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScResetUserPasswordComponent {\n /**\n * Форма для изменения пароля пользователя.\n */\n public form = new FormGroup(\n {\n currentPassword: new FormControl(null, [Validators.required, Validators.minLength(8)]),\n password: new FormControl(null, [Validators.required, Validators.minLength(8)]),\n passwordConfirm: new FormControl(null, [Validators.required, Validators.minLength(8)]),\n },\n { validators: scPasswordConfirmMatchingValidator('password', 'passwordConfirm') }\n );\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса данных аутентификации.\n */\n private readonly request$ = this.onSubmit.pipe(\n filter(() => this.form.valid),\n map(() => this.form.value as ScIChangePassword),\n switchMap((value) =>\n this.userService.updateUserInfo$(value).pipe(\n map(() => ({ success: true })),\n tap(() => {\n this.form.reset();\n }),\n // eslint-disable-next-line rxjs/no-implicit-any-catch\n catchError((error: HttpErrorResponse) => {\n const errorResponse = error.error as ApiErrorResponse;\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in errorResponse.errors) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errorResponse.errors[key] });\n }\n\n if (!errorResponse.errors && errorResponse.message) {\n this.form.setErrors({ serverResponse: [errorResponse.message] });\n }\n\n return of({ success: false });\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по email.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Сигнал события события смены пароля.\n */\n @Output()\n public readonly successResetPassword = this.request$.pipe(\n filter(tuiIsPresent),\n filter(({ success }) => success)\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScResetUserPasswordComponent}.\n *\n * @param userService Сервис данных о пользователе.\n */\n public constructor(private readonly userService: ScUserService) {}\n}\n","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-4 p-1 lg:flex-row\"\n>\n <div class=\"grid items-start gap-2 lg:grow lg:grid-cols-3 lg:grid-rows-1 lg:gap-4\">\n <label tuiLabel\n >Старый пароль\n <tui-input-password formControlName=\"currentPassword\">\n Старый пароль\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"currentPassword\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\n >Придумайте новый пароль\n <tui-input-password\n [pseudoInvalid]=\"form.hasError('passwordNotEquivalent')\"\n formControlName=\"password\"\n >\n Придумайте новый пароль\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\n >Повторите новый пароль\n <tui-input-password\n [pseudoInvalid]=\"form.hasError('passwordNotEquivalent')\"\n formControlName=\"passwordConfirm\"\n >\n Повторите новый пароль\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"passwordConfirm\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <tui-error\n *ngIf=\"form.invalid\"\n class=\"lg:!hidden\"\n [formGroup]=\"form\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </div>\n <div class=\"flex flex-col justify-center lg:mt-5 lg:h-11\">\n <button\n *tuiLet=\"!!(loading$ | async) as loading\"\n tuiButton\n [loading]=\"loading\"\n type=\"submit\"\n [disabled]=\"form.invalid || loading\"\n iconStart=\"@tui.save\"\n class=\"font-medium\"\n >\n Сохранить\n </button>\n </div>\n</form>\n<tui-error\n class=\"!hidden lg:!block\"\n [formGroup]=\"form\"\n [error]=\"[] | tuiFieldError | async\"\n></tui-error>\n","/* eslint-disable guard-for-in,@typescript-eslint/unbound-method,rxjs/no-implicit-any-catch,no-restricted-syntax */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Inject, Optional, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ScIPhoneOnDataApprove, ScISuggestionType, ScIUserOnDataUpdate, ScUser, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService } from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { catchError, filter, map, Observable, of, skip, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth';\nimport { SC_USER_INFO, SC_USER_PROVIDERS } from '../../providers';\n\n/**\n * Диалоговое окно изменения данных пользователя.\n */\n@Component({\n selector: 'sc-update-user-info-dialog',\n templateUrl: './sc-update-user-info-dialog.component.html',\n providers: [SC_USER_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScUpdateUserInfoDialogComponent implements AfterViewInit {\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Группа полей ввода формы общих данных пользователя для их редактирования.\n */\n public readonly form = new FormGroup({\n name: new FormControl<string | null>(null, [Validators.required, Validators.minLength(3)]),\n email: new FormControl<string | null>(null, [Validators.required, Validators.email]),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n verificationCode: new FormControl<string | null>(null, [Validators.required, Validators.minLength(6)]),\n cityId: new FormControl<number | null>(null, Validators.required),\n getNews: new FormControl<boolean>(false),\n });\n\n /**\n * Сигнал нажатия на кнопку \"Отмена\".\n */\n @Output()\n public readonly cancelButtonClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Сигнал события успешного обновления данных пользователя.\n */\n @Output()\n public readonly successUpdateDate: Observable<ScUser> = this.user$.pipe(skip(1));\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса обновления данных пользователя.\n */\n private readonly request$ = this.onSubmit.pipe(\n filter(() => this.form.valid),\n map(() => this.form.value as ScIUserOnDataUpdate | ScIPhoneOnDataApprove),\n switchMap((value) =>\n this.userService.updateUserInfo$(value).pipe(\n switchMap(() => this.userService.updateUserChange$()),\n tap((user) => this.context?.completeWith(user)),\n catchError((error: HttpErrorResponse) => {\n const errorResponse = error.error as ApiErrorResponse;\n\n for (const key in errorResponse.errors) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errorResponse.errors[key] });\n }\n\n if (!errorResponse.errors && errorResponse.message) {\n this.form.setErrors({ serverResponse: [errorResponse.message] });\n }\n return of({} as ScUser);\n }),\n startWith(null)\n )\n )\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по email.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScUpdateUserInfoDialogComponent}.\n *\n * @param user$ Поток данных о текущем пользователе.\n * @param userService Сервис данных о пользователе.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n @Inject(SC_USER_INFO) public readonly user$: Observable<ScUser>,\n private readonly userService: ScUserService,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Optional()\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context?: TuiDialogContext<ScUser, ScUpdateUserInfoDialogComponent>\n ) {\n this.user$.subscribe((user) => {\n this.form.patchValue(\n {\n name: user.name,\n email: user.contacts.email.value,\n phone: user.contacts.phone.value,\n cityId: user.city,\n getNews: user.getNews,\n },\n { emitEvent: false }\n );\n });\n }\n\n /** @inheritdoc */\n public ngAfterViewInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileEditShow,\n });\n }\n}\n","<form\n [formGroup]=\"form\"\n *ngIf=\"user$ | async as user\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-4\"\n>\n <label tuiLabel\n >{{ user.isOrg ? 'Название организации или ИП' : 'Ф.И.О.' }}\n <tui-input formControlName=\"name\">\n {{ user.isOrg ? 'Название организации или ИП' : 'Ф.И.О.' }}\n <ng-container *ngIf=\"user.isOrg\">\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n ></sc-suggestion-field>\n </ng-container>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></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\n tuiLabel\n class=\"w-full\"\n >Адрес электронной почты\n <tui-input formControlName=\"email\">\n Адрес электронной почты\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <sc-addresses-selection-field></sc-addresses-selection-field>\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n class=\"w-full\"\n />\n Я хочу получать рассылку Снабцентр о скидках и новостях по электронной почте.\n </label>\n <div class=\"flex justify-center gap-4\">\n <button\n tuiButton\n (click)=\"context ? context.$implicit.complete() : cancelButtonClick.emit()\"\n type=\"button\"\n iconStart=\"@tui.x\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.save\"\n >\n Сохранить\n </button>\n </div>\n</form>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';\nimport { ScIManager, ScUserService } from '@snabcentr/client-core';\nimport { map, Observable } from 'rxjs';\n\n/**\n * Компонент персональных менеджеров пользователя.\n */\n@Component({\n selector: 'sc-user-managers',\n templateUrl: './sc-user-managers.component.html',\n styleUrls: ['./sc-user-managers.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScUserManagersComponent {\n /**\n * Персональные менеджеры пользователя.\n */\n public readonly managers$: Observable<ScIManager[] | undefined> = this.userService\n .getUserChange$()\n .pipe(map((user) => user.managers?.sort((a: ScIManager, b: ScIManager) => Number(Boolean(b.isPrimary)) - Number(Boolean(a.isPrimary)))));\n\n /**\n * Событие нажатия на кнопку QR кода.\n */\n @Output()\n public readonly qrClickEvent: EventEmitter<ScIManager> = new EventEmitter<ScIManager>();\n\n /**\n * Инициализирует экземпляр класса {@link ScUserManagersComponent}.\n *\n * @param userService Сервис данных о пользователе.\n */\n public constructor(private readonly userService: ScUserService) {}\n}\n","<p class=\"mb-2 font-extrabold\">Ваши персональные менеджеры:</p>\n<ng-container *ngFor=\"let manager of managers$ | async; let last = last\">\n <div class=\"flex justify-between\">\n <div class=\"flex flex-col gap-1 !font-medium text-tui-text-02\">\n {{ manager.name }}\n <a\n tuiLink\n [pseudo]=\"true\"\n scEmailLink\n linkLocation=\"user-managers\"\n href=\"mailto:{{ manager.contacts.email }}\"\n iconStart=\"@tui.mail\"\n >\n {{ manager.contacts.email }}\n </a>\n <a\n tuiLink\n [scTelLink]=\"manager.contacts.phone\"\n [pseudo]=\"true\"\n linkLocation=\"user-managers\"\n href=\"tel:{{ manager.contacts.phone | scFormatePhone }}\"\n iconStart=\"@tui.phone\"\n >\n {{ manager.contacts.phone | scFormatePhone }}\n </a>\n </div>\n <button\n tuiIconButton\n size=\"m\"\n appearance=\"secondary\"\n iconStart=\"@tui.scan-qr-code\"\n (click)=\"qrClickEvent.emit(manager)\"\n ></button>\n </div>\n <hr\n *ngIf=\"!last\"\n class=\"my-2 h-px border-0 bg-tui-base-04\"\n />\n</ng-container>\n","/* eslint-disable no-restricted-syntax,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, Inject, Optional } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ScApprovedData, ScIPhoneOnDataApprove, ScUser, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, ScVerificationService } from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { SC_USER_INFO, SC_USER_PROVIDERS } from '../../providers/sc-user-providers';\n\n/**\n * Диалоговое окно подтверждения номера телефона.\n */\n@Component({\n selector: 'sc-user-phone-approve-dialog',\n templateUrl: './sc-user-phone-approve-dialog.component.html',\n providers: [SC_USER_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScUserPhoneApproveDialogComponent implements AfterViewInit {\n /**\n * Наличие кода подтверждения у пользователя.\n */\n public haveCode: boolean = false;\n\n /**\n * Группа полей ввода для подтверждения номера телефона.\n */\n public readonly form = new FormGroup({\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n verificationCode: new FormControl<string | null>(null, [Validators.required, Validators.minLength(6)]),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса подтверждения номера телефона.\n */\n private readonly request$ = this.onSubmit.pipe(\n filter(() => this.form.valid),\n map(() => this.form.value as ScIPhoneOnDataApprove),\n switchMap((value) =>\n this.verificationService.approvePhone(value).pipe(\n switchMap(() => this.userService.updateUserChange$()),\n tap((user) => this.context?.completeWith(user.contacts.phone)),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n }\n\n return of({} as ScUser);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния запроса подтверждения номера телефона..\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScUserPhoneApproveDialogComponent}.\n *\n * @param verificationService Сервис верификации.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param user$ Поток данных о текущем пользователе.\n * @param userService Сервис данных о пользователе.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n private readonly verificationService: ScVerificationService,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Inject(SC_USER_INFO)\n public readonly user$: Observable<ScUser>,\n private readonly userService: ScUserService,\n @Optional()\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context?: TuiDialogContext<ScApprovedData, ScUserPhoneApproveDialogComponent>\n ) {\n this.user$.pipe(takeUntilDestroyed()).subscribe((user) => {\n this.form.patchValue({\n phone: user.contacts.phone.value,\n });\n });\n }\n\n /** @inheritdoc */\n public ngAfterViewInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileApprovePhoneShow,\n });\n }\n}\n","<ng-container *ngIf=\"user$ | async as user\">\n <form\n [formGroup]=\"form\"\n *tuiLet=\"!!(loading$ | async) as loadingApproveCode\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-3\"\n >\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\n *ngIf=\"user.contacts.phone.isApproved || haveCode\"\n class=\"flex justify-center gap-4\"\n >\n <button\n *ngIf=\"user.contacts.phone.isApproved && context\"\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n appearance=\"secondary\"\n >\n Закрыть\n </button>\n <button\n *ngIf=\"haveCode\"\n tuiButton\n type=\"submit\"\n [loading]=\"loadingApproveCode\"\n [disabled]=\"form.invalid || loadingApproveCode\"\n iconStart=\"@tui.sc.send\"\n >\n Подтвердить\n </button>\n </div>\n </form>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiCheckbox, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPasswordModule, TuiInputPhoneModule, TuiSelectModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScTerminalLinkDirective } from '../directives';\nimport { ScLinks } from '../directives/links/sc-links';\nimport { ScFormFieldsModule } from '../form-fields/form-fields.module';\nimport { ScVerificationModule } from '../verification';\nimport { ScResetUserPasswordComponent } from './reset-user-password/sc-reset-user-password.component';\nimport { ScUpdateUserInfoDialogComponent } from './update-user-info-dialog/sc-update-user-info-dialog.component';\nimport { ScUserManagersComponent } from './user-managers/sc-user-managers.component';\nimport { ScUserPhoneApproveDialogComponent } from './user-phone-approve-dialog/sc-user-phone-approve-dialog.component';\n\n/**\n * Модуль компонентов пользователя.\n */\n@NgModule({\n declarations: [ScResetUserPasswordComponent, ScUpdateUserInfoDialogComponent, ScUserPhoneApproveDialogComponent, ScUserManagersComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TuiFieldErrorPipe,\n TuiInputPasswordModule,\n TuiButton,\n TuiError,\n TuiLabel,\n TuiTextfieldControllerModule,\n TuiLet,\n ScVerificationModule,\n ScFormFieldsModule,\n TuiLoader,\n TuiInputModule,\n TuiInputPhoneModule,\n TuiCheckbox,\n ...TuiDataList,\n TuiSelectModule,\n TuiLink,\n ScTerminalLinkDirective,\n ...ScLinks,\n TuiButtonLoading,\n ],\n exports: [ScResetUserPasswordComponent, ScUpdateUserInfoDialogComponent, ScUserPhoneApproveDialogComponent, ScUserManagersComponent],\n})\nexport class ScUserModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Output } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ScContragent, ScIBankAccount, ScICity, ScIContact, ScIDeliveryAddress, ScLocationsService, ScUser, ScUserService, ScVerificationService } from '@snabcentr/client-core';\nimport { TUI_TRUE_HANDLER, tuiIsFalsy, tuiIsPresent, tuiPure } from '@taiga-ui/cdk';\nimport { tuiFadeIn } from '@taiga-ui/core';\nimport { filter, map, Observable, share, skip, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { SC_USER_INFO, SC_USER_PROVIDERS } from '../../providers';\n\n/**\n * Компонент контента профиля пользователя в виде раскрывающихся смысловых блоков.\n */\n@Component({\n selector: 'sc-profile-accordions-content',\n templateUrl: './sc-profile-accordions-content.component.html',\n providers: [SC_USER_PROVIDERS],\n animations: [tuiFadeIn],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScProfileAccordionsContentComponent {\n /**\n * {@link FormControl} переключателя 'Я хочу получать рассылку'.\n */\n public getNewsControl: FormControl<boolean> = new FormControl<boolean>(false, { nonNullable: true });\n\n /**\n * {@link Observable} запроса изменения признака пользователя 'Я хочу получать рассылку'.\n */\n private readonly getNewsRequest$ = this.getNewsControl.valueChanges.pipe(\n skip(1),\n switchMap((value) =>\n this.userService.updateUserInfo$({ getNews: value }).pipe(\n switchMap(() =>\n this.userService.updateUserChange$().pipe(\n tap((user) => {\n this.getNewsControl.patchValue(user.getNews, { emitEvent: false });\n }),\n startWith(null)\n )\n ),\n startWith(null)\n )\n ),\n\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных изменения признака пользователя 'Я хочу получать рассылку'.\n */\n public readonly getNewsLoading$: Observable<boolean> = this.getNewsRequest$.pipe(map(tuiIsFalsy));\n\n /**\n * {@link Subject} события отправки сообщения для подтверждения адреса электронной почты.\n */\n public readonly onSendApproveEmail: Subject<string> = new Subject<string>();\n\n /**\n * {@link Observable} запроса данных аутентификации.\n */\n private readonly sendApproveEmailRequest$: Observable<boolean | null> = this.onSendApproveEmail.pipe(\n switchMap((value) => this.verificationService.sendEmailApproveCode(value).pipe(map(TUI_TRUE_HANDLER), startWith(null))),\n startWith(false),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных отправки сообщения для подтверждения адреса электронной почты.\n */\n public readonly approveEmailLoading$: Observable<boolean> = this.sendApproveEmailRequest$.pipe(map(tuiIsFalsy));\n\n /**\n * {@link Observable} изменения состояния признака, отправлено ли сообщение для подтверждения адреса электронной почты.\n */\n public readonly isSendApproveEmail$: Observable<boolean> = this.sendApproveEmailRequest$.pipe(filter(tuiIsPresent));\n\n /**\n * {@link Observable} изменения списка контактных лиц пользователя.\n */\n public readonly userContacts$ = this.userService.getUserContacts$();\n\n /**\n * Событие нажатия на кнопку редактирование профиля пользователя.\n */\n @Output()\n public editProfileClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку подтверждения телефона.\n */\n @Output()\n public approvePhoneClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку добавления контрагента.\n */\n @Output()\n public addContragentClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления контрагента.\n */\n @Output()\n public deleteContragentClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку добавления банковского счёта контрагенту.\n */\n @Output()\n public addContragentBankAccountClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления банковского счёта контрагента.\n */\n @Output()\n public deleteContragentBankAccountClick: EventEmitter<ScIBankAccount> = new EventEmitter<ScIBankAccount>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица контрагенту.\n */\n @Output()\n public addContragentContactClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у контрагента.\n */\n @Output()\n public deleteContragentContactClick: EventEmitter<{ contact: ScIContact; contragent: ScContragent }> = new EventEmitter<{ contact: ScIContact; contragent: ScContragent }>();\n\n /**\n * Событие нажатия на кнопку добавления адреса доставки клиента.\n */\n @Output()\n public addDeliveryAddressClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления адреса доставки у клиента.\n */\n @Output()\n public deleteDeliveryAddressClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица для адреса доставки.\n */\n @Output()\n public addDeliveryAddressContactClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у адреса доставки.\n */\n @Output()\n public deleteDeliveryAddressContactClick: EventEmitter<{ contact: ScIContact; address: ScIDeliveryAddress }> = new EventEmitter<{\n contact: ScIContact;\n address: ScIDeliveryAddress;\n }>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица клиенту.\n */\n @Output()\n public addUserContactClick: EventEmitter<number> = new EventEmitter<number>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у клиента.\n */\n @Output()\n public deleteUserContactClick: EventEmitter<ScIContact> = new EventEmitter<ScIContact>();\n\n /**\n * Инициализирует экземпляр класса {@link ScProfileComponent}.\n *\n * @param user$ Поток данных о текущем пользователе.\n * @param locationsService Сервис для получения списков стран, регионов, городов.\n * @param userService Сервис данных о пользователе.\n * @param verificationService Сервис верификации.\n */\n public constructor(\n @Inject(SC_USER_INFO) public readonly user$: Observable<ScUser>,\n private readonly locationsService: ScLocationsService,\n private readonly userService: ScUserService,\n private readonly verificationService: ScVerificationService\n ) {}\n\n /**\n * Создает запрос получения данных о городе текущего пользователя по идентификатору города.\n *\n * @param cityId Идентификатор записи города.\n */\n @tuiPure // TODO: TASK[#7615] Удалить поле рефакторинга сервиса работы с пользователем.\n public getUserCity$(cityId: number): Observable<ScICity> {\n return this.locationsService.getUserCity$(cityId);\n }\n}\n","<div\n *tuiLet=\"user$ | async as user\"\n class=\"flex flex-col gap-4\"\n>\n <sc-accordion\n [showArrow]=\"false\"\n [showAddButton]=\"false\"\n [open]=\"true\"\n >\n Общие данные\n <ng-template scAccordionContent>\n <tui-loader\n [overlay]=\"true\"\n [showLoader]=\"user === null\"\n >\n <div class=\"flex gap-2 pl-4\">\n <div\n *ngIf=\"user\"\n class=\"flex grow flex-col gap-2\"\n >\n <span class=\"font-medium\">{{ user.name }}</span>\n <div\n *ngIf=\"user.city && (getUserCity$(user.city) | async) as city\"\n class=\"flex items-center gap-1\"\n >\n <tui-icon icon=\"@tui.map-pin\"></tui-icon>\n <div class=\"flex flex-wrap\">\n <span>г. {{ 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 [scTelLink]=\"user.contacts.phone.value\"\n iconStart=\"@tui.phone\"\n [pseudo]=\"true\"\n linkLocation=\"profile\"\n href=\"tel:{{ user.contacts.phone.value | scFormatePhone }}\"\n >\n {{ user.contacts.phone.value | scFormatePhone }}\n </a>\n <span\n *ngIf=\"!user.contacts.phone.isApproved\"\n class=\"text-tui-text-03\"\n >\n (Телефон не подтвержден.\n <button\n tuiLink\n [pseudo]=\"true\"\n (click)=\"approvePhoneClick.emit()\"\n >\n Подтвердить</button\n >)\n </span>\n </div>\n <div\n *tuiLet=\"!!(isSendApproveEmail$ | async) as isSendApproveEmail\"\n class=\"flex flex-wrap gap-x-2\"\n >\n <a\n tuiLink\n iconStart=\"@tui.mail\"\n [pseudo]=\"true\"\n scEmailLink\n linkLocation=\"profile\"\n href=\"mailto:{{ user.contacts.email.value }}\"\n >\n {{ user.contacts.email.value }}\n </a>\n <span\n *ngIf=\"!isSendApproveEmail && !user.contacts.email.isApproved\"\n class=\"inline-flex flex-wrap gap-1 text-tui-text-03\"\n >\n E-mail не подтвержден.\n <tui-loader\n [showLoader]=\"!!(approveEmailLoading$ | async)\"\n [overlay]=\"true\"\n >\n <button\n tuiLink\n [pseudo]=\"true\"\n (click)=\"onSendApproveEmail.next(user.contacts.email.value)\"\n >\n Подтвердить\n </button>\n </tui-loader>\n </span>\n <span\n *ngIf=\"isSendApproveEmail\"\n class=\"text-tui-success-fill\"\n @tuiFadeIn\n >\n Письмо для подтверждения успешно отправлено. Перейдите по ссылке в письме и обновите эту страницу.\n </span>\n </div>\n <tui-loader\n [showLoader]=\"!!(getNewsLoading$ | async)\"\n [overlay]=\"true\"\n >\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"s\"\n class=\"w-full\"\n [formControl]=\"getNewsControl\"\n [ngModel]=\"user.getNews\"\n />\n Я хочу получать рассылку Снабцентр о скидках и новостях по электронной почте.\n </label>\n </tui-loader>\n </div>\n\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n iconStart=\"@tui.pencil\"\n appearance=\"flat\"\n (click)=\"editProfileClick.emit()\"\n ></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\n *ngIf=\"user\"\n [contacts$]=\"userContacts$\"\n (addContactClick)=\"addUserContactClick.emit(user.id)\"\n (deleteButtonClick)=\"deleteUserContactClick.emit($event)\"\n ></sc-contacts-accordion>\n <sc-accordion\n #passwordAccordion\n [showArrow]=\"false\"\n [showAddButton]=\"false\"\n >\n Изменить пароль\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","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiIcon, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiCheckbox } from '@taiga-ui/kit';\n\nimport { ScAccordionModule } from '../accordion';\nimport { ScContactsModule } from '../contacts';\nimport { ScContragentsModule } from '../contragents';\nimport { ScDeliveryAddressModule } from '../delivery-address';\nimport { ScLinks, ScTerminalLinkDirective } from '../directives';\nimport { ScUserModule } from '../user';\nimport { ScProfileAccordionsContentComponent } from './sc-profile-accordions-content/sc-profile-accordions-content.component';\n\n/**\n * Модуль профиля пользователя.\n */\n@NgModule({\n declarations: [ScProfileAccordionsContentComponent],\n imports: [\n CommonModule,\n ScUserModule,\n ScAccordionModule,\n ScContragentsModule,\n ScDeliveryAddressModule,\n TuiLoader,\n TuiLet,\n TuiLink,\n TuiLabel,\n TuiIcon,\n FormsModule,\n ReactiveFormsModule,\n TuiButton,\n ScContactsModule,\n ScTerminalLinkDirective,\n ...ScLinks,\n TuiCheckbox,\n ],\n exports: [ScProfileAccordionsContentComponent],\n})\nexport class ScProfileModule {}\n","/*\n * Public API Surface of ui\n */\n\nexport * from './auth';\nexport * from './accordion';\nexport * from './banner';\nexport * from './cart';\nexport * from './catalog';\nexport * from './contragents';\nexport * from './contacts';\nexport * from './delivery-address';\nexport * from './dialogs';\nexport * from './directives';\nexport * from './error-handler';\nexport * from './files';\nexport * from './form-fields';\nexport * from './icons';\nexport * from './loader';\nexport * from './brands-list';\nexport * from './news';\nexport * from './order';\nexport * from './pages';\nexport * from './pipes';\nexport * from './samples';\nexport * from './providers';\nexport * from './feedback';\nexport * from './qrcode';\nexport * from './share-button';\nexport * from './user';\nexport * from './validators';\nexport * from './verification';\nexport * from './profile';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i6","i7","i9","i4","i5","i6.ScVerificationPhoneCheckFormComponent","i2","i3","i4.ScSignInFormByPhoneComponent","i5.ScSignInFormByEmailComponent","i8","i9.ScSuggestionFieldComponent","i10","i1","i2.ScSuggestionFieldComponent","i8.ScVerificationPhoneCheckFormComponent","i9.ScAddressesSelectionFieldComponent","i10.ScSuggestionFieldComponent","i11","i12","i13.ScNewContragentBankAccountsFormComponent","i14.ScNewContragentFormComponent","i15.ScNewContactFormComponent","i5.ScNewContactFormComponent","i2.ScAccordionComponent","i3.ScAccordionContentDirective","i6.ScTelLinkDirective","i7.ScEmailLinkDirective","i8.ScFormatePhonePipe","i5.ScNewContragentBankAccountsFormComponent","i7.ScNewContragentBankAccountsFormComponent","i8.ScNewContragentFormComponent","i3.ScAccordionComponent","i4.ScAccordionContentDirective","i7.ScContactsAccordionComponent","i7.ScContragentsAccordionItemComponent","i2.ScPxConverter","i5.ScFavoriteButtonComponent","AngularxQRCodeModule","i5.HoverImageCarouselComponent","i6.CostWithDiscountComponent","i7.ScFavoriteButtonComponent","i8.ScInputQuantityComponent","i9.ScPriceWarehouseStockComponent","i4.ScInputQuantityComponent","i5.ScPriceWarehouseStockComponent","i7.ScSuggestionFieldComponent","i5.ScContactsAccordionComponent","i7.ScDeliveryAddressAccordionItemComponent","i2.TreeIconService","i1.TreeIconService","i6.TreeDirective","i7.TreeTopDirective","i4.ScPriceWarehouseStockComponent","MAX_FILES_IN_FORM_INPUT","ScFormFieldsModule","i7.ScAddressesSelectionFieldComponent","i8.ScSuggestionFieldComponent","i4.ScTerminalLinkDirective","i5.ScTelLinkDirective","i6.ScEmailLinkDirective","i7.ScFormatePhonePipe","i2.ScTelLinkDirective","i3.ScEmailLinkDirective","i4.ScFormatePhonePipe","i3.ScResetUserPasswordComponent","i4.ScAccordionComponent","i5.ScAccordionContentDirective","i6.ScContragentsAccordionComponent","i7.ScDeliveryAddressAccordionComponent","i11.ScContactsAccordionComponent","i12.ScTerminalLinkDirective","i13.ScTelLinkDirective","i14.ScEmailLinkDirective","i15","i16.ScFormatePhonePipe","i1.ScTelLinkDirective","i2.ScEmailLinkDirective","i3.ScFormatePhonePipe"],"mappings":"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"}
1
+ {"version":3,"file":"snabcentr-client-ui.mjs","sources":["../../../projects/client-ui/auth/enums/auth-method.ts","../../../projects/client-ui/masks/sc-account-number-mask.ts","../../../projects/client-ui/masks/sc-bic-mask.ts","../../../projects/client-ui/masks/sc-correspondent-account-mask.ts","../../../projects/client-ui/masks/sc-inn-mask.ts","../../../projects/client-ui/masks/sc-kpp-mask.ts","../../../projects/client-ui/masks/sc-okpo-mask.ts","../../../projects/client-ui/masks/sc-phone-verification-code-mask.ts","../../../projects/client-ui/verification/verification-phone-check-form/sc-verification-phone-check-form.component.ts","../../../projects/client-ui/verification/verification-phone-check-form/sc-verification-phone-check-form.component.html","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.ts","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.html","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.ts","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.html","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form.component.ts","../../../projects/client-ui/auth/sc-sign-in-form/sc-sign-in-form.component.html","../../../projects/client-ui/validators/sc-bic-validator.ts","../../../projects/client-ui/validators/sc-correspondent-account-validator.ts","../../../projects/client-ui/validators/sc-password-confirm-matching-validator.ts","../../../projects/client-ui/validators/step-validator.ts","../../../projects/client-ui/form-fields/addresses-selection-field/sc-addresses-selection-field.component.ts","../../../projects/client-ui/form-fields/addresses-selection-field/sc-addresses-selection-field.component.html","../../../projects/client-ui/form-fields/suggestion-field/sc-suggestion-field.component.ts","../../../projects/client-ui/form-fields/suggestion-field/sc-suggestion-field.component.html","../../../projects/client-ui/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.ts","../../../projects/client-ui/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.html","../../../projects/client-ui/contragents/new-contragent-form/sc-new-contragent-form.component.ts","../../../projects/client-ui/contragents/new-contragent-form/sc-new-contragent-form.component.html","../../../projects/client-ui/contacts/new-contact-form/sc-new-contact-form.component.ts","../../../projects/client-ui/contacts/new-contact-form/sc-new-contact-form.component.html","../../../projects/client-ui/auth/sign-up-form/sc-sign-up-form.component.ts","../../../projects/client-ui/auth/sign-up-form/sc-sign-up-form.component.html","../../../projects/client-ui/accordion/sc-accordion-content.directive.ts","../../../projects/client-ui/accordion/sc-accordion.component.ts","../../../projects/client-ui/accordion/sc-accordion.component.html","../../../projects/client-ui/accordion/sc-accordion.module.ts","../../../projects/client-ui/pipes/sc-phone-format.ts","../../../projects/client-ui/directives/links/sc-email-link.directive.ts","../../../projects/client-ui/directives/links/sc-tel-link.directive.ts","../../../projects/client-ui/directives/links/sc-links.ts","../../../projects/client-ui/form-fields/form-fields.module.ts","../../../projects/client-ui/contacts/add-contact-dialog/sc-add-contact-dialog.component.ts","../../../projects/client-ui/contacts/add-contact-dialog/sc-add-contact-dialog.component.html","../../../projects/client-ui/contacts/contacts-accordion/sc-contacts-accordion.component.ts","../../../projects/client-ui/contacts/contacts-accordion/sc-contacts-accordion.component.html","../../../projects/client-ui/contacts/sc-contacts.module.ts","../../../projects/client-ui/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.ts","../../../projects/client-ui/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.html","../../../projects/client-ui/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.ts","../../../projects/client-ui/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.html","../../../projects/client-ui/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.ts","../../../projects/client-ui/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.html","../../../projects/client-ui/contragents/contragents-accordion/sc-contragents-accordion.component.ts","../../../projects/client-ui/contragents/contragents-accordion/sc-contragents-accordion.component.html","../../../projects/client-ui/contragents/sc-contragents.module.ts","../../../projects/client-ui/verification/sc-verification.module.ts","../../../projects/client-ui/auth/sc-auth.module.ts","../../../projects/client-ui/helpers/sc-px-converter.ts","../../../projects/client-ui/banner/sc-banner.component.ts","../../../projects/client-ui/banner/sc-banner.component.html","../../../projects/client-ui/banner/sc-banner.module.ts","../../../projects/client-ui/catalog/sc-favorite-button/sc-favorite-button.component.ts","../../../projects/client-ui/catalog/sc-favorite-button/sc-favorite-button.component.html","../../../projects/client-ui/catalog/category-card/sc-category-card.component.ts","../../../projects/client-ui/catalog/category-card/sc-category-card.component.html","../../../projects/client-ui/catalog/input-quantity/sc-input-quantity.component.ts","../../../projects/client-ui/catalog/input-quantity/sc-input-quantity.component.html","../../../projects/client-ui/directives/next-input-focus/sc-next-input-focus.directive.ts","../../../projects/client-ui/directives/next-input-focus/sc-next-input-focus.module.ts","../../../projects/client-ui/directives/abstract-price-card/abstract-sc-price-card.directive.ts","../../../projects/client-ui/qrcode/qrcode-dialog/sc-qrcode-dialog.component.ts","../../../projects/client-ui/qrcode/qrcode-dialog/sc-qrcode-dialog.component.html","../../../projects/client-ui/qrcode/sc-qrcode.module.ts","../../../projects/client-ui/directives/terminal-link/sc-terminal-link.directive.ts","../../../projects/client-ui/catalog/hover-image-carousel/hover-image-carousel.component.ts","../../../projects/client-ui/catalog/hover-image-carousel/hover-image-carousel.component.html","../../../projects/client-ui/catalog/cost-with-discount/cost-with-discount.component.ts","../../../projects/client-ui/catalog/cost-with-discount/cost-with-discount.component.html","../../../projects/client-ui/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.ts","../../../projects/client-ui/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.html","../../../projects/client-ui/catalog/price-card/sc-price-card.component.ts","../../../projects/client-ui/catalog/price-card/sc-price-card.component.html","../../../projects/client-ui/catalog/price-card-inline/sc-price-card-inline.component.ts","../../../projects/client-ui/catalog/price-card-inline/sc-price-card-inline.component.html","../../../projects/client-ui/catalog/price-history/sc-price-history.component.ts","../../../projects/client-ui/catalog/price-history/sc-price-history.component.html","../../../projects/client-ui/catalog/price-list-pagination/sc-price-list-pagination.component.ts","../../../projects/client-ui/catalog/price-list-pagination/sc-price-list-pagination.component.html","../../../projects/client-ui/catalog/sc-catalog.module.ts","../../../projects/client-ui/cart/cart-item-mobile/sc-cart-item-mobile.component.ts","../../../projects/client-ui/cart/cart-item-mobile/sc-cart-item-mobile.component.html","../../../projects/client-ui/cart/sc-cart.module.ts","../../../projects/client-ui/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.ts","../../../projects/client-ui/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.html","../../../projects/client-ui/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.ts","../../../projects/client-ui/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.html","../../../projects/client-ui/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.ts","../../../projects/client-ui/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.html","../../../projects/client-ui/delivery-address/sc-delivery-address.module.ts","../../../projects/client-ui/dialogs/sc-resource-preview/sc-resource-preview.component.ts","../../../projects/client-ui/dialogs/sc-resource-preview/sc-resource-preview.component.html","../../../projects/client-ui/error-handler/consts/error-change-handler.providers.ts","../../../projects/client-ui/error-handler/error-block-status/error-block-status.component.ts","../../../projects/client-ui/error-handler/error-block-status/error-block-status.component.html","../../../projects/client-ui/error-handler/sc-error-handler.component.ts","../../../projects/client-ui/error-handler/sc-error-handler.component.html","../../../projects/client-ui/files/services/tree-icon.service.ts","../../../projects/client-ui/files/services/tree-loader.service.ts","../../../projects/client-ui/files/directives/tree.directive.ts","../../../projects/client-ui/files/file-tree-item/file-tree-item.component.ts","../../../projects/client-ui/files/file-tree-item/file-tree-item.component.html","../../../projects/client-ui/files/directives/tree-top.directive.ts","../../../projects/client-ui/files/files-and-documents/files-and-documents.component.ts","../../../projects/client-ui/files/files-and-documents/files-and-documents.component.html","../../../projects/client-ui/files/files-and-documents.module.ts","../../../projects/client-ui/icons/sc-client-ui-icons-name.ts","../../../projects/client-ui/brands-list/sc-brands-list.component.ts","../../../projects/client-ui/brands-list/sc-brands-list.component.html","../../../projects/client-ui/brands-list/sc-brands-list.module.ts","../../../projects/client-ui/news/news-card/sc-news-card.component.ts","../../../projects/client-ui/news/news-card/sc-news-card.component.html","../../../projects/client-ui/news/news-card-skeleton/sc-news-card-skeleton.component.ts","../../../projects/client-ui/news/news-card-skeleton/sc-news-card-skeleton.component.html","../../../projects/client-ui/share-button/sc-share-button.component.ts","../../../projects/client-ui/share-button/sc-share-button.component.html","../../../projects/client-ui/share-button/sc-share-button.module.ts","../../../projects/client-ui/news/sc-news.module.ts","../../../projects/client-ui/order/order-item-mobile/sc-order-item-mobile.component.ts","../../../projects/client-ui/order/order-item-mobile/sc-order-item-mobile.component.html","../../../projects/client-ui/order/sc-payment-status/sc-payment-status.component.ts","../../../projects/client-ui/order/sc-payment-status/sc-payment-status.component.html","../../../projects/client-ui/order/sc-order.module.ts","../../../projects/client-ui/providers/sc-max-files-in-form-input.ts","../../../projects/client-ui/providers/sc-qa-info.ts","../../../projects/client-ui/providers/sc-user-providers.ts","../../../projects/client-ui/pages/questions-and-answers/questions-and-answers.component.ts","../../../projects/client-ui/pages/questions-and-answers/questions-and-answers.component.html","../../../projects/client-ui/samples/preview-sample/sc-preview-sample.component.ts","../../../projects/client-ui/samples/preview-sample/sc-preview-sample.component.html","../../../projects/client-ui/samples/sc-sample.module.ts","../../../projects/client-ui/feedback/feedback-form/sc-feedback-form.component.ts","../../../projects/client-ui/feedback/feedback-form/sc-feedback-form.component.html","../../../projects/client-ui/feedback/gratitude/sc-gratitude.component.ts","../../../projects/client-ui/feedback/gratitude/sc-gratitude.component.html","../../../projects/client-ui/user/reset-user-password/sc-reset-user-password.component.ts","../../../projects/client-ui/user/reset-user-password/sc-reset-user-password.component.html","../../../projects/client-ui/user/update-user-info-dialog/sc-update-user-info-dialog.component.ts","../../../projects/client-ui/user/update-user-info-dialog/sc-update-user-info-dialog.component.html","../../../projects/client-ui/user/user-managers/sc-user-managers.component.ts","../../../projects/client-ui/user/user-managers/sc-user-managers.component.html","../../../projects/client-ui/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.ts","../../../projects/client-ui/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.html","../../../projects/client-ui/user/sc-user.module.ts","../../../projects/client-ui/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.ts","../../../projects/client-ui/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.html","../../../projects/client-ui/profile/sc-profile.module.ts","../../../projects/client-ui/public-api.ts","../../../projects/client-ui/snabcentr-client-ui.ts"],"sourcesContent":["/**\n * Перечисление типов аутентификации.\n */\nexport enum AuthMethod {\n /**\n * Аутентификация по номеру телефона и коду подтверждения.\n */\n byPhone = 'by_phone',\n\n /**\n * Аутентификация по логину и паролю.\n */\n byEmail = 'by_email',\n}\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода номера счета.\n */\nexport const scAccountNumberMask = {\n mask: /^\\d{0,20}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода БИК.\n */\nexport const scBicMask = {\n mask: /^\\d{0,9}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода номера корреспондентского счета.\n */\nexport const scCorrespondentAccount = {\n mask: /^\\d{0,20}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода ИНН индивидуального предпринимателя.\n */\nexport const scEntrepreneurInnMask = {\n mask: /^\\d{0,12}$/,\n} as MaskitoOptions;\n\n/**\n * Маска поля ввода ИНН юридического лица.\n */\nexport const scLegalInnMask = {\n mask: /^\\d{0,10}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода КПП.\n */\nexport const scKppMask = {\n mask: /^\\d{0,9}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода ОКПО индивидуального предпринимателя.\n */\nexport const scEntrepreneurOkpoMask = {\n mask: /^\\d{0,10}$/,\n} as MaskitoOptions;\n\n/**\n * Маска поля ввода ОКПО юридического лица.\n */\nexport const scLegalOkpoMask = {\n mask: /^\\d{0,8}$/,\n} as MaskitoOptions;\n","import { MaskitoOptions } from '@maskito/core';\n\n/**\n * Маска поля ввода кода подтверждения телефона.\n */\nexport const scPhoneVerificationCodeMask: MaskitoOptions = {\n mask: /^\\d{0,6}$/,\n} as MaskitoOptions;\n","/* eslint-disable no-underscore-dangle,lodash/prefer-constant */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup, FormGroupDirective } from '@angular/forms';\nimport { MaskitoOptions } from '@maskito/core';\nimport { ScVerificationService } from '@snabcentr/client-core';\nimport { tuiControlValue } from '@taiga-ui/cdk';\nimport { catchError, distinctUntilChanged, endWith, filter, finalize, map, Observable, of, scan, share, startWith, Subject, switchMap, takeWhile, tap, timer } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { scPhoneVerificationCodeMask } from '../../masks';\n\n/**\n * Компонент формы проверки телефона и получения кода подтверждения.\n */\n@Component({\n selector: 'sc-verification-phone-check-form',\n templateUrl: './sc-verification-phone-check-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScVerificationPhoneCheckFormComponent implements OnInit {\n /**\n * Признак, следует ли отображать функционал кода подтверждения.\n */\n @Input()\n public set showCodeFields(showCodeFields: boolean) {\n this._showCodeFields = showCodeFields;\n this.form.controls.verificationCode[showCodeFields ? 'enable' : 'disable']();\n }\n\n /**\n * Признак, следует ли отображать функционал кода подтверждения.\n */\n public get showCodeFields(): boolean {\n return this._showCodeFields;\n }\n\n /**\n * Признак, что поле ввода телефона только для чтения.\n */\n @Input()\n public readOnly: boolean = false;\n\n /**\n * Признак, следует ли телефону быть в системе. От этого признака зависит в каких случаях выдавать ошибку при проверки занятости телефона.\n */\n @Input()\n public shouldBeBusy: boolean = true;\n\n /**\n * Признак, следует ли проверять подтверждён ли телефона в системе. При `true` будет вызывать ошибку при наличие телефона в системе без подтверждения.\n */\n @Input()\n public shouldBeConfirmed?: boolean = undefined;\n\n /**\n * Наличие кода подтверждения у пользователя.\n */\n @Input()\n public haveCode: boolean = false;\n\n /**\n * Событие для обратной привязки наличия кода подтверждения\n */\n @Output()\n public haveCodeChange = new EventEmitter<boolean>();\n\n /**\n * {@link Observable} запроса проверки номера телефона.\n */\n public phoneCheck$?: Observable<boolean | null>;\n\n /**\n * {@link Subject} события отправки кода подтверждения.\n */\n public readonly onSendCode: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса данных получения кода подтверждения.\n */\n public readonly loadingApproveCode$: Observable<boolean> = this.onSendCode.pipe(\n map(() => this.phoneControl.value),\n filter((value): value is string => this.phoneControl.valid),\n switchMap((value) =>\n this.verificationService.sendPhoneApproveCode(value).pipe(\n tap(() => {\n this.reloadTimer$.next(60);\n }),\n map(() => false),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const errorResponse = error.error as ApiErrorResponse;\n\n const regex = /(\\d{2}):\\d{2}/;\n const match = regex.exec(errorResponse.message);\n\n if (match && match.length > 1) {\n const timeParts = match[0].split(':');\n const seconds = Number.parseInt(timeParts[1], 10);\n\n this.reloadTimer$.next(seconds);\n } else {\n this.phoneControl.setErrors({ serverResponse: errorResponse.errors?.['phone'] ?? [errorResponse.message] });\n }\n }\n\n return of(false);\n }),\n finalize(() => {\n this.setHaveCode(true);\n }),\n startWith(true)\n )\n ),\n startWith(false),\n share()\n );\n\n /**\n * Маска поля ввода кода для подтверждения.\n */\n public readonly verificationCodeMask: MaskitoOptions = scPhoneVerificationCodeMask;\n\n /**\n * {@link Subject} события запуска/остановки таймера.\n */\n public readonly reloadTimer$: Subject<number> = new Subject<number>();\n\n /**\n * {@link Observable} Таймера.\n *\n * TODO: Вынести таймер в отдельную директиву TASK:[#9260].\n */\n public readonly timer$: Observable<string | null> = this.reloadTimer$.pipe(\n switchMap((sec) =>\n timer(0, 1000).pipe(\n scan((total) => -1 + total, sec),\n takeWhile((total) => total >= 0),\n map((total) => {\n const minutes = Math.floor(total / 60);\n const seconds = total % 60;\n\n return `${Math.round(minutes).toString().padStart(2, '0')}:${Math.round(seconds).toString().padStart(2, '0')}`;\n }),\n endWith(null),\n startWith(null),\n distinctUntilChanged()\n )\n )\n );\n\n /**\n * Признак, следует ли отображать функционал кода подтверждения.\n */\n private _showCodeFields: boolean = true;\n\n /**\n * Инициализирует экземпляр класса {@link ScVerificationPhoneCheckFormComponent}.\n *\n * @param verificationService Сервис верификации.\n * @param formGroupDirective Директива c `FormGroup` из DOM.\n */\n public constructor(\n private readonly verificationService: ScVerificationService,\n @Inject(FormGroupDirective)\n private readonly formGroupDirective?: FormGroupDirective\n ) {}\n\n /**\n * Группа полей ввода для формы «Вход на сайт».\n */\n public get form(): FormGroup<{\n phone: FormControl<string | null>;\n verificationCode: FormControl<string | null>;\n }> {\n return this.formGroupDirective?.form as FormGroup<{\n phone: FormControl<string | null>;\n verificationCode: FormControl<string | null>;\n }>;\n }\n\n /**\n * Поле ввода 'Номер телефона'.\n */\n public get phoneControl(): FormControl<string | null> {\n return this.form.controls.phone;\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.phoneCheck$ = tuiControlValue<string | null>(this.phoneControl).pipe(\n tap(() => {\n this.reloadTimer$.next(0);\n }),\n switchMap((value) => {\n if (this.phoneControl.valid && !!value) {\n return this.verificationService.getPhoneCheck$(value).pipe(\n map((result) => {\n if (this.shouldBeBusy !== result.isBusy) {\n this.phoneControl.setErrors({\n serverResponse: [\n result.isBusy ? 'Пользователь с таким номером телефона уже существует' : 'Пользователя с таким номером телефона не существует',\n ],\n });\n this.phoneControl.markAsTouched();\n\n return false;\n }\n\n if (this.shouldBeConfirmed !== undefined && this.shouldBeConfirmed !== result.isConfirmed) {\n this.phoneControl.setErrors({\n serverResponse: [\n result.isConfirmed\n ? 'Телефон уже подтверждён'\n : 'Номер телефона не подтверждён или вход по нему невозможен. Обратитесь к вашему персональному менеджеру или войдите с использованием e-mail и пароля.',\n ],\n });\n this.phoneControl.markAsTouched();\n\n return false;\n }\n\n return true;\n }),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const errorResponse = error.error as ApiErrorResponse;\n this.phoneControl.setErrors({ serverResponse: errorResponse.errors?.['phone'] ?? [errorResponse.message] });\n }\n\n return of(false);\n }),\n startWith(null)\n );\n }\n\n this.setHaveCode(false);\n\n return of(false);\n }),\n share()\n );\n\n this.setHaveCode(false);\n }\n\n /**\n * Устанавливает состояние наличия кода подтверждения у пользователя.\n *\n * @param haveCode Признак того есть ли код подтверждения или нет.\n */\n public setHaveCode(haveCode: boolean): void {\n this.haveCode = haveCode;\n this.haveCodeChange.emit(haveCode);\n }\n}\n","<form\n [formGroup]=\"form\"\n *tuiLet=\"loadingApproveCode$ | async as loadingApproveCode\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel\n >Номер телефона\n <tui-input-phone\n formControlName=\"phone\"\n [readOnly]=\"readOnly\"\n [tuiTextfieldCustomContent]=\"checkingPhone\"\n >\n Номер телефона\n <input\n tuiTextfieldLegacy\n autocomplete=\"phone\"\n />\n </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <ng-container *ngIf=\"showCodeFields && form.enabled\">\n <label\n *ngIf=\"loadingApproveCode === false && haveCode\"\n tuiLabel\n >Код из СМС\n <tui-input formControlName=\"verificationCode\">\n Код из СМС\n <input\n tuiTextfieldLegacy\n [maskito]=\"verificationCodeMask\"\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"verificationCode\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <div\n *tuiLet=\"!!loadingApproveCode as loadingApproveCode\"\n class=\"flex justify-center gap-4\"\n >\n <button\n *ngIf=\"!haveCode\"\n tuiButton\n (click)=\"onSendCode.next()\"\n [disabled]=\"loadingApproveCode || !!!(phoneCheck$ | async) || phoneControl.invalid\"\n [loading]=\"loadingApproveCode\"\n iconStart=\"@tui.sc.send\"\n >\n Получить код\n </button>\n <button\n *ngIf=\"!loadingApproveCode && !haveCode\"\n tuiLink\n [pseudo]=\"true\"\n [disabled]=\"!!!(phoneCheck$ | async) || phoneControl.invalid\"\n (click)=\"setHaveCode(true)\"\n >\n У меня есть код\n </button>\n\n <ng-container *tuiLet=\"timer$ | async as timer\">\n <tui-loader\n *ngIf=\"haveCode\"\n [showLoader]=\"loadingApproveCode\"\n >\n <button\n tuiLink\n [pseudo]=\"true\"\n [disabled]=\"loadingApproveCode || timer\"\n (click)=\"onSendCode.next()\"\n >\n Повторно отправить код\n <ng-container\n *ngIf=\"timer\"\n class=\"!text-tui-base-08\"\n >(через {{ timer }})</ng-container\n >\n </button>\n </tui-loader>\n </ng-container>\n </div>\n </ng-container>\n</form>\n\n<ng-template #checkingPhone>\n <tui-loader\n *ngIf=\"!!!(phoneCheck$ | async) && phoneControl.valid\"\n class=\"size-4\"\n >\n </tui-loader>\n</ng-template>\n","/* eslint-disable no-restricted-syntax,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { IAuthToken, IPhoneLogin, ScAuthService } from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../interfaces/api-error-response';\n\n/**\n * Компонент аутентификации по номеру телефона и коду подтверждения.\n */\n@Component({\n selector: 'sc-sign-in-form-by-phone',\n templateUrl: './sc-sign-in-form-by-phone.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSignInFormByPhoneComponent {\n /**\n * Наличие кода подтверждения у пользователя.\n */\n public haveCode: boolean = false;\n\n /**\n * Группа полей ввода для формы «Вход на сайт».\n */\n public readonly form = new FormGroup({\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n verificationCode: new FormControl<string | null>(null, [Validators.required, Validators.minLength(6)]),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса данных аутентификации.\n */\n private readonly request$: Observable<IAuthToken | null> = this.onSubmit.pipe(\n map(() => this.form.value),\n filter((value): value is IPhoneLogin => this.form.valid),\n switchMap((value) =>\n this.authService.getSignIn$(value).pipe(\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n }\n\n return of({} as IAuthToken);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по номеру телефона.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScSignInFormByPhoneComponent}.\n *\n * @param authService Сервис аутентификации.\n */\n public constructor(private readonly authService: ScAuthService) {}\n}\n","<form\n [formGroup]=\"form\"\n *tuiLet=\"!!(loading$ | async) as loading\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"mb-4 flex flex-col items-center gap-4\"\n>\n <sc-verification-phone-check-form\n [(haveCode)]=\"haveCode\"\n [shouldBeBusy]=\"true\"\n [shouldBeConfirmed]=\"true\"\n class=\"w-full\"\n ></sc-verification-phone-check-form>\n <button\n *ngIf=\"haveCode\"\n tuiButton\n type=\"submit\"\n [loading]=\"loading\"\n [disabled]=\"form.invalid || loading\"\n iconStart=\"@tui.sc.circle-arrow-in-right\"\n >\n Войти\n </button>\n</form>\n","/* eslint-disable no-restricted-syntax,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { IAuthToken, ILogin, ScAuthService } from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../interfaces/api-error-response';\n\n/**\n * Компонент аутентификации по адресу электронной почты и паролю.\n */\n@Component({\n selector: 'sc-sign-in-form-by-email',\n templateUrl: './sc-sign-in-form-by-email.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSignInFormByEmailComponent {\n /**\n * Группа полей ввода для формы «Вход на сайт».\n */\n public readonly formByEmail: FormGroup = new FormGroup({\n login: new FormControl<string | null>(null, [Validators.required, Validators.email]),\n password: new FormControl<string | null>(null, Validators.required),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса данных аутентификации.\n */\n private readonly emailRequest$: Observable<IAuthToken | null> = this.onSubmit.pipe(\n filter(() => this.formByEmail.valid),\n map(() => this.formByEmail.value as ILogin),\n switchMap((value) =>\n this.authService.getSignIn$(value).pipe(\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.formByEmail.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.formByEmail.setErrors({ serverResponse: [message] });\n }\n }\n\n return of({} as IAuthToken);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по email.\n */\n public readonly loadingEmailAuth$: Observable<boolean> = this.emailRequest$.pipe(map(tuiIsFalsy));\n\n /**\n * Сигнал нажатия на кнопку \"Забыли пароль\".\n */\n @Output() public readonly forgotPassword: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Инициализирует экземпляр класса {@link ScSignInFormByEmailComponent}.\n *\n * @param authService Сервис аутентификации.\n */\n public constructor(private readonly authService: ScAuthService) {}\n}\n","<form\n [formGroup]=\"formByEmail\"\n (ngSubmit)=\"onSubmit.next()\"\n>\n <div class=\"mb-8 flex flex-col gap-4\">\n <label tuiLabel\n >Адрес электронной почты\n <tui-input formControlName=\"login\">\n Адрес электронной почты\n <input\n tuiTextfieldLegacy\n autocomplete=\"email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"login\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\n >Пароль\n <tui-input-password formControlName=\"password\">\n Пароль\n <input\n tuiTextfieldLegacy\n autocomplete=\"current-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <tui-error [error]=\"[] | tuiFieldError | async\"></tui-error>\n </div>\n <div class=\"mb-4 flex flex-col items-center gap-4\">\n <a\n tuiLink\n [pseudo]=\"true\"\n (click)=\"forgotPassword.emit()\"\n class=\"text-base\"\n >Забыли пароль?</a\n >\n <button\n tuiButton\n type=\"submit\"\n [loading]=\"!!(loadingEmailAuth$ | async)\"\n [disabled]=\"formByEmail.invalid || !!(loadingEmailAuth$ | async)\"\n iconStart=\"@tui.sc.circle-arrow-in-right\"\n >\n Войти\n </button>\n </div>\n</form>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ScAuthService, ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';\nimport { filter, Observable } from 'rxjs';\n\nimport { AuthMethod } from '../enums/auth-method';\n\n/**\n * Компонент аутентификации пользователя.\n */\n@Component({\n selector: 'sc-sign-in-form',\n templateUrl: './sc-sign-in-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSignInFormComponent implements OnInit {\n /**\n * Выбранный способ аутентификации.\n */\n @Input() public authMethod: AuthMethod = AuthMethod.byEmail;\n\n /**\n * Перечисление способов аутентификации.\n */\n public method: typeof AuthMethod = AuthMethod;\n\n /**\n * Сигнал нажатия на кнопку \"Забыли пароль\".\n */\n @Output() public readonly forgotPassword: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Сигнал нажатия на кнопку \"Зарегистрироваться\".\n */\n @Output() public readonly signUp: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Сигнал события аутентификации.\n */\n @Output() public readonly successAuth: Observable<boolean> = this.authService.getAuthChange().pipe(filter((state) => state));\n\n /**\n * Инициализирует экземпляр класса {@link ScSignInFormComponent}.\n *\n * @param authService Сервис аутентификации.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly authService: ScAuthService,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {}\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signInShow,\n params: {\n type: this.authMethod,\n },\n });\n }\n\n /**\n * Осуществляет переключение способов аутентификации.\n *\n * @param authMethod Выбранный способ аутентификации.\n */\n public switchAuth(authMethod: AuthMethod): void {\n this.authMethod = authMethod;\n\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signInShow,\n params: {\n type: authMethod,\n },\n });\n }\n\n /**\n * Обрабатывает нажатие на кнопку \"Забыли пароль\" и выдает сигнал об этом.\n */\n public onForgotPassword(): void {\n this.forgotPassword.emit();\n }\n}\n","<div class=\"mb-4 flex justify-center\">\n <button\n tuiButton\n [appearance]=\"authMethod === 'by_phone' ? 'primary' : 'secondary'\"\n (click)=\"switchAuth(method.byPhone)\"\n class=\"tui-space_right-3 tui-space_bottom-3 !font-bold\"\n >\n По телефону\n </button>\n\n <button\n tuiButton\n [appearance]=\"authMethod === 'by_email' ? 'primary' : 'secondary'\"\n (click)=\"switchAuth(method.byEmail)\"\n class=\"tui-space_left-3 tui-space_bottom-3 !font-bold\"\n >\n По e-mail\n </button>\n</div>\n\n<sc-sign-in-form-by-email\n *ngIf=\"authMethod === 'by_email'\"\n (forgotPassword)=\"onForgotPassword()\"\n></sc-sign-in-form-by-email>\n\n<sc-sign-in-form-by-phone [class.hidden]=\"authMethod !== 'by_phone'\"></sc-sign-in-form-by-phone>\n\n<div class=\"flex flex-col items-center gap-4\">\n <span class=\"font-medium text-tui-text-02\">Еще не зарегистрированы?</span>\n <button\n tuiButton\n (click)=\"signUp.emit()\"\n type=\"button\"\n iconStart=\"@tui.user-plus\"\n appearance=\"secondary\"\n >\n Зарегистрироваться\n </button>\n</div>\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Проверяет БИК.\n *\n * @param root0 Проверяемое значение.\n * @param root0.value Проверяемое значение.\n */\nexport const scBicValidator: ValidatorFn = ({ value }: AbstractControl<string | null>): ValidationErrors | null => {\n return !value || /^0[,14]\\d{7}$/.test(value) ? null : { bic: true };\n};\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Проверяет корреспондентский счет.\n *\n * @param root0 Проверяемое значение.\n * @param root0.value Проверяемое значение.\n */\nexport const scCorrespondentAccountValidator: ValidatorFn = ({ value }: AbstractControl<string | null>): ValidationErrors | null => {\n return !value || /^[,34]01\\d{17}$|^03\\d{18}$/.test(value) ? null : { correspondentAccount: true };\n};\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Проверяет повторный ввод пароля на эквивалентность паролю.\n *\n * @param passwordKey Ключ поля ввода пароля.\n * @param passwordConfirmKey Ключ поля повторного ввода пароля.\n */\nexport function scPasswordConfirmMatchingValidator(passwordKey: string, passwordConfirmKey: string): ValidatorFn | null {\n return (control: AbstractControl): ValidationErrors | null => {\n const passwordInput: AbstractControl<string | null> | null = control.get(passwordKey);\n const passwordConfirmInput: AbstractControl<string | null> | null = control.get(passwordConfirmKey);\n\n if (!passwordInput || !passwordConfirmInput || passwordInput.invalid || passwordConfirmInput.invalid || !passwordInput.value || !passwordConfirmInput.value) {\n return null;\n }\n\n return passwordInput.value === passwordConfirmInput.value ? null : { passwordNotEquivalent: true };\n };\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Проверяет кратность значения.\n *\n * @param step Шаг кратности.\n * @param precision Точность, количество чисел после запятой.\n */\nexport function stepValidator(step: number, precision: number = 3): ValidatorFn {\n return ({ value }: AbstractControl<number | null>): ValidationErrors | null => {\n if (!step) {\n return null;\n }\n\n if (value) {\n return Number((value / step).toFixed(precision)) % 1 === 0 ? null : { error: `Число не кратно ${step}` };\n }\n\n return null;\n };\n}\n","/* eslint-disable no-unused-expressions,class-methods-use-this,@typescript-eslint/unbound-method */\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, Inject, inject, OnInit, SkipSelf } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroupDirective, Validators } from '@angular/forms';\nimport { ScICity, ScICountry, ScIRegion, ScLocationsService } from '@snabcentr/client-core';\nimport { tuiControlValue, tuiIsPresent, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { combineLatest, debounceTime, filter, Observable, of, share, startWith, switchMap } from 'rxjs';\n\n/**\n * Компонент поля ввода страны/региона/города.\n */\n@Component({\n selector: 'sc-addresses-selection-field',\n templateUrl: './sc-addresses-selection-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddressesSelectionFieldComponent implements OnInit {\n /**\n * FormControl для поля страны.\n */\n public countryControl: FormControl<ScICountry | null> = new FormControl<ScICountry | null>(\n {\n id: 3159,\n name: 'Россия',\n },\n Validators.required\n );\n\n /**\n * FormControl для поля региона.\n */\n public regionControl: FormControl<ScIRegion | null> = new FormControl<ScIRegion | null>(null, Validators.required);\n\n /**\n * FormControl для поля города.\n */\n public cityControl: FormControl<ScICity | null> = new FormControl<ScICountry | null>(null, Validators.required);\n\n /**\n * {@link Observable} изменения списка стран.\n */\n public countries$: Observable<ScICountry[] | null> = this.locationsService.getCountries$().pipe(share(), startWith(null));\n\n /**\n * {@link Observable} изменения списка регионов.\n */\n public regions$: Observable<ScIRegion[] | null> = tuiControlValue<ScIRegion | null>(this.countryControl).pipe(\n filter(tuiIsPresent),\n switchMap((country: ScICountry) => this.locationsService.getRegions$(country.id).pipe(startWith(null))),\n share()\n );\n\n /**\n * {@link Observable} изменения списка городов.\n */\n public cities$: Observable<ScICity[] | null> = combineLatest({\n country: tuiControlValue<ScIRegion | null>(this.countryControl),\n region: tuiControlValue<ScICity | null>(this.regionControl),\n }).pipe(\n debounceTime(0),\n switchMap(({ country, region }: { country: ScIRegion | null; region: ScICity | null }) =>\n country && region ? this.locationsService.getCities$(country.id, region.id).pipe(startWith(null)) : of([])\n ),\n share()\n );\n\n /**\n * Ссылка для автоматического управления уничтожением зависимостей.\n */\n private destroyRef: DestroyRef = inject(DestroyRef);\n\n /**\n * Функция преобразования объекта сортировки в значение, отображаемое в поле ввода.\n *\n * @param item Выбранный объект выпадающего списка.\n * @param item.name Название страны/региона/города, которое будет отображено в поле.\n */\n public readonly stringify = (item: { name: string }): string => item.name;\n\n /**\n * Инициализирует экземпляр класса {@link ScAddressesSelectionFieldComponent}.\n *\n * @param formGroupDirective Директива c `FormGroup` из DOM.\n * @param locationsService Сервис для получения списков стран, регионов, городов.\n */\n public constructor(\n @SkipSelf() @Inject(FormGroupDirective) private readonly formGroupDirective: FormGroupDirective,\n private readonly locationsService: ScLocationsService\n ) {}\n\n /**\n * `FormControl` поля идентификатора города.\n */\n public get cityIdControl(): FormControl<string | null> {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.formGroupDirective.form.get('cityId')! as FormControl<string | null>;\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n if (this.cityIdControl.valid) {\n this.locationsService\n .getUserCity$(Number(this.cityIdControl.value))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((city: ScICity) => {\n this.countryControl.patchValue(city.region?.country ?? null);\n this.regionControl.patchValue(city.region ?? null);\n this.cityControl.patchValue(city);\n });\n }\n\n this.countryControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((country) => {\n this.regionControl.reset(null);\n this.cityControl.reset(null);\n if (country) {\n this.regionControl.enable();\n } else {\n this.regionControl.disable();\n }\n this.cityControl.disable();\n });\n\n this.regionControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((region) => {\n this.cityControl.reset(null);\n this.cityIdControl.reset(null);\n if (region) {\n this.cityControl.enable();\n } else {\n this.cityControl.disable();\n }\n });\n }\n\n /**\n * Заполнение полей банковских реквизитов на основе выбранной подсказки.\n *\n * @param city Идентификатор записи города.\n */\n public onSelectedCity(city: ScICity | null): void {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.cityIdControl) {\n this.cityIdControl.setValue(city?.id.toString() ?? null);\n tuiMarkControlAsTouchedAndValidate(this.cityIdControl);\n }\n }\n}\n","<div class=\"grid items-start gap-4 sm:grid-cols-2\">\n <!-- TODO: Открыть поле выбора страны при добавлении возможности выбора страны для клиента. -->\n <!-- <label tuiLabel=\"Страна\" class=\"w-full\">\n <tui-combo-box *tuiLet=\"countries$ | async as countries\" [formControl]=\"countryControl\" [stringify]=\"stringify\">\n Страна\n <input tuiTextfield autocomplete=\"new-password\" />\n <tui-data-list-wrapper *tuiDataList [itemContent]=\"stringify | tuiStringifyContent\" [items]=\"countries | tuiFilterByInputWith: stringify\"></tui-data-list-wrapper>\n </tui-combo-box>\n <tui-error [formControl]=\"countryControl\" [error]=\"[] | tuiFieldError | async\"></tui-error>\n </label> -->\n <!-- TODO: [TASK:9383]: Доработать компонент выбора города, как на портале -->\n <label tuiLabel>\n Регион\n <tui-combo-box\n *tuiLet=\"(regions$ | async) ?? [] as regions\"\n [formControl]=\"regionControl\"\n [stringify]=\"stringify\"\n >\n Регион\n <input\n tuiTextfieldLegacy\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n />\n <tui-data-list-wrapper\n *tuiDataList\n [itemContent]=\"stringify | tuiStringifyContent\"\n [items]=\"regions | tuiFilterByInput\"\n ></tui-data-list-wrapper>\n </tui-combo-box>\n <tui-error\n [formControl]=\"regionControl\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Город\n <tui-combo-box\n *tuiLet=\"(cities$ | async) ?? [] as cities\"\n [formControl]=\"cityControl\"\n [stringify]=\"stringify\"\n (ngModelChange)=\"onSelectedCity($event)\"\n >\n Город\n <input\n tuiTextfieldLegacy\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n />\n <tui-data-list-wrapper\n *tuiDataList\n [itemContent]=\"stringify | tuiStringifyContent\"\n [items]=\"cities | tuiFilterByInput\"\n ></tui-data-list-wrapper>\n </tui-combo-box>\n <tui-error\n [formControl]=\"cityIdControl\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n <tui-error\n *ngIf=\"cityIdControl.untouched\"\n [formControl]=\"cityControl\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n</div>\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Inject, inject, Input, OnInit, Output, SkipSelf } from '@angular/core';\nimport { FormGroup, NgControl } from '@angular/forms';\nimport { SC_MIN_LENGTH_SEARCH_TERM, ScISuggestionType, ScSuggestion, ScSuggestionService } from '@snabcentr/client-core';\nimport { tuiControlValue, tuiIsFalsy, tuiIsPresent, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { TUI_DATA_LIST_HOST, TuiDataListHost } from '@taiga-ui/core';\nimport { catchError, debounceTime, filter, map, Observable, of, share, startWith, switchMap, throwError } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\n\n/**\n * Компонент подсказок для поля ввода.\n */\n@Component({\n selector: 'sc-suggestion-field',\n templateUrl: './sc-suggestion-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSuggestionFieldComponent implements OnInit {\n /**\n * Тип подсказок.\n */\n @Input()\n public type: ScISuggestionType = ScISuggestionType.fio;\n\n /**\n * Событие выбора результата подсказки.\n */\n @Output()\n public selectedClick: EventEmitter<ScSuggestion> = new EventEmitter<ScSuggestion>();\n\n /**\n * {@link Observable} подсказок.\n */\n public suggestions$?: Observable<ScSuggestion[] | null>;\n\n /**\n * {@link Observable} состояние запроса подсказок.\n */\n public loading$?: Observable<boolean>;\n\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Компонент обёртка выпадающего списка.\n */\n private readonly host: TuiDataListHost<unknown> | null = inject<TuiDataListHost<unknown>>(TUI_DATA_LIST_HOST, {\n optional: true,\n });\n\n /**\n * Минимальная длина поискового запроса для получения данных.\n */\n private readonly minLengthSearchTerm: number = inject(SC_MIN_LENGTH_SEARCH_TERM);\n\n /**\n * Инициализирует экземпляр класса {@link ScSuggestionFieldComponent}.\n *\n * @param control Контрол поля ввода.\n * @param suggestionService Сервис работы с API подсказок.\n */\n public constructor(\n @SkipSelf()\n @Inject(NgControl)\n public readonly control: NgControl,\n private readonly suggestionService: ScSuggestionService\n ) {}\n\n /** @inheritDoc */\n public ngOnInit(): void {\n const request$ = tuiControlValue<string | null>(this.control).pipe(\n debounceTime(500),\n filter(tuiIsPresent),\n map((term) => term.trim()),\n filter((term) => term.length >= this.minLengthSearchTerm),\n switchMap((term: string) => this.suggestionService.getData<ScSuggestion>(term, this.type).pipe(startWith(null))),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const errorResponse = error.error as ApiErrorResponse;\n\n if (this.control.control) {\n tuiMarkControlAsTouchedAndValidate(this.control.control);\n\n this.control.control.setErrors({\n serverResponse: [errorResponse.message || 'Ошибка сервера: пожалуйста, перезагрузите страницу и/или выполните запрос позже.'],\n });\n }\n }\n\n return throwError(() => of([]));\n }),\n share()\n );\n\n this.suggestions$ = request$.pipe(filter(tuiIsPresent), startWith(null));\n this.loading$ = request$.pipe(map(tuiIsFalsy));\n }\n\n /**\n * Заполнение полей основе выбранной подсказки.\n *\n * @param suggestion Объект подсказки.\n */\n public onSelected(suggestion: ScSuggestion): void {\n switch (this.type) {\n case ScISuggestionType.fio:\n if ('fio' in suggestion) {\n this.control.control?.patchValue(suggestion.fio, { emitEvent: false });\n }\n break;\n case ScISuggestionType.address:\n if ('addressString' in suggestion) {\n this.control.control?.patchValue(suggestion.addressString, { emitEvent: false });\n }\n break;\n case ScISuggestionType.bank:\n if ('inn' in suggestion && 'bic' in suggestion) {\n (this.control.control?.parent as FormGroup).patchValue(\n {\n bankName: suggestion.name,\n bic: suggestion.bic,\n correspondentAccount: suggestion.correspondentAccount,\n },\n { emitEvent: false }\n );\n }\n break;\n case ScISuggestionType.organization:\n if ('inn' in suggestion && !('bic' in suggestion)) {\n (this.control.control?.parent as FormGroup).patchValue(\n {\n name: suggestion.name,\n inn: suggestion.inn,\n kpp: suggestion.kpp,\n okpo: suggestion.okpo,\n directorName: suggestion.directorName,\n directorPosition: suggestion.directorPosition,\n legalAddress: suggestion.legalAddress,\n postalAddress: suggestion.postalAddress,\n actualAddress: suggestion.actualAddress,\n },\n { emitEvent: false }\n );\n }\n break;\n case ScISuggestionType.email:\n if ('email' in suggestion) {\n this.control.control?.patchValue(suggestion.email, { emitEvent: false });\n }\n break;\n default:\n break;\n }\n\n if (this.host?.handleOption) {\n // Дёргаем внутренний обработчик выбора элемента выпадающего списка для решения проблемы закрытия выпадающего списка подсказки.\n this.host.handleOption(this.control.value);\n }\n this.selectedClick.emit(suggestion);\n }\n}\n","<tui-loader\n size=\"m\"\n [overlay]=\"true\"\n [showLoader]=\"!!(loading$ | async)\"\n>\n <tui-data-list *tuiLet=\"suggestions$ | async as options\">\n <button\n *ngFor=\"let option of options\"\n tuiOption\n (click)=\"onSelected(option)\"\n class=\"flex-col !items-start\"\n >\n <ng-container *tuiLet=\"$any(option) as option\">\n <ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"suggestionType.fio\">\n <span class=\"text-tui-link\">{{ option.fio }}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"suggestionType.organization\">\n <span class=\"text-tui-link\">\n {{ option.name }}\n <span class=\"ml-2 text-tui-text-02\">инн: {{ option.inn }}</span>\n </span>\n <span class=\"text-tui-text-02\">{{ option?.legalAddress }}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"suggestionType.bank\">\n <span class=\"text-tui-link\">{{ option.name }}</span>\n <span class=\"text-tui-text-02\">{{ option.bic }}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"suggestionType.email\">\n <span class=\"text-tui-link\">{{ option.email }}</span>\n </ng-container>\n <ng-container *ngSwitchCase=\"suggestionType.address\">\n <span class=\"text-tui-link\">{{ option.addressString }}</span>\n </ng-container>\n </ng-container>\n </ng-container>\n </button>\n </tui-data-list>\n</tui-loader>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MaskitoOptions } from '@maskito/core';\nimport { ScICurrency, ScISuggestionType, ScReferencesService } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\nimport { scAccountNumberMask, scBicMask, scCorrespondentAccount } from '../../masks';\n\n/**\n * Компонент формы банковских реквизитов.\n */\n@Component({\n selector: 'sc-new-contragent-bank-account-form',\n templateUrl: './sc-new-contragent-bank-account-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewContragentBankAccountsFormComponent {\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Маска поля ввода БИК.\n */\n public readonly bicMask: MaskitoOptions = scBicMask;\n\n /**\n * Маска поля ввода номера счета.\n */\n public readonly accountNumberMask: MaskitoOptions = scAccountNumberMask;\n\n /**\n * Маска поля ввода номера корреспондентского счета.\n */\n public readonly correspondentAccount: MaskitoOptions = scCorrespondentAccount;\n\n /**\n * {@link Observable} списка валют.\n */\n public readonly currencies$: Observable<ScICurrency[]> = this.referencesService.currencies$;\n\n /**\n * Группа с полем банковских реквизитов.\n */\n @Input()\n public form: FormGroup<{\n bankName: FormControl<string | null>;\n bic: FormControl<string | null>;\n accountNumber: FormControl<string | null>;\n correspondentAccount: FormControl<string | null>;\n currencyId: FormControl<number | null>;\n }>;\n\n /**\n * Инициализирует экземпляр класса {@link ScContragentBankAccountsFormComponent}.\n *\n * @param referencesService Сервис справочников.\n */\n public constructor(private readonly referencesService: ScReferencesService) {}\n\n /**\n * Возвращает {@link Observable} валюты по идентификатору.\n *\n * @param currencyId Идентификатор валюты.\n */\n public getCurrencyById$(currencyId: number): Observable<ScICurrency | undefined> {\n return this.referencesService.getCurrencyById$(currencyId);\n }\n}\n","<div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel>\n Наименование банка\n <tui-input formControlName=\"bankName\">\n Наименование банка\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.bank\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"bankName\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n БИК\n <tui-input formControlName=\"bic\">\n БИК\n <input\n tuiTextfieldLegacy\n [maskito]=\"bicMask\"\n autocomplete=\"bic\"\n />\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.bank\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"bic\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Номер счета\n <tui-input formControlName=\"accountNumber\">\n Номер счета\n <input\n tuiTextfieldLegacy\n [maskito]=\"accountNumberMask\"\n autocomplete=\"accountNumber\"\n />\n </tui-input>\n <tui-error\n formControlName=\"accountNumber\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Корреспондентский счет\n <tui-input formControlName=\"correspondentAccount\">\n Корреспондентский счет\n <input\n tuiTextfieldLegacy\n [maskito]=\"correspondentAccount\"\n autocomplete=\"correspondentAccount\"\n />\n </tui-input>\n <tui-error\n formControlName=\"correspondentAccount\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Валюта расчётов\n <tui-select\n formControlName=\"currencyId\"\n [valueContent]=\"currencyContent\"\n >\n Валюта расчётов\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of currencies$ | async; let index = index\"\n tuiOption\n [value]=\"item.id\"\n >\n {{ item.name }} ({{ item.symbol }})\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #currencyContent\n let-data\n >\n <div>{{ (getCurrencyById$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error\n formControlName=\"currencyId\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n</div>\n","/* eslint-disable class-methods-use-this,@typescript-eslint/unbound-method */\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, Inject, inject, Input, OnDestroy, OnInit, SkipSelf } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormArray, FormControl, FormGroup, FormGroupDirective, Validators } from '@angular/forms';\nimport { ScICountry, ScIReferencesTypes, ScISalesDirection, ScISuggestionType, ScLocationsService, ScOpfList, ScReferencesService } from '@snabcentr/client-core';\nimport { tuiControlValue, tuiIsPresent } from '@taiga-ui/cdk';\nimport { distinctUntilChanged, filter, map, Observable, tap } from 'rxjs';\n\nimport { ScBankAccountFormGroup, ScContactFormGroup } from '../../auth/interfaces';\nimport { scEntrepreneurInnMask, scEntrepreneurOkpoMask, scKppMask, scLegalInnMask, scLegalOkpoMask } from '../../masks';\nimport { scBicValidator, scCorrespondentAccountValidator } from '../../validators';\n\n/**\n * Форма создания нового контрагента.\n */\n@Component({\n selector: 'sc-new-contragent-form',\n templateUrl: './sc-new-contragent-form.component.html',\n styleUrls: ['./sc-new-contragent-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewContragentFormComponent implements OnInit, OnDestroy {\n /**\n * Поле выбора организационно-правовой формы.\n */\n @Input()\n public opfControl?: FormControl<keyof typeof ScOpfList | null>;\n\n /**\n * Группа полей данных о контрагенте - индивидуальном предпринимателе.\n */\n private readonly entrepreneurGroup = new FormGroup({\n inn: new FormControl<string | null>(null, Validators.required),\n okpo: new FormControl<string | null>(null, Validators.required),\n directorName: new FormControl<string | null>(null, Validators.required),\n directorPosition: new FormControl<string | null>(null, Validators.required),\n directorActsOn: new FormControl<string | null>(null, Validators.required),\n legalAddress: new FormControl<string | null>(null, Validators.required),\n postalAddress: new FormControl<string | null>(null, Validators.required),\n actualAddress: new FormControl<string | null>(null, Validators.required),\n bankAccounts: new FormArray<ScBankAccountFormGroup>(\n [\n new FormGroup({\n bankName: new FormControl<string | null>(null, Validators.required),\n bic: new FormControl<string | null>(null, [Validators.required, Validators.minLength(9), scBicValidator]),\n accountNumber: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20)]),\n correspondentAccount: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20), scCorrespondentAccountValidator]),\n currencyId: new FormControl<number | null>(null, Validators.required),\n }),\n ],\n [Validators.minLength(1), Validators.required]\n ),\n });\n\n /**\n * Группа полей данных о контрагенте - юридическом лице.\n */\n private readonly legalGroup = new FormGroup({\n kpp: new FormControl<string | null>(null, [Validators.required, Validators.minLength(9)]),\n });\n\n /**\n * Группа полей данных о контрагенте - юридическом лице нерезиденте.\n */\n private readonly nonResidentLegalGroup = new FormGroup({\n registrationCountryId: new FormControl<number | null>(null, Validators.required),\n registrationNumber: new FormControl<string | null>(null, Validators.required),\n taxNumber: new FormControl<string | null>(null, Validators.required),\n });\n\n /**\n * Форма для создания нового контрагента физического лица.\n */\n public readonly form = new FormGroup({\n name: new FormControl<string | null>(null, Validators.required),\n opf: new FormControl<keyof typeof ScOpfList>('individual', Validators.required),\n salesDirectionId: new FormControl<number | null>(null, Validators.required),\n contacts: new FormArray<ScContactFormGroup>(\n [\n new FormGroup({\n name: new FormControl<string | null>(null, Validators.required),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n email: new FormControl<string | null>(null, Validators.email),\n position: new FormControl<string | null>(null, Validators.required),\n }),\n ],\n [Validators.minLength(1), Validators.required]\n ),\n });\n\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * {@link Observable} выбора ОПФ.\n */\n public readonly selectOpf$: Observable<keyof typeof ScOpfList> = tuiControlValue<keyof typeof ScOpfList>(this.form.controls.opf).pipe(\n distinctUntilChanged(),\n tap((opf) => {\n Object.keys({ ...this.entrepreneurGroup.controls, ...this.legalGroup.controls, ...this.nonResidentLegalGroup.controls }).forEach((key) => {\n this.form.get(key)?.disable();\n });\n\n const addControls = (formGroup: FormGroup) => {\n Object.keys({ ...formGroup.controls }).forEach((key) => {\n formGroup.get(key)?.enable();\n (this.form as FormGroup).setControl<typeof key>(key, formGroup.get(key));\n });\n };\n\n // eslint-disable-next-line security/detect-object-injection\n if (ScOpfList[opf] > ScOpfList.individual) {\n addControls(this.entrepreneurGroup);\n this.entrepreneurGroup.controls.inn.setValidators([Validators.required, Validators.minLength(12)]);\n this.entrepreneurGroup.controls.okpo.setValidators([Validators.required, Validators.minLength(10)]);\n }\n\n // eslint-disable-next-line security/detect-object-injection\n if (ScOpfList[opf] > ScOpfList.entrepreneur) {\n addControls(this.legalGroup);\n this.entrepreneurGroup.controls.inn.setValidators([Validators.required, Validators.minLength(10)]);\n this.entrepreneurGroup.controls.okpo.setValidators([Validators.required, Validators.minLength(8)]);\n }\n\n // eslint-disable-next-line security/detect-object-injection\n if (ScOpfList[opf] > ScOpfList.legal) {\n addControls(this.nonResidentLegalGroup);\n }\n })\n );\n\n /**\n * Маска поля ввода КПП.\n */\n public readonly kppMask = scKppMask;\n\n /**\n * Перечисление организационно-правовых форм.\n */\n public readonly opfListEnum: typeof ScOpfList = ScOpfList;\n\n /**\n * Ссылка для автоматического управления уничтожением зависимостей.\n */\n private destroyRef: DestroyRef = inject(DestroyRef);\n\n /**\n * Маска поля ввода ИНН.\n *\n * @param opf Организационно-правовая форма.\n */\n // eslint-disable-next-line security/detect-object-injection\n public readonly innMask = (opf: keyof typeof ScOpfList) => (ScOpfList[opf] > ScOpfList.entrepreneur ? scLegalInnMask : scEntrepreneurInnMask);\n\n /**\n * Маска поля ввода ОКПО.\n *\n * @param opf Организационно-правовая форма.\n */\n // eslint-disable-next-line security/detect-object-injection\n public readonly okpoMask = (opf: keyof typeof ScOpfList) => (ScOpfList[opf] > ScOpfList.entrepreneur ? scLegalOkpoMask : scEntrepreneurOkpoMask);\n\n /**\n * Инициализирует экземпляр класса {@link ScNewContragentFormComponent}.\n *\n * @param referencesService Сервис справочников.\n * @param locationsService Сервис для получения списков стран, регионов, городов.\n * @param formGroupDirective Директива c `FormGroup` из DOM.\n */\n public constructor(\n private readonly referencesService: ScReferencesService,\n private readonly locationsService: ScLocationsService,\n @SkipSelf()\n @Inject(FormGroupDirective)\n private readonly formGroupDirective: FormGroupDirective | null\n ) {\n this.referencesService.directions$\n .pipe(\n filter(tuiIsPresent),\n filter((directions) => directions.length > 0),\n takeUntilDestroyed()\n )\n .subscribe((directions) => {\n this.form.patchValue({ salesDirectionId: directions[0].id });\n });\n }\n\n /**\n * Родительская `FormGroup`.\n */\n public get parentForm(): FormGroup | undefined {\n return this.formGroupDirective?.form;\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.parentForm?.setControl('contragent', this.form);\n if (this.parentForm && this.opfControl) {\n tuiControlValue<keyof typeof ScOpfList | null>(this.opfControl)\n .pipe(filter(tuiIsPresent), takeUntilDestroyed(this.destroyRef))\n .subscribe((opf) => {\n this.form.controls.opf.patchValue(opf);\n });\n }\n }\n\n /** @inheritDoc */\n public ngOnDestroy(): void {\n this.parentForm?.removeControl('contragent');\n }\n\n /**\n * Возвращает {@link Observable} списка направлений продаж.\n *\n * @param directionId Идентификатор направления продаж.\n */\n public getDirectionById$(directionId: number): Observable<ScISalesDirection | undefined> {\n return this.referencesService.getDirectionById$(directionId);\n }\n\n /**\n * Возвращает {@link Observable} список организационно-правовых форм..\n */\n public getOpf$(): Observable<Array<ScIReferencesTypes<ScOpfList, typeof ScOpfList>>> {\n return this.referencesService.opf$;\n }\n\n /**\n * Возвращает {@link Observable} организационно-правовой формы, соответствующий символьному обозначению (slug) на входе.\n *\n * @param slug Символьное обозначение (slug).\n */\n public getOpfBySlug$(slug: keyof typeof ScOpfList): Observable<ScIReferencesTypes<ScOpfList, typeof ScOpfList> | undefined> {\n return this.referencesService.getOpfBySlug$(slug);\n }\n\n /**\n * Возвращает {@link Observable} списка стран\n */\n public getCountries$(): Observable<ScICountry[]> {\n return this.locationsService.getCountries$();\n }\n\n /**\n * Возвращает {@link Observable} страны по идентификатору.\n *\n * @param countryId — Идентификатор страны.\n */\n public getCountriesById$(countryId: number): Observable<ScICountry | undefined> {\n return this.locationsService.getCountries$().pipe(map((countries) => countries.find((country) => country.id === countryId)));\n }\n}\n","<div\n [formGroup]=\"form\"\n *ngIf=\"selectOpf$ | async as selectOpf\"\n class=\"flex flex-col gap-3 pb-1\"\n>\n <p class=\"text-lg font-bold\">Общие данные контрагента</p>\n <label tuiLabel>\n Тип контрагента (организационно-правовая форма)\n <tui-select\n formControlName=\"opf\"\n [valueContent]=\"opfContent\"\n [readOnly]=\"!!opfControl\"\n >\n Тип контрагента (организационно-правовая форма)\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getOpf$() | async; let index = index\"\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error\n formControlName=\"opf\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n {{ opfListEnum[selectOpf] > opfListEnum.individual ? 'Название организации' : 'Ф.И.О.' }}\n <tui-input formControlName=\"name\">\n <ng-template #fio>\n Ф.И.О.\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n ></sc-suggestion-field>\n </ng-template>\n <ng-container *ngIf=\"opfListEnum[selectOpf] > opfListEnum.individual; else fio\">\n Название организации\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n ></sc-suggestion-field>\n </ng-container>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <ng-container>\n <ng-container *ngIf=\"opfListEnum[selectOpf] > opfListEnum.individual\">\n <label tuiLabel>\n ИНН организации или ИП\n <tui-input formControlName=\"inn\">\n ИНН организации или ИП\n <input\n tuiTextfieldLegacy\n [maskito]=\"innMask(selectOpf)\"\n autocomplete=\"inn\"\n />\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"inn\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Код ОКПО\n <tui-input formControlName=\"okpo\">\n Код ОКПО\n <input\n tuiTextfieldLegacy\n [maskito]=\"okpoMask(selectOpf)\"\n autocomplete=\"okpo\"\n />\n </tui-input>\n <tui-error\n formControlName=\"okpo\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Ф.И.О. руководителя\n <tui-input formControlName=\"directorName\">\n Ф.И.О. руководителя\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"directorName\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Должность руководителя\n <tui-input formControlName=\"directorPosition\"> Должность руководителя </tui-input>\n <tui-error\n formControlName=\"directorPosition\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Основания полномочий руководителя\n <tui-input formControlName=\"directorActsOn\"> Основания полномочий руководителя </tui-input>\n <tui-error\n formControlName=\"directorActsOn\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Юридический адрес\n <tui-input formControlName=\"legalAddress\">\n Юридический адрес\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"legalAddress\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Почтовый адрес\n <tui-input formControlName=\"postalAddress\">\n Почтовый адрес\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"postalAddress\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Фактический адрес\n <tui-input formControlName=\"actualAddress\">\n Фактический адрес\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"actualAddress\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </ng-container>\n <ng-container *ngIf=\"opfListEnum[selectOpf] > opfListEnum.entrepreneur\">\n <label tuiLabel>\n КПП организации\n <tui-input formControlName=\"kpp\">\n КПП организации\n <input\n tuiTextfieldLegacy\n [maskito]=\"kppMask\"\n autocomplete=\"kpp\"\n />\n </tui-input>\n <tui-error\n formControlName=\"kpp\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </ng-container>\n <ng-container *ngIf=\"opfListEnum[selectOpf] > opfListEnum.legal\">\n <label tuiLabel>\n Страна регистрации юридического лица\n <tui-select\n formControlName=\"registrationCountryId\"\n [valueContent]=\"CountryContent\"\n >\n Страна регистрации юридического лица\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getCountries$() | async; let index = index\"\n tuiOption\n [value]=\"item.id\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #CountryContent\n let-data\n >\n <div>{{ (getCountriesById$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error\n formControlName=\"registrationCountryId\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Регистрационный номер юридического лица\n <tui-input formControlName=\"registrationNumber\"> Регистрационный номер юридического лица </tui-input>\n <tui-error\n formControlName=\"registrationNumber\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Налоговый номер юридического лица\n <tui-input formControlName=\"taxNumber\"> Налоговый номер юридического лица </tui-input>\n <tui-error\n formControlName=\"taxNumber\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </ng-container>\n </ng-container>\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { ScISuggestionType } from '@snabcentr/client-core';\n\n/**\n * Компонент формы контактного лица.\n */\n@Component({\n selector: 'sc-new-contact-form',\n templateUrl: './sc-new-contact-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewContactFormComponent {\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Группа с полями контактного лица.\n */\n @Input()\n public form: FormGroup<{\n name: FormControl<string | null>;\n phone: FormControl<string | null>;\n email: FormControl<string | null>;\n position: FormControl<string | null>;\n }>;\n}\n","<div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel>\n Ф.И.О.\n <tui-input formControlName=\"name\">\n Ф.И.О.\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Телефон\n <tui-input-phone formControlName=\"phone\"> Телефон </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Адрес электронной почты\n <tui-input formControlName=\"email\">\n Адрес электронной почты\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <label tuiLabel>\n Должность контактного лица\n <tui-input formControlName=\"position\"> Должность контактного лица </tui-input>\n <tui-error\n formControlName=\"position\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n</div>\n","/* eslint-disable lodash/prefer-lodash-method,@typescript-eslint/no-unnecessary-condition,class-methods-use-this,@typescript-eslint/no-explicit-any,@typescript-eslint/unbound-method,no-restricted-syntax */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n IAuthToken,\n ScAuthService,\n ScConvertersService,\n ScIReferencesTypes,\n ScISuggestionType,\n ScIUserOnDataCreate,\n ScOpfList,\n ScReferencesService,\n ScSuggestion,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n ScUserService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { tuiDropdownOptionsProvider } from '@taiga-ui/core';\nimport { catchError, distinctUntilChanged, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { scBicValidator, scCorrespondentAccountValidator, scPasswordConfirmMatchingValidator } from '../../validators';\nimport { ApiErrorResponse, ScBankAccountFormGroup, ScContactFormGroup } from '../interfaces';\n\n/**\n * Компонент формы регистрация пользователя.\n */\n@Component({\n selector: 'sc-sign-up-form',\n templateUrl: './sc-sign-up-form.component.html',\n providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSignUpFormComponent implements OnInit {\n /**\n * Поле ввода организационно-правовых форм.\n */\n public opfControl: FormControl<keyof typeof ScOpfList | null> = new FormControl<keyof typeof ScOpfList>('individual', Validators.required);\n\n /**\n * Группа полей ввода для формы регистрации.\n */\n public form = new FormGroup(\n {\n name: new FormControl<string | null>(null, [Validators.required, Validators.minLength(3)]),\n email: new FormControl<string | null>(null, [Validators.required, Validators.email]),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n verificationCode: new FormControl<string | null>(null, [Validators.required, Validators.minLength(6)]),\n cityId: new FormControl<number | null>(null, Validators.required),\n password: new FormControl<string | null>(null, [Validators.required, Validators.minLength(8)]),\n passwordConfirm: new FormControl<string | null>(null, [Validators.required, Validators.minLength(8)]),\n getNews: new FormControl<boolean>(false),\n acceptRules: new FormControl<boolean>(false, Validators.requiredTrue),\n contragent: new FormGroup<any>({}),\n },\n {\n validators: scPasswordConfirmMatchingValidator('password', 'passwordConfirm'),\n }\n );\n\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Перечисление организационно-правовых форм.\n */\n public readonly opfListEnum: typeof ScOpfList = ScOpfList;\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса данных регистрации.\n */\n private readonly request$ = this.onSubmit.pipe(\n tap(() => {\n tuiMarkControlAsTouchedAndValidate(this.form);\n }),\n filter(() => this.form.valid),\n map(() => this.form.value as ScIUserOnDataCreate),\n tap((value) => {\n this.createBaseContragent(value);\n }),\n switchMap((value) =>\n this.userService.signUp$(this.convertersService.removeNullRecursive(value)).pipe(\n switchMap(() => this.authService.getSignIn$({ login: value.email, password: value.password })),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n\n this.stepIndex = this.steps.findIndex((_, index) => !this.canNextStep(index));\n }\n\n return of({} as IAuthToken);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * Индекс этапа.\n */\n public stepIndex: number = 0;\n\n /**\n * {@link Observable} изменения состояния загрузки данных.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Сигнал события аутентификации после успешной регистрации.\n */\n @Output()\n public readonly successAuth: Observable<boolean> = this.authService.getAuthChange().pipe(filter((state) => state));\n\n /**\n * Сигнал нажатия на \"Договор оферты\".\n */\n @Output()\n public readonly clickOfferEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Список этапов регистрации.\n */\n readonly steps: string[] = ['Данные о клиенте', 'Общие данные контрагента', 'Контакты пользователя', 'Банковские реквизиты пользователя'];\n\n /**\n * Инициализирует экземпляр класса {@link ScSignUpFormComponent}.\n *\n * @param userService Сервис данных о пользователе.\n * @param authService Сервис аутентификации.\n * @param referencesService Сервис справочников.\n * @param convertersService Сервис конвертации данных.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly userService: ScUserService,\n private readonly authService: ScAuthService,\n private readonly referencesService: ScReferencesService,\n private readonly convertersService: ScConvertersService,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {\n this.opfControl.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed()).subscribe(() => {\n this.form.patchValue({ name: null });\n this.form.get('contragent')?.reset();\n });\n }\n\n /**\n * Список групп полей банковских реквизитов.\n */\n public get bankAccounts(): FormArray<ReturnType<ScSignUpFormComponent['createBankAccountGroup']>> {\n return this.form.controls.contragent.get('bankAccounts') as FormArray;\n }\n\n /**\n * Список групп полей контактных лиц.\n */\n public get contacts(): FormArray<ReturnType<ScSignUpFormComponent['createContactGroup']>> {\n return this.form.controls.contragent.get('contacts') as FormArray;\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n (this.form as FormGroup).removeControl('contragent');\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.signUpShow,\n });\n }\n\n /**\n * Проверяет, может ли пользователь перейти к следующему шагу регистрации.\n * При проверке каждого этапа регистрации последовательно проверяется корректность заполнения данных на предыдущих этапах.\n *\n * @param index Индекс этапа для которого нужно проверить валидность.\n * @returns Выводит значение `boolean` на основании {@link index}.\n */\n // eslint-disable-next-line sonarjs/cognitive-complexity\n public canNextStep(index: number): boolean {\n const { controls } = this.form;\n\n // Проверяем валидность данных пользователя.\n for (const key in controls) {\n if (Object.prototype.hasOwnProperty.call(controls, key) && key !== 'contragent' && controls[key as keyof typeof this.form.controls].invalid) {\n return false;\n }\n }\n\n // Для этапа 0 просто возвращаем true, так как данные пользователя проверены.\n if (index === 0) {\n return true;\n }\n\n // Проверяем валидность полей контрагента.\n const contragentControls = controls.contragent.controls;\n\n if (contragentControls) {\n for (const key in contragentControls) {\n if (Object.prototype.hasOwnProperty.call(contragentControls, key)) {\n // eslint-disable-next-line security/detect-object-injection\n const control = contragentControls[key];\n if (!Array.isArray(control.value) && control.invalid) {\n return false;\n }\n }\n }\n }\n\n // Для этапа 1 возвращаем true, если все поля контрагента валидны.\n if (index === 1) {\n return true;\n }\n\n // Проверяем список контактов внутри контрагента.\n if (contragentControls['contacts'].invalid) {\n return false;\n }\n\n // Для этапа 2 возвращаем true, если список контактов внутри контрагента валидный.\n if (index === 2) {\n return true;\n }\n\n // Проверяем список банковских реквизитов внутри контрагента.\n return contragentControls['bankAccounts'].valid ?? false;\n }\n\n /**\n * Выполняет навигацию по форме регистрации.\n *\n * @param delta Значение, на которое необходимо выполнить навигацию.\n */\n public navigate(delta: number): void {\n this.stepIndex = (this.stepIndex + delta) % 4;\n }\n\n /**\n * Создаёт базового контрагента для клиента физического лица.\n *\n * @param formValue Значение формы при регистрации\n */\n private createBaseContragent(formValue: ScSignUpFormComponent['form']['value']): void {\n if (this.form.invalid || this.opfControl.value !== 'individual') {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n formValue.contragent = {\n name: this.form.controls.name.value,\n opf: 'individual',\n salesDirectionId: 1,\n contacts: [\n {\n name: this.form.controls.name.value,\n phone: this.form.controls.phone.value,\n email: this.form.controls.email.value,\n },\n ],\n };\n }\n\n /**\n * Возвращает {@link Observable} список организационно-правовых форм.\n */\n public getOpf$(): Observable<Array<ScIReferencesTypes<ScOpfList, typeof ScOpfList>>> {\n return this.referencesService.opf$;\n }\n\n /**\n * Возвращает {@link Observable} организационно-правовой формы, соответствующий символьному обозначению (slug) на входе.\n *\n * @param slug Символьное обозначение (slug).\n */\n public getOpfBySlug$(slug: keyof typeof ScOpfList): Observable<ScIReferencesTypes<ScOpfList, typeof ScOpfList> | undefined> {\n return this.referencesService.getOpfBySlug$(slug);\n }\n\n /**\n * Создаёт группу полей банковских реквизитов.\n */\n private createBankAccountGroup(): ScBankAccountFormGroup {\n return new FormGroup({\n bankName: new FormControl<string | null>(null, Validators.required),\n bic: new FormControl<string | null>(null, [Validators.required, Validators.minLength(9), scBicValidator]),\n accountNumber: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20)]),\n correspondentAccount: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20), scCorrespondentAccountValidator]),\n currencyId: new FormControl<number | null>(null, Validators.required),\n });\n }\n\n /**\n * Добавляет Банковские реквизиты.\n */\n public addBankAccountGroup(): void {\n this.bankAccounts.push(this.createBankAccountGroup());\n }\n\n /**\n * Удаляет банковские реквизиты.\n *\n * @param index Индекс банковских реквизитов.\n */\n public removeBankAccountGroup(index: number): void {\n this.bankAccounts.removeAt(index);\n }\n\n /**\n * Создаёт группу полей контактного лица.\n */\n public createContactGroup(): ScContactFormGroup {\n return new FormGroup({\n name: new FormControl<string | null>(null, Validators.required),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n email: new FormControl<string | null>(null, Validators.email),\n position: new FormControl<string | null>(null, Validators.required),\n });\n }\n\n /**\n * Обработчик выбора адреса доставки.\n *\n * @param suggestion Объект подсказки ареса.\n */\n public onSelectedOrganization(suggestion: ScSuggestion): void {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.form.controls.contragent && 'inn' in suggestion && !('bic' in suggestion)) {\n if (suggestion.opf && suggestion.opf.slug !== this.opfControl.value) {\n this.opfControl.patchValue(suggestion.opf.slug as keyof typeof ScOpfList, { emitEvent: false });\n this.form.controls.contragent.patchValue({\n opf: suggestion.opf.slug as keyof typeof ScOpfList,\n });\n }\n\n this.form.controls.contragent.patchValue({\n name: suggestion.name,\n inn: suggestion.inn,\n kpp: suggestion.kpp ?? null,\n okpo: suggestion.okpo ?? null,\n directorName: suggestion.directorName ?? null,\n directorPosition: suggestion.directorPosition ?? null,\n legalAddress: suggestion.legalAddress ?? null,\n postalAddress: suggestion.postalAddress ?? null,\n actualAddress: suggestion.actualAddress ?? null,\n });\n\n this.form.controls.contragent.markAllAsTouched();\n this.form.get(['contragent', 'contacts'])?.markAsUntouched();\n this.form.get(['contragent', 'bankAccounts'])?.markAsUntouched();\n }\n }\n\n /**\n * Добавляет контактное лицо контрагента.\n */\n public addContactGroup(): void {\n this.contacts.push(this.createContactGroup());\n }\n\n /**\n * Удаляет контактное лицо контрагента.\n *\n * @param index Индекс контактного лица.\n */\n public removeContactGroup(index: number): void {\n this.contacts.removeAt(index);\n }\n\n /**\n * Обрабатывает событие нажатия на \"Договор оферты\".\n */\n public onClickOffer(): void {\n this.clickOfferEvent.emit();\n }\n}\n","<form\n *tuiLet=\"opfControl.value as selectOpf\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n>\n <ng-container *tuiLet=\"!!selectOpf && opfListEnum[selectOpf] === opfListEnum.individual as isIndividual\">\n <tui-stepper\n *ngIf=\"!isIndividual && form.controls.contragent\"\n [(activeItemIndex)]=\"stepIndex\"\n >\n <button\n *tuiRepeatTimes=\"let index of 4\"\n [stepState]=\"index && !canNextStep(index) ? 'error' : 'pass'\"\n [attr.disabled]=\"index && !canNextStep(index - 1) ? '' : null\"\n type=\"button\"\n tuiStep\n >\n {{ steps[index] }}\n </button>\n </tui-stepper>\n <tui-elastic-container>\n <div\n [class.!hidden]=\"stepIndex !== 0\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel>\n Тип клиента\n <tui-select\n [formControl]=\"opfControl\"\n [valueContent]=\"opfContent\"\n >\n Тип клиента\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getOpf$() | async; let index = index\"\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n </label>\n <label tuiLabel>\n {{ isIndividual ? 'Ф.И.О.' : 'Название организации или ИП' }}\n <tui-input formControlName=\"name\">\n {{ isIndividual ? 'Ф.И.О.' : 'Название организации или ИП' }}\n <ng-container *ngIf=\"!isIndividual\">\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n (selectedClick)=\"onSelectedOrganization($event)\"\n ></sc-suggestion-field>\n </ng-container>\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <sc-verification-phone-check-form [shouldBeBusy]=\"false\"></sc-verification-phone-check-form>\n <label tuiLabel\n >Адрес электронной почты\n <tui-input formControlName=\"email\">\n Адрес электронной почты\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n\n <sc-addresses-selection-field></sc-addresses-selection-field>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <label tuiLabel>\n Пароль\n <tui-input-password formControlName=\"password\">\n Пароль\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Повтор пароля\n <tui-input-password formControlName=\"passwordConfirm\">\n Повтор пароля\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"passwordConfirm\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n ></tui-error>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n />\n Я хочу получать рассылку Снабцентр о скидках и новостях по электронной почте.\n </label>\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n required=\"true\"\n formControlName=\"acceptRules\"\n />\n <div>\n <span>\n Регистрируясь на сайте, я соглашаюсь с\n <a\n tuiLink\n [pseudo]=\"true\"\n (click)=\"$event.preventDefault(); onClickOffer()\"\n >Договором оферты</a\n >.</span\n >\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </div>\n </label>\n </div>\n </div>\n <ng-container *ngIf=\"!isIndividual\">\n <sc-new-contragent-form\n [opfControl]=\"opfControl\"\n [class.!hidden]=\"stepIndex !== 1\"\n ></sc-new-contragent-form>\n\n <div [class.!hidden]=\"stepIndex !== 2\">\n <div\n *ngIf=\"contacts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">Контакты</p>\n <div\n *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">Контактное лицо №{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contact-form [form]=\"contact\"></sc-new-contact-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n Добавить контакт\n </button>\n </div>\n </div>\n\n <div [class.!hidden]=\"stepIndex !== 3\">\n <div\n *ngIf=\"bankAccounts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">Банковские реквизиты</p>\n <div\n *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">Банковские реквизиты №{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contragent-bank-account-form [form]=\"bankAccount\"></sc-new-contragent-bank-account-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n Добавить банковские реквизиты\n </button>\n </div>\n </div>\n </ng-container>\n </tui-elastic-container>\n <div class=\"flex justify-center gap-2\">\n <button\n *ngIf=\"stepIndex > 0\"\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"navigate(-1)\"\n >\n Назад\n </button>\n <button\n *ngIf=\"isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3; else nextIndexBtn\"\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n class=\"self-center\"\n >\n Зарегистрироваться\n </button>\n <ng-template #nextIndexBtn>\n <button\n tuiButton\n type=\"button\"\n [disabled]=\"!canNextStep(stepIndex)\"\n (click)=\"navigate(1)\"\n >\n Далее\n </button>\n </ng-template>\n </div>\n </ng-container>\n</form>\n","import { Directive } from '@angular/core';\nimport { PolymorpheusTemplate } from '@taiga-ui/polymorpheus';\n\n/**\n * Директива содержимого компонента, позволяющего отображать и скрывать содержимое в разделах.\n */\n@Directive({\n selector: 'ng-template[scAccordionContent]',\n})\nexport class ScAccordionContentDirective extends PolymorpheusTemplate<Record<string, unknown>> {}\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';\nimport { TuiSizeS } from '@taiga-ui/core';\nimport { TuiAccordionItem } from '@taiga-ui/kit';\n\nimport { ScAccordionContentDirective } from './sc-accordion-content.directive';\n\n/**\n * Компонент, позволяющий отображать и скрывать содержимое в разделах.\n */\n@Component({\n selector: 'sc-accordion',\n templateUrl: './sc-accordion.component.html',\n styleUrls: ['./sc-accordion.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAccordionComponent {\n /**\n * Состояние отображения кнопки добавления.\n */\n @Input()\n @HostBinding('class._has-add-button')\n public showAddButton = true;\n\n /**\n * Состояние отображения кнопки удаления.\n */\n @Input()\n @HostBinding('class._has-delete-button')\n public showDeleteButton: boolean = false;\n\n /**\n * Состояние отображения стрелки.\n */\n @Input()\n @HostBinding('class._has-arrow')\n public showArrow: boolean = true;\n\n /**\n * Состояние открытия содержимого компонента.\n */\n @Input()\n public open: boolean = false;\n\n /**\n * Размер элементов {@link TuiAccordionItemComponent}.\n */\n @Input()\n @HostBinding('attr.data-size')\n public size: TuiSizeS = 's';\n\n /**\n * Дочерний элемент контента.\n */\n @ContentChild(ScAccordionContentDirective)\n protected readonly content?: ScAccordionContentDirective;\n\n /**\n * Ссылка на шаблон превью-просмотра в разметке.\n */\n @ViewChild(TuiAccordionItem)\n public readonly accordion?: TuiAccordionItem;\n\n /**\n * Событие нажатия на кнопку добавления.\n */\n @Output()\n public addButtonClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления.\n */\n @Output()\n public deleteButtonClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Закрывает акордион.\n */\n public close(): void {\n this.accordion?.close();\n }\n}\n","<tui-accordion [rounded]=\"false\">\n <tui-accordion-item\n #accordion\n [size]=\"size\"\n [borders]=\"null\"\n [showArrow]=\"showArrow\"\n [open]=\"open\"\n >\n <div class=\"flex grow justify-between\">\n <div class=\"self-center font-bold\">\n <ng-content></ng-content>\n </div>\n <div\n *ngIf=\"showAddButton || showDeleteButton\"\n class=\"flex\"\n >\n <ng-container *ngIf=\"showDeleteButton\">\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n iconStart=\"@tui.trash-2\"\n appearance=\"secondary\"\n (click)=\"$event.stopPropagation(); deleteButtonClick.emit()\"\n ></button>\n </ng-container>\n <ng-container *ngIf=\"showAddButton\">\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"$event.stopPropagation(); addButtonClick.emit()\"\n ></button>\n </ng-container>\n </div>\n </div>\n <ng-template tuiAccordionItemContent>\n <tui-elastic-container *ngIf=\"content\">\n <ng-container *polymorpheusOutlet=\"content as text\">\n {{ text }}\n </ng-container>\n </tui-elastic-container>\n </ng-template>\n </tui-accordion-item>\n</tui-accordion>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiButton } from '@taiga-ui/core';\nimport { TuiAccordion, TuiElasticContainer } from '@taiga-ui/kit';\nimport { PolymorpheusOutlet, PolymorpheusTemplate } from '@taiga-ui/polymorpheus';\n\nimport { ScAccordionComponent } from './sc-accordion.component';\nimport { ScAccordionContentDirective } from './sc-accordion-content.directive';\n\n/**\n * Модуль для отображение контента разделами, с возможностью скрывать и отображать содержимое.\n */\n@NgModule({\n declarations: [ScAccordionComponent, ScAccordionContentDirective],\n imports: [CommonModule, PolymorpheusTemplate, PolymorpheusOutlet, TuiButton, ...TuiAccordion, TuiElasticContainer],\n exports: [ScAccordionComponent, ScAccordionContentDirective],\n})\nexport class ScAccordionModule {}\n","/* eslint-disable class-methods-use-this */\n\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { ScPhoneService } from '@snabcentr/client-core';\n\n/**\n * Пайп для форматирования номера телефона.\n *\n * Если переданный номер телефона валиден, он будет отформатирован с использованием метода `formatPhoneNumber` сервиса `ScPhoneService`.\n * Если номер невалиден, возвращается исходное значение.\n */\n@Pipe({\n standalone: true,\n name: 'scPhoneFormat',\n})\nexport class ScPhoneFormatPipe implements PipeTransform {\n /**\n * Преобразует строковое значение номера телефона.\n *\n * @param value Строка, содержащая номер телефона.\n * @param format Формат возвращаемого значения. `normal` - удобочитаемое представление номера телефона, `clean` - очищенное от лишних символов представление номера телефона, `cleanWithPlus` - очищенное от лишних символов представление номера телефона с `+` в начале.\n *\n * @returns Отформатированный номер телефона, если он валиден, или исходное значение, если он невалиден.\n */\n public transform(value: string, format: 'normal' | 'clean' | 'cleanWithPlus' = 'normal'): string {\n if (ScPhoneService.isValidPhoneNumber(value)) {\n // eslint-disable-next-line default-case\n switch (format) {\n case 'normal':\n return ScPhoneService.formatPhoneNumber(value);\n case 'clean':\n return ScPhoneService.cleanPhoneNumber(value);\n case 'cleanWithPlus':\n return `+${ScPhoneService.cleanPhoneNumber(value)}`;\n }\n }\n\n return value; // Возвращаем оригинальный номер, если он невалиден.\n }\n}\n","import { Directive, ElementRef, HostListener, inject, Input } from '@angular/core';\nimport { ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';\n\nimport { ScLinkLocation } from './sc-link-location';\n\n/**\n * Директива, которая управляет свойствами ссылки адреса электронной почты.\n */\n@Directive({\n standalone: true,\n selector: 'a[scEmailLink]',\n})\nexport class ScEmailLinkDirective {\n /**\n * Ссылка на HTML элемент тега `<a>`.\n */\n private elementReference: ElementRef<HTMLAnchorElement> = inject<ElementRef<HTMLAnchorElement>>(ElementRef);\n\n /**\n * Условное название блока где расположена ссылка.\n */\n @Input({ required: true })\n public linkLocation!: ScLinkLocation;\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Обработчик клика по ссылке.\n */\n @HostListener('click')\n private click(): void {\n const email = /mailto:([^?]+)/.exec(this.elementReference.nativeElement.href)?.at(1);\n\n if (email) {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.emailClick,\n params: {\n emailLocation: this.linkLocation,\n email: email,\n },\n });\n }\n }\n}\n","import { Directive, ElementRef, HostListener, inject, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\nimport { ScPhoneService, ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';\n\nimport { ScLinkLocation } from './sc-link-location';\n\n/**\n * Директива, которая управляет свойствами ссылки номера телефона для валидации значения номера телефона.\n */\n@Directive({\n standalone: true,\n selector: 'a[scTelLink]',\n})\nexport class ScTelLinkDirective implements OnChanges {\n /**\n * Экземпляр базового класса для реализации пользовательского рендеринга.\n */\n private readonly renderer: Renderer2 = inject(Renderer2);\n\n /**\n * Ссылка на HTML элемент тега `<a>`.\n */\n private elementReference: ElementRef<HTMLAnchorElement> = inject<ElementRef<HTMLAnchorElement>>(ElementRef);\n\n /**\n * Номер телефона, который будет проверен на валидность.\n */\n @Input({ alias: 'scTelLink', required: true })\n public tel!: string;\n\n /**\n * Условное название блока где расположена ссылка.\n */\n @Input({ required: true })\n public linkLocation!: ScLinkLocation;\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /** @inheritDoc */\n public ngOnChanges(changes: SimpleChanges): void {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (changes['tel']) {\n this.updateLinkState();\n }\n }\n\n /**\n * Обработчик клика по ссылке.\n */\n @HostListener('click')\n private click(): void {\n if (ScPhoneService.isValidPhoneNumber(this.tel)) {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.phoneClick,\n params: {\n phoneLocation: this.linkLocation,\n phone: this.tel,\n },\n });\n }\n }\n\n /**\n * Обновляет состояние ссылки на основе валидности номера телефона.\n */\n private updateLinkState(): void {\n if (ScPhoneService.isValidPhoneNumber(this.tel)) {\n // Если номер валиден, активируем ссылку.\n this.renderer.removeAttribute(this.elementReference.nativeElement, 'aria-disabled');\n this.renderer.removeClass(this.elementReference.nativeElement, 'disabled');\n this.renderer.setAttribute(this.elementReference.nativeElement, 'href', `tel:${ScPhoneService.formatPhoneNumber(this.tel)}`);\n } else {\n // Если номер невалиден, отключаем ссылку.\n this.renderer.setAttribute(this.elementReference.nativeElement, 'aria-disabled', 'true');\n this.renderer.addClass(this.elementReference.nativeElement, 'disabled');\n this.renderer.removeAttribute(this.elementReference.nativeElement, 'href');\n }\n }\n}\n","import { ScPhoneFormatPipe } from '../../pipes/sc-phone-format';\nimport { ScEmailLinkDirective } from './sc-email-link.directive';\nimport { ScTelLinkDirective } from './sc-tel-link.directive';\n\n/**\n * Список директив ссылок.\n */\nexport const ScLinks = [ScTelLinkDirective, ScEmailLinkDirective, ScPhoneFormatPipe] as const;\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MaskitoDirective } from '@maskito/angular';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLoader } from '@taiga-ui/core';\nimport { TuiDataListWrapper, TuiFieldErrorPipe, TuiFilterByInputPipe, TuiStringifyContentPipe } from '@taiga-ui/kit';\nimport { TuiComboBoxModule, TuiInputModule, TuiInputPhoneModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScAddressesSelectionFieldComponent } from './addresses-selection-field/sc-addresses-selection-field.component';\nimport { ScSuggestionFieldComponent } from './suggestion-field/sc-suggestion-field.component';\n\n/**\n * Модуль полей ввода.\n */\n@NgModule({\n declarations: [ScAddressesSelectionFieldComponent, ScSuggestionFieldComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TuiInputModule,\n TuiTextfieldControllerModule,\n TuiLabel,\n TuiLet,\n TuiFieldErrorPipe,\n TuiError,\n ...TuiDataList,\n TuiLoader,\n TuiComboBoxModule,\n ...TuiDataListWrapper,\n TuiFilterByInputPipe,\n TuiStringifyContentPipe,\n TuiInputPhoneModule,\n TuiButton,\n MaskitoDirective,\n ],\n exports: [ScAddressesSelectionFieldComponent, ScSuggestionFieldComponent],\n})\nexport class ScFormFieldsModule {}\n","/* eslint-disable no-restricted-syntax,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n ScContactsService,\n ScConvertersService,\n ScIBankAccount,\n ScIContactBase,\n ScIContactOnDataCreate,\n ScIContactWithRelations,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\n\n/**\n * Компонент формы создания нового контактного лица.\n */\n@Component({\n selector: 'sc-add-contact-dialog',\n templateUrl: './sc-add-contact-dialog.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddContactDialogComponent implements AfterViewInit {\n /**\n * Группа с полями контактного лица.\n */\n public form = new FormGroup<{\n name: FormControl<string | null>;\n phone: FormControl<string | null>;\n email: FormControl<string | null>;\n position: FormControl<string | null>;\n }>({\n name: new FormControl<string | null>(null, Validators.required),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n email: new FormControl<string | null>(null, Validators.email),\n position: new FormControl<string | null>(null, Validators.required),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса добавления контактного лица.\n */\n private readonly request$ = this.onSubmit.pipe(\n map(() => this.form.value),\n filter((value): value is ScIContactOnDataCreate => this.form.valid),\n map((value) => this.convertersService.removeNull<ScIContactOnDataCreate>({ ...value, ...this.context.data })),\n switchMap((data) => {\n return this.contactsService.createContact$(data).pipe(\n tap((contact) => {\n this.context.completeWith(contact);\n }),\n catchError((error: unknown) => {\n tuiMarkControlAsTouchedAndValidate(this.form);\n\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n }\n return of({} as ScIBankAccount);\n }),\n startWith(null)\n );\n }),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по номеру телефона.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScAddContactDialogComponent}.\n *\n * @param contactsService Сервис для работы с контактными лицами.\n * @param convertersService Сервис конвертации данных.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n private readonly contactsService: ScContactsService,\n public readonly convertersService: ScConvertersService,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context: TuiDialogContext<ScIContactWithRelations, Omit<ScIContactOnDataCreate, keyof ScIContactBase>>\n ) {}\n\n /** @inheritdoc */\n public ngAfterViewInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileContactAddShow,\n });\n }\n}\n","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-3\"\n>\n <sc-new-contact-form [form]=\"form\"></sc-new-contact-form>\n <div class=\"flex justify-center gap-4\">\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n iconStart=\"@tui.x\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.save\"\n >\n Сохранить\n </button>\n </div>\n</form>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ScIContact } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент контактного лица в списке.\n */\n@Component({\n selector: 'sc-contacts-accordion',\n templateUrl: './sc-contacts-accordion.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScContactsAccordionComponent {\n /**\n * Контактные лица.\n */\n @Input()\n public contacts$: Observable<ScIContact[] | null>;\n\n /**\n * Событие нажатия на кнопку добавления контактного лица.\n */\n @Output()\n public addContactClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица.\n */\n @Output()\n public deleteButtonClick: EventEmitter<ScIContact> = new EventEmitter<ScIContact>();\n}\n","<sc-accordion (addButtonClick)=\"addContactClick.emit()\">\n Контакты\n <ng-template scAccordionContent>\n <tui-loader\n *tuiLet=\"contacts$ | async as contacts\"\n [overlay]=\"true\"\n [showLoader]=\"contacts === null\"\n >\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!contacts || contacts.length; else contactsNotExist\">\n <div\n *ngFor=\"let contact of contacts\"\n class=\"flex gap-2 border-b border-tui-base-03\"\n >\n <div class=\"flex grow flex-col gap-2\">\n {{ contact.name }}\n <a\n *ngIf=\"contact.phone\"\n tuiLink\n [scTelLink]=\"contact.phone\"\n linkLocation=\"contact\"\n iconStart=\"@tui.phone\"\n [pseudo]=\"true\"\n href=\"tel:{{ contact.phone | scPhoneFormat }}\"\n >\n {{ contact.phone | scPhoneFormat }}\n </a>\n <a\n *ngIf=\"contact.email\"\n tuiLink\n scEmailLink\n linkLocation=\"contact\"\n iconStart=\"@tui.mail\"\n [pseudo]=\"true\"\n href=\"mailto:{{ contact.email }}\"\n >\n {{ contact.email }}\n </a>\n </div>\n <!-- Функционал удаления временно не доступен пользователю. -->\n <!-- <div class=\"flex flex-col md:flex-row gap-1\">\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"@tui.trash-2\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteButtonClick.emit(contact)\"\n ></button>\n </div> -->\n </div>\n </ng-container>\n\n <ng-template #contactsNotExist>\n <tui-notification size=\"l\">\n <div>\n <div class=\"flex flex-wrap gap-2 font-medium\">Контакты не указаны.</div>\n </div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n</sc-accordion>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MaskitoDirective } from '@maskito/angular';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLink, TuiLoader, TuiNotification } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiDataListWrapper, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule, TuiSelectModule } from '@taiga-ui/legacy';\n\nimport { ScAccordionModule } from '../accordion';\nimport { ScLinks } from '../directives/links/sc-links';\nimport { ScFormFieldsModule } from '../form-fields/form-fields.module';\nimport { ScAddContactDialogComponent } from './add-contact-dialog/sc-add-contact-dialog.component';\nimport { ScContactsAccordionComponent } from './contacts-accordion/sc-contacts-accordion.component';\nimport { ScNewContactFormComponent } from './new-contact-form/sc-new-contact-form.component';\n\n/**\n * Модуль контактных лиц.\n */\n@NgModule({\n declarations: [ScContactsAccordionComponent, ScNewContactFormComponent, ScAddContactDialogComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ScAccordionModule,\n TuiButton,\n TuiLoader,\n TuiLet,\n TuiNotification,\n TuiLink,\n ScFormFieldsModule,\n MaskitoDirective,\n TuiFieldErrorPipe,\n TuiSelectModule,\n ...TuiDataList,\n ...TuiDataListWrapper,\n TuiLabel,\n TuiInputModule,\n TuiInputPhoneModule,\n TuiError,\n ...ScLinks,\n TuiButtonLoading,\n ],\n exports: [ScContactsAccordionComponent, ScNewContactFormComponent, ScAddContactDialogComponent],\n})\nexport class ScContactsModule {}\n","/* eslint-disable no-restricted-syntax,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ScContragentService, ScIBankAccount, ScIBankAccountOnDataCreate } from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { scBicValidator, scCorrespondentAccountValidator } from '../../validators';\n\n/**\n * Компонент формы создания нового банковского счета контрагента.\n */\n@Component({\n selector: 'sc-add-contragent-bank-account-dialog',\n templateUrl: './sc-add-contragent-bank-account-dialog.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddContragentBankAccountsDialogComponent {\n /**\n * Группа с полем банковских реквизитов.\n */\n public form = new FormGroup<{\n bankName: FormControl<string | null>;\n bic: FormControl<string | null>;\n accountNumber: FormControl<string | null>;\n correspondentAccount: FormControl<string | null>;\n currencyId: FormControl<number | null>;\n }>({\n bankName: new FormControl<string | null>(null, Validators.required),\n bic: new FormControl<string | null>(null, [Validators.required, Validators.minLength(9), scBicValidator]),\n accountNumber: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20)]),\n correspondentAccount: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20), scCorrespondentAccountValidator]),\n currencyId: new FormControl<number | null>(null, Validators.required),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса создания банковского счёта контрагента.\n */\n private readonly request$ = this.onSubmit.pipe(\n map(() => this.form.value),\n filter((value): value is ScIBankAccountOnDataCreate => this.form.valid),\n switchMap((value) => {\n return this.contragentService.createContragentBankAccount$(this.context.data.contragentId, value).pipe(\n tap((bankAccount) => {\n this.context.completeWith(bankAccount);\n }),\n catchError((error: unknown) => {\n tuiMarkControlAsTouchedAndValidate(this.form);\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n }\n\n return of({} as ScIBankAccount);\n }),\n startWith(null)\n );\n }),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по номеру телефона.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScAddContragentBankAccountsFormComponent}.\n *\n * @param contragentService Сервис работы с контрагентами.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n private readonly contragentService: ScContragentService,\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context: TuiDialogContext<ScIBankAccount, { contragentId: number }>\n ) {}\n}\n","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-3\"\n>\n <sc-new-contragent-bank-account-form [form]=\"form\"></sc-new-contragent-bank-account-form>\n <div class=\"flex justify-center gap-4\">\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n iconStart=\"@tui.x\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.save\"\n >\n Сохранить\n </button>\n </div>\n</form>\n","/* eslint-disable class-methods-use-this,@typescript-eslint/unbound-method,no-restricted-syntax */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, Inject, Optional } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n ScContragent,\n ScContragentOnDataCreate,\n ScContragentService,\n ScConvertersService,\n ScIBankAccount,\n ScICountry,\n ScICurrency,\n ScIReferencesTypes,\n ScISalesDirection,\n ScLocationsService,\n ScOpfList,\n ScReferencesService,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { scBicValidator, scCorrespondentAccountValidator } from '../../validators';\n\n/**\n * Компотен добавления контрагента.\n */\n@Component({\n selector: 'sc-add-contragent-dialog',\n templateUrl: './sc-add-contragent-dialog.component.html',\n styleUrls: ['./sc-add-contragent-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddContragentDialogComponent implements AfterViewInit {\n /**\n * Перечисление организационно-правовых форм.\n */\n public readonly opfListEnum: typeof ScOpfList = ScOpfList;\n\n /**\n * Расположение баннера.\n */\n public stepIndex = 0;\n\n /**\n * Родительская `FormGroup`.\n */\n public form = new FormGroup({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n contragent: new FormGroup<any>({}),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса добавления контрагента.\n */\n private readonly request$ = this.onSubmit.pipe(\n map(() => this.form.value.contragent as ScContragentOnDataCreate),\n filter((value): value is ScContragentOnDataCreate => this.form.valid),\n switchMap((value) => {\n return this.contragentService.createContragent$(this.convertersService.removeNullRecursive(value)).pipe(\n tap((contragent) => {\n this.context.completeWith(contragent);\n }),\n catchError((error: unknown) => {\n tuiMarkControlAsTouchedAndValidate(this.form);\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n\n this.stepIndex = 0;\n }\n\n return of({} as ScIBankAccount);\n }),\n startWith(null)\n );\n }),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по номеру телефона.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScAddContragentDialogComponent}.\n *\n * @param referencesService Сервис справочников.\n * @param contragentService Сервис работы с контрагентами.\n * @param convertersService Сервис конвертации данных.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param locationsService Сервис для получения списков стран, регионов, городов.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n private readonly referencesService: ScReferencesService,\n private readonly contragentService: ScContragentService,\n private readonly convertersService: ScConvertersService,\n private readonly userMetrikaService: ScUserMetrikaService,\n private readonly locationsService: ScLocationsService,\n @Optional()\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context: TuiDialogContext<ScContragent, void>\n ) {}\n\n /** @inheritdoc */\n public ngAfterViewInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileContragentAddShow,\n });\n }\n\n /**\n * Текущий выбранный ОПФ.\n */\n public get selectOpf(): ScOpfList {\n return this.opfListEnum[this.form.controls.contragent.controls['opf'].value as keyof typeof ScOpfList];\n }\n\n /**\n * Список групп полей банковских реквизитов.\n */\n public get bankAccounts(): FormArray<ReturnType<ScAddContragentDialogComponent['createBankAccountGroup']>> {\n return this.form.controls.contragent.get('bankAccounts') as FormArray<ReturnType<ScAddContragentDialogComponent['createBankAccountGroup']>>;\n }\n\n /**\n * Список групп полей контактных лиц.\n */\n public get contacts(): FormArray<ReturnType<ScAddContragentDialogComponent['createContactGroup']>> {\n return this.form.controls.contragent.get('contacts') as FormArray<ReturnType<ScAddContragentDialogComponent['createContactGroup']>>;\n }\n\n /**\n * Выполняет навигацию по форме создания контрагента.\n *\n * @param delta Значение, на которое необходимо выполнить навигацию.\n */\n public navigate(delta: number): void {\n this.stepIndex = (this.stepIndex + delta) % 3;\n }\n\n /**\n * Проверяет, может ли пользователь перейти к следующему шагу создания контрагента.\n *\n * @returns Выводит значение `boolean` на основании {@link stepIndex}.\n */\n public canNextStep(): boolean {\n switch (this.stepIndex) {\n case 0:\n for (const key in this.form.controls.contragent.controls) {\n if (\n Object.prototype.hasOwnProperty.call(this.form.controls.contragent.controls, key) &&\n // eslint-disable-next-line security/detect-object-injection\n !Array.isArray(this.form.controls.contragent.controls[key].value) &&\n // eslint-disable-next-line security/detect-object-injection\n this.form.controls.contragent.controls[key].invalid\n ) {\n return false;\n }\n }\n\n return true;\n case 1:\n return this.form.controls.contragent.controls['contacts'].valid;\n case 2:\n return this.form.controls.contragent.controls['bankAccounts'].valid;\n default:\n return true;\n }\n }\n\n /**\n * Возвращает {@link Observable} списка направлений продаж.\n */\n public getSalesDirections$(): Observable<ScISalesDirection[]> {\n return this.referencesService.directions$;\n }\n\n /**\n * Возвращает {@link Observable} списка направлений продаж.\n *\n * @param directionId Идентификатор направления продаж.\n */\n public getDirectionById$(directionId: number): Observable<ScISalesDirection | undefined> {\n return this.referencesService.getDirectionById$(directionId);\n }\n\n /**\n * Возвращает {@link Observable} список организационно-правовых форм.\n */\n public getOpf$(): Observable<Array<ScIReferencesTypes<ScOpfList, typeof ScOpfList>>> {\n return this.referencesService.opf$;\n }\n\n /**\n * Возвращает {@link Observable} организационно-правовой формы, соответствующий символьному обозначению (slug) на входе.\n *\n * @param slug Символьное обозначение (slug).\n */\n public getOpfBySlug$(slug: keyof typeof ScOpfList): Observable<ScIReferencesTypes<ScOpfList, typeof ScOpfList> | undefined> {\n return this.referencesService.getOpfBySlug$(slug);\n }\n\n /**\n * Возвращает {@link Observable} списка валют.\n */\n public getCurrencies$(): Observable<ScICurrency[]> {\n return this.referencesService.currencies$;\n }\n\n /**\n * Возвращает {@link Observable} валюты, соответствующий идентификатору на входе.\n *\n * @param currencyId — Идентификатор валюты.\n */\n public getCurrencyById$(currencyId: number): Observable<ScICurrency | undefined> {\n return this.referencesService.getCurrencyById$(currencyId);\n }\n\n /**\n * Возвращает {@link Observable} списка стран.\n */\n public getCountries$(): Observable<ScICountry[]> {\n return this.locationsService.getCountries$();\n }\n\n /**\n * Возвращает {@link Observable} страны, соответствующий идентификатору на входе.\n *\n * @param countryId — Идентификатор страны.\n */\n public getCountriesById$(countryId: number): Observable<ScICountry | undefined> {\n return this.locationsService.getCountries$().pipe(map((countries) => countries.find((country) => country.id === countryId)));\n }\n\n /**\n * Создаёт группу полей банковских реквизитов.\n */\n private createBankAccountGroup(): FormGroup<{\n bankName: FormControl<string | null>;\n bic: FormControl<string | null>;\n accountNumber: FormControl<string | null>;\n correspondentAccount: FormControl<string | null>;\n currencyId: FormControl<number | null>;\n }> {\n return new FormGroup({\n bankName: new FormControl<string | null>(null, Validators.required),\n bic: new FormControl<string | null>(null, [Validators.required, Validators.minLength(9), scBicValidator]),\n accountNumber: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20)]),\n correspondentAccount: new FormControl<string | null>(null, [Validators.required, Validators.minLength(20), scCorrespondentAccountValidator]),\n currencyId: new FormControl<number | null>(null, Validators.required),\n });\n }\n\n /**\n * Добавляет Банковские реквизиты.\n */\n public addBankAccountGroup(): void {\n this.bankAccounts.push(this.createBankAccountGroup());\n }\n\n /**\n * Удаляет банковские реквизиты.\n *\n * @param index Индекс банковских реквизитов.\n */\n public removeBankAccountGroup(index: number): void {\n this.bankAccounts.removeAt(index);\n }\n\n /**\n * Создаёт группу полей контактного лица.\n */\n public createContactGroup(): FormGroup<{\n name: FormControl<string | null>;\n phone: FormControl<string | null>;\n email: FormControl<string | null>;\n position: FormControl<string | null>;\n }> {\n return new FormGroup({\n name: new FormControl<string | null>(null, Validators.required),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n email: new FormControl<string | null>(null, Validators.email),\n position: new FormControl<string | null>(null, Validators.required),\n });\n }\n\n /**\n * Добавляет контактное лицо контрагента.\n */\n public addContactGroup(): void {\n this.contacts.push(this.createContactGroup());\n }\n\n /**\n * Удаляет контактное лицо контрагента.\n *\n * @param index Индекс контактного лица.\n */\n public removeContactGroup(index: number): void {\n this.contacts.removeAt(index);\n }\n}\n","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-4\"\n>\n <tui-elastic-container>\n <sc-new-contragent-form [class.!hidden]=\"stepIndex !== 0\"></sc-new-contragent-form>\n\n <div [class.!hidden]=\"stepIndex !== 1\">\n <div\n *ngIf=\"contacts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">Контакты</p>\n <div\n *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">Контакт №{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contact-form [form]=\"contact\"></sc-new-contact-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n Добавить контакт\n </button>\n </div>\n </div>\n\n <div [class.!hidden]=\"stepIndex !== 2\">\n <div\n *ngIf=\"bankAccounts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">Банковские реквизиты</p>\n <div\n *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">Банковские реквизиты №{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contragent-bank-account-form [form]=\"bankAccount\"></sc-new-contragent-bank-account-form>\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n Добавить банковские реквизиты\n </button>\n </div>\n </div>\n </tui-elastic-container>\n <div class=\"flex justify-center gap-2\">\n <button\n *ngIf=\"stepIndex > 0\"\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"stepIndex = (stepIndex - 1) % 3\"\n >\n Назад\n </button>\n <button\n *ngIf=\"stepIndex === 0\"\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n <button\n *ngIf=\"stepIndex === 2 || (stepIndex === 1 && !form.controls.contragent.controls['bankAccounts']); else nextIndexBtn\"\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n class=\"self-center\"\n >\n Создать\n </button>\n <ng-template #nextIndexBtn>\n <button\n tuiButton\n [disabled]=\"!canNextStep()\"\n type=\"button\"\n (click)=\"stepIndex = (stepIndex + 1) % 3\"\n >\n Далее\n </button>\n </ng-template>\n </div>\n</form>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ScContragent, ScContragentService, ScIBankAccount, ScIContact } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент контрагента пользователя.\n */\n@Component({\n selector: 'sc-contragents-accordion-item',\n templateUrl: './sc-contragents-accordion-item.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScContragentsAccordionItemComponent implements OnInit {\n /**\n * Контрагент пользователя.\n */\n @Input()\n public contragent: ScContragent;\n\n /**\n * Событие нажатия на кнопку удаления контрагента.\n */\n @Output()\n public deleteContragentClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку добавления банковского счёта контрагенту.\n */\n @Output()\n public addContragentBankAccountClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления банковского счёта контрагента.\n */\n @Output()\n public deleteContragentBankAccountClick: EventEmitter<ScIBankAccount> = new EventEmitter<ScIBankAccount>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица контрагенту.\n */\n @Output()\n public addContragentContactClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у контрагента.\n */\n @Output()\n public deleteContragentContactClick: EventEmitter<{ contact: ScIContact; contragent: ScContragent }> = new EventEmitter<{ contact: ScIContact; contragent: ScContragent }>();\n\n /**\n * Список банковских счетов контрагента.\n */\n public bankAccounts$?: Observable<ScIBankAccount[] | null>;\n\n /**\n * Список банковских счетов контрагента.\n */\n public contacts$?: Observable<ScIContact[] | null>;\n\n /**\n * Инициализирует экземпляр класса {@link ScContragentsAccordionItemComponent}.\n *\n * @param contragentService Сервис работы с контрагентами.\n */\n public constructor(private readonly contragentService: ScContragentService) {}\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.bankAccounts$ = this.contragentService.getContragentBankAccounts$(this.contragent.id);\n this.contacts$ = this.contragentService.getContragentContacts$(this.contragent.id);\n }\n\n /**\n * Обработчик нажатия на кнопку удаления контактного лица у контрагента.\n *\n * @param contact Контактное лицо.\n * @param contragent Контрагент.\n */\n public onDeleteContragentContactClick(contact: ScIContact, contragent: ScContragent): void {\n this.deleteContragentContactClick.emit({ contact: contact, contragent: contragent });\n }\n}\n","<sc-accordion [showAddButton]=\"false\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">ИНН: {{ 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 grow flex-col gap-2\">\n {{ contragent.name }}\n <span *ngIf=\"$any(contragent).inn as inn\">ИНН: {{ inn }}</span>\n <span *ngIf=\"$any(contragent).kpp as kpp\">КПП: {{ kpp }}</span>\n </div>\n <!-- Функционал удаления и редактирования временно не доступен пользователю. -->\n <!-- <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"@tui.pencil\"\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=\"@tui.trash-2\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteContragentClick.emit(contragent)\"\n ></button> -->\n </div>\n\n <sc-accordion (addButtonClick)=\"addContragentBankAccountClick.emit(contragent)\">\n Банковские реквизиты\n <ng-template scAccordionContent>\n <tui-loader\n *tuiLet=\"bankAccounts$ | async as bankAccounts\"\n [overlay]=\"true\"\n [showLoader]=\"bankAccounts === null\"\n >\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!bankAccounts || bankAccounts.length; else bankAccountsNotExist\">\n <div\n *ngFor=\"let bankAccount of bankAccounts\"\n class=\"flex gap-2 border-b border-tui-base-03\"\n >\n <div class=\"flex grow flex-col gap-2\">\n <span>Банк: {{ bankAccount.bankName }}</span>\n <span>БИК: {{ bankAccount.bic }}</span>\n <span>Р/счёт: {{ bankAccount.accountNumber }}</span>\n <span>Кор/счёт: {{ bankAccount.correspondentAccount }}</span>\n <span>Валюта: {{ 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=\"@tui.pencil\"\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=\"@tui.trash-2\"\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>\n <div class=\"flex flex-wrap gap-2 font-medium\">\n У контрагента <span class=\"font-bold\">{{ contragent.name }}</span> не указаны банковские реквизиты.\n </div>\n </div></tui-notification\n >\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","import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';\nimport { ScContragent, ScContragentService, ScIBankAccount, ScIContact } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент контрагента пользователя.\n */\n@Component({\n selector: 'sc-contragents-accordion',\n templateUrl: './sc-contragents-accordion.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScContragentsAccordionComponent {\n /**\n * {@link Observable} данных о контрагентах пользователя.\n */\n public contragents$: Observable<ScContragent[] | null> = this.contragentService.contragents$;\n\n /**\n * Событие нажатия на кнопку удаления контрагента.\n */\n @Output()\n public addContragentClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления контрагента.\n */\n @Output()\n public deleteContragentClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку добавления банковского счёта контрагенту.\n */\n @Output()\n public addContragentBankAccountClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления банковского счёта контрагента.\n */\n @Output()\n public deleteContragentBankAccountClick: EventEmitter<ScIBankAccount> = new EventEmitter<ScIBankAccount>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица контрагенту.\n */\n @Output()\n public addContragentContactClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у контрагента.\n */\n @Output()\n public deleteContragentContactClick: EventEmitter<{ contact: ScIContact; contragent: ScContragent }> = new EventEmitter<{ contact: ScIContact; contragent: ScContragent }>();\n\n /**\n * Инициализирует экземпляр класса {@link ScContragentsAccordionComponent}.\n *\n * @param contragentService Сервис работы с контрагентами.\n */\n public constructor(private readonly contragentService: ScContragentService) {}\n}\n","<sc-accordion (addButtonClick)=\"addContragentClick.emit()\">\n Контрагенты\n <ng-template scAccordionContent>\n <tui-loader\n *tuiLet=\"contragents$ | async as contragents\"\n [overlay]=\"true\"\n [showLoader]=\"contragents === null\"\n >\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>\n <div class=\"flex flex-wrap gap-2 font-medium\">Контрагенты не указаны.</div>\n </div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n</sc-accordion>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MaskitoDirective } from '@maskito/angular';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLoader, TuiNotification } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiCarousel, TuiDataListWrapper, TuiElasticContainer, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule, TuiSelectModule } from '@taiga-ui/legacy';\n\nimport { ScAccordionModule } from '../accordion';\nimport { ScContactsModule } from '../contacts/sc-contacts.module';\nimport { ScFormFieldsModule } from '../form-fields/form-fields.module';\nimport { ScAddContragentBankAccountsDialogComponent } from './add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component';\nimport { ScAddContragentDialogComponent } from './add-contragent-dialog/sc-add-contragent-dialog.component';\nimport { ScContragentsAccordionItemComponent } from './contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component';\nimport { ScContragentsAccordionComponent } from './contragents-accordion/sc-contragents-accordion.component';\nimport { ScNewContragentBankAccountsFormComponent } from './new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component';\nimport { ScNewContragentFormComponent } from './new-contragent-form/sc-new-contragent-form.component';\n\n/**\n * Модуль для отображение контента разделами, с возможностью скрывать и отображать содержимое.\n */\n@NgModule({\n declarations: [\n ScContragentsAccordionComponent,\n ScContragentsAccordionItemComponent,\n ScNewContragentBankAccountsFormComponent,\n ScAddContragentBankAccountsDialogComponent,\n ScAddContragentDialogComponent,\n ScNewContragentFormComponent,\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n ScAccordionModule,\n TuiButton,\n TuiLoader,\n TuiLet,\n TuiNotification,\n ScContactsModule,\n TuiFieldErrorPipe,\n TuiError,\n TuiSelectModule,\n ...TuiDataList,\n ...TuiDataListWrapper,\n TuiLabel,\n TuiInputModule,\n TuiInputPhoneModule,\n MaskitoDirective,\n ScFormFieldsModule,\n TuiElasticContainer,\n ...TuiCarousel,\n TuiButtonLoading,\n ],\n exports: [\n ScContragentsAccordionComponent,\n ScNewContragentBankAccountsFormComponent,\n ScAddContragentBankAccountsDialogComponent,\n ScAddContragentDialogComponent,\n ScNewContragentFormComponent,\n ],\n})\nexport class ScContragentsModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MaskitoDirective } from '@maskito/angular';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiError, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPasswordModule, TuiInputPhoneModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScVerificationPhoneCheckFormComponent } from './verification-phone-check-form/sc-verification-phone-check-form.component';\n\n/**\n * Модуль отправки кодов подтверждения (номера телефона, адреса эл. почты и т.д.).\n */\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TuiInputPasswordModule,\n TuiInputModule,\n TuiTextfieldControllerModule,\n TuiLink,\n TuiButton,\n TuiLabel,\n TuiFieldErrorPipe,\n TuiError,\n TuiLet,\n TuiLoader,\n TuiInputPhoneModule,\n MaskitoDirective,\n TuiButtonLoading,\n ],\n exports: [ScVerificationPhoneCheckFormComponent],\n declarations: [ScVerificationPhoneCheckFormComponent],\n})\nexport class ScVerificationModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MaskitoDirective } from '@maskito/angular';\nimport { TuiLet, TuiRepeatTimes } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiCheckbox, TuiDataListWrapper, TuiElasticContainer, TuiFieldErrorPipe, TuiStepper } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPasswordModule, TuiInputPhoneModule, TuiSelectModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScContactsModule } from '../contacts/sc-contacts.module';\nimport { ScContragentsModule } from '../contragents/sc-contragents.module';\nimport { ScFormFieldsModule } from '../form-fields/form-fields.module';\nimport { ScVerificationModule } from '../verification';\nimport { ScSignInFormComponent } from './sc-sign-in-form/sc-sign-in-form.component';\nimport { ScSignInFormByEmailComponent } from './sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component';\nimport { ScSignInFormByPhoneComponent } from './sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component';\nimport { ScSignUpFormComponent } from './sign-up-form/sc-sign-up-form.component';\n\n/**\n * Модуль аутентификации.\n */\n@NgModule({\n declarations: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TuiInputPasswordModule,\n TuiInputModule,\n TuiTextfieldControllerModule,\n TuiLink,\n TuiButton,\n TuiLabel,\n TuiFieldErrorPipe,\n TuiError,\n TuiLet,\n TuiLoader,\n TuiInputPhoneModule,\n MaskitoDirective,\n ScVerificationModule,\n ScFormFieldsModule,\n ...TuiDataList,\n TuiCheckbox,\n TuiElasticContainer,\n ...TuiDataListWrapper,\n TuiSelectModule,\n ScContragentsModule,\n ScContactsModule,\n ...TuiStepper,\n TuiRepeatTimes,\n TuiButtonLoading,\n ],\n exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent],\n})\nexport class ScAuthModule {}\n","import { Injectable } from '@angular/core';\n\n/**\n * Класс-помощник для конвертации пикселей.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScPxConverter {\n private rootFontSize = 16;\n\n /**\n * Конвертирует пиксели в rem.\n *\n * @param px Значение которое необходимо конвертировать.\n */\n public pxToRem(px: number): number {\n return px / this.rootFontSize;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n Output,\n QueryList,\n TemplateRef,\n} from '@angular/core';\nimport { IntersectionObserverService } from '@ng-web-apis/intersection-observer';\nimport { ScBanner, ScBannerService, ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';\nimport { map, Observable, shareReplay, Subject, tap } from 'rxjs';\n\nimport { ScPxConverter } from '../helpers';\n\n/**\n * Баннер с прокруткой переданных {@link TemplateRef} элементов, и баннеров локации.\n */\n@Component({\n selector: 'sc-banner',\n templateUrl: './sc-banner.component.html',\n styleUrls: ['./sc-banner.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [IntersectionObserverService],\n})\nexport class ScBannerComponent {\n /**\n * Признак, что необходимо показывать кнопки навигации.\n */\n @Input()\n public navigateButton: boolean = true;\n\n /**\n * Интервал автоматической смены слайдов в миллисекундах (используйте 0, чтобы отключить автоматическую смену слайда).\n */\n @Input()\n public duration: number = 5000;\n\n /**\n * Местоположение баннера.\n */\n @Input()\n public bannerLocation?: string;\n\n /**\n * Признак, что компонент должен растягиваться.\n */\n @Input()\n public resizable: boolean = false;\n\n /**\n * Событие загрузки баннеров с количеством полученных баннеров.\n */\n @Output()\n public loadBannersEvent: EventEmitter<number> = new EventEmitter<number>();\n\n /**\n * Событие нажатия на изображение баннера.\n */\n @Output()\n public clickBannerEvent: EventEmitter<ScBanner> = new EventEmitter<ScBanner>();\n\n /**\n * Список ссылок на элемент представлений шаблонов.\n */\n @ContentChildren('banner')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public bannersListRef: QueryList<TemplateRef<any>>;\n\n /**\n * Идентификатор текущего баннера.\n */\n public currentBannerId: number = 0;\n\n /**\n * {@link Subject} изменения состояния таймера.\n */\n public readonly toggleTimer$: Subject<boolean> = new Subject<boolean>();\n\n /**\n * {@link Observable} обновления списка баннеров.\n */\n public readonly banners$: Observable<ScBanner[]> = this.bannerService.banners$.pipe(\n map((banners) => banners.filter((banner) => banner.location === this.bannerLocation).reverse()),\n tap((banners) => {\n if (banners.length > 0) {\n if (!this.resizable) {\n this.aspectRatio = `${banners[0].width} / ${banners[0].height}`;\n }\n\n this.banners = banners;\n this.toggleTimer$.next(true);\n }\n\n this.loadBannersEvent.emit(banners.length);\n }),\n // eslint-disable-next-line rxjs/no-sharereplay\n shareReplay(1)\n );\n\n /**\n * Список баннеров.\n */\n public banners?: ScBanner[] = [];\n\n /**\n * Свойство, от которого зависит соотношение `:host` компонента.\n */\n @HostBinding('style.aspect-ratio')\n public aspectRatio: string = '';\n\n /**\n * Инициализирует экземпляр класса {@link ScBannerComponent}.\n *\n * @param cdr Объект для работы с обнаружением изменений.\n * @param bannerService Сервис для работы с баннерами.\n * @param entries$ Intersection Observer Service.\n * @param element Элемент баннера.\n * @param pxConverter Экземпляр класса-помощника для конвертации пикселей.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n */\n public constructor(\n private readonly cdr: ChangeDetectorRef,\n private readonly bannerService: ScBannerService,\n @Inject(IntersectionObserverService) private readonly entries$: IntersectionObserverService,\n @Inject(ElementRef) private readonly element: ElementRef<Element>,\n private pxConverter: ScPxConverter,\n private readonly userMetrikaService: ScUserMetrikaService\n ) {}\n\n /**\n * Свойство, от которого зависит наличие класса `!hidden` у `:host` компонента.\n */\n @HostBinding('class.!hidden')\n private get isHidden(): boolean {\n return !this.banners || this.bannersListRef.length + this.banners.length === 0;\n }\n\n /**\n * Обработчик нажатия на баннер, генерирующий событие {@link clickBannerImgEvent}.\n *\n * @param banner Баннер, по ссылке которого совершён переход.\n */\n public onClick(banner: ScBanner): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.bannerClick,\n params: {\n banner_id: banner.id,\n },\n });\n\n if (banner.url) {\n this.clickBannerEvent.emit(banner);\n }\n }\n}\n","<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel\n [duration]=\"duration\"\n #carousel\n [attr.resizable]=\"resizable\"\n class=\"size-full overflow-hidden rounded-xl bg-white\"\n [(index)]=\"currentBannerId\"\n >\n <ng-container *ngFor=\"let banner of banners; let index = index\">\n <ng-container [ngSwitch]=\"banner.mediaType\">\n <ng-container *ngSwitchCase=\"'image'\">\n <a\n *tuiItem\n (click)=\"onClick(banner)\"\n target=\"_blank\"\n [title]=\"banner.title\"\n [style.aspect-ratio]=\"aspectRatio\"\n [attr.href]=\"banner.url ? banner.url : null\"\n [style.background-image]=\"'url(' + banner.mediaFile + ')'\"\n class=\"size-full bg-[length:100%_100%]\"\n >\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div\n *tuiItem\n [style.aspect-ratio]=\"aspectRatio\"\n class=\"size-full overflow-hidden\"\n >\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n\n <div\n *ngIf=\"navigateButton && duration && this.banners && this.bannersListRef.length + this.banners.length > 1\"\n tuiTheme=\"light\"\n class=\"flex items-center\"\n >\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.prev()\"\n class=\"!absolute left-2\"\n ></button>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.next()\"\n class=\"!absolute right-2\"\n ></button>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { WaIntersectionObserver } from '@ng-web-apis/intersection-observer';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiLoader } from '@taiga-ui/core';\nimport { TuiCarousel } from '@taiga-ui/kit';\n\nimport { ScBannerComponent } from './sc-banner.component';\n\n/**\n * Модуль баннеров.\n */\n@NgModule({\n declarations: [ScBannerComponent],\n imports: [CommonModule, RouterModule, TuiButton, ...TuiCarousel, TuiLoader, ...WaIntersectionObserver, TuiLet],\n exports: [ScBannerComponent],\n})\nexport class ScBannerModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n/**\n * Компонент кнопки избранных товаров и категорий.\n */\n@Component({\n selector: 'sc-favorite-button',\n templateUrl: './sc-favorite-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFavoriteButtonComponent {\n /**\n * Событие нажатия на кнопку.\n */\n @Output()\n public clickEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Признак наличия товара или категории в избранных.\n */\n @Input()\n public isFavorite: boolean = false;\n\n /**\n * Признак, что необходимо отобразить загрузку на кнопке.\n */\n @Input()\n public showLoader: boolean = false;\n\n /**\n * Признак, что кнопка деактивирована.\n */\n @Input()\n public disabled: boolean = false;\n}\n","<button\n tuiIconButton\n (click)=\"clickEvent.emit()\"\n [disabled]=\"disabled\"\n [loading]=\"showLoader\"\n appearance=\"flat\"\n size=\"s\"\n>\n <tui-icon\n class=\"!text-xl text-tui-primary\"\n [icon]=\"isFavorite ? '@tui.bookmark-filled' : '@tui.bookmark'\"\n ></tui-icon>\n</button>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Inject, inject, Input, input, InputSignal, Output } from '@angular/core';\nimport { SC_PATH_IMAGE_NOT_FOUND, SC_URLS, ScAuthService, ScCategory, ScIUrls } from '@snabcentr/client-core';\nimport { TUI_IS_MOBILE, TuiLooseUnion } from '@taiga-ui/cdk';\nimport { TuiSizeS } from '@taiga-ui/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Карточка категории.\n */\n@Component({\n selector: 'sc-category-card',\n templateUrl: './sc-category-card.component.html',\n styleUrls: ['./sc-category-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScCategoryCardComponent {\n /**\n * Данные о категории.\n */\n @Input()\n public category?: ScCategory;\n\n /**\n * Размер карточки категории.\n */\n @Input()\n @HostBinding('attr.data-size')\n public size: TuiSizeS = 'm';\n\n // TODO: Переделать на HostBinding.\n /**\n * Вид отображения карточки.\n */\n public appearance: InputSignal<TuiLooseUnion<'root' | 'normal'>> = input<TuiLooseUnion<'root' | 'normal'>>('normal');\n\n /**\n * Признак, что необходимо отобразить лоадер для кнопки избранных товаров и категорий.\n */\n public favoriteShowLoader: boolean = false;\n\n /**\n * {@link Observable} изменения статуса авторизации.\n */\n public readonly authStatus$: Observable<boolean> = inject(ScAuthService).getAuthChange();\n\n /**\n * Признак наведения на карточку.\n */\n protected isHover: boolean = false;\n\n /**\n * Признак что категория имеет поведение наведения и скрытия названия.\n */\n @Input()\n public enableHover: boolean = false;\n\n /**\n * Признак того, отображается этот компонент на мобильном устройстве или нет.\n */\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n\n /**\n * Событие нажатия на кнопку избранной категории.\n */\n @Output()\n public clickOnFavoriteEvent: EventEmitter<ScCategory> = new EventEmitter<ScCategory>();\n\n /**\n * Ссылка на страницу категории. Используется именно `href`, так как остановить событие клика для `routerLink` не вышло.\n */\n @Input()\n public href?: string;\n\n /**\n * Инициализирует экземпляр класса {@link CategoryCardComponent}.\n *\n * @param urls Список ссылок на разделы backend'a.\n * @param pathImageNotFound Путь до изображения 'Товар не найден'.\n * @param cdr Объект для работы с обнаружением изменений.\n */\n public constructor(\n @Inject(SC_URLS) private readonly urls: ScIUrls,\n @Inject(SC_PATH_IMAGE_NOT_FOUND) private readonly pathImageNotFound: string,\n private readonly cdr: ChangeDetectorRef\n ) {}\n\n /**\n * Обработчик события наведения.\n *\n * @param isHover Признак наведения на карточку.\n */\n protected onHovered(isHover: boolean): void {\n this.isHover = isHover;\n }\n\n /**\n * Возвращает путь к изображению категории. Если путь отсутствует, то вернёт изображение по-умолчанию (\"product_not_found\").\n *\n * @param category Данные о категории.\n */\n protected getCategoryImgURL(category: ScCategory): string {\n return category.properties?.image ? `${this.urls.imgServerUrl}/${category.properties.image}` : this.pathImageNotFound;\n }\n\n /**\n * Устанавливает компонент в очередь на обновление.\n *\n * @deprecated\n */\n public markForCheck(): void {\n this.cdr.markForCheck();\n }\n}\n","<div class=\"relative\">\n <a\n (tuiHoveredChange)=\"onHovered($event)\"\n [routerLink]=\"href ?? null\"\n class=\"category-button rounded-tui-radius-m border-tui-base-04 flex flex-col overflow-hidden border text-center\"\n >\n <div class=\"img-wrapper w-full grow overflow-hidden\">\n <img\n *ngIf=\"category\"\n [src]=\"getCategoryImgURL(category)\"\n [alt]=\"category.name\"\n [ngClass]=\"{ '!object-contain p-2': appearance() === 'normal' || !getCategoryImgURL(category) }\"\n class=\"size-full rounded-xl object-cover\"\n />\n\n <!-- Блок для скелетона карточки -->\n <div\n *ngIf=\"!category\"\n class=\"img-wrapper bg-tui-base-02 size-full\"\n ></div>\n </div>\n\n <div class=\"name flex w-full items-center justify-center\">\n @if (category) {\n @if (enableHover && !isMobile) {\n <tui-line-clamp\n [content]=\"category.name\"\n class=\"pointer-events-none\"\n [lineHeight]=\"size === 'm' ? 26 : 24\"\n [linesLimit]=\"isHover ? 4 : 2\"\n />\n } @else {\n {{ category.name }}\n }\n } @else {\n <div class=\"skeleton-name rounded-tui-radius-s bg-tui-base-02\"></div>\n }\n </div>\n </a>\n <sc-favorite-button\n *ngIf=\"category && (authStatus$ | async)\"\n [showLoader]=\"favoriteShowLoader\"\n [isFavorite]=\"category.isFavorite\"\n (clickEvent)=\"clickOnFavoriteEvent.emit()\"\n class=\"absolute left-1 top-1\"\n />\n</div>\n","/* eslint-disable @typescript-eslint/dot-notation */\n\nimport { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { TuiSizeL, TuiSizeM, TuiSizeS } from '@taiga-ui/core';\nimport { AbstractTuiNullableControl, TuiInputNumberComponent } from '@taiga-ui/legacy';\n\nimport { stepValidator } from '../../validators';\n\n/**\n * Компонент поля ввода количества.\n */\n@Component({\n selector: 'sc-input-quantity',\n templateUrl: './sc-input-quantity.component.html',\n styleUrls: ['./sc-input-quantity.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScInputQuantityComponent extends AbstractTuiNullableControl<number> implements OnInit {\n /**\n * Компонент поля ввода.\n */\n @ViewChild(TuiInputNumberComponent)\n private readonly numberInput?: TuiInputNumberComponent;\n\n /**\n * Шаг увеличения количества. Отвечает за проверку кратности ввода.\n */\n @Input()\n public step: number = 1;\n\n /**\n * Признак, что необходимо отобразить {@link TuiLoaderComponent} над компонентом.\n */\n @Input()\n public showLoader: boolean = false;\n\n /**\n * Признак, что необходимо отобразить кнопку очистки поля ввода.\n */\n @Input()\n public showCross: boolean = true;\n\n /**\n * Признак, что необходимо игнорировать валидацию кратности и минимального количества.\n */\n @Input()\n public ignoreStepValidators: boolean = false;\n\n /**\n * Формат внешнего вида компонента.\n */\n @Input()\n @HostBinding('attr.data-appearance')\n public appearance: 'primary' | 'secondary' = 'primary';\n\n /**\n * Признак, что компонент деактивирован.\n */\n @Input()\n @HostBinding('attr.data-disabled')\n public isDisabled: boolean = false;\n\n /**\n * Размер компонента.\n */\n @Input()\n @HostBinding('attr.data-size')\n public size: TuiSizeL | TuiSizeM | TuiSizeS = 'm';\n\n /**\n * Событие нажатия на кнопку \"Очистить\".\n */\n @Output()\n public clickClearEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Возвращает элемент, который может быть сфокусирован.\n */\n public get nativeFocusableElement(): HTMLInputElement | null | undefined {\n return this.numberInput?.nativeFocusableElement;\n }\n\n /** @inheritDoc */\n public get focused(): boolean {\n return !!this.numberInput?.focused;\n }\n\n /**\n * Элемент формы ввода количества.\n */\n public get formControl(): FormControl | null {\n return this.control as FormControl | null;\n }\n\n /** @inheritDoc */\n public override ngOnInit(): void {\n if (this.control) {\n this.control.setValidators(stepValidator(this.ignoreStepValidators ? 1 : this.step));\n }\n }\n\n /**\n * Обработчик события нажатия стрелок клавиатуры.\n *\n * @param step Шаг изменения количества.\n */\n @HostListener('keydown.arrowDown', ['-step'])\n @HostListener('keydown.arrowUp', ['step'])\n public onArrow(step: number | null): void {\n if (!step) {\n return;\n }\n\n if (step > 0) {\n this.incident();\n } else {\n this.decrement();\n }\n }\n\n /**\n * Увеличивает значение в поле ввода на 1 шаг. Если число в поле ввода не кратно шагу, то увеличит до ближайшего кратного значения.\n *\n * @param checkUpdateOn Признак, что нужно проверить `updateOn` свойство `formControl`.\n */\n public incident(checkUpdateOn = false): void {\n this.numberInput?.['onArrow'](this.step - ((this.numberInput.value ?? 0) % this.step));\n\n // eslint-disable-next-line no-underscore-dangle, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n if (checkUpdateOn && (this.formControl as any)?._updateOn === 'blur') {\n this.control?.setValue(this.numberInput?.value);\n }\n }\n\n /**\n * Уменьшает значение в поле ввода на 1 шаг. Если число в поле ввода не кратно шагу, то уменьшит до ближайшего кратного значения.\n *\n * @param checkUpdateOn Признак, что нужно проверить `updateOn` свойство `formControl`.\n */\n public decrement(checkUpdateOn = false): void {\n this.numberInput?.['onArrow'](-((this.numberInput.value ?? 0) % this.step) || -this.step);\n\n // eslint-disable-next-line no-underscore-dangle, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n if (checkUpdateOn && (this.formControl as any)?._updateOn === 'blur') {\n this.control?.setValue(this.numberInput?.value);\n }\n }\n\n /**\n * Очищает поля ввода.\n */\n public clear(): void {\n this.control?.patchValue(null);\n this.clickClearEvent.emit();\n }\n}\n","<tui-loader\n *ngIf=\"formControl\"\n class=\"w-full\"\n [overlay]=\"true\"\n [showLoader]=\"showLoader\"\n [size]=\"size\"\n>\n <div class=\"flex items-center gap-1 text-center\">\n <div class=\"field-with-button flex grow rounded-xl\">\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canDecrement']\"\n (click.prevent)=\"decrement(true)\"\n >\n <tui-icon icon=\"@tui.minus\"></tui-icon>\n </button>\n <tui-input-number\n #numberInput\n [formControl]=\"formControl\"\n [tuiHint]=\"([] | tuiFieldError | async)?.message\"\n [tuiTextfieldLabelOutside]=\"true\"\n [min]=\"ignoreStepValidators ? 1 : step\"\n [tuiTextfieldSize]=\"size\"\n [required]=\"true\"\n [style.text-align]=\"'center'\"\n [style.font-weight]=\"700\"\n (focusin)=\"$any($event.target).select()\"\n oncontextmenu=\"return false;\"\n class=\"grow\"\n >\n </tui-input-number>\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"incident(true)\"\n >\n <tui-icon icon=\"@tui.plus\"></tui-icon>\n </button>\n </div>\n <button\n *ngIf=\"showCross\"\n tuiIconButton\n appearance=\"secondary\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"clear()\"\n >\n <tui-icon icon=\"@tui.x\"></tui-icon>\n </button>\n </div>\n</tui-loader>\n","/* eslint-disable lodash/prefer-lodash-method */\n\nimport { ContentChildren, Directive, HostListener, QueryList } from '@angular/core';\nimport { AbstractTuiControl, TuiFocusableElementAccessor } from '@taiga-ui/legacy';\n\n/**\n * Директива для перехода по нажатию клавиши enter на следующее поле ввода формы.\n */\n@Directive({\n selector: 'form[ScNextInputFocus]',\n})\nexport class ScNextInputFocusDirective {\n /**\n * Все поля ввода внутри формы, на которой применяется данная директива.\n */\n @ContentChildren(AbstractTuiControl, { descendants: true })\n private focusableElements: QueryList<TuiFocusableElementAccessor>;\n\n /**\n * Слушатель нажатия на клавишу enter. Предотвращает событие submit, выполняет смену фокуса на следующее поле ввода TuiFocusableElementAccessor.\n *\n * @param event Объект события нажатия на клавишу.\n */\n @HostListener('keydown', ['$event'])\n public onFormKeyDownEnter(event: KeyboardEvent): void {\n if (event.code !== 'Enter' && event.key !== 'Enter') {\n return;\n }\n\n event.preventDefault();\n\n const elements: TuiFocusableElementAccessor[] = this.focusableElements.toArray();\n\n const focusedIndex = elements.findIndex((control) => control.focused);\n\n if (focusedIndex !== -1) {\n const nextElement = elements[focusedIndex + 1]?.nativeFocusableElement;\n\n if (nextElement) {\n nextElement.focus();\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { ScNextInputFocusDirective } from './sc-next-input-focus.directive';\n\n/**\n * Модуль директивы для перехода по нажатию клавиши enter на следующее поле ввода формы.\n */\n@NgModule({\n declarations: [ScNextInputFocusDirective],\n exports: [ScNextInputFocusDirective],\n})\nexport class ScNextInputFocusModule {}\n","/* eslint-disable no-underscore-dangle */\n\nimport { ChangeDetectorRef, Directive, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { SC_PATH_IMAGE_NOT_FOUND, ScAuthService, ScCartItem, ScImageHelper, ScProduct, ScUnitsHelper, SEARCH_TERM } from '@snabcentr/client-core';\nimport { TUI_IS_MOBILE } from '@taiga-ui/cdk';\nimport { Observable } from 'rxjs';\n\n/**\n * Директива абстрактной карточки товара.\n */\n@Directive() // Абстрактный класс имеет декоратор @Directive() для внедрения его в DI, с целью получения функционала inject внутри абстракции, и возможности получать потомков через DI или через декоратор @ViewChild.\nexport class AbstractScPriceCard {\n /**\n * Позиция товара в корзине.\n *\n * TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].\n */\n public get cartItem(): ScCartItem | undefined {\n return this._cartItem;\n }\n\n /**\n * Позиция товара в корзине\n *\n * TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].\n */\n @Input()\n public set cartItem(value: ScCartItem | undefined) {\n this._cartItem = value;\n\n this.quantityControl.patchValue(this._cartItem?.quantity ?? null, { emitEvent: false });\n this.quantityShowLoader = false;\n }\n\n /**\n * Объект товара.\n */\n public get product(): ScProduct | undefined {\n return this._product;\n }\n\n /**\n * Объект товара.\n */\n @Input()\n public set product(value: ScProduct | undefined) {\n this._product = value;\n }\n\n /**\n * Признак того, что этот компонент отображается на мобильном устройстве.\n */\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n\n /**\n * {@link FormControl} поля ввода количества товара в корзине.\n */\n public quantityControl: FormControl<number | null> = new FormControl<number | null>(3, { updateOn: 'blur' });\n\n /**\n * Признак, что необходимо отобразить лоадер для поля ввода количества товара.\n */\n public quantityShowLoader: boolean = false;\n\n /**\n * Признак, что необходимо отобразить лоадер для кнопки избранных товаров и категорий.\n */\n public favoriteShowLoader: boolean = false;\n\n /**\n * {@link Observable} изменения статуса авторизации.\n */\n public readonly authStatus$: Observable<boolean> = inject(ScAuthService).getAuthChange();\n\n /**\n * {@link Observable} поиска терма.\n */\n public readonly search$ = inject(SEARCH_TERM);\n\n /**\n * Признак, что необходимо отобразить поле ввода количества товара.\n */\n @Input()\n public showQuantityControl: boolean = false;\n\n /**\n * Ссылка на страницу товара. Используется именно `href`, так как остановить событие клика для `routerLink` не вышло.\n */\n @Input()\n public href?: string;\n\n /**\n * Событие нажатия на кнопку \"В избранное\".\n */\n @Output()\n public readonly clickFavoriteEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку \"В корзину\".\n */\n @Output()\n public readonly clickAddToCartEvent: EventEmitter<ScProduct> = new EventEmitter<ScProduct>();\n\n /**\n * Событие нажатия на кнопку очистки количества товара.\n */\n @Output()\n public readonly clickClearEvent: EventEmitter<ScCartItem> = new EventEmitter<ScCartItem>();\n\n /**\n * Событие нажатия на карточку товара.\n */\n @Output()\n public readonly clickCardEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на историю цен.\n */\n @Output()\n public readonly clickPriceHistoryEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * {@link Observable} изменения количества товара в корзине.\n */\n @Output()\n public readonly quantityValueChanges: Observable<number | null> = this.quantityControl.valueChanges;\n\n /**\n * Экземпляр класса-помощника для работы со значениями единиц измерения товара.\n */\n protected readonly unitsHelper: ScUnitsHelper = inject(ScUnitsHelper);\n\n /**\n * Хелпер для работы с изображениями товара.\n */\n protected readonly imageHelper: ScImageHelper = inject(ScImageHelper);\n\n /**\n * Путь до изображения 'Товар не найден'.\n */\n private readonly pathImageNotFound: string = inject(SC_PATH_IMAGE_NOT_FOUND);\n\n /**\n * Объект слежения за изменениями.\n */\n private readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n /**\n * Объект товара.\n */\n private _product: ScProduct | undefined;\n\n /**\n * Позиция товара в корзине.\n *\n * TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].\n */\n private _cartItem: ScCartItem | undefined;\n\n /**\n * Признак, что нужно показать скелетон.\n */\n public get skeletonVisible(): boolean {\n return !this.product;\n }\n\n /**\n * Возвращает ссылку на preview-изображение карточки товара.\n */\n public getCardImagePreview(): string {\n return this.product ? this.imageHelper.getImagePreview(this.product) : this.pathImageNotFound;\n }\n\n /**\n * Возвращает массив превью-изображений товара.\n *\n * @param product Объект товара.\n */\n public getCardImagePreviewList(product: ScProduct): string[] {\n const images = this.imageHelper.getProductImagePreviewList(product);\n\n return images.length > 0 ? images : [this.pathImageNotFound];\n }\n\n /**\n * Устанавливает компонент в очередь на обновление.\n */\n public markForCheck(): void {\n this.cdr.markForCheck();\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Inject } from '@angular/core';\nimport { IS_RUNNING_ON_TERMINAL, ScITerminalProvider, ScVCardService } from '@snabcentr/client-core';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\n\n/**\n * Компонент QR кода.\n */\n@Component({\n selector: 'sc-qrcode-dialog',\n templateUrl: './sc-qrcode-dialog.component.html',\n styleUrls: ['./sc-qrcode-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScQRCodeDialogComponent {\n /**\n * Свойство, от которого зависит наличие атрибута `data-terminal-view` у `:host` компонента.\n */\n @HostBinding('attr.data-terminal-view')\n private terminalView = this.terminal.isRunningOnTerminal;\n\n /**\n * Инициализирует экземпляр класса {@link ScQRCodeDialogComponent}.\n *\n * @param vCardService Сервис для работы с vCard.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n * @param terminal Провайдер данных о терминале.\n */\n public constructor(\n private readonly vCardService: ScVCardService,\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context: TuiDialogContext<void, { qrdata: string }>,\n @Inject(IS_RUNNING_ON_TERMINAL)\n public readonly terminal: ScITerminalProvider\n ) {}\n\n /**\n * Выполняет скачивание генерируемого vCard файла контакта.\n */\n public downloadVCard(): void {\n if (!this.terminal.isRunningOnTerminal && this.isVCardData()) {\n this.vCardService.downloadVCard(this.context.data.qrdata);\n }\n }\n\n /**\n * Проверяет что в диалоговое окно были переданы данные в формате `vCard`.\n */\n public isVCardData(): boolean {\n // eslint-disable-next-line unicorn/better-regex\n return /BEGIN:VCARD[\\s\\S]*END:VCARD/i.test(this.context.data.qrdata);\n }\n}\n","<p class=\"-mt-2 mb-3 text-tui-text-02\">{{ !terminal.isRunningOnTerminal && this.isVCardData() ? 'Нажмите или о' : 'О' }}тсканируйте QR-код вашим мобильным устройством.</p>\n<qrcode\n (click)=\"downloadVCard()\"\n [margin]=\"0\"\n [qrdata]=\"this.context.data.qrdata\"\n [width]=\"800\"\n elementType=\"img\"\n class=\"cursor-pointer\"\n></qrcode>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiButton, TuiDialog } from '@taiga-ui/core';\nimport { TuiPreview } from '@taiga-ui/kit';\nimport { QRCodeModule as AngularxQRCodeModule } from 'angularx-qrcode';\n\nimport { ScQRCodeDialogComponent } from './qrcode-dialog/sc-qrcode-dialog.component';\n\n/**\n * Модуль QR кода.\n */\n@NgModule({\n declarations: [ScQRCodeDialogComponent],\n imports: [CommonModule, AngularxQRCodeModule, TuiButton, TuiDialog, ...TuiPreview],\n exports: [ScQRCodeDialogComponent],\n})\nexport class ScQRCodeModule {}\n","/* eslint-disable lodash/prefer-lodash-method */\n\nimport { Directive, ElementRef, HostListener, inject } from '@angular/core';\nimport { IS_RUNNING_ON_TERMINAL, ScITerminalProvider } from '@snabcentr/client-core';\nimport { TuiDialogService } from '@taiga-ui/core';\nimport { PolymorpheusComponent } from '@taiga-ui/polymorpheus';\n\nimport { ScQRCodeDialogComponent } from '../../qrcode';\n\n/**\n * Директива открытия диалогового окна с QRCode для ссылок `tel:` и `mailto:` на терминале.\n */\n@Directive({\n standalone: true,\n selector: 'a[href]',\n})\nexport class ScTerminalLinkDirective {\n /**\n * Ссылка на HTML элемент тега `<a>`.\n */\n private elementReference: ElementRef<HTMLAnchorElement> = inject<ElementRef<HTMLAnchorElement>>(ElementRef);\n\n /**\n * Сервис для работы с диалоговыми окнами TuiDialog.\n */\n private dialog: TuiDialogService = inject<TuiDialogService>(TuiDialogService);\n\n /**\n * Провайдер данных о терминале.\n */\n private terminal: ScITerminalProvider = inject<ScITerminalProvider>(IS_RUNNING_ON_TERMINAL);\n\n /**\n * Обработчик клика по ссылке.\n *\n * @param event Событие клика.\n */\n @HostListener('click', ['$event'])\n public onClick(event: Event): void {\n if (this.terminal.isRunningOnTerminal && this.isLinkTelOrMail()) {\n // Отключение базового события для терминала.\n event.preventDefault();\n this.openQRCodeDialog();\n }\n }\n\n /**\n * Открывает диалоговое окно с QR-кодом.\n */\n public openQRCodeDialog(): void {\n this.dialog\n .open(new PolymorpheusComponent(ScQRCodeDialogComponent), {\n size: 's',\n // Передаём ссылку формата `mailto:example@example.com` `tel:+70000000000` вместо vCard, так как для vCard данных недостаточно.\n data: { qrdata: this.elementReference.nativeElement.href },\n })\n .subscribe();\n }\n\n /**\n * Проверяет ведёт ли ссылка на телефон или адрес электронной почты.\n */\n private isLinkTelOrMail(): boolean {\n return this.elementReference.nativeElement.href.startsWith('tel:') || this.elementReference.nativeElement.href.startsWith('mailto:');\n }\n}\n","import { ChangeDetectionStrategy, Component, HostListener, Input, signal, WritableSignal } from '@angular/core';\nimport { TuiHovered, TuiRepeatTimes } from '@taiga-ui/cdk';\nimport { TuiButton } from '@taiga-ui/core';\n\n/**\n * Компонент просмотра изображений через событие наведения.\n */\n@Component({\n standalone: true,\n selector: 'sc-hover-image-carousel',\n imports: [TuiRepeatTimes, TuiButton, TuiHovered],\n templateUrl: './hover-image-carousel.component.html',\n styleUrl: './hover-image-carousel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HoverImageCarouselComponent {\n /**\n * Массив изображений.\n */\n @Input()\n public images: string[] = [];\n\n /**\n * Признак что необходимо отобразить элементы управления.\n */\n @Input()\n public isShowActions: boolean = true;\n\n /**\n * {@link WritableSignal} для отслеживания текущего индекса изображения.\n */\n public currentIndex: WritableSignal<number> = signal(0);\n\n /**\n * Обработчик события `mousemove.silent`.\n *\n * @param offsetX Отступ курсора мыши по оси X от края {@link HTMLElement}.\n * @param target Объект {@link HTMLElement} в котором лежат изображения\n */\n @HostListener('mousemove.silent', ['$event.offsetX', '$event.target'])\n private onHover(offsetX: number, target: HTMLElement): void {\n if (this.images.length <= 1 || offsetX < 0) {\n return;\n }\n // new Event().preventDefault\n const elementWidth = target.offsetWidth;\n const hoverPercentage = offsetX / elementWidth;\n const newIndex = Math.floor(hoverPercentage * this.images.length);\n this.currentIndex.set(newIndex);\n }\n\n /**\n * Обработчик события `mouseleave.silent`.\n */\n @HostListener('mouseleave.silent')\n private onLeave(): void {\n if (this.images.length <= 1) {\n return;\n }\n\n this.currentIndex.set(0);\n }\n\n /**\n * Обработчик события наведения указателя мыши на точку.\n *\n * @param hovered Признак что указатель мыши наведен на точку.\n * @param index Индекс изображения, который соответствует точке.\n */\n protected onDotHovered(hovered: boolean, index: number): void {\n if (hovered) {\n this.currentIndex.set(index);\n }\n }\n}\n","<div\n class=\"overflow-hidden rounded-xl\"\n [class.mb-2]=\"images.length <= 1 && isShowActions\"\n [style.aspect-ratio]=\"'20/19'\"\n>\n <img\n [src]=\"images[currentIndex()]\"\n class=\"size-full rounded-xl object-contain\"\n />\n</div>\n\n@if (images.length > 1 && isShowActions) {\n <div\n (mousemove.silent)=\"$event.stopPropagation()\"\n class=\"flex justify-center\"\n >\n <button\n *tuiRepeatTimes=\"let indexItem of images.length\"\n #element\n tuiButton\n type=\"button\"\n class=\"button button_small\"\n [appearance]=\"indexItem === currentIndex() ? 'primary' : 'secondary'\"\n (tuiHoveredChange)=\"onDotHovered($event, indexItem)\"\n ></button>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, inject, Input } from '@angular/core';\nimport { ScIWarehouse, ScProduct, ScWarehouseService } from '@snabcentr/client-core';\nimport { TuiHint, TuiSizeL, TuiSizeS } from '@taiga-ui/core';\nimport { TuiBadge } from '@taiga-ui/kit';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент центы товара с отображением скидки.\n */\n@Component({\n standalone: true,\n selector: 'sc-cost-with-discount',\n imports: [CommonModule, TuiBadge, ...TuiHint],\n templateUrl: './cost-with-discount.component.html',\n styleUrl: './cost-with-discount.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CostWithDiscountComponent {\n /**\n * {@link Observable} изменения выбранного склада.\n */\n public readonly warehouseSelect$: Observable<ScIWarehouse | null> = inject(ScWarehouseService).getWarehouseSelectChange$();\n\n /**\n * Объект товара.\n */\n @Input()\n public product: ScProduct;\n\n /**\n * Размер компонента.\n */\n @Input()\n @HostBinding('attr.data-size')\n public size: TuiSizeS | TuiSizeL = 'm';\n}\n","@if (product) {\n <div\n *ngIf=\"warehouseSelect$ | async as warehouseSelect\"\n class=\"flex flex-wrap items-center gap-x-2 gap-y-1\"\n >\n <div class=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n <span\n [class.text-tui-text-02]=\"!product.isWarehouseStockExist(warehouseSelect.id)\"\n class=\"cost\"\n >{{ product.costRubString }}</span\n >\n <tui-badge\n *ngIf=\"product.discount as discount\"\n size=\"m\"\n [style.background]=\"'var(--tui-status-positive)'\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"text-body-xs\"\n >\n <tui-badge\n *ngIf=\"product.discount as discount\"\n size=\"s\"\n [style.background]=\"'var(--tui-background-base)'\"\n class=\"text-body-xs-bold text-tui-text-02\"\n >\n {{ discount.percent }}%\n </tui-badge>\n <span class=\"line-through\">{{ product.discountCostString }}</span>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">Дата окончания: {{ expiredAt }}</div>\n </ng-template>\n </tui-badge>\n </div>\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"font-extrabold text-tui-text-02\"\n >{{ product.costString }}</span\n >\n </div>\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { ScIWarehouse, ScIWarehouseStockCount, ScProduct, ScWarehouseService } from '@snabcentr/client-core';\nimport { map, Observable, switchMap } from 'rxjs';\n\n/**\n * Компонент данных о наличии товара на складе.\n */\n@Component({\n selector: 'sc-price-warehouse-stock',\n templateUrl: './sc-price-warehouse-stock.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['sc-price-warehouse-stock.component.scss'],\n})\nexport class ScPriceWarehouseStockComponent implements OnInit {\n /**\n * Строка классов для свойств статусов.\n */\n @Input() public classList: string;\n\n /**\n * Данные о товаре/услуге.\n */\n @Input() public product: ScProduct;\n\n /**\n * Признак, что необходимо отобразить подсказку по складам.\n */\n @Input() public withStockHint: boolean = true;\n\n /**\n * Признак, что необходимо отобразить список остатков по складам при выбранном основном складе.\n */\n @Input() public fromMain: boolean = true;\n\n /**\n * {@link Observable} изменения выбранного склада.\n */\n public selectedWarehouse$: Observable<ScIWarehouse | null>;\n\n /**\n * {@link Observable} изменения списка складов.\n */\n public warehousesList$?: Observable<Array<{ sc: ScIWarehouseStockCount; w: ScIWarehouse | undefined }> | undefined>;\n\n /**\n * Инициализирует экземпляр класса {@link ScPriceWarehouseStockComponent}.\n *\n * @param warehouseService Сервис для работы со складами.\n */\n public constructor(private readonly warehouseService: ScWarehouseService) {}\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.selectedWarehouse$ = this.fromMain ? this.warehouseService.getCatalogWarehouseChange$() : this.warehouseService.getWarehouseSelectChange$();\n\n this.warehousesList$ = this.selectedWarehouse$.pipe(\n switchMap((warehouse) =>\n this.warehouseService.getWarehouses$().pipe(\n map((warehouses: ScIWarehouse[]) => this.product.stockCount?.map((sc) => ({ w: warehouses.find((w) => w.id === sc.warehouseId), sc: sc }))),\n map((items) => items?.sort((item) => (item.w?.id === warehouse?.id ? -1 : 1)))\n )\n )\n );\n }\n}\n","<ng-container *ngIf=\"product\">\n <ng-container *ngIf=\"selectedWarehouse$ | async as warehouseSelect\">\n <span\n *tuiLet=\"withStockHint && !!(warehousesList$ | async)?.length as showStockHint\"\n [tuiHint]=\"showStockHint && stockHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n >\n <ng-container *ngIf=\"product.getNotStockMessage(warehouseSelect) as message\">\n <a\n *tuiLet=\"!!(product.properties?.planingIncomingDate || product.properties?.planingProductionDate) as showPlaningHint\"\n tuiLink\n [pseudo]=\"showPlaningHint\"\n [tuiHint]=\"showPlaningHint && planingHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [style.color]=\"'var(--tui-status-negative)'\"\n [ngClass]=\"classList\"\n >\n {{ message }}\n </a>\n </ng-container>\n <ng-template #planingHint>\n <span *ngIf=\"product.properties?.planingIncomingDate\">\n Планируемая дата поступления <br />\n на Основной склад:\n <span class=\"font-bold\">{{ product.properties?.planingIncomingDate }}</span>\n </span>\n <span *ngIf=\"product.properties?.planingProductionDate\">\n Планируемая дата <br />\n производства:\n <span class=\"font-bold\">{{ product.properties?.planingProductionDate }}</span>\n </span>\n </ng-template>\n <a\n *ngIf=\"product.isWarehouseStockExist(warehouseSelect.id)\"\n tuiLink\n [pseudo]=\"showStockHint\"\n [style.color]=\"'var(--tui-status-positive)'\"\n [ngClass]=\"classList\"\n >\n В наличии<ng-container *ngIf=\"product.getWarehouseStockCount(warehouseSelect.id) as count\"\n >:\n <span class=\"whitespace-nowrap\">{{ count }} {{ product.quantityUnit }}</span>\n </ng-container>\n </a>\n <span\n *ngIf=\"product.onOrder\"\n [style.color]=\"'var(--tui-status-warning)'\"\n [ngClass]=\"classList\"\n >Под заказ</span\n >\n </span>\n </ng-container>\n\n <ng-template #stockHint>\n <table\n *ngIf=\"selectedWarehouse$ | async as warehouseSelect\"\n class=\"stock-table table-auto text-body-s\"\n [ngClass]=\"classList\"\n >\n <tbody>\n <tr\n *ngFor=\"let item of warehousesList$ | async\"\n class=\"border-b\"\n >\n <ng-container>\n <td class=\"px-1\">{{ item.w?.name }}:</td>\n <td class=\"px-1\">{{ item.sc.count ? item.sc.count + ' ' + product.quantityUnit : 'В наличии' }}</td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </ng-template>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\nimport { SEARCH_TERM_PROVIDERS } from '@snabcentr/client-core';\nimport { TuiSizeL, TuiSizeS } from '@taiga-ui/core';\n\nimport { AbstractScPriceCard } from '../../directives';\n\n/**\n * Компонент карточки товара.\n */\n@Component({\n selector: 'sc-price-card',\n templateUrl: './sc-price-card.component.html',\n styleUrls: ['./sc-price-card.component.scss'],\n providers: [SEARCH_TERM_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPriceCardComponent extends AbstractScPriceCard {\n /**\n * Размер компонента.\n */\n @Input()\n @HostBinding('attr.data-size')\n public size: TuiSizeS | TuiSizeL = 'm';\n\n /**\n * Возвращает размер кнопки \"В корзину\".\n */\n protected getToCartButtonSize() {\n switch (this.size) {\n case 's':\n return 'xs';\n case 'm':\n return 's';\n case 'l':\n return 'm';\n default:\n return 's';\n }\n }\n}\n","<div\n *ngIf=\"product; else skeleton\"\n class=\"card-wrapper relative flex h-full w-auto flex-col rounded-xl p-1\"\n>\n <div class=\"flex min-h-8 items-center justify-between\">\n <span\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"code text-tui-text-02\"\n >\n Артикул: {{ product.code }}\n </span>\n\n <div class=\"flex items-center\">\n <tui-icon\n *ngIf=\"product.isPreviouslyOrdered\"\n icon=\"@tui.history\"\n class=\"text-lg\"\n [style.color]=\"'var(--tui-text-action)'\"\n ></tui-icon>\n <sc-favorite-button\n *ngIf=\"authStatus$ | async\"\n (clickEvent)=\"clickFavoriteEvent.emit()\"\n [showLoader]=\"favoriteShowLoader\"\n [isFavorite]=\"product.isFavorite\"\n [disabled]=\"!!product.primaryCategory?.isFavorite\"\n ></sc-favorite-button>\n </div>\n </div>\n\n <sc-hover-image-carousel\n (click)=\"clickCardEvent.emit()\"\n [images]=\"!isMobile ? getCardImagePreviewList(product) : [getCardImagePreview()]\"\n class=\"cursor-pointer\"\n ></sc-hover-image-carousel>\n <div\n class=\"flex grow flex-col justify-end\"\n [class.gap-1]=\"size === 'm'\"\n >\n <div\n class=\"flex grow flex-col\"\n [class.gap-1]=\"size === 'm'\"\n >\n <a\n tuiLink\n [attr.href]=\"href ?? null\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n class=\"name mb-auto\"\n >\n {{ product.name }}\n </a>\n <div\n *ngIf=\"product?.pack\"\n class=\"flex items-center gap-1 text-tui-text-02\"\n >\n Норма упаковки: {{ product.pack }}\n <tui-icon\n *ngIf=\"product.ignoreMinCountCheck\"\n icon=\"@tui.package\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n class=\"text-body-xl text-tui-text-01 opacity-90\"\n tuiHintDirection=\"top\"\n ></tui-icon>\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </div>\n <span *ngIf=\"!isMobile && (authStatus$ | async) && product?.costDate\">\n Дата:\n <a\n tuiLink\n [pseudo]=\"true\"\n class=\"text-tui-text-02\"\n (click)=\"clickPriceHistoryEvent.emit()\"\n >\n {{ product.costDate }}\n </a>\n </span>\n <sc-cost-with-discount\n [product]=\"product\"\n [size]=\"size\"\n ></sc-cost-with-discount>\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n <div class=\"mt-2 flex gap-2\">\n <button\n *ngIf=\"!showQuantityControl\"\n tuiButton\n (click)=\"clickAddToCartEvent.emit(product)\"\n [loading]=\"quantityShowLoader\"\n [size]=\"getToCartButtonSize()\"\n class=\"grow !font-extrabold\"\n iconStart=\"@tui.shopping-cart\"\n >\n В корзину\n </button>\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n [size]=\"size\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n [showLoader]=\"quantityShowLoader\"\n (clickClearEvent)=\"clickClearEvent.emit(cartItem)\"\n class=\"w-full\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-full\"\n ></sc-input-quantity>\n <tui-avatar\n *ngIf=\"product.cartItem && !showQuantityControl\"\n src=\"@tui.check\"\n size=\"s\"\n [style.background]=\"'var(--tui-status-warning-pale)'\"\n [style.color]=\"'var(--tui-background-accent-1)'\"\n ></tui-avatar>\n </div>\n </div>\n</div>\n\n<ng-template #skeleton>\n <div class=\"card-wrapper relative flex h-full w-auto flex-col rounded-xl p-1\"></div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { SEARCH_TERM_PROVIDERS } from '@snabcentr/client-core';\n\nimport { AbstractScPriceCard } from '../../directives';\n\n/**\n * Компонент карточки товара во всю строку.\n */\n@Component({\n selector: 'sc-price-card-inline',\n templateUrl: './sc-price-card-inline.component.html',\n styleUrls: ['./sc-price-card-inline.component.scss'],\n providers: [SEARCH_TERM_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPriceCardInlineComponent extends AbstractScPriceCard {}\n","<div\n *ngIf=\"product; else skeleton\"\n class=\"card-wrapper relative flex w-full gap-4 rounded-xl p-1 hover:bg-tui-background-neutral-1\"\n>\n <sc-hover-image-carousel\n (click)=\"clickCardEvent.emit()\"\n [images]=\"!isMobile ? getCardImagePreviewList(product) : [getCardImagePreview()]\"\n [isShowActions]=\"false\"\n class=\"size-24 shrink-0 cursor-pointer self-center\"\n ></sc-hover-image-carousel>\n <div class=\"flex grow flex-col gap-1\">\n <div\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n class=\"text-tui-text-02\"\n >\n Артикул: {{ product.code }}\n </div>\n <div class=\"flex flex-col gap-1\">\n <a\n tuiLink\n [attr.href]=\"href ?? null\"\n [tuiHighlight]=\"(search$ | async) ?? ''\"\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n class=\"!text-body-m-bold\"\n >\n {{ product.name }}\n </a>\n <div\n *ngIf=\"product?.pack\"\n class=\"flex items-center gap-1 text-tui-text-02\"\n >\n Норма упаковки: {{ product.pack }}\n <tui-icon\n *ngIf=\"product.ignoreMinCountCheck\"\n icon=\"@tui.package\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"text-body-xl text-tui-text-01 opacity-90\"\n ></tui-icon>\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-x-4\">\n <sc-cost-with-discount [product]=\"product\"></sc-cost-with-discount>\n\n <span *ngIf=\"(authStatus$ | async) && product?.costDate\">\n Дата:\n <a\n tuiLink\n [pseudo]=\"true\"\n (click)=\"clickPriceHistoryEvent.emit()\"\n class=\"text-tui-text-02\"\n >\n {{ product.costDate }}\n </a>\n </span>\n </div>\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n </div>\n <div class=\"flex w-40 shrink-0 flex-col justify-between\">\n <div class=\"flex justify-end\">\n <tui-avatar\n *ngIf=\"product.isPreviouslyOrdered\"\n src=\"@tui.history\"\n size=\"s\"\n [style.background]=\"'none'\"\n [style.color]=\"'var(--tui-text-action)'\"\n ></tui-avatar>\n <sc-favorite-button\n *ngIf=\"authStatus$ | async\"\n (clickEvent)=\"clickFavoriteEvent.emit()\"\n [showLoader]=\"favoriteShowLoader\"\n [isFavorite]=\"product.isFavorite\"\n [disabled]=\"!!product.primaryCategory?.isFavorite\"\n ></sc-favorite-button>\n </div>\n <div class=\"flex gap-2\">\n <button\n *ngIf=\"!showQuantityControl\"\n tuiButton\n (click)=\"clickAddToCartEvent.emit(product)\"\n [loading]=\"quantityShowLoader\"\n size=\"s\"\n iconStart=\"@tui.shopping-cart\"\n class=\"grow !font-extrabold\"\n >\n В корзину\n </button>\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n size=\"m\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n [showLoader]=\"quantityShowLoader\"\n (clickClearEvent)=\"clickClearEvent.emit(cartItem)\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-full\"\n ></sc-input-quantity>\n <tui-avatar\n *ngIf=\"product.cartItem && !showQuantityControl\"\n src=\"@tui.check\"\n size=\"s\"\n [style.background]=\"'var(--tui-status-warning-pale)'\"\n [style.color]=\"'var(--tui-background-accent-1)'\"\n ></tui-avatar>\n </div>\n </div>\n</div>\n\n<ng-template #skeleton>\n <div class=\"tui-skeleton flex h-[8.25rem] w-full overflow-hidden rounded-xl\"></div>\n</ng-template>\n","/* eslint-disable class-methods-use-this,lodash/prefer-lodash-method */\n\nimport { ChangeDetectionStrategy, Component, Inject, inject, Input, OnInit, Optional } from '@angular/core';\nimport { ScCatalogService, ScProduct, ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';\nimport { TUI_IS_MOBILE, TuiDay, TuiDayRange, tuiIsFalsy, tuiIsPresent, TuiMonth, tuiPure, TuiStringHandler } from '@taiga-ui/cdk';\nimport { TUI_MONTHS, TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { filter, map, Observable, shareReplay, startWith, tap } from 'rxjs';\n\n/**\n * График истории цен товара или услуги.\n */\n@Component({\n selector: 'sc-price-history',\n templateUrl: './sc-price-history.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPriceHistoryComponent implements OnInit {\n /**\n * {@link Observable} временного промежутка истории цен.\n */\n public range$: Observable<TuiDayRange>;\n\n /**\n * Товар или услуга, для которого необходимо отобразить историю цен.\n */\n @Input() public product: ScProduct;\n\n /**\n * {@link Observable} истории цен.\n */\n public history$?: Observable<ReadonlyArray<[TuiDay, number]> | null>;\n\n /**\n * {@link Observable} изменения состояния загрузки данных истории цен.\n */\n public loadingHistory$?: Observable<boolean>;\n\n /**\n * Максимальная цена товара.\n */\n public priceInfo$?: Observable<{\n min: number;\n max: number;\n }>;\n\n /**\n * Признак того, отображается этот компонент на мобильном устройстве или нет.\n */\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n\n /**\n * {@link Observable} функция для преобразования значения number в строку в подсказке по оси X.\n */\n public readonly xStringify$: Observable<TuiStringHandler<TuiDay>> = this.months$.pipe(\n map(\n (months) =>\n ({ month, day }) =>\n // eslint-disable-next-line security/detect-object-injection\n `${months[month]}, ${day}`\n )\n );\n\n /**\n * Относительные отступы от верхнего и нижнего края в процентах.\n */\n public readonly paddingPercent: number = 10;\n\n /**\n * Функция для преобразования значения number в строку в подсказке по оси Y.\n *\n * @param value Значение оси Y.\n */\n public readonly yStringify: TuiStringHandler<number> = (value) => `${value.toLocaleString('ru-RU')} ₽`;\n\n /**\n * Инициализирует экземпляр класса {@link ScPriceHistoryComponent}.\n *\n * @param catalogService Сервис для работы с каталогом.\n * @param months$ Перечисление месяцев.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n private readonly catalogService: ScCatalogService,\n @Inject(TUI_MONTHS) private readonly months$: Observable<readonly string[]>,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Optional()\n @Inject(POLYMORPHEUS_CONTEXT)\n private readonly context?: TuiDialogContext<void, { product: ScProduct }>\n ) {\n if (context) {\n this.product = context.data.product;\n }\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.history$ = this.catalogService.getPriceHistory$(this.product).pipe(\n filter(tuiIsPresent),\n map((history) =>\n Object.keys(history)\n .map((item): [TuiDay, number] => [TuiDay.normalizeParse(item, 'DMY'), history[String(item)].cost])\n .sort((a, b) => (a[0] > b[0] ? 1 : -1))\n ),\n startWith(null),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n\n this.loadingHistory$ = this.history$.pipe(map(tuiIsFalsy));\n\n this.priceInfo$ = this.history$.pipe(\n filter(tuiIsPresent),\n tap(() => {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.productPriceHistoryShow,\n params: {\n product_id: this.product.id,\n },\n });\n }),\n filter((history) => history.length > 1),\n map((history) => history.map((item) => item[1])),\n map((values) => ({\n min: Math.min(...values),\n max: Math.max(...values),\n }))\n );\n\n this.range$ = this.history$.pipe(\n filter(tuiIsPresent),\n filter((history) => history.length > 1),\n map((value: ReadonlyArray<[TuiDay, number]>) => ({ from: value.at(0)?.[0], to: value.at(-1)?.[0] })),\n filter((range): range is { from: TuiDay; to: TuiDay } => !!range.from && !!range.to),\n map((range) => new TuiDayRange(range.from, range.to))\n );\n }\n\n /**\n * Вычисляет подписи даты к оси X.\n *\n * @param param0 {@link TuiDayRange} Временной промежуток истории цен.\n * @param param0.from {@link TuiDay} Дата начала истории цен.\n * @param param0.to {@link TuiDay} Дата конца истории цен.\n */\n @tuiPure\n public computeLabels$({ from, to }: TuiDayRange): Observable<readonly string[]> {\n return this.months$.pipe(\n map((months) => [\n ...Array.from({ length: TuiMonth.lengthBetween(from, to) + 1 }, (_, index) => {\n const previousYear = from.append({ month: index - 1 }).year; // Начальный год\n const currentYear = from.append({ month: index }).year;\n\n return `${this.isMobile || previousYear === currentYear ? '' : currentYear} ${months[from.append({ month: index }).month]}`;\n }),\n '',\n ])\n );\n }\n\n /**\n * Вычисляет данные для отображения на графике.\n *\n * @param param0 {@link TuiDayRange} Временной промежуток истории цен.\n * @param param0.from {@link TuiDay} Дата начала истории цен.\n * @param param0.to {@link TuiDay} Дата конца истории цен.\n * @param history История цен.\n */\n @tuiPure\n public computeValue({ from, to }: TuiDayRange, history: ReadonlyArray<[TuiDay, number]>): ReadonlyArray<[TuiDay, number]> {\n return (\n Array.from({ length: TuiDay.lengthBetween(from, to) + 1 })\n .fill(0)\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce<ReadonlyArray<[TuiDay, number]>>((array, _, index) => {\n const data = from.append({ day: index });\n return [\n ...array,\n [\n data,\n (history.find((valueHistory, indexHistory, arrayHistory) => data.daySame(valueHistory[0]) || data.dayBefore(arrayHistory[indexHistory + 1][0])) ??\n history[0])[1],\n ],\n ];\n }, [])\n );\n }\n}\n","<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\">от {{ priceInfo.min.toLocaleString() }} ₽ до {{ priceInfo.max.toLocaleString() }} ₽</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 <ng-container *tuiLet=\"priceInfo.max - priceInfo.min as height\">\n <tui-line-days-chart\n *ngIf=\"(height / 100) * paddingPercent as padding\"\n [height]=\"height + (height / 100) * paddingPercent * 2\"\n [smoothingFactor]=\"10\"\n [y]=\"priceInfo.min - (height / 100) * paddingPercent\"\n [value]=\"computeValue(range, history)\"\n [xStringify]=\"xStringify$ | async\"\n [yStringify]=\"yStringify\"\n [hintContent]=\"hint\"\n class=\"chart\"\n ></tui-line-days-chart>\n </ng-container>\n </tui-axes>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #isNotExist>\n <p class=\"text-base font-bold\">Цена на товар не изменялась</p>\n </ng-template>\n <ng-template\n #hint\n let-data\n >\n <div class=\"font-bold\">{{ data[1].toLocaleString() }} ₽</div>\n <div>{{ data[0] }}</div>\n </ng-template>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, inject } from '@angular/core';\nimport {\n SC_NEXT_PAGE_PAGINATION_CLICK,\n SC_PRODUCT_PAGINATION_OPTIONS,\n ScICategoryProductPaginationParams,\n ScIPaginationMeta,\n ScPaginationService,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiIsPresent } from '@taiga-ui/cdk';\nimport { filter, map, Observable } from 'rxjs';\n\n/**\n * Компонент элементов управления пагинацией списка товаров.\n */\n@Component({\n selector: 'sc-price-list-pagination',\n templateUrl: './sc-price-list-pagination.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPriceListPaginationComponent {\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Сервис пагинации.\n */\n private readonly paginationService = inject<ScPaginationService<ScICategoryProductPaginationParams>>(ScPaginationService<ScICategoryProductPaginationParams>, {\n skipSelf: true,\n });\n\n /**\n * Дополнительные данные пагинации.\n */\n public meta$: Observable<ScIPaginationMeta> = this.paginationService.dataAccumulated$.pipe(\n filter(tuiIsPresent),\n map((pagination) => pagination.meta)\n );\n\n /**\n * Признак, что кнопка неактивна.\n */\n public disabled$: Observable<boolean> = this.paginationService.dataAccumulated$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScPriceListPaginationComponent}.\n *\n * @param nextPageClickEvent Событие нажатия на кнопку \"Показать следующие N позиций\".\n * @param options Значения пагинации списка товаров категории по умолчанию.\n */\n public constructor(\n @Inject(SC_NEXT_PAGE_PAGINATION_CLICK) public readonly nextPageClickEvent: EventEmitter<void>,\n @Inject(SC_PRODUCT_PAGINATION_OPTIONS) public readonly options: ScICategoryProductPaginationParams\n ) {}\n\n /**\n * Обработка нажатия на кнопку \"Показать следующие N позиций\".\n */\n public showMore(): void {\n this.nextPageClickEvent.emit();\n\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.showMoreClick,\n params: {\n category_id: this.options.categoryId,\n },\n });\n }\n}\n","<ng-container *ngIf=\"meta$ | async as meta\">\n <button\n *ngIf=\"meta?.currentPage !== meta?.lastPage\"\n tuiButton\n (click)=\"showMore()\"\n [disabled]=\"!!(disabled$ | async)\"\n appearance=\"secondary\"\n class=\"!font-bold\"\n >\n Показать ещё {{ options.perPage }} товаров\n </button>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { TuiAxes, TuiLineDaysChart, TuiLineDaysChartHint } from '@taiga-ui/addon-charts';\nimport { TuiHovered, TuiLet, TuiRepeatTimes } from '@taiga-ui/cdk';\nimport { TuiButton, TuiHint, TuiIcon, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiAvatar, TuiBadge, TuiButtonLoading, TuiElasticContainer, TuiFieldErrorPipe, TuiHighlight, TuiLineClamp } from '@taiga-ui/kit';\nimport { TuiInputNumberModule, TuiIslandDirective, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScCategoryCardComponent } from './category-card/sc-category-card.component';\nimport { CostWithDiscountComponent } from './cost-with-discount/cost-with-discount.component';\nimport { HoverImageCarouselComponent } from './hover-image-carousel/hover-image-carousel.component';\nimport { ScInputQuantityComponent } from './input-quantity/sc-input-quantity.component';\nimport { ScPriceCardComponent } from './price-card/sc-price-card.component';\nimport { ScPriceCardInlineComponent } from './price-card-inline/sc-price-card-inline.component';\nimport { ScPriceHistoryComponent } from './price-history/sc-price-history.component';\nimport { ScPriceListPaginationComponent } from './price-list-pagination/sc-price-list-pagination.component';\nimport { ScPriceWarehouseStockComponent } from './price-warehouse-stock/sc-price-warehouse-stock.component';\nimport { ScFavoriteButtonComponent } from './sc-favorite-button/sc-favorite-button.component';\n\n/**\n * Модуль каталога.\n */\n@NgModule({\n declarations: [\n ScPriceListPaginationComponent,\n ScCategoryCardComponent,\n ScFavoriteButtonComponent,\n ScInputQuantityComponent,\n ScPriceCardComponent,\n ScPriceWarehouseStockComponent,\n ScPriceHistoryComponent,\n ScPriceCardInlineComponent,\n ],\n exports: [\n ScPriceListPaginationComponent,\n ScCategoryCardComponent,\n ScFavoriteButtonComponent,\n ScInputQuantityComponent,\n ScPriceCardComponent,\n ScPriceWarehouseStockComponent,\n ScPriceHistoryComponent,\n ScPriceCardInlineComponent,\n ],\n imports: [\n CommonModule,\n RouterModule,\n TuiButton,\n TuiIcon,\n TuiIslandDirective,\n TuiInputNumberModule,\n TuiLabel,\n TuiTextfieldControllerModule,\n FormsModule,\n ReactiveFormsModule,\n ...TuiHint,\n TuiFieldErrorPipe,\n TuiLoader,\n TuiLink,\n TuiElasticContainer,\n TuiLet,\n TuiRepeatTimes,\n TuiHighlight,\n TuiLineDaysChart,\n TuiLineDaysChartHint,\n TuiAxes,\n TuiButtonLoading,\n TuiAvatar,\n TuiBadge,\n HoverImageCarouselComponent,\n TuiLineClamp,\n TuiHovered,\n CostWithDiscountComponent,\n ],\n})\nexport class ScCatalogModule {}\n","/* eslint-disable no-underscore-dangle */\n\nimport { ChangeDetectionStrategy, Component, EventEmitter, Inject, inject, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ScCartItem, ScImageHelper, ScProduct, ScUnitsHelper } from '@snabcentr/client-core';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { TuiPreviewDialogService } from '@taiga-ui/kit';\nimport { Observable, skip } from 'rxjs';\n\n/**\n * Компонент карточки элемента корзины.\n */\n@Component({\n selector: 'sc-cart-item-mobile',\n templateUrl: './sc-cart-item-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScCartItemMobileComponent implements OnInit {\n /**\n * Элемент корзины.\n */\n @Input()\n public set cartItem(data: ScCartItem | undefined) {\n this._cartItem = data;\n\n if (data) {\n this.quantityControl.patchValue(data.quantity);\n }\n }\n\n /**\n * Элемент корзины.\n */\n public get cartItem(): ScCartItem | undefined {\n return this._cartItem;\n }\n\n /**\n * Ссылка на представление спецификации.\n */\n @ViewChild('specificationPreview')\n private readonly specificationPreviewRef?: TemplateRef<TuiDialogContext>;\n\n /**\n * {@link FormControl} поля ввода количества товара в корзине.\n */\n public quantityControl: FormControl<number | null> = new FormControl<number | null>(0, { updateOn: 'blur' });\n\n /**\n * {@link Observable} изменения количества товара в корзине.\n */\n @Output()\n public quantityValueChanges: Observable<number | null> = this.quantityControl.valueChanges.pipe(skip(1));\n\n /**\n * Событие нажатия на кнопку \"Удалить из корзины\".\n */\n @Output()\n public clickDeleteEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку \"Удалить из корзины\".\n */\n @Output()\n public clickSettingsEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на карточку.\n */\n @Output()\n public clickCardEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Хелпер для работы с изображениями товара.\n */\n private readonly imageHelper = inject(ScImageHelper);\n\n /**\n * Элемент корзины.\n */\n private _cartItem?: ScCartItem;\n\n /**\n * Инициирует экземпляр класса {@link ScCartItemMobileComponent}.\n *\n * @param unitsHelper Экземпляр класса-помощника для работы со значениями единиц измерения товара.\n * @param previewDialogService Сервис диалогового окна предварительного просмотра.\n */\n public constructor(\n public readonly unitsHelper: ScUnitsHelper,\n @Inject(TuiPreviewDialogService)\n private readonly previewDialogService: TuiPreviewDialogService\n ) {}\n\n /**\n * Продукт элемента корзины.\n */\n public get product(): ScProduct | undefined {\n return this.cartItem?.product;\n }\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.quantityValueChanges = this.quantityControl.valueChanges;\n }\n\n /**\n * Отобразить спецификацию.\n */\n public showSpecification(): void {\n this.previewDialogService.open(this.specificationPreviewRef ?? '').subscribe();\n }\n\n /**\n * Возвращает ссылку на изображение карточки товара.\n *\n * @param product Позиция товара/услуги.\n */\n public getCardImage(product: ScProduct): string {\n return this.imageHelper.getImage(product);\n }\n}\n","<ng-container *ngIf=\"cartItem && product; else skeleton\">\n <div class=\"flex min-w-72 gap-2 rounded-xl border border-tui-base-04 bg-white p-2 shadow-sc-2\">\n <div class=\"flex w-40 items-center\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage(product)\"\n [alt]=\"product.name\"\n class=\"max-h-full w-full rounded-xl object-cover\"\n />\n </div>\n <div class=\"flex w-full flex-col items-center justify-between gap-2 sm:flex-row sm:gap-5\">\n <div class=\"flex max-w-full flex-col gap-1 self-start\">\n <a\n tuiLink\n (click)=\"clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n\n <div class=\"flex w-full flex-wrap gap-x-2 gap-y-1 text-xs text-tui-base-07\">\n <p *ngIf=\"product.pack\">\n Норма упаковки: {{ product.pack }}\n <tui-icon\n *ngIf=\"product.ignoreMinCountCheck\"\n icon=\"@tui.package\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"text-sm\"\n ></tui-icon>\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </p>\n <p>Артикул: {{ product.code }}</p>\n </div>\n\n <div class=\"flex w-full flex-wrap items-center gap-x-2 gap-y-1\">\n <p\n *ngIf=\"!product.priceInRub\"\n class=\"font-bold\"\n >\n {{ product.costString }}\n </p>\n <p class=\"text-xs font-bold text-tui-text-01\">{{ product.costRubString }}</p>\n <span\n *ngIf=\"product.discount\"\n class=\"flex items-center\"\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-icon\n icon=\"@tui.info\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"!h-4 !text-xs\"\n ></tui-icon>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">Дата окончания: {{ expiredAt }}</div>\n </ng-template>\n </span>\n </div>\n\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n\n <div\n *ngIf=\"cartItem.height || cartItem.length || cartItem.width\"\n class=\"flex items-center gap-1\"\n >\n <button\n tuiIconButton\n iconStart=\"@tui.settings\"\n (click)=\"clickSettingsEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-wrap gap-x-2 text-xs text-tui-base-07\">\n <p *ngIf=\"cartItem.marker\">Маркировка: {{ cartItem.marker }}</p>\n <p *ngIf=\"cartItem.width\">Ширина: {{ cartItem.width }} м.</p>\n <ng-container *ngIf=\"cartItem.height; else length\">\n <p>Высота: {{ cartItem.height }} м.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"cartItem.length\">Длина: {{ cartItem.length }} м.</p>\n </ng-template>\n </div>\n </div>\n\n <a\n tuiLink\n *ngIf=\"cartItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >Спецификация</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=\"cartItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"cartItem.specificationImgUrl\"\n />\n <button\n iconStart=\"@tui.x\"\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 class=\"flex flex-col gap-1 self-start 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 [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-28\"\n ></sc-input-quantity>\n <button\n tuiIconButton\n iconStart=\"@tui.trash-2\"\n [style.border-radius.%]=\"100\"\n size=\"xs\"\n (click)=\"clickDeleteEvent.emit()\"\n ></button>\n </div>\n <p class=\"text-sm font-bold text-tui-text-01\">\n Итого: {{ cartItem.costRub | tuiFormatNumber: { precision: 2, decimalSeparator: '.', rounding: 'ceil' } | async }} {{ 'RUB' | tuiCurrency }}\n </p>\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","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TuiCurrencyPipe } from '@taiga-ui/addon-commerce';\nimport { TuiButton, TuiFormatNumberPipe, TuiHint, TuiIcon, TuiLink } from '@taiga-ui/core';\nimport { TuiPreview } from '@taiga-ui/kit';\nimport { PolymorpheusOutlet, PolymorpheusTemplate } from '@taiga-ui/polymorpheus';\n\nimport { ScCatalogModule } from '../catalog';\nimport { ScCartItemMobileComponent } from './cart-item-mobile/sc-cart-item-mobile.component';\n\n/**\n * Модуль корзины.\n */\n@NgModule({\n declarations: [ScCartItemMobileComponent],\n exports: [ScCartItemMobileComponent],\n imports: [\n CommonModule,\n TuiLink,\n ScCatalogModule,\n TuiButton,\n TuiCurrencyPipe,\n TuiFormatNumberPipe,\n TuiIcon,\n ...TuiHint,\n FormsModule,\n ReactiveFormsModule,\n ...TuiPreview,\n PolymorpheusTemplate,\n PolymorpheusOutlet,\n ],\n})\nexport class ScCartModule {}\n","/* eslint-disable @typescript-eslint/unbound-method,lodash/prefer-lodash-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, DestroyRef, Inject, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n ScConvertersService,\n ScDeliveryAddressService,\n ScIDeliveryAddress,\n ScIDeliveryAddressOnDataCreate,\n ScISuggestionAddress,\n ScISuggestionType,\n ScSuggestion,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n} from '@snabcentr/client-core';\nimport { TUI_IS_MOBILE } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { YaReadyEvent } from 'angular8-yandex-maps';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth';\n\n/**\n * Компонент добавления адреса доставки.\n */\n@Component({\n selector: 'sc-add-delivery-address-dialog',\n templateUrl: './sc-add-delivery-address-dialog.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddDeliveryAddressDialogComponent implements AfterViewInit {\n /**\n * Округляет координаты до 6 цифр после запятой.\n *\n * @param coords Координаты точки.\n */\n private static roundCoordinate(coords: number[]): number[] {\n return coords.map((coord) => Math.round(coord * 1e6) / 1e6);\n }\n\n /**\n * Ссылка для автоматического управления уничтожением зависимостей.\n */\n private destroyRef: DestroyRef = inject(DestroyRef);\n\n /**\n * Признак того, отображается этот компонент на мобильном устройстве или нет.\n */\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit$: Subject<void> = new Subject<void>();\n\n /**\n * Координаты центра карты по умолчанию.\n */\n public readonly defaultCenterMap: number[] = [57.000353, 40.97393];\n\n /**\n * Масштаб карты по умолчанию.\n */\n public readonly defaultZoomMap: number = 11;\n\n /**\n * {@link Observable} запроса данных добавления адрес доставки.\n */\n private readonly request$: Observable<ScIDeliveryAddress | null> = this.onSubmit$.pipe(\n filter(() => this.form.valid),\n map(() => this.form.value as ScIDeliveryAddressOnDataCreate),\n switchMap((value) =>\n this.deliveryAddressService.createDeliveryAddress$(this.convertersService.removeNullRecursive<ScIDeliveryAddressOnDataCreate>(value)).pipe(\n tap(() => {\n this.context.completeWith();\n }),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n if (errors) {\n Object.keys(errors).forEach((key) => {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n });\n } else if (message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n }\n\n return of({} as ScIDeliveryAddress);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map((data) => data === null));\n\n /**\n * Группа с полями адресов.\n */\n public addressControl: FormControl<ScISuggestionAddress | string | null> = new FormControl<ScISuggestionAddress | string | null>(null, Validators.required);\n\n /**\n * Настройки карты.\n */\n public options: ymaps.IMapOptions = {\n autoFitToViewport: 'always',\n yandexMapDisablePoiInteractivity: false,\n maxZoom: 19,\n };\n\n /**\n * Форма для создания адреса доставки.\n */\n public readonly form = new FormGroup({\n address: this.addressControl,\n coordinates: new FormGroup({\n lat: new FormControl<number | null>(null, Validators.required),\n long: new FormControl<number | null>(null, Validators.required),\n }),\n contact: new FormGroup({\n name: new FormControl<string | null>(null, Validators.required),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n email: new FormControl<string | null>(null, Validators.email),\n position: new FormControl<string | null>(null, Validators.required),\n }),\n });\n\n /**\n * Точка адреса на карте.\n */\n public addressPlacemark?: ymaps.Placemark;\n\n /**\n * Яндекс карта.\n */\n public yaMap?: ymaps.Map;\n\n /**\n * Инициализирует экземпляр класса {@link ScAddDeliveryAddressDialogComponent}.\n *\n * @param deliveryAddressService Сервис работы с адресами доставки.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n * @param convertersService Сервис конвертации данных.\n */\n public constructor(\n private readonly deliveryAddressService: ScDeliveryAddressService,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Inject(POLYMORPHEUS_CONTEXT) public readonly context: TuiDialogContext<void, void>,\n private readonly convertersService: ScConvertersService\n ) {}\n\n /** @inheritdoc */\n public ngAfterViewInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileDeliveryAddressAddShow,\n });\n\n this.addressControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.removeGeoCoordinates();\n });\n }\n\n /**\n * Обработчик загрузки карты на странице.\n *\n * @param target Экземпляр целевого объекта.\n * @param target.target Экземпляр целевого объекта.\n */\n public onMapReadyHandle({ target }: YaReadyEvent<ymaps.Map>): void {\n this.yaMap = target;\n\n if (this.addressPlacemark) {\n target.geoObjects.add(this.addressPlacemark);\n\n const bounds = this.addressPlacemark.geometry?.getBounds();\n\n if (bounds) {\n target.setBounds(bounds);\n }\n }\n }\n\n /**\n * Обработчик выбора адреса доставки.\n *\n * @param suggestion Объект подсказки ареса.\n */\n public onSelectedAddress(suggestion: ScSuggestion): void {\n if ('addressString' in suggestion && suggestion.geoCoordinates) {\n const coords = ScAddDeliveryAddressDialogComponent.roundCoordinate([suggestion.geoCoordinates.lat, suggestion.geoCoordinates.long]);\n\n if (!this.addressPlacemark) {\n this.addressPlacemark = this.createPlacemark(coords);\n }\n\n this.setGeoCoordinates(coords);\n\n if (!this.yaMap?.geoObjects.getLength()) {\n this.yaMap?.geoObjects.add(this.addressPlacemark);\n }\n\n const bounds = this.addressPlacemark.geometry?.getBounds();\n\n if (bounds) {\n this.yaMap?.setBounds(bounds);\n this.yaMap?.setZoom(17);\n }\n }\n }\n\n /**\n * Устанавливает {@link addressPlacemark} точку на определённые координаты.\n *\n * @param coords Координаты точки.\n */\n private setGeoCoordinates(coords: number[]): void {\n if (this.addressPlacemark) {\n this.addressPlacemark.geometry?.setCoordinates(coords);\n\n this.form.patchValue({\n coordinates: {\n lat: Number(coords[0].toFixed(6)),\n long: Number(coords[1].toFixed(6)),\n },\n });\n }\n }\n\n /**\n * Устанавливает {@link addressPlacemark} точку на определённые координаты.\n */\n private removeGeoCoordinates(): void {\n if (this.addressPlacemark) {\n this.yaMap?.geoObjects.remove(this.addressPlacemark);\n\n this.form.patchValue({\n coordinates: {\n lat: null,\n long: null,\n },\n });\n\n this.yaMap?.setCenter(this.defaultCenterMap);\n this.yaMap?.setZoom(this.defaultZoomMap);\n }\n }\n\n /**\n * Создаёт объект точки и устанавливает события для него.\n *\n * @param coords Координаты точки.\n */\n private createPlacemark(coords: number[]): ymaps.Placemark {\n const placemark = new ymaps.Placemark(\n coords,\n {\n iconCaption: '',\n },\n {\n preset: 'islands',\n draggable: true,\n }\n );\n\n placemark.events.add('dragend', () => {\n const coord = this.addressPlacemark?.geometry?.getCoordinates();\n\n if (coord) {\n this.setGeoCoordinates(ScAddDeliveryAddressDialogComponent.roundCoordinate(coord));\n }\n });\n\n return placemark;\n }\n}\n","<div class=\"relative flex flex-col gap-3 md:flex-row\">\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit$.next()\"\n class=\"flex w-full flex-col gap-3\"\n >\n <label tuiLabel>\n Адрес доставки\n <tui-input\n [pseudoInvalid]=\"(addressControl.valid && form.controls.coordinates.invalid) || null\"\n formControlName=\"address\"\n >\n Адрес доставки\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n (selectedClick)=\"onSelectedAddress($event)\"\n ></sc-suggestion-field>\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"address\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n <tui-error\n *ngIf=\"addressControl.valid && form.controls.coordinates.invalid\"\n error=\"Выберите вариант из списка\"\n ></tui-error>\n </label>\n <div\n formGroupName=\"contact\"\n class=\"flex grow flex-col gap-2\"\n >\n <p class=\"w-full font-bold\">Контактное лицо:</p>\n <label tuiLabel>\n Ф.И.О.\n <tui-input formControlName=\"name\">\n Ф.И.О.\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Телефон\n <tui-input-phone formControlName=\"phone\"> Телефон </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Адрес электронной почты\n <tui-input formControlName=\"email\">\n <input\n tuiTextfieldLegacy\n type=\"email\"\n />\n Адрес электронной почты\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel>\n Должность\n <tui-input formControlName=\"position\"> Должность </tui-input>\n <tui-error\n formControlName=\"position\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n </div>\n <div class=\"flex justify-center gap-8\">\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n [iconStart]=\"isMobile ? '@tui.x' : '@tui.x'\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n <button\n tuiButton\n [iconStart]=\"isMobile ? '@tui.save' : '@tui.save'\"\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n >\n Добавить\n </button>\n </div>\n </form>\n\n <div\n class=\"absolute -z-10 flex size-full md:w-1/2\"\n [ngClass]=\"{ 'z-0 relative': addressPlacemark }\"\n >\n <div\n class=\"flex-auto\"\n [ngClass]=\"{ 'pointer-events-none opacity-50': form.controls.coordinates.invalid }\"\n >\n <ya-map\n [zoom]=\"11\"\n [state]=\"{ controls: [] }\"\n (ready)=\"onMapReadyHandle($event)\"\n [options]=\"options\"\n ></ya-map>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ScDeliveryAddressService, ScIContact, ScIDeliveryAddress } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент адреса доставки.\n */\n@Component({\n selector: 'sc-delivery-address-accordion-item',\n templateUrl: './sc-delivery-address-accordion-item.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScDeliveryAddressAccordionItemComponent implements OnInit {\n /**\n * Адрес доставки.\n */\n @Input()\n public deliveryAddress: ScIDeliveryAddress;\n\n /**\n * Список банковских счетов контрагента.\n */\n public contacts$?: Observable<ScIContact[] | null>;\n\n /**\n * Событие нажатия на кнопку удаления адреса доставки.\n */\n @Output()\n public deleteDeliveryAddressClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица адресу доставки.\n */\n @Output()\n public addDeliveryAddressContactClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица адреса доставки.\n */\n @Output()\n public deleteDeliveryAddressContactClick: EventEmitter<{ contact: ScIContact; address: ScIDeliveryAddress }> = new EventEmitter<{\n contact: ScIContact;\n address: ScIDeliveryAddress;\n }>();\n\n /**\n * Инициализирует экземпляр класса {@link ScDeliveryAddressAccordionItemComponent}.\n *\n * @param deliveryAddressService Сервис работы с адресами доставки.\n */\n public constructor(private readonly deliveryAddressService: ScDeliveryAddressService) {}\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.contacts$ = this.deliveryAddressService.getDeliveryAddressContacts$(this.deliveryAddress.id);\n }\n\n /**\n * Обработчик нажатия на кнопку удаления контактного лица у адреса доставки.\n *\n * @param contact Контактное лицо.\n * @param address Адрес доставки клиента.\n */\n public onDeleteContragentContactClick(contact: ScIContact, address: ScIDeliveryAddress): void {\n this.deleteDeliveryAddressContactClick.emit({ contact: contact, address: address });\n }\n}\n","<sc-accordion [showAddButton]=\"false\">\n {{ deliveryAddress.address }}\n\n <ng-template scAccordionContent>\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex gap-2\">\n <div class=\"flex grow flex-col gap-2\">\n <span> Адрес: {{ deliveryAddress.address }} </span>\n <span *ngIf=\"deliveryAddress.comment\"> Комментарий: {{ deliveryAddress.comment }} </span>\n </div>\n <!-- Функционал удаления временно не доступен пользователю. -->\n <!-- <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n icon=\"@tui.trash-2\"\n appearance=\"flat\"\n (click)=\"$event.stopPropagation(); deleteDeliveryAddressClick.emit(deliveryAddress)\"\n ></button> -->\n </div>\n\n <sc-contacts-accordion\n *ngIf=\"contacts$\"\n [contacts$]=\"contacts$\"\n (addContactClick)=\"addDeliveryAddressContactClick.next(deliveryAddress)\"\n (deleteButtonClick)=\"onDeleteContragentContactClick($event, deliveryAddress)\"\n ></sc-contacts-accordion>\n </div>\n </ng-template>\n</sc-accordion>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';\nimport { ScDeliveryAddressService, ScIContact, ScIDeliveryAddress } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Компонент адресов доставки.\n */\n@Component({\n selector: 'sc-delivery-address-accordion',\n templateUrl: './sc-delivery-address-accordion.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScDeliveryAddressAccordionComponent {\n /**\n * {@link Observable} данных адресов доставки.\n */\n public deliveryAddress$: Observable<ScIDeliveryAddress[] | null> = this.deliveryAddressService.deliveryAddresses$;\n\n /**\n * Событие нажатия на кнопку добавления адреса доставки клиента.\n */\n @Output()\n public addDeliveryAddressClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления адреса доставки клиента.\n */\n @Output()\n public deleteDeliveryAddressClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица для адреса доставки.\n */\n @Output()\n public addDeliveryAddressContactClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у адреса доставки.\n */\n @Output()\n public deleteDeliveryAddressContactClick: EventEmitter<{ contact: ScIContact; address: ScIDeliveryAddress }> = new EventEmitter<{\n contact: ScIContact;\n address: ScIDeliveryAddress;\n }>();\n\n /**\n * Инициализирует экземпляр класса {@link ScDeliveryAddressAccordionComponent}.\n *\n * @param deliveryAddressService Сервис работы с адресами доставки.\n */\n public constructor(private readonly deliveryAddressService: ScDeliveryAddressService) {}\n}\n","<sc-accordion (addButtonClick)=\"addDeliveryAddressClick.emit()\">\n Адреса доставки\n <ng-template scAccordionContent>\n <tui-loader\n *tuiLet=\"deliveryAddress$ | async as deliveryAddress\"\n [overlay]=\"true\"\n [showLoader]=\"deliveryAddress === null\"\n >\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"!deliveryAddress || deliveryAddress.length; else contragentsNotExist\">\n <sc-delivery-address-accordion-item\n *ngFor=\"let address of deliveryAddress\"\n [deliveryAddress]=\"address\"\n (deleteDeliveryAddressClick)=\"deleteDeliveryAddressClick.emit($event)\"\n (addDeliveryAddressContactClick)=\"addDeliveryAddressContactClick.emit($event)\"\n (deleteDeliveryAddressContactClick)=\"deleteDeliveryAddressContactClick.emit($event)\"\n ></sc-delivery-address-accordion-item>\n </ng-container>\n\n <ng-template #contragentsNotExist>\n <tui-notification size=\"l\">\n <div>\n <div class=\"flex flex-wrap gap-2 font-medium\">Адреса доставки не указаны.</div>\n </div>\n </tui-notification>\n </ng-template>\n </div>\n </tui-loader>\n </ng-template>\n</sc-accordion>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLoader, TuiNotification } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiElasticContainer, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule } from '@taiga-ui/legacy';\nimport { AngularYandexMapsModule } from 'angular8-yandex-maps';\n\nimport { ScAccordionModule } from '../accordion';\nimport { ScContactsModule } from '../contacts/sc-contacts.module';\nimport { ScFormFieldsModule } from '../form-fields/form-fields.module';\nimport { ScAddDeliveryAddressDialogComponent } from './add-delivery-address-dialog/sc-add-delivery-address-dialog.component';\nimport { ScDeliveryAddressAccordionItemComponent } from './delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component';\nimport { ScDeliveryAddressAccordionComponent } from './delivery-address-accordion/sc-delivery-address-accordion.component';\n\n/**\n * Модуль для отображение адресов доставки разделами, с возможностью скрывать и отображать содержимое.\n */\n@NgModule({\n declarations: [ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScAddDeliveryAddressDialogComponent],\n imports: [\n CommonModule,\n ScAccordionModule,\n TuiButton,\n TuiLoader,\n TuiLet,\n TuiNotification,\n ScContactsModule,\n FormsModule,\n ReactiveFormsModule,\n TuiLabel,\n TuiFieldErrorPipe,\n TuiError,\n TuiInputModule,\n TuiInputPhoneModule,\n ScFormFieldsModule,\n ...TuiDataList,\n AngularYandexMapsModule.forRoot({\n lang: 'ru_RU',\n }),\n TuiElasticContainer,\n TuiButtonLoading,\n ],\n exports: [ScDeliveryAddressAccordionComponent, ScAddDeliveryAddressDialogComponent],\n})\nexport class ScDeliveryAddressModule {}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n\nimport { ChangeDetectionStrategy, Component, inject, OnDestroy } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { SC_URLS } from '@snabcentr/client-core';\nimport { TuiButton, TuiDialogContext, TuiNotification } from '@taiga-ui/core';\nimport { injectContext } from '@taiga-ui/polymorpheus';\n\n/**\n * Компонент представления ресурсов.\n */\n@Component({\n standalone: true,\n selector: 'sc-resource-preview',\n templateUrl: './sc-resource-preview.component.html',\n styleUrl: './sc-resource-preview.component.scss',\n imports: [TuiNotification, TuiButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScResourcePreviewComponent implements OnDestroy {\n /**\n * Название файла из URL.\n */\n protected readonly name: string = inject(ActivatedRoute).snapshot.url.join('/');\n\n /**\n * Путь к ресурсу.\n */\n protected readonly src?: string = inject(SC_URLS).res?.[this.name]?.src ?? '';\n\n /**\n * MIME type файла {@link HTMLSourceElement}.\n */\n protected readonly type?: string = inject(SC_URLS).res?.[this.name]?.type ?? '';\n\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context: TuiDialogContext | null = injectContext<TuiDialogContext>({ optional: true });\n\n /**\n * Таймер автоматического включения проигрывателя.\n */\n private playAttempt?: NodeJS.Timeout;\n\n /**\n * Проверяет что MIME type ресурса подходит для `<video>`.\n */\n protected isVideoResource = () => this.type?.startsWith('video');\n\n /**\n * Обработчик события готовности видео к запуску.\n *\n * @param videoElement HTML элемент видео.\n */\n protected onCanPlay(videoElement: HTMLVideoElement): void {\n this.playAttempt = setInterval(() => {\n videoElement\n .play()\n .then(() => {\n if (this.playAttempt) {\n clearInterval(this.playAttempt);\n }\n })\n // eslint-disable-next-line lodash/prefer-noop\n .catch(() => {\n // Do nothing.\n });\n }, 2000); // Каждые 2 секунды пытается запустить видео.\n }\n\n /** @inheritDoc */\n public ngOnDestroy(): void {\n // Исправляет ошибку фонового воспроизведения после закрытия диалога.\n if (this.playAttempt) {\n clearInterval(this.playAttempt);\n }\n }\n}\n","@if (src && isVideoResource()) {\n <video\n #video\n controls\n (canplay)=\"onCanPlay(video)\"\n class=\"size-full bg-black\"\n >\n <source\n [src]=\"src\"\n [type]=\"type\"\n />\n </video>\n} @else {\n <tui-notification\n appearance=\"warning\"\n size=\"l\"\n >\n <div\n tuiTitle\n [style.padding-inline-end.rem]=\"2\"\n class=\"flex flex-col\"\n >\n {{ !src || !type ? 'Извините, ресурс не найден.' : 'Извините, данный формат ресурса не поддерживается.' }}\n <button\n tuiButton\n type=\"button\"\n size=\"m\"\n appearance=\"primary\"\n (click)=\"context?.$implicit?.complete()\"\n class=\"mt-4 self-center\"\n >\n Закрыть\n </button>\n </div>\n </tui-notification>\n}\n","import { tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\nimport { noop } from 'rxjs';\n\nimport { IBlockError } from '../interfaces/i-block-error';\n\n/**\n * Токен обработчика смены ошибки.\n */\n// eslint-disable-next-line unicorn/consistent-function-scoping\nexport const SC_ERROR_CHANGE_HANDLER = tuiCreateTokenFromFactory<(error: IBlockError) => void>(() => () => noop);\n","import { ChangeDetectionStrategy, Component, computed, effect, inject, output, Signal } from '@angular/core';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { TuiAppearance, TuiButton, TuiIcons, TuiWithAppearance, TuiWithIcons } from '@taiga-ui/core';\n\nimport { IBlockError } from '../interfaces/i-block-error';\nimport { ScErrorHandlerComponent } from '../sc-error-handler.component';\n\n/**\n * Компонент представления данных об ошибке.\n */\n@Component({\n standalone: true,\n selector: 'sc-error-block-status',\n templateUrl: './error-block-status.component.html',\n imports: [TuiAppearance, TuiWithAppearance, TuiIcons, TuiWithIcons, TuiButton, RouterLink],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScErrorBlockStatusComponent {\n /**\n * Компонент управляющий кодом ошибки отображаемой на странице.\n */\n protected readonly errorHandlerComponent: ScErrorHandlerComponent = inject(ScErrorHandlerComponent, { skipSelf: true });\n\n /**\n * Сигнал кода ошибки.\n */\n protected readonly code: Signal<number | null> = this.errorHandlerComponent.getErrorCode();\n\n /**\n * Данные об ошибке.\n */\n // eslint-disable-next-line unicorn/consistent-function-scoping\n protected readonly error: Signal<IBlockError> = computed(() => this.getErrorMessage(this.code()));\n\n /**\n * Создает сигнал изменения строкового представления об ошибке.\n */\n protected readonly pageErrorChange = output<IBlockError>();\n\n /**\n * Инициализирует экземпляр класса {@link ErrorPageComponent}.\n */\n public constructor() {\n // Если компонент отображён маршрутизацией из-за перехода по неизвестному маршруту, то устанавливаем код 404.\n if (inject(ActivatedRoute).snapshot.data['routes_key'] === 'error') {\n this.errorHandlerComponent.setErrorCode(404);\n }\n\n effect(() => {\n if (this.code() !== null) {\n this.pageErrorChange.emit(this.error());\n }\n });\n }\n\n /**\n * Возвращает описание ошибки.\n *\n * @param code Код ошибки.\n */\n // eslint-disable-next-line class-methods-use-this\n protected getErrorMessage(code: number | null): IBlockError {\n switch (code) {\n case 403:\n return {\n message: 'К сожалению, у вас нет доступа к этому ресурсу',\n description: 'Воспользуйтесь навигацией в шапке или подвале сайта, чтобы перейти в интересующий вас раздел',\n code,\n };\n\n case 404:\n return {\n message: 'К сожалению, такой страницы нет',\n description: 'Воспользуйтесь навигацией в шапке или подвале сайта, чтобы перейти в интересующий вас раздел',\n code,\n };\n\n default:\n return {\n message: 'Неизвестная ошибка',\n description: 'Пожалуйста обновите страницу или обратитесь к менеджеру',\n code: 0,\n };\n }\n }\n}\n","<div class=\"flex flex-col items-center gap-8\">\n <div class=\"border-20 border-solid border-tui-primary text-center sm:border-32\">\n <div class=\"text-8xl leading-1.15 text-black sm:text-44\">\n {{ error().code }}\n </div>\n <div class=\"text-6xl leading-1.15 text-tui-primary sm:text-8xl\">ERROR</div>\n </div>\n <div class=\"flex flex-col gap-2 text-center\">\n <div class=\"text-h5 sm:text-h4\">{{ error().message }}</div>\n <div class=\"text-body-m-bold sm:text-h6\">{{ error().description }}</div>\n </div>\n <button\n tuiButton\n appearance=\"primary\"\n routerLink=\"/\"\n >\n Вернуться на главную\n </button>\n</div>\n","import { ChangeDetectionStrategy, Component, inject, input, Signal, signal } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { filter } from 'rxjs';\n\nimport { SC_ERROR_CHANGE_HANDLER } from './consts/error-change-handler.providers';\nimport { ScErrorBlockStatusComponent } from './error-block-status/error-block-status.component';\nimport { IBlockError } from './interfaces/i-block-error';\n\n/**\n * Компонент для управления кодом ошибки отображаемой на странице.\n */\n@Component({\n standalone: true,\n selector: 'sc-error-handler',\n templateUrl: './sc-error-handler.component.html',\n imports: [ScErrorBlockStatusComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScErrorHandlerComponent {\n /**\n * Сигнал для хранения кода ошибки.\n */\n protected readonly code = signal<number | null>(null);\n\n /**\n * Сигнал дефолтного передаваемого из вне значения ошибки.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n public defaultCode = input<number | null>(null, { alias: 'code' });\n\n /**\n * Сервис маршрутизации.\n */\n private readonly router = inject(Router);\n\n /**\n * Обработчик изменения ошибки.\n */\n protected readonly errorChangeHandler: (error: IBlockError) => void = inject(SC_ERROR_CHANGE_HANDLER);\n\n /**\n * Инициирует экземпляр класса {@link ErrorHandlerComponent}.\n */\n public constructor() {\n this.router.events.pipe(filter((event) => event instanceof NavigationStart)).subscribe(() => {\n // Сбрасываем ошибку при переходе на новый маршрут.\n this.code.set(this.defaultCode());\n });\n }\n\n /**\n * Возвращает текущий сигнал с кодом ошибки.\n */\n public getErrorCode(): Signal<number | null> {\n return this.code;\n }\n\n /**\n * Устанавливает новый код ошибки.\n *\n * @param code Новый код ошибки.\n */\n public setErrorCode(code: number): void {\n this.code.set(code);\n }\n}\n","@if (code() === null) {\n <ng-content />\n} @else {\n <sc-error-block-status (pageErrorChange)=\"errorChangeHandler($event)\"></sc-error-block-status>\n}\n","/* eslint-disable class-methods-use-this */\n\nimport { Injectable } from '@angular/core';\nimport { ScDocumentInfo, ScDocumentInfoTypesEnum, ScIconTypesEnum } from '@snabcentr/client-core';\n\n/**\n * Сервис работающий с значками элементов дерева.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class TreeIconService {\n /**\n * Назначает значок элементу дерева в зависимости от типа файла.\n *\n * @param info Объект пришедших данных о файле.\n * @returns Возвращает название значка в виде строки.\n */\n public getIconName(info: ScDocumentInfo): string {\n switch (info.icon) {\n case ScIconTypesEnum.iconImage:\n return '@tui.image';\n case ScIconTypesEnum.iconPdfFile:\n return '@tui.sc.file-p';\n case ScIconTypesEnum.iconWordFile:\n return '@tui.sc.file-w';\n case ScIconTypesEnum.iconExcelFile:\n return '@tui.sc.file-x';\n case ScIconTypesEnum.iconFolder:\n return '@tui.folder';\n default:\n return '@tui.file';\n }\n }\n\n /**\n * Проверяет на признак наличия дочерних элементов.\n *\n * @param info Объект пришедших данных о файле.\n * @returns Возвращает true при наличии дочерних элементов и false при их отсутствии.\n */\n public hasChildren(info: ScDocumentInfo): boolean {\n return info.type === ScDocumentInfoTypesEnum.dir;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ScDocumentInfo, ScFilesService } from '@snabcentr/client-core';\nimport { TuiTreeLoader } from '@taiga-ui/kit';\nimport { map, Observable } from 'rxjs';\n\nimport { TreeNode } from '../interfaces/tree-node';\nimport { TreeIconService } from './tree-icon.service';\n\n/**\n * Сервис для асинхронного раскрытия вложенности.\n */\n@Injectable()\nexport class TreeLoaderService implements TuiTreeLoader<TreeNode> {\n /**\n * Инициализирует экземпляр класса {@link TreeLoaderService}\n *\n * @param filesService Сервис для получения файлов директории.\n * @param iconService Сервис для определения и назначения значка элементу дерева.\n */\n public constructor(\n private readonly filesService: ScFilesService,\n private readonly iconService: TreeIconService\n ) {}\n\n /**\n * Загружает дочерние элементы дерева.\n *\n * @param item Элемент дерева.\n * @returns Массив дочерних элементов.\n */\n public loadChildren(item: TreeNode): Observable<TreeNode[]> {\n // eslint-disable-next-line unicorn/no-useless-undefined\n return item.id ? this.initData(item.id) : this.initData(undefined);\n }\n\n /**\n * Проверяет указанный элемент дерева на наличие дочерних элементов и возвращает массив дочерних элементов, если они есть, либо пустой массив.\n *\n * @param node Элемент дерева.\n * @returns Возвращает массив типа TreeNode[].\n */\n // eslint-disable-next-line class-methods-use-this\n public hasChildren(node: TreeNode): boolean {\n return node.hasChildren && !!node.id;\n }\n\n /**\n * Загружает и заполняет массив дочерних элементов.\n *\n * @param id Идентификатор директории, чьи дочернии элементы загружаются.\n * @returns Возвращает массив дочерних элементов.\n */\n private initData(id: number | undefined): Observable<TreeNode[]> {\n return this.filesService.getFiles(id).pipe(\n map((data: ScDocumentInfo[]) =>\n data.map((item) => ({\n text: item.name,\n icon: this.iconService.getIconName(item),\n hasChildren: this.iconService.hasChildren(item),\n createdAt: item.createdAt,\n id: item.id,\n link: item.link,\n }))\n )\n );\n }\n}\n","import { Directive } from '@angular/core';\nimport { TuiHandler } from '@taiga-ui/cdk';\nimport { TuiTreeService } from '@taiga-ui/kit';\n\nimport { TreeNode } from '../interfaces/tree-node';\n\n/**\n * Директива отвечающая за обработку действий над элементами дерева.\n */\n@Directive({\n selector: '[scTree]',\n exportAs: 'scTree',\n providers: [TuiTreeService],\n})\nexport class TreeDirective {\n /**\n * Карта данных дерева.\n */\n public map = new Map<TreeNode, boolean>();\n\n /**\n * Проверяет указанный элемент дерева на наличие дочерних элементов и возвращает массив дочерних элементов, если они есть, либо пустой массив.\n *\n * @param node Элемент дерева.\n * @returns Возвращает массив типа TreeNode[].\n */\n public childrenHandler: TuiHandler<TreeNode, readonly TreeNode[]> = (node) => (node.hasChildren ? this.service.getChildren(node) : []);\n\n /**\n * Инициализирует экземпляр класса {@link TreeDirective}.\n *\n * @param service Сервис для работы с деревом.\n */\n public constructor(public readonly service: TuiTreeService<TreeNode>) {}\n\n /**\n * Обрабатывает нажатие на указанный элемент дерева.\n *\n * @param node Элемент дерева.\n */\n public onToggled(node: TreeNode): void {\n this.service.loadChildren(node);\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { TuiTreeItemContent } from '@taiga-ui/kit';\n\n/**\n * Компонент для удаления стандартного значка элемента дерева.\n */\n@Component({\n selector: 'sc-file-tree-item',\n templateUrl: './file-tree-item.component.html',\n styleUrls: ['./file-tree-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n '(click)': 'onClick()',\n },\n})\nexport class FileTreeItemComponent extends TuiTreeItemContent {}\n","<ng-container [ngTemplateOutlet]=\"context.template\"></ng-container>\n","/* eslint-disable no-use-before-define,@angular-eslint/no-input-rename */\n\nimport { Directive, forwardRef, Input } from '@angular/core';\nimport { TUI_TREE_CONTENT, TUI_TREE_START } from '@taiga-ui/kit';\nimport { PolymorpheusComponent } from '@taiga-ui/polymorpheus';\n\nimport { FileTreeItemComponent } from '../file-tree-item/file-tree-item.component';\nimport { TreeNode } from '../interfaces/tree-node';\n\n/**\n * Директива отвечающая за корневые элементы дерева.\n */\n@Directive({\n selector: '[scTopNodeText]',\n providers: [\n {\n provide: TUI_TREE_START,\n useExisting: forwardRef(() => TreeTopDirective),\n },\n {\n provide: TUI_TREE_CONTENT,\n useValue: new PolymorpheusComponent(FileTreeItemComponent),\n },\n ],\n})\nexport class TreeTopDirective implements TreeNode {\n /**\n * Отображаемое имя корневого элемента дерева.\n */\n @Input('scTopNodeText')\n public text = '';\n\n /**\n * Значок корневого элемента дерева.\n */\n @Input('scTopNodeIcon')\n public icon: string;\n\n /**\n * Ссылка корневого элемента дерева.\n */\n @Input('scTopNodeLink')\n public link?: string;\n\n /**\n * Признак наличия дочерних элементов.\n */\n @Input('scTopNodeChilds')\n public hasChildren: boolean;\n\n /**\n * Идентификатор корневого элемента дерева.\n */\n @Input('scTopNodeParent')\n public id?: number;\n\n /**\n * Дата создания корневого элемента дерева.\n */\n @Input('scTopNodeDate')\n public createdAt?: string;\n}\n","import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { ScDocumentInfo, ScFilesService } from '@snabcentr/client-core';\nimport { TUI_TREE_LOADER, TUI_TREE_LOADING } from '@taiga-ui/kit';\nimport { map, Observable } from 'rxjs';\n\nimport { TreeNode } from '../interfaces/tree-node';\nimport { TreeIconService } from '../services/tree-icon.service';\nimport { TreeLoaderService } from '../services/tree-loader.service';\n\n/**\n * Компонент файлов и документов.\n */\n@Component({\n selector: 'sc-files-and-documents',\n templateUrl: './files-and-documents.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TUI_TREE_LOADER,\n useClass: TreeLoaderService,\n },\n ],\n})\nexport class FilesAndDocumentsComponent {\n /**\n * Данные визуализации и их начальное получение.\n */\n public data$: Observable<TreeNode[]> = this.filesService.getFiles().pipe(\n map((data: ScDocumentInfo[]) =>\n data.map((item) => ({\n text: item.name,\n icon: this.iconService.getIconName(item),\n hasChildren: this.iconService.hasChildren(item),\n createdAt: item.createdAt,\n id: item.id,\n link: item.link,\n }))\n )\n );\n\n /**\n * Инициализирует экземпляр класса {@link FilesAndDocumentsComponent}.\n *\n * @param loading Объект отвечающий за значок загрузки, в момент раскрытия элемента дерева.\n * @param iconService Сервис для определения и назначения значка элементу дерева.\n * @param filesService Сервис для загрузки файлов.\n */\n public constructor(\n @Inject(TUI_TREE_LOADING) public readonly loading: unknown,\n public readonly iconService: TreeIconService,\n private readonly filesService: ScFilesService\n ) {}\n}\n","<ng-container *ngIf=\"data$ | async as data; else skeleton\">\n <tui-tree\n *ngFor=\"let node of data\"\n #tree=\"scTree\"\n scTree\n [scTopNodeText]=\"node.text\"\n [scTopNodeIcon]=\"node.icon\"\n [scTopNodeLink]=\"node.link\"\n [scTopNodeChilds]=\"node.hasChildren\"\n [scTopNodeParent]=\"node.id\"\n [scTopNodeDate]=\"node.createdAt\"\n [childrenHandler]=\"tree.childrenHandler\"\n [content]=\"content\"\n [map]=\"tree.map\"\n [tuiTreeController]=\"false\"\n [value]=\"tree.service.data$ | async\"\n (toggled)=\"tree.onToggled($event)\"\n class=\"overflow-hidden\"\n ></tui-tree>\n</ng-container>\n\n<ng-template\n #content\n let-item\n>\n <tui-loader\n *ngIf=\"item === loading; else text\"\n class=\"my-4 w-8\"\n ></tui-loader>\n <ng-template #text>\n <tui-icon\n [icon]=\"item.icon\"\n class=\"tui-space_right-2\"\n ></tui-icon>\n <a\n tuiLink\n [pseudo]=\"true\"\n *ngIf=\"item.link\"\n href=\"{{ item.link }}\"\n class=\"grow\"\n >{{ item.text }}</a\n >\n <p\n *ngIf=\"!item.link\"\n class=\"grow\"\n >\n {{ item.text }}\n </p>\n <p>{{ item.createdAt }}</p>\n </ng-template>\n</ng-template>\n\n<ng-template #skeleton>\n <div class=\"flex flex-col gap-2\">\n <div\n *ngFor=\"let _ of [].constructor(7)\"\n class=\"flex items-center gap-2\"\n >\n <div class=\"tui-skeleton size-6\"></div>\n <div class=\"tui-skeleton h-4 w-40\"></div>\n </div>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiIcon, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiTree } from '@taiga-ui/kit';\n\nimport { TreeTopDirective } from './directives';\nimport { TreeDirective } from './directives/tree.directive';\nimport { FileTreeItemComponent } from './file-tree-item/file-tree-item.component';\nimport { FilesAndDocumentsComponent } from './files-and-documents/files-and-documents.component';\n\n/**\n * Модуль файлов и документов.\n */\n@NgModule({\n imports: [CommonModule, ...TuiTree, TuiIcon, TuiLoader, TuiLink],\n declarations: [FilesAndDocumentsComponent, TreeDirective, TreeTopDirective, FileTreeItemComponent],\n exports: [FilesAndDocumentsComponent],\n})\nexport class FilesAndDocumentsModule {}\n","/**\n * Список иконок.\n */\nexport const scClientUiIconsName = [\n 'application',\n 'back',\n 'bag',\n 'banknote-arrow-in-top',\n 'chart-column-plus',\n 'circle-arrow-in-right',\n 'contacts',\n 'file-p',\n 'file-search',\n 'file-w',\n 'file-x',\n 'instagram',\n 'layout-list-tree',\n 'list',\n 'reclamation',\n 'send',\n 'telegram',\n 'vk',\n 'whatsapp',\n 'catalog.aluminum-systems',\n 'catalog.arm-profile',\n 'catalog.batten',\n 'catalog.brusbox',\n 'catalog.canopy',\n 'catalog.configurator',\n 'catalog.covering-material',\n 'catalog.door-accessories',\n 'catalog.drainage-system',\n 'catalog.fastener',\n 'catalog.finishing-materials',\n 'catalog.fixing-impost',\n 'catalog.flask',\n 'catalog.foam-balloon',\n 'catalog.foam',\n 'catalog.glue',\n 'catalog.handle',\n 'catalog.instrument',\n 'catalog.kve-profile',\n 'catalog.lubricants',\n 'catalog.mosquito-net',\n 'catalog.mounting-accessories',\n 'catalog.net-order',\n 'catalog.panel-1',\n 'catalog.panel',\n 'catalog.polyethylene-film',\n 'catalog.profile-plastic',\n 'catalog.promo-materials',\n 'catalog.psul',\n 'catalog.rehau-profile',\n 'catalog.sandwich-plastic',\n 'catalog.sealer',\n 'catalog.siding',\n 'catalog.start-finish-profile',\n 'catalog.steam-waterproofing',\n 'catalog.stiz',\n 'catalog.thermometer',\n 'catalog.windowsill',\n 'img.email',\n 'img.facebook',\n 'img.instagram',\n 'img.qr-code',\n 'img.telegram',\n 'img.viber',\n 'img.vk',\n 'img.whatsapp',\n 'img.copy',\n 'landing.catalog',\n 'landing.construction-chemicals',\n 'landing.fastener',\n 'landing.foam-balloon',\n 'landing.mosquito-net',\n 'landing.profile-plastic',\n 'landing.sandwich-panel',\n 'landing.siding',\n 'landing.strip',\n 'landing.windowsill',\n 'solid.facebook',\n 'solid.instagram',\n 'solid.telegram',\n 'solid.vk-rounded',\n 'solid.vk',\n 'solid.whatsapp',\n];\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n/**\n * Компонент списка брэндов.\n */\n@Component({\n selector: 'sc-brands-list',\n templateUrl: './sc-brands-list.component.html',\n styleUrls: ['./sc-brands-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScBrandsListComponent {\n /**\n * Список элементов брендов.\n */\n @Input()\n public items: Array<{\n src: string;\n alt: string;\n }> = [];\n}\n","<!-- TODO: TASK:[#9893] Добавить разделение на несколько строк изображений, при увеличении количества брендов. -->\n<div class=\"flex flex-col gap-4\">\n <div class=\"relative\">\n <div class=\"absolute -left-1 top-0 z-10 block h-full w-12 bg-gradient-to-r from-tui-base-01 to-transparent\"></div>\n <div class=\"flex select-none items-center justify-center gap-12 overflow-hidden contrast-150 saturate-0\">\n <div\n *ngFor=\"let _ of [].constructor(3)\"\n class=\"animate-scroll-slow scroll-slow-revert flex shrink-0 items-center gap-16\"\n >\n <div\n *tuiRepeatTimes=\"let index of items.length - (items.length - (items.length % 2)) / 2\"\n class=\"flex items-center justify-center\"\n >\n <img\n [src]=\"items[index + (items.length - (items.length % 2)) / 2].src\"\n [alt]=\"items[index].alt\"\n />\n </div>\n </div>\n </div>\n <div class=\"absolute -right-1 top-0 z-10 block h-full w-12 bg-gradient-to-r from-transparent to-tui-base-01\"></div>\n </div>\n <div class=\"relative\">\n <div class=\"absolute -left-1 top-0 z-10 block h-full w-12 bg-gradient-to-r from-tui-base-01 to-transparent\"></div>\n <div class=\"flex select-none items-center justify-center gap-12 overflow-hidden contrast-150 saturate-0\">\n <div\n *ngFor=\"let _ of [].constructor(3)\"\n class=\"animate-scroll-slow flex shrink-0 items-center gap-16\"\n >\n <div\n *tuiRepeatTimes=\"let index of (items.length - (items.length % 2)) / 2\"\n class=\"flex items-center justify-center\"\n >\n <img\n [src]=\"items[index].src\"\n [alt]=\"items[index].alt\"\n />\n </div>\n </div>\n </div>\n <div class=\"absolute -right-1 top-0 z-10 block h-full w-12 bg-gradient-to-r from-transparent to-tui-base-01\"></div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiRepeatTimes } from '@taiga-ui/cdk';\n\nimport { ScBrandsListComponent } from './sc-brands-list.component';\n\n/**\n * Модуль списка брэндов.\n */\n@NgModule({\n imports: [CommonModule, TuiRepeatTimes],\n declarations: [ScBrandsListComponent],\n exports: [ScBrandsListComponent],\n})\nexport class ScBrandsListModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, inject, Input, Output } from '@angular/core';\nimport { ScNewsTile } from '@snabcentr/client-core';\nimport { TUI_IS_MOBILE } from '@taiga-ui/cdk';\n\n/**\n * Компонент карточки новости.\n */\n@Component({\n selector: 'sc-news-card',\n templateUrl: './sc-news-card.component.html',\n styleUrls: ['./sc-news-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewsCardComponent {\n /**\n * Данные о новости.\n */\n @Input()\n public news: ScNewsTile;\n\n /**\n * Событие клика по карточке новости.\n */\n @Output()\n public clickCardEvent: EventEmitter<ScNewsTile> = new EventEmitter<ScNewsTile>();\n\n /**\n * Признак того, что этот компонент отображается на мобильном устройстве.\n */\n @HostBinding('class.is_mobile')\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n}\n","<div\n (click)=\"clickCardEvent.emit(news)\"\n class=\"shadow-sc relative flex h-full cursor-pointer flex-col gap-2 overflow-hidden rounded-xl bg-white px-2 pb-4 pt-2\"\n>\n <div\n [style.background-image]=\"'url(' + news.image + ')'\"\n class=\"bg-tui-base-02 w-full grow rounded-xl bg-cover bg-center bg-no-repeat\"\n ></div>\n <div class=\"flex w-full flex-col justify-between gap-2 overflow-hidden bg-white align-baseline\">\n <p class=\"text-tui-text-02 text-sm font-medium\">{{ news.createdAt }}</p>\n\n <div class=\"line-clamp-3 font-extrabold\">{{ news.subject }}</div>\n </div>\n</div>\n\n<!-- <div\n[style.background-image]=\"'url(' + news.image + ')'\"\nclass=\"h-50 w-full bg-tui-base-02 bg-cover bg-center bg-no-repeat\"\n></div> -->\n","import { ChangeDetectionStrategy, Component, HostBinding, inject, Input } from '@angular/core';\nimport { TUI_IS_MOBILE } from '@taiga-ui/cdk';\n\n/**\n * Компонент скелетона карточки новости.\n */\n@Component({\n selector: 'sc-news-card-skeleton',\n templateUrl: './sc-news-card-skeleton.component.html',\n styleUrls: ['./sc-news-card-skeleton.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewsCardSkeletonComponent {\n /**\n * Признак, что необходимо отобразить скелетон изображения новости.\n */\n @Input() public hasImg: boolean = true;\n\n /**\n * Признак того, что этот компонент отображается на мобильном устройстве.\n */\n @HostBinding('class.is_mobile')\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n}\n","<div class=\"relative flex h-full cursor-pointer flex-col gap-2 overflow-hidden rounded-xl bg-white px-2 pb-4 pt-2 shadow-sc-2\">\n <div\n *ngIf=\"hasImg; else textBlock\"\n class=\"w-full grow rounded-xl bg-tui-base-02\"\n ></div>\n <ng-template #textBlock>\n <div class=\"py-4.5 flex w-full flex-col gap-2 px-6\">\n <div class=\"h-3 w-full rounded bg-tui-base-02\"></div>\n <div class=\"h-3 w-3/4 rounded bg-tui-base-02\"></div>\n <div class=\"h-3 w-full rounded bg-tui-base-02\"></div>\n <div class=\"h-3 w-3/4 rounded bg-tui-base-02\"></div>\n <div class=\"h-3 w-full rounded bg-tui-base-02\"></div>\n </div>\n </ng-template>\n\n <div class=\"w-3/4\">\n <ng-container *ngTemplateOutlet=\"textBlock\"></ng-container>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TuiSizeL, TuiSizeM, TuiSizeS } from '@taiga-ui/core';\n\n/**\n * Компонент кнопки \"Поделиться\".\n */\n@Component({\n selector: 'sc-share-button',\n templateUrl: './sc-share-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScShareButtonComponent {\n /**\n * Формат внешнего вида кнопки.\n */\n @Input()\n public appearance: 'primary' | 'secondary' | 'outline' | 'flat' = 'secondary';\n\n /**\n * Размер кнопки.\n */\n @Input()\n public size: TuiSizeL | TuiSizeM | TuiSizeS = 'm';\n\n /**\n * Событие клика по кнопке \"Поделиться\".\n */\n @Output()\n public clickShareEvent: EventEmitter<void> = new EventEmitter<void>();\n}\n","<button\n tuiIconButton\n iconStart=\"@tui.share-2\"\n [appearance]=\"appearance\"\n [size]=\"size\"\n (click)=\"$event.stopPropagation(); clickShareEvent.emit()\"\n></button>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiButton } from '@taiga-ui/core';\n\nimport { ScShareButtonComponent } from './sc-share-button.component';\n\n/**\n * Модуль работы кнопки \"Поделиться\".\n */\n@NgModule({\n declarations: [ScShareButtonComponent],\n imports: [CommonModule, TuiButton],\n exports: [ScShareButtonComponent],\n})\nexport class ScShareButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { ScShareButtonModule } from '../share-button';\nimport { ScNewsCardComponent } from './news-card/sc-news-card.component';\nimport { ScNewsCardSkeletonComponent } from './news-card-skeleton/sc-news-card-skeleton.component';\n\n/**\n * Модуль работы с новостями.\n */\n@NgModule({\n declarations: [ScNewsCardComponent, ScNewsCardSkeletonComponent],\n imports: [CommonModule, RouterModule, ScShareButtonModule],\n exports: [ScNewsCardComponent, ScNewsCardSkeletonComponent],\n})\nexport class ScNewsModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { ScCartItem, ScProduct } from '@snabcentr/client-core';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { TuiPreviewDialogService } from '@taiga-ui/kit';\n\nimport { AbstractScPriceCard } from '../../directives';\n\n/**\n * Компонент карточки элемента заказа.\n */\n@Component({\n selector: 'sc-order-item-mobile',\n templateUrl: './sc-order-item-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScOrderItemMobileComponent extends AbstractScPriceCard {\n /**\n * Ссылка на представление спецификации.\n */\n @ViewChild('specificationPreview')\n private readonly specificationPreviewRef?: TemplateRef<TuiDialogContext>;\n\n /**\n * Элемент заказа.\n */\n @Input()\n public orderItem?: ScCartItem;\n\n /**\n * Событие нажатия на дополнительные действия.\n */\n @Output()\n public clickActionsEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Инициирует экземпляр класса {@link ScOrderItemMobileComponent}.\n *\n * @param previewDialogService Сервис диалогового окна предварительного просмотра.\n */\n public constructor(\n @Inject(TuiPreviewDialogService)\n private readonly previewDialogService: TuiPreviewDialogService\n ) {\n super();\n }\n\n /**\n * Продукт элемента заказа.\n */\n public override get product(): ScProduct | undefined {\n return this.orderItem?.product;\n }\n\n /**\n * Отобразить спецификацию.\n */\n public showSpecification(): void {\n this.previewDialogService.open(this.specificationPreviewRef ?? '').subscribe();\n }\n\n /**\n * Возвращает ссылку на изображение карточки товара.\n *\n * @param product Позиция товара/услуги.\n */\n public getCardImage(product: ScProduct): string {\n return this.imageHelper.getImage(product);\n }\n}\n","<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 iconStart=\"@tui.ellipsis-vertical\"\n appearance=\"float\"\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(product)\"\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 [attr.href]=\"href ?? null\"\n tuiLink\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n <div class=\"flex flex-col gap-y-0.5 text-tui-text-02\">\n <div class=\"flex flex-wrap\">\n <p class=\"w-40\">Артикул: {{ product.code }}</p>\n <p\n class=\"w-40\"\n *ngIf=\"product.pack\"\n >\n Норма упаковки: {{ product.pack }}\n </p>\n </div>\n <a\n tuiLink\n *ngIf=\"orderItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >Спецификация</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 iconStart=\"@tui.x\"\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\n <div class=\"flex flex-wrap gap-y-0.5\">\n <span\n *ngIf=\"product.discount\"\n class=\"w-50 items-center gap-x-2 gap-y-0.5 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\">Дата окончания: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <p class=\"w-50 flex items-baseline gap-x-2 gap-y-0.5 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 </div>\n </div>\n <div class=\"flex flex-wrap content-center\">\n <div class=\"w-50 flex flex-col gap-x-8 gap-y-0.5\">\n <ng-container *ngIf=\"orderItem.height; else length\">\n <p>Высота: {{ orderItem.height }} м.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"orderItem.length\">Длина: {{ orderItem.length }} м.</p>\n </ng-template>\n <p *ngIf=\"orderItem.width\">Ширина: {{ orderItem.width }} м.</p>\n <p class=\"flex flex-col items-baseline gap-x-2\">\n <span class=\"whitespace-nowrap text-body-m-bold\">\n Количество: <span class=\"whitespace-nowrap\">{{ orderItem.quantity }}</span>\n </span>\n </p>\n </div>\n\n <div class=\"w-50 flex flex-col gap-y-0.5\">\n <p class=\"whitespace-nowrap text-body-m-bold\">\n Сумма: <span class=\"whitespace-nowrap\"> {{ orderItem.getCostRubStr() }} </span>\n </p>\n <sc-price-warehouse-stock\n [product]=\"product\"\n [fromMain]=\"false\"\n ></sc-price-warehouse-stock>\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","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n/**\n * Компонент статуса оплаты заказа.\n */\n@Component({\n selector: 'sc-payment-status',\n templateUrl: './sc-payment-status.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPaymentStatusComponent {\n /**\n * Признак того, успешна ли прошла оплата, или нет.\n */\n @Input()\n public status: 'success' | 'error' | null;\n\n /**\n * Номер оплаченного заказа.\n */\n @Input()\n public orderId: string | null;\n\n /**\n * Событие нажатия на кнопку \"Вернуться к списку заказов\".\n */\n @Output()\n public backToOrdersClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку \"На главную\".\n */\n @Output()\n public backToOrderClick: EventEmitter<void> = new EventEmitter<void>();\n}\n","<ng-container *ngIf=\"status && orderId; else failed\">\n <ng-container [ngSwitch]=\"status\">\n <tui-block-status *ngSwitchCase=\"'success'\">\n <tui-icon\n icon=\"@tui.circle-check\"\n tuiSlot=\"top\"\n class=\"!h-20 scale-[3] !text-green-500\"\n ></tui-icon>\n <h4>Спасибо!</h4>\n <br />\n <div class=\"font-bold\">Ваш заказ успешно оплачен. Мы свяжемся с вами в ближайшее время.</div>\n <br />\n <div class=\"font-bold\">\n Номер вашего заказа:\n <a\n tuiLink\n [pseudo]=\"true\"\n (click)=\"backToOrderClick.emit()\"\n >{{ orderId }}</a\n >\n </div>\n\n <button\n tuiButton\n (click)=\"backToOrdersClick.emit()\"\n >\n Вернуться к заказам\n </button>\n </tui-block-status>\n <tui-block-status *ngSwitchCase=\"'error'\">\n <tui-icon\n icon=\"@tui.circle-x\"\n class=\"!h-20 scale-[3] !text-red-500\"\n tuiSlot=\"top\"\n ></tui-icon>\n <h4>Оплата не прошла!</h4>\n <br />\n <div class=\"font-bold\">При обработке платежа произошла ошибка.</div>\n <button\n tuiButton\n tuiItem\n (click)=\"backToOrderClick.emit()\"\n >\n Вернуться к заказу\n </button>\n </tui-block-status>\n </ng-container>\n</ng-container>\n\n<ng-template #failed>\n <tui-block-status>\n <tui-icon\n icon=\"@tui.info\"\n class=\"!h-20 scale-[3] !text-yellow-500\"\n tuiSlot=\"top\"\n ></tui-icon>\n <h4>Что-то пошло не так!</h4>\n <button\n tuiButton\n tuiItem\n (click)=\"backToOrdersClick.emit()\"\n >\n Вернуться к заказам\n </button>\n </tui-block-status>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TuiButton, TuiIcon, TuiLink } from '@taiga-ui/core';\nimport { TuiPreview } from '@taiga-ui/kit';\nimport { TuiBlockStatus } from '@taiga-ui/layout';\nimport { PolymorpheusOutlet, PolymorpheusTemplate } from '@taiga-ui/polymorpheus';\n\nimport { ScCatalogModule } from '../catalog';\nimport { ScOrderItemMobileComponent } from './order-item-mobile/sc-order-item-mobile.component';\nimport { ScPaymentStatusComponent } from './sc-payment-status/sc-payment-status.component';\n\n/**\n * Модуль заказов.\n */\n@NgModule({\n declarations: [ScOrderItemMobileComponent, ScPaymentStatusComponent],\n exports: [ScOrderItemMobileComponent, ScPaymentStatusComponent],\n imports: [CommonModule, TuiLink, TuiButton, TuiIcon, ...TuiBlockStatus, ...TuiPreview, ScCatalogModule, PolymorpheusTemplate, PolymorpheusOutlet],\n})\nexport class ScOrderModule {}\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен максимального количества файлов, отправляемых в форме в байтах.\n */\nexport const MAX_FILES_IN_FORM_INPUT: InjectionToken<number> = tuiCreateToken<number>(5);\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\nimport { ScIQAInfo } from '../pages/questions-and-answers/sc-i-qa-info';\n\n/**\n * Токен данных для страницы \"Вопросы-ответы\".\n */\nexport const SC_QA_INFO: InjectionToken<ScIQAInfo> = tuiCreateToken<ScIQAInfo>();\n","import { InjectionToken, Provider } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ScUser, ScUserService } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\n/**\n * Токен потока данных о текущем пользователе.\n */\nexport const SC_USER_INFO = new InjectionToken<Observable<ScUser | undefined>>('A stream with current user information');\n\n/**\n * Фабрика создания потока данных о текущем пользователе.\n *\n * @param userService Сервис данных о пользователе.\n */\nexport function scUserFactory(userService: ScUserService): Observable<ScUser | undefined> {\n // TODO: TASK[#7615] Отслеживать выполнение запроса изменения данными о пользователе после доработки snabcentr-core-lib.\n return userService.getUserChange$().pipe(takeUntilDestroyed());\n}\n\n/**\n * Провайдер потока данных о текущем пользователе.\n */\nexport const SC_USER_PROVIDERS: Provider[] = [\n {\n provide: SC_USER_INFO,\n deps: [ScUserService],\n useFactory: scUserFactory,\n },\n];\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { ScRequisitesService } from '@snabcentr/client-core';\nimport { TuiFormatNumberPipe, TuiLink } from '@taiga-ui/core';\nimport { TuiAccordion } from '@taiga-ui/kit';\nimport { map, Observable } from 'rxjs';\n\nimport { ScEmailLinkDirective } from '../../directives/links/sc-email-link.directive';\nimport { SC_QA_INFO } from '../../providers';\nimport { ScIQAInfo } from './sc-i-qa-info';\n\n/**\n * Компонент \"Вопросы-ответы\".\n */\n@Component({\n standalone: true,\n selector: 'app-questions-and-answers',\n imports: [TuiAccordion, TuiFormatNumberPipe, AsyncPipe, NgIf, TuiLink, ScEmailLinkDirective],\n templateUrl: './questions-and-answers.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class QuestionsAndAnswersComponent {\n /**\n * {@link Observable} изменения Email для связи по вопросам рекламаций.\n */\n protected readonly reclamationsEmail$: Observable<string | undefined> = inject(ScRequisitesService).personal$.pipe(\n map((contacts) => contacts.find((contact) => contact.type === 'reclamation')?.email)\n );\n\n /**\n * Данные для страницы \"Вопросы-ответы\"\n */\n protected readonly data: ScIQAInfo = inject(SC_QA_INFO);\n}\n","<tui-accordion [closeOthers]=\"false\">\n <tui-accordion-item borders=\"top-bottom\">\n <span class=\"text-body-m-bold\">Доставка заказов по областям</span>\n <ng-template tuiAccordionItemContent>\n <p>\n Парк автомобилей Снабцентр насчитывает {{ data.carsInfo.count }} большегрузных автомобилей от {{ data.carsInfo.loadCapacity.min }} до\n {{ data.carsInfo.loadCapacity.max }} тонн.\n </p>\n <p>Осуществляем доставку сборных грузов еженедельно более чем по {{ data.deliveryData.length }} направлениям.</p>\n <p>Минимальная сумма бесплатной доставки варьируется в зависимости от области.</p>\n <br />\n\n <ul\n *ngIf=\"data.deliveryData.length\"\n class=\"ml-2 list-disc\"\n >\n @for (deliveryItem of data.deliveryData; track $index) {\n <li class=\"list-inside\">\n {{ deliveryItem.region }} / бесплатная доставка от\n {{ deliveryItem.minFreeCost | tuiFormatNumber: { precision: 2, decimalSeparator: '.', rounding: 'ceil' } | async }} ₽ / доставка\n {{ deliveryItem.frequency }}\n </li>\n }\n </ul>\n\n <p>*Количество доставок в неделю может меняться в зависимости от сезона в меньшую и большую сторону.</p>\n <br />\n <div class=\"flex flex-col gap-2\">\n <p>Доставка оформляется через клиентский портал. Вы выбираете адрес, дату, склад.</p>\n <p>\n Доставку возможно оформить минимум за день до плановой отправки машины на определенное направление. Все доставки в области происходит на установленному\n расписанию.\n </p>\n <p>При необходимости заказы могут комплектоваться на паллеты.</p>\n <p>Доставка осуществляется с {{ data.deliveryTime.start }} до {{ data.deliveryTime.end }}</p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n <span class=\"text-body-m-bold\">Взаиморасчеты и оплата</span>\n <ng-template tuiAccordionItemContent>\n <div class=\"flex flex-col gap-2\">\n <p>Оплата для физических лиц возможна онлайн с условием самовывоза товара или в оптово-розничном отделении Снабцентр в вашем городе.</p>\n <p>Оплата для юридических лиц возможна по безналичному расчету для самовывоза и для доставки.</p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n <span class=\"text-body-m-bold\">Рекламации</span>\n <ng-template tuiAccordionItemContent>\n <div class=\"flex flex-col gap-2\">\n <p>\n В случае возникновения предмета основания для составления рекламации, заполняется бланк рекламации, который можно\n <a\n tuiLink\n [pseudo]=\"true\"\n [href]=\"data.reclamationBlankDownloadLink\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"black-link\"\n >\n скачать здесь\n </a>\n или в разделе\n <a\n tuiLink\n [pseudo]=\"true\"\n routerLink=\"/files\"\n class=\"black-link\"\n >\n файлы и документы\n </a>\n .\n </p>\n <p>Рекламация заполняется в случае обнаружения поставки бракованного товара.</p>\n <p>\n Рекламация отправляется в рекламационный комитет компания, рассматривается предмет претензии и выносится решение. Возможные решение: возврат товара для осмотра\n для принятия решения, возврат товара, замена товара, компенсация.\n </p>\n <p *ngIf=\"reclamationsEmail$ | async as reclamationsEmail\">\n Почта отдела рекламаций:\n\n <a\n tuiLink\n [pseudo]=\"true\"\n scEmailLink\n linkLocation=\"questions-and-answers\"\n href=\"mailto:{{ reclamationsEmail }}\"\n class=\"black-link\"\n >\n {{ reclamationsEmail }}\n </a>\n </p>\n\n <br />\n\n <p>В случае обнаружения недовоза или пересорта оформляется соответствующий акт по факту приема товара. Форма акта стандартная.</p>\n <p>Заполненный акт отправляется в отдел работы с заказами.</p>\n </div>\n </ng-template>\n </tui-accordion-item>\n</tui-accordion>\n","import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { TUI_IS_MOBILE, tuiIsPresent } from '@taiga-ui/cdk';\nimport { filter, interval, map, startWith, switchMap, tap } from 'rxjs';\n\nimport { ScIPreviewSample } from '../interfaces/sc-i-preview-sample';\n\n/**\n * Компонент представления образцов товара.\n */\n@Component({\n selector: 'sc-preview-sample',\n templateUrl: './sc-preview-sample.component.html',\n styleUrls: ['./sc-preview-sample.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPreviewSampleComponent {\n /**\n * Индекс элемента в галерее.\n */\n @Input()\n public index: number = 0;\n\n /**\n * {@link EventEmitter} изменения индекса элемента в галерее.\n */\n @Output()\n public readonly indexChange: EventEmitter<number> = new EventEmitter<number>();\n\n /**\n * Объект данных товара.\n */\n @Input()\n public sample: ScIPreviewSample;\n\n /**\n * Признак, что необходимо отображать переключатели на карусели.\n */\n @Input()\n public isShowCarouselSwitches: boolean = !inject(TUI_IS_MOBILE);\n\n /**\n * Признак, что при горизонтальном отображении компонент должен быть развёрнут.\n */\n @Input()\n public isReverse: boolean = false;\n\n /**\n * {@link Observable} изменения индекса элемента в галерее для автоматического переключения по таймеру.\n */\n public indexChangeInterval = this.indexChange.pipe(\n startWith(0),\n filter(() => Boolean(this.sample.items && this.sample.items.length > 1)),\n switchMap(() => interval(5000).pipe()),\n map(() => this.sample.items?.length),\n filter(tuiIsPresent),\n tap((itemsLength) => {\n this.onChangeIndex((this.index + 1) % itemsLength);\n })\n );\n\n /**\n * Переключает на предыдущее изображение в галерее.\n */\n public onPrevious(): void {\n if (this.sample.items?.length) {\n // eslint-disable-next-line unicorn/explicit-length-check\n this.onChangeIndex((this.index || this.sample.items.length) - 1);\n }\n }\n\n /**\n * Переключает на следующее изображение в галерее.\n */\n public onNext(): void {\n if (this.sample.items?.length) {\n this.onChangeIndex((this.index + 1) % this.sample.items.length);\n }\n }\n\n /**\n * Обработчик изменения индекса элемента в галерее.\n *\n * @param index Индекс элемента в галерее.\n */\n public onChangeIndex(index: number): void {\n if (index !== this.index) {\n this.index = index;\n this.indexChange.emit(index);\n }\n }\n}\n","<div\n *tuiLet=\"sample.items && sample.items.length > 1 as isShownSwitches\"\n class=\"mb-4 flex flex-col-reverse gap-4 md:mb-0 md:flex-row md:gap-8\"\n [class.md:!flex-row-reverse]=\"isReverse\"\n>\n <div class=\"flex max-w-96 flex-1 flex-col justify-center self-center md:max-w-none md:gap-4\">\n <div class=\"flex w-full flex-col gap-3 md:gap-4 md:px-8\">\n <div class=\"text-body-l-bold\">{{ sample.title }}</div>\n <div\n *ngIf=\"isShownSwitches\"\n class=\"flex gap-4\"\n >\n <tui-avatar\n [src]=\"item.buttonImageUrl\"\n [round]=\"false\"\n *ngFor=\"let item of sample.items; let itemIndex = index\"\n (tuiHoveredChange)=\"onChangeIndex(itemIndex)\"\n [class.active]=\"index === itemIndex\"\n ></tui-avatar>\n </div>\n <div\n *ngIf=\"sample.items\"\n class=\"text-body-m-bold\"\n >\n {{ sample.items[index].color }}\n </div>\n <div>{{ sample.description }}</div>\n <img\n *ngIf=\"sample.descriptionImageUrl\"\n [src]=\"sample.descriptionImageUrl\"\n alt=\"Конструкция образца {{ sample.title }}\"\n class=\"w-fit\"\n />\n <div\n *ngIf=\"sample.items && sample.items[index].actions?.length\"\n class=\"flex flex-wrap gap-3 md:gap-4\"\n >\n <button\n *ngFor=\"let action of sample.items[index].actions\"\n tuiButton\n (click)=\"action.handler()\"\n [iconStart]=\"action.icon\"\n appearance=\"secondary\"\n >\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"relative h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:h-[28rem]\">\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches\"\n tuiIconButton\n (click)=\"onPrevious()\"\n iconStart=\"@tui.chevron-left\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n <tui-carousel\n *tuiLet=\"indexChangeInterval | async\"\n [(index)]=\"index\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n <ng-container *ngFor=\"let item of sample.items\">\n <div\n *tuiItem\n [style.backgroundImage]=\"'url(' + item.carouselItemImage + ')'\"\n class=\"h-[19em] w-full bg-cover bg-right md:h-96 lg:h-[28rem]\"\n ></div>\n </ng-container>\n </tui-carousel>\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches\"\n tuiIconButton\n (click)=\"onNext()\"\n iconStart=\"@tui.chevron-right\"\n appearance=\"icon\"\n class=\"!absolute right-0 top-1/2 z-10 mr-2 -translate-y-1/2\"\n ></button>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TuiHovered, TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiError, TuiLabel } from '@taiga-ui/core';\nimport { TuiAvatar, TuiButtonLoading, TuiCarousel, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule } from '@taiga-ui/legacy';\nimport { RecaptchaFormsModule, RecaptchaModule } from 'ng-recaptcha-2';\n\nimport { ScFormFieldsModule } from '../form-fields';\nimport { ScPreviewSampleComponent } from './preview-sample/sc-preview-sample.component';\n\n/**\n * Модуль представления образцов товара.\n */\n@NgModule({\n declarations: [ScPreviewSampleComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TuiError,\n TuiFieldErrorPipe,\n ScFormFieldsModule,\n TuiInputModule,\n TuiInputPhoneModule,\n ...TuiCarousel,\n TuiAvatar,\n TuiHovered,\n TuiLet,\n TuiButton,\n TuiButtonLoading,\n TuiLabel,\n RecaptchaFormsModule,\n RecaptchaModule,\n ],\n exports: [ScPreviewSampleComponent],\n})\nexport class ScPreviewSampleModule {}\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport { ScConvertersService, ScFeedbackForm, ScFeedbackService, ScIFeedbackMessage, ScISuggestionType, ScUploadedFile, ScUser, ScUserService } from '@snabcentr/client-core';\nimport { TuiValidationError } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDialogContext, TuiError, TuiLabel, TuiLink } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiFieldErrorPipe, TuiFileLike, TuiFiles, tuiFilesAccepted } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule, TuiTextareaModule } from '@taiga-ui/legacy';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { RecaptchaFormsModule, RecaptchaModule } from 'ng-recaptcha-2';\nimport { catchError, filter, map, merge, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth';\nimport { ScFormFieldsModule } from '../../form-fields';\nimport { MAX_FILES_IN_FORM_INPUT } from '../../providers/sc-max-files-in-form-input';\n\n/**\n * Компонент формы обратной связи.\n */\n@Component({\n standalone: true,\n selector: 'sc-feedback-form',\n templateUrl: './sc-feedback-form.component.html',\n imports: [\n AsyncPipe,\n ReactiveFormsModule,\n NgClass,\n NgFor,\n TuiError,\n TuiFieldErrorPipe,\n ScFormFieldsModule,\n TuiInputModule,\n TuiInputPhoneModule,\n TuiButton,\n TuiButtonLoading,\n TuiLabel,\n RecaptchaFormsModule,\n RecaptchaModule,\n TuiLink,\n NgIf,\n TuiTextareaModule,\n TuiFiles,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFeedbackFormComponent {\n /**\n * Условное название блока где расположена ссылка.\n */\n public readonly formSlag: InputSignal<keyof typeof ScFeedbackForm> = input.required<keyof typeof ScFeedbackForm>();\n\n /**\n * Событие нажатия на кнопку договора оферты.\n */\n public readonly onClickOffer: OutputEmitterRef<void> = output();\n\n /**\n * Событие успешной отправки формы.\n */\n public readonly onSendSuccess: OutputEmitterRef<void> = output();\n\n /**\n * Сервис обратной связи.\n */\n private readonly feedbackService: ScFeedbackService = inject(ScFeedbackService);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * Максимальное количество файлов, отправляемых в форме.\n */\n private readonly maxFilesInForm: number = inject(MAX_FILES_IN_FORM_INPUT);\n\n /**\n * Сервис данных о пользователе.\n */\n private readonly user$: Observable<ScUser> = inject(ScUserService)\n .getUserChange$()\n .pipe(\n tap((user) => {\n if (user.isGuest) {\n (this.form as FormGroup).addControl('recaptcha', this.recaptchaControl);\n this.resetForm();\n } else {\n (this.form as FormGroup).removeControl('recaptcha');\n // eslint-disable-next-line default-case\n switch (this.formSlag()) {\n case 'common':\n this.form.patchValue({ name: user.name, email: user.contacts.email.value });\n break;\n\n case 'contacts':\n case 'vacancies':\n this.form.patchValue({ name: user.name, phone: user.contacts.phone.value });\n break;\n\n case 'samples':\n this.form.patchValue({ name: user.name, phone: user.contacts.phone.value, email: user.contacts.email.value });\n break;\n }\n }\n })\n );\n\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context: TuiDialogContext<void, { onClickOfferHandler: () => void; formSlag: keyof typeof ScFeedbackForm }> | null = inject<\n TuiDialogContext<void, { onClickOfferHandler: () => void; formSlag: keyof typeof ScFeedbackForm }>\n >(POLYMORPHEUS_CONTEXT, { optional: true });\n\n /**\n * Поле ввода для recaptcha.\n */\n protected readonly recaptchaControl: FormControl<string | null> = new FormControl<string | null>(null);\n\n /**\n * Группа полей ввода для формы «Пожелания и предложения по улучшению сайта».\n */\n protected readonly form = new FormGroup({\n name: new FormControl<string | null>(null, [Validators.required, Validators.minLength(3)]),\n phone: new FormControl<string | null>(null),\n email: new FormControl<string | null>(null),\n message: new FormControl<string | null>(null, []),\n files: new FormControl<ScUploadedFile[] | null>([], [this.maxFilesLength(5)]),\n });\n\n /**\n * Перечисление типов подсказок.\n */\n protected readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * {@link Subject} события отправки формы.\n */\n protected readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса на отправку данных.\n */\n protected readonly request$: Observable<undefined | null> = this.onSubmit.pipe(\n filter(() => this.form.valid),\n map(() => this.form.value as ScIFeedbackMessage),\n switchMap((value) =>\n this.feedbackService.sendFeedback(this.context?.data.formSlag ?? this.formSlag(), this.convertersService.removeNullRecursive(value)).pipe(\n tap(() => {\n if (this.context) {\n this.context.completeWith();\n } else {\n this.resetForm();\n this.onSendSuccess.emit();\n }\n }),\n // eslint-disable-next-line rxjs/no-implicit-any-catch\n catchError((error: HttpErrorResponse) => {\n this.form.markAllAsTouched();\n\n const { errors, message } = error.error as ApiErrorResponse;\n\n if (errors) {\n Object.keys(errors).forEach((key) => {\n const control = this.form.get(key);\n\n if (control) {\n // eslint-disable-next-line security/detect-object-injection\n control.setErrors({ serverResponse: errors[key] });\n }\n });\n } else if (message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n\n return of(null);\n }),\n // eslint-disable-next-line unicorn/no-useless-undefined\n startWith(undefined)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных.\n */\n protected readonly loading$: Observable<boolean> = this.request$.pipe(map((value) => value === undefined));\n\n /**\n * Управляет состоянием загруженных файлов.\n */\n protected readonly loadedFile: FormControl<TuiFileLike[] | null> = new FormControl<TuiFileLike[] | null>([], [this.maxFilesLength()]);\n\n /**\n * Observable, который отслеживает, приняты ли файлы в соответствии с требованиями по типу размеру и т.д.\n */\n protected readonly accepted$: Observable<File[]> = this.loadedFile.valueChanges.pipe(map(() => tuiFilesAccepted(this.loadedFile)));\n\n /**\n * Список файлов, которые были отклонены при загрузке.\n */\n protected rejected: readonly File[] = [];\n\n /**\n * Инициализирует экземпляр класса {@link ScFeedbackFormComponent}.\n */\n public constructor() {\n merge(\n this.accepted$,\n this.user$,\n this.loadedFile.valueChanges.pipe(\n tap((files) => {\n this.form.controls.files.reset([]);\n this.onUploadFile(files);\n })\n )\n )\n .pipe(takeUntilDestroyed())\n .subscribe();\n\n // Валидация полей ввода в зависимости от формы.\n effect(() => {\n switch (this.formSlag()) {\n case 'common':\n this.form.get('email')?.setValidators([Validators.required, Validators.email]);\n this.form.get('phone')?.clearValidators();\n break;\n\n case 'contacts':\n case 'vacancies':\n this.form.get('email')?.clearValidators();\n this.form.get('phone')?.setValidators([Validators.required, Validators.minLength(12)]);\n break;\n\n case 'samples':\n this.form.get('email')?.setValidators([Validators.required, Validators.email]);\n this.form.get('phone')?.setValidators([Validators.required, Validators.minLength(12)]);\n break;\n\n default:\n this.form.get('email')?.clearValidators();\n this.form.get('phone')?.clearValidators();\n break;\n }\n\n // Обновляем состояние валидации\n this.form.get('email')?.updateValueAndValidity();\n this.form.get('phone')?.updateValueAndValidity();\n });\n }\n\n /**\n * Обрабатывает отклоненные файлы.\n *\n * @param files Список файлов, которые были отклонены.\n */\n protected onReject(files: readonly File[]): void {\n this.rejected = [...new Set([...this.rejected, ...files])];\n }\n\n /**\n * Удаляет файл из списка загруженных и отклоненных файлов.\n *\n * @param file Файл, который нужно удалить.\n */\n protected onRemove(file: File): void {\n this.rejected = this.rejected.filter((rejected) => rejected !== file);\n this.loadedFile.setValue(this.loadedFile.value?.filter((current) => current !== file) ?? []);\n }\n\n /**\n * Загружает файл в форму обратной связи.\n *\n * @param files Набор файлов.\n */\n private onUploadFile(files: TuiFileLike[] | null): void {\n files?.forEach((file) => {\n const reader = new FileReader();\n\n reader.addEventListener('load', () => {\n if (reader.result) {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string,sonarjs/no-base-to-string\n this.form.controls.files.setValue([...(this.form.controls.files.value ?? []), new ScUploadedFile(file.name, reader.result.toString())]);\n }\n });\n\n reader.readAsDataURL(file as unknown as Blob);\n });\n }\n\n /**\n * Проверяет количество файлов загруженных пользователем.\n *\n * @param maxLength максимальное допустимое количество файлов для отправки.\n */\n private maxFilesLength(maxLength: number = this.maxFilesInForm): ValidatorFn {\n return ({ value }: AbstractControl<TuiFileLike[]>) =>\n value.length > maxLength ? { maxLength: new TuiValidationError(`Максимальное количество файлов - ${maxLength}`) } : null;\n }\n\n /**\n * Выполняет очистку полей формы.\n */\n private resetForm(): void {\n this.form.reset({\n email: null,\n name: null,\n phone: null,\n message: null,\n files: [],\n });\n }\n}\n","@let formSlug = formSlag();\n<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <!-- ФИО -->\n <label tuiLabel>\n ФИО\n <tui-input formControlName=\"name\"> Укажите Ваши Ф.И.О. </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Телефон -->\n <label\n *ngIf=\"formSlug === 'contacts' || formSlug === 'vacancies'\"\n tuiLabel\n >\n Телефон\n <tui-input-phone formControlName=\"phone\"> Телефон </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Адрес электронной почты -->\n <label\n *ngIf=\"formSlug !== 'contacts' && formSlug !== 'vacancies'\"\n tuiLabel\n >\n Адрес электронной почты\n <tui-input formControlName=\"email\">\n Адрес электронной почты\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Комментарий -->\n <label\n *ngIf=\"formSlug === 'common'\"\n tuiLabel\n >\n Комментарий\n <tui-textarea formControlName=\"message\"> Комментарий </tui-textarea>\n <tui-error\n formControlName=\"message\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Файлы -->\n <div\n *ngIf=\"formSlug === 'vacancies'\"\n class=\"flex flex-col gap-1\"\n >\n <label tuiInputFiles>\n <input\n #validator=\"tuiInputFilesValidator\"\n accept=\".doc,.docx,.pdf,image/*\"\n tuiInputFiles\n [formControl]=\"loadedFile\"\n [multiple]=\"true\"\n (reject)=\"onReject($event)\"\n />\n </label>\n\n <tui-error\n *ngIf=\"loadedFile.invalid\"\n [error]=\"['maxLength'] | tuiFieldError | async\"\n [formControl]=\"loadedFile\"\n />\n\n @let accepted = accepted$ | async;\n <tui-files\n *ngIf=\"accepted?.length || rejected.length\"\n class=\"tui-space_top-1\"\n >\n <tui-file\n *ngFor=\"let file of accepted\"\n [file]=\"file\"\n (remove)=\"onRemove(file)\"\n />\n <tui-file\n *ngFor=\"let file of rejected\"\n state=\"error\"\n [file]=\"(file | tuiFileRejected: validator | async) || file\"\n (remove)=\"onRemove(file)\"\n />\n </tui-files>\n </div>\n\n <!-- recaptcha -->\n @if (form.get('recaptcha')) {\n <div\n class=\"mb-3 max-h-20 overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': form.get('recaptcha')?.valid }\"\n >\n <re-captcha formControlName=\"recaptcha\" />\n </div>\n }\n\n <!-- Элементы управления -->\n <div class=\"flex gap-3\">\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n Оставить\n </button>\n <div class=\"flex items-center\">\n <span class=\"text-body-s\">\n Нажимая на кнопку, вы соглашаетесь с\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); onClickOffer.emit()\"\n >\n Политикой конфиденциальности\n </button>\n .\n </span>\n </div>\n </div>\n</form>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TuiDialogContext, TuiIcon } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { EMPTY, of, switchMap, timer } from 'rxjs';\n\n/**\n * Компонент «Спасибо!».\n */\n@Component({\n standalone: true,\n selector: 'sc-gratitude',\n templateUrl: './sc-gratitude.component.html',\n imports: [TuiIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScGratitudeComponent {\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context = inject<TuiDialogContext<void, { autoClose: number; subTitle: string }>>(POLYMORPHEUS_CONTEXT, { optional: true });\n\n /**\n * Инициализирует экземпляр класса {@link ScGratitudeComponent}.\n */\n public constructor() {\n of(this.context?.data.autoClose)\n .pipe(\n switchMap((autoClose) => (autoClose ? timer(autoClose) : EMPTY)),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n this.context?.$implicit.complete();\n });\n }\n}\n","<div class=\"flex flex-col items-center gap-4 py-14 text-center\">\n <tui-icon\n icon=\"@tui.circle-check\"\n class=\"text-tui-success-fill !size-20 !text-5xl\"\n />\n <p class=\"text-h5\">Спасибо!</p>\n <p\n [innerHTML]=\"context?.data?.subTitle ?? 'Ваш данные успешно отправлены. Мы свяжемся с вами в ближайшее время.'\"\n class=\"text-body-m mx-2\"\n ></p>\n</div>\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ScIChangePassword, ScUserService } from '@snabcentr/client-core';\nimport { tuiIsFalsy, tuiIsPresent } from '@taiga-ui/cdk';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth';\nimport { scPasswordConfirmMatchingValidator } from '../../validators';\n\n/**\n * Компонент смены пароля пользователя.\n */\n@Component({\n selector: 'sc-reset-user-password',\n templateUrl: './sc-reset-user-password.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScResetUserPasswordComponent {\n /**\n * Форма для изменения пароля пользователя.\n */\n public form = new FormGroup(\n {\n currentPassword: new FormControl(null, [Validators.required, Validators.minLength(8)]),\n password: new FormControl(null, [Validators.required, Validators.minLength(8)]),\n passwordConfirm: new FormControl(null, [Validators.required, Validators.minLength(8)]),\n },\n { validators: scPasswordConfirmMatchingValidator('password', 'passwordConfirm') }\n );\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса данных аутентификации.\n */\n private readonly request$ = this.onSubmit.pipe(\n filter(() => this.form.valid),\n map(() => this.form.value as ScIChangePassword),\n switchMap((value) =>\n this.userService.updateUserInfo$(value).pipe(\n map(() => ({ success: true })),\n tap(() => {\n this.form.reset();\n }),\n // eslint-disable-next-line rxjs/no-implicit-any-catch\n catchError((error: HttpErrorResponse) => {\n const errorResponse = error.error as ApiErrorResponse;\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in errorResponse.errors) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errorResponse.errors[key] });\n }\n\n if (!errorResponse.errors && errorResponse.message) {\n this.form.setErrors({ serverResponse: [errorResponse.message] });\n }\n\n return of({ success: false });\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по email.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Сигнал события события смены пароля.\n */\n @Output()\n public readonly successResetPassword = this.request$.pipe(\n filter(tuiIsPresent),\n filter(({ success }) => success)\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScResetUserPasswordComponent}.\n *\n * @param userService Сервис данных о пользователе.\n */\n public constructor(private readonly userService: ScUserService) {}\n}\n","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-4 p-1 lg:flex-row\"\n>\n <div class=\"grid items-start gap-2 lg:grow lg:grid-cols-3 lg:grid-rows-1 lg:gap-4\">\n <label tuiLabel\n >Старый пароль\n <tui-input-password formControlName=\"currentPassword\">\n Старый пароль\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"currentPassword\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\n >Придумайте новый пароль\n <tui-input-password\n [pseudoInvalid]=\"form.hasError('passwordNotEquivalent')\"\n formControlName=\"password\"\n >\n Придумайте новый пароль\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\n >Повторите новый пароль\n <tui-input-password\n [pseudoInvalid]=\"form.hasError('passwordNotEquivalent')\"\n formControlName=\"passwordConfirm\"\n >\n Повторите новый пароль\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"passwordConfirm\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <tui-error\n *ngIf=\"form.invalid\"\n class=\"lg:!hidden\"\n [formGroup]=\"form\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </div>\n <div class=\"flex flex-col justify-center lg:mt-5 lg:h-11\">\n <button\n *tuiLet=\"!!(loading$ | async) as loading\"\n tuiButton\n [loading]=\"loading\"\n type=\"submit\"\n [disabled]=\"form.invalid || loading\"\n iconStart=\"@tui.save\"\n class=\"font-medium\"\n >\n Сохранить\n </button>\n </div>\n</form>\n<tui-error\n class=\"!hidden lg:!block\"\n [formGroup]=\"form\"\n [error]=\"[] | tuiFieldError | async\"\n></tui-error>\n","/* eslint-disable guard-for-in,@typescript-eslint/unbound-method,rxjs/no-implicit-any-catch,no-restricted-syntax */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Inject, Optional, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ScIPhoneOnDataApprove, ScISuggestionType, ScIUserOnDataUpdate, ScUser, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService } from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { catchError, filter, map, Observable, of, skip, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth';\nimport { SC_USER_INFO, SC_USER_PROVIDERS } from '../../providers';\n\n/**\n * Диалоговое окно изменения данных пользователя.\n */\n@Component({\n selector: 'sc-update-user-info-dialog',\n templateUrl: './sc-update-user-info-dialog.component.html',\n providers: [SC_USER_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScUpdateUserInfoDialogComponent implements AfterViewInit {\n /**\n * Перечисление типов подсказок.\n */\n public readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Группа полей ввода формы общих данных пользователя для их редактирования.\n */\n public readonly form = new FormGroup({\n name: new FormControl<string | null>(null, [Validators.required, Validators.minLength(3)]),\n email: new FormControl<string | null>(null, [Validators.required, Validators.email]),\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n verificationCode: new FormControl<string | null>(null, [Validators.required, Validators.minLength(6)]),\n cityId: new FormControl<number | null>(null, Validators.required),\n getNews: new FormControl<boolean>(false),\n });\n\n /**\n * Сигнал нажатия на кнопку \"Отмена\".\n */\n @Output()\n public readonly cancelButtonClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Сигнал события успешного обновления данных пользователя.\n */\n @Output()\n public readonly successUpdateDate: Observable<ScUser> = this.user$.pipe(skip(1));\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса обновления данных пользователя.\n */\n private readonly request$ = this.onSubmit.pipe(\n filter(() => this.form.valid),\n map(() => this.form.value as ScIUserOnDataUpdate | ScIPhoneOnDataApprove),\n switchMap((value) =>\n this.userService.updateUserInfo$(value).pipe(\n switchMap(() => this.userService.updateUserChange$()),\n tap((user) => this.context?.completeWith(user)),\n catchError((error: HttpErrorResponse) => {\n const errorResponse = error.error as ApiErrorResponse;\n\n for (const key in errorResponse.errors) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errorResponse.errors[key] });\n }\n\n if (!errorResponse.errors && errorResponse.message) {\n this.form.setErrors({ serverResponse: [errorResponse.message] });\n }\n return of({} as ScUser);\n }),\n startWith(null)\n )\n )\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных аутентификации по email.\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScUpdateUserInfoDialogComponent}.\n *\n * @param user$ Поток данных о текущем пользователе.\n * @param userService Сервис данных о пользователе.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n @Inject(SC_USER_INFO) public readonly user$: Observable<ScUser>,\n private readonly userService: ScUserService,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Optional()\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context?: TuiDialogContext<ScUser, ScUpdateUserInfoDialogComponent>\n ) {\n this.user$.subscribe((user) => {\n this.form.patchValue(\n {\n name: user.name,\n email: user.contacts.email.value,\n phone: user.contacts.phone.value,\n cityId: user.city,\n getNews: user.getNews,\n },\n { emitEvent: false }\n );\n });\n }\n\n /** @inheritdoc */\n public ngAfterViewInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileEditShow,\n });\n }\n}\n","<form\n [formGroup]=\"form\"\n *ngIf=\"user$ | async as user\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-4\"\n>\n <label tuiLabel\n >{{ user.isOrg ? 'Название организации или ИП' : 'Ф.И.О.' }}\n <tui-input formControlName=\"name\">\n {{ user.isOrg ? 'Название организации или ИП' : 'Ф.И.О.' }}\n <ng-container *ngIf=\"user.isOrg\">\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n ></sc-suggestion-field>\n </ng-container>\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></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\n tuiLabel\n class=\"w-full\"\n >Адрес электронной почты\n <tui-input formControlName=\"email\">\n Адрес электронной почты\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <sc-addresses-selection-field></sc-addresses-selection-field>\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n class=\"w-full\"\n />\n Я хочу получать рассылку Снабцентр о скидках и новостях по электронной почте.\n </label>\n <div class=\"flex justify-center gap-4\">\n <button\n tuiButton\n (click)=\"context ? context.$implicit.complete() : cancelButtonClick.emit()\"\n type=\"button\"\n iconStart=\"@tui.x\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.save\"\n >\n Сохранить\n </button>\n </div>\n</form>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Output } from '@angular/core';\nimport { ScIManager, ScUserService } from '@snabcentr/client-core';\nimport { map, Observable } from 'rxjs';\n\n/**\n * Компонент персональных менеджеров пользователя.\n */\n@Component({\n selector: 'sc-user-managers',\n templateUrl: './sc-user-managers.component.html',\n styleUrls: ['./sc-user-managers.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScUserManagersComponent {\n /**\n * Персональные менеджеры пользователя.\n */\n public readonly managers$: Observable<ScIManager[] | undefined> = this.userService\n .getUserChange$()\n .pipe(map((user) => user.managers?.sort((a: ScIManager, b: ScIManager) => Number(Boolean(b.isPrimary)) - Number(Boolean(a.isPrimary)))));\n\n /**\n * Событие нажатия на кнопку QR кода.\n */\n @Output()\n public readonly qrClickEvent: EventEmitter<ScIManager> = new EventEmitter<ScIManager>();\n\n /**\n * Инициализирует экземпляр класса {@link ScUserManagersComponent}.\n *\n * @param userService Сервис данных о пользователе.\n */\n public constructor(private readonly userService: ScUserService) {}\n}\n","<p class=\"mb-2 font-extrabold\">Ваши персональные менеджеры:</p>\n<ng-container *ngFor=\"let manager of managers$ | async; let last = last\">\n <div class=\"flex justify-between\">\n <div class=\"flex flex-col gap-1 !font-medium text-tui-text-02\">\n {{ manager.name }}\n <a\n tuiLink\n [pseudo]=\"true\"\n scEmailLink\n linkLocation=\"user-managers\"\n href=\"mailto:{{ manager.contacts.email }}\"\n iconStart=\"@tui.mail\"\n >\n {{ manager.contacts.email }}\n </a>\n <a\n tuiLink\n [scTelLink]=\"manager.contacts.phone\"\n [pseudo]=\"true\"\n linkLocation=\"user-managers\"\n href=\"tel:{{ manager.contacts.phone | scPhoneFormat }}\"\n iconStart=\"@tui.phone\"\n >\n {{ manager.contacts.phone | scPhoneFormat }}\n </a>\n </div>\n <button\n tuiIconButton\n size=\"m\"\n appearance=\"secondary\"\n iconStart=\"@tui.scan-qr-code\"\n (click)=\"qrClickEvent.emit(manager)\"\n ></button>\n </div>\n <hr\n *ngIf=\"!last\"\n class=\"my-2 h-px border-0 bg-tui-base-04\"\n />\n</ng-container>\n","/* eslint-disable no-restricted-syntax,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, Inject, Optional } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ScApprovedData, ScIPhoneOnDataApprove, ScUser, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, ScVerificationService } from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { SC_USER_INFO, SC_USER_PROVIDERS } from '../../providers/sc-user-providers';\n\n/**\n * Диалоговое окно подтверждения номера телефона.\n */\n@Component({\n selector: 'sc-user-phone-approve-dialog',\n templateUrl: './sc-user-phone-approve-dialog.component.html',\n providers: [SC_USER_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScUserPhoneApproveDialogComponent implements AfterViewInit {\n /**\n * Наличие кода подтверждения у пользователя.\n */\n public haveCode: boolean = false;\n\n /**\n * Группа полей ввода для подтверждения номера телефона.\n */\n public readonly form = new FormGroup({\n phone: new FormControl<string | null>(null, [Validators.required, Validators.minLength(12)]),\n verificationCode: new FormControl<string | null>(null, [Validators.required, Validators.minLength(6)]),\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса подтверждения номера телефона.\n */\n private readonly request$ = this.onSubmit.pipe(\n filter(() => this.form.valid),\n map(() => this.form.value as ScIPhoneOnDataApprove),\n switchMap((value) =>\n this.verificationService.approvePhone(value).pipe(\n switchMap(() => this.userService.updateUserChange$()),\n tap((user) => this.context?.completeWith(user.contacts.phone)),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\n // eslint-disable-next-line security/detect-object-injection\n this.form.get(key)?.setErrors({ serverResponse: errors[key] });\n }\n }\n\n if (!errors && message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n }\n\n return of({} as ScUser);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния запроса подтверждения номера телефона..\n */\n public readonly loading$: Observable<boolean> = this.request$.pipe(map(tuiIsFalsy));\n\n /**\n * Инициализирует экземпляр класса {@link ScUserPhoneApproveDialogComponent}.\n *\n * @param verificationService Сервис верификации.\n * @param userMetrikaService Сервис для сбора метрик о действиях пользователей.\n * @param user$ Поток данных о текущем пользователе.\n * @param userService Сервис данных о пользователе.\n * @param context Контекст диалогового окна, в котором открыт компонент.\n */\n public constructor(\n private readonly verificationService: ScVerificationService,\n private readonly userMetrikaService: ScUserMetrikaService,\n @Inject(SC_USER_INFO)\n public readonly user$: Observable<ScUser>,\n private readonly userService: ScUserService,\n @Optional()\n @Inject(POLYMORPHEUS_CONTEXT)\n public readonly context?: TuiDialogContext<ScApprovedData, ScUserPhoneApproveDialogComponent>\n ) {\n this.user$.pipe(takeUntilDestroyed()).subscribe((user) => {\n this.form.patchValue({\n phone: user.contacts.phone.value,\n });\n });\n }\n\n /** @inheritdoc */\n public ngAfterViewInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.userProfileApprovePhoneShow,\n });\n }\n}\n","<ng-container *ngIf=\"user$ | async as user\">\n <form\n [formGroup]=\"form\"\n *tuiLet=\"!!(loading$ | async) as loadingApproveCode\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-3\"\n >\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\n *ngIf=\"user.contacts.phone.isApproved || haveCode\"\n class=\"flex justify-center gap-4\"\n >\n <button\n *ngIf=\"user.contacts.phone.isApproved && context\"\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n appearance=\"secondary\"\n >\n Закрыть\n </button>\n <button\n *ngIf=\"haveCode\"\n tuiButton\n type=\"submit\"\n [loading]=\"loadingApproveCode\"\n [disabled]=\"form.invalid || loadingApproveCode\"\n iconStart=\"@tui.sc.send\"\n >\n Подтвердить\n </button>\n </div>\n </form>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList, TuiError, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiCheckbox, TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPasswordModule, TuiInputPhoneModule, TuiSelectModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScTerminalLinkDirective } from '../directives';\nimport { ScLinks } from '../directives/links/sc-links';\nimport { ScFormFieldsModule } from '../form-fields/form-fields.module';\nimport { ScVerificationModule } from '../verification';\nimport { ScResetUserPasswordComponent } from './reset-user-password/sc-reset-user-password.component';\nimport { ScUpdateUserInfoDialogComponent } from './update-user-info-dialog/sc-update-user-info-dialog.component';\nimport { ScUserManagersComponent } from './user-managers/sc-user-managers.component';\nimport { ScUserPhoneApproveDialogComponent } from './user-phone-approve-dialog/sc-user-phone-approve-dialog.component';\n\n/**\n * Модуль компонентов пользователя.\n */\n@NgModule({\n declarations: [ScResetUserPasswordComponent, ScUpdateUserInfoDialogComponent, ScUserPhoneApproveDialogComponent, ScUserManagersComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TuiFieldErrorPipe,\n TuiInputPasswordModule,\n TuiButton,\n TuiError,\n TuiLabel,\n TuiTextfieldControllerModule,\n TuiLet,\n ScVerificationModule,\n ScFormFieldsModule,\n TuiLoader,\n TuiInputModule,\n TuiInputPhoneModule,\n TuiCheckbox,\n ...TuiDataList,\n TuiSelectModule,\n TuiLink,\n ScTerminalLinkDirective,\n ...ScLinks,\n TuiButtonLoading,\n ],\n exports: [ScResetUserPasswordComponent, ScUpdateUserInfoDialogComponent, ScUserPhoneApproveDialogComponent, ScUserManagersComponent],\n})\nexport class ScUserModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Output } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ScContragent, ScIBankAccount, ScICity, ScIContact, ScIDeliveryAddress, ScLocationsService, ScUser, ScUserService, ScVerificationService } from '@snabcentr/client-core';\nimport { TUI_TRUE_HANDLER, tuiIsFalsy, tuiIsPresent, tuiPure } from '@taiga-ui/cdk';\nimport { tuiFadeIn } from '@taiga-ui/core';\nimport { filter, map, Observable, share, skip, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { SC_USER_INFO, SC_USER_PROVIDERS } from '../../providers';\n\n/**\n * Компонент контента профиля пользователя в виде раскрывающихся смысловых блоков.\n */\n@Component({\n selector: 'sc-profile-accordions-content',\n templateUrl: './sc-profile-accordions-content.component.html',\n providers: [SC_USER_PROVIDERS],\n animations: [tuiFadeIn],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScProfileAccordionsContentComponent {\n /**\n * {@link FormControl} переключателя 'Я хочу получать рассылку'.\n */\n public getNewsControl: FormControl<boolean> = new FormControl<boolean>(false, { nonNullable: true });\n\n /**\n * {@link Observable} запроса изменения признака пользователя 'Я хочу получать рассылку'.\n */\n private readonly getNewsRequest$ = this.getNewsControl.valueChanges.pipe(\n skip(1),\n switchMap((value) =>\n this.userService.updateUserInfo$({ getNews: value }).pipe(\n switchMap(() =>\n this.userService.updateUserChange$().pipe(\n tap((user) => {\n this.getNewsControl.patchValue(user.getNews, { emitEvent: false });\n }),\n startWith(null)\n )\n ),\n startWith(null)\n )\n ),\n\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных изменения признака пользователя 'Я хочу получать рассылку'.\n */\n public readonly getNewsLoading$: Observable<boolean> = this.getNewsRequest$.pipe(map(tuiIsFalsy));\n\n /**\n * {@link Subject} события отправки сообщения для подтверждения адреса электронной почты.\n */\n public readonly onSendApproveEmail: Subject<string> = new Subject<string>();\n\n /**\n * {@link Observable} запроса данных аутентификации.\n */\n private readonly sendApproveEmailRequest$: Observable<boolean | null> = this.onSendApproveEmail.pipe(\n switchMap((value) => this.verificationService.sendEmailApproveCode(value).pipe(map(TUI_TRUE_HANDLER), startWith(null))),\n startWith(false),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных отправки сообщения для подтверждения адреса электронной почты.\n */\n public readonly approveEmailLoading$: Observable<boolean> = this.sendApproveEmailRequest$.pipe(map(tuiIsFalsy));\n\n /**\n * {@link Observable} изменения состояния признака, отправлено ли сообщение для подтверждения адреса электронной почты.\n */\n public readonly isSendApproveEmail$: Observable<boolean> = this.sendApproveEmailRequest$.pipe(filter(tuiIsPresent));\n\n /**\n * {@link Observable} изменения списка контактных лиц пользователя.\n */\n public readonly userContacts$ = this.userService.getUserContacts$();\n\n /**\n * Событие нажатия на кнопку редактирование профиля пользователя.\n */\n @Output()\n public editProfileClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку подтверждения телефона.\n */\n @Output()\n public approvePhoneClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку добавления контрагента.\n */\n @Output()\n public addContragentClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления контрагента.\n */\n @Output()\n public deleteContragentClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку добавления банковского счёта контрагенту.\n */\n @Output()\n public addContragentBankAccountClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления банковского счёта контрагента.\n */\n @Output()\n public deleteContragentBankAccountClick: EventEmitter<ScIBankAccount> = new EventEmitter<ScIBankAccount>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица контрагенту.\n */\n @Output()\n public addContragentContactClick: EventEmitter<ScContragent> = new EventEmitter<ScContragent>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у контрагента.\n */\n @Output()\n public deleteContragentContactClick: EventEmitter<{ contact: ScIContact; contragent: ScContragent }> = new EventEmitter<{ contact: ScIContact; contragent: ScContragent }>();\n\n /**\n * Событие нажатия на кнопку добавления адреса доставки клиента.\n */\n @Output()\n public addDeliveryAddressClick: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Событие нажатия на кнопку удаления адреса доставки у клиента.\n */\n @Output()\n public deleteDeliveryAddressClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица для адреса доставки.\n */\n @Output()\n public addDeliveryAddressContactClick: EventEmitter<ScIDeliveryAddress> = new EventEmitter<ScIDeliveryAddress>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у адреса доставки.\n */\n @Output()\n public deleteDeliveryAddressContactClick: EventEmitter<{ contact: ScIContact; address: ScIDeliveryAddress }> = new EventEmitter<{\n contact: ScIContact;\n address: ScIDeliveryAddress;\n }>();\n\n /**\n * Событие нажатия на кнопку добавления контактного лица клиенту.\n */\n @Output()\n public addUserContactClick: EventEmitter<number> = new EventEmitter<number>();\n\n /**\n * Событие нажатия на кнопку удаления контактного лица у клиента.\n */\n @Output()\n public deleteUserContactClick: EventEmitter<ScIContact> = new EventEmitter<ScIContact>();\n\n /**\n * Инициализирует экземпляр класса {@link ScProfileComponent}.\n *\n * @param user$ Поток данных о текущем пользователе.\n * @param locationsService Сервис для получения списков стран, регионов, городов.\n * @param userService Сервис данных о пользователе.\n * @param verificationService Сервис верификации.\n */\n public constructor(\n @Inject(SC_USER_INFO) public readonly user$: Observable<ScUser>,\n private readonly locationsService: ScLocationsService,\n private readonly userService: ScUserService,\n private readonly verificationService: ScVerificationService\n ) {}\n\n /**\n * Создает запрос получения данных о городе текущего пользователя по идентификатору города.\n *\n * @param cityId Идентификатор записи города.\n */\n @tuiPure // TODO: TASK[#7615] Удалить поле рефакторинга сервиса работы с пользователем.\n public getUserCity$(cityId: number): Observable<ScICity> {\n return this.locationsService.getUserCity$(cityId);\n }\n}\n","<div\n *tuiLet=\"user$ | async as user\"\n class=\"flex flex-col gap-4\"\n>\n <sc-accordion\n [showArrow]=\"false\"\n [showAddButton]=\"false\"\n [open]=\"true\"\n >\n Общие данные\n <ng-template scAccordionContent>\n <tui-loader\n [overlay]=\"true\"\n [showLoader]=\"user === null\"\n >\n <div class=\"flex gap-2 pl-4\">\n <div\n *ngIf=\"user\"\n class=\"flex grow flex-col gap-2\"\n >\n <span class=\"font-medium\">{{ user.name }}</span>\n <div\n *ngIf=\"user.city && (getUserCity$(user.city) | async) as city\"\n class=\"flex items-center gap-1\"\n >\n <tui-icon icon=\"@tui.map-pin\"></tui-icon>\n <div class=\"flex flex-wrap\">\n <span>г. {{ 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 [scTelLink]=\"user.contacts.phone.value\"\n iconStart=\"@tui.phone\"\n [pseudo]=\"true\"\n linkLocation=\"profile\"\n href=\"tel:{{ user.contacts.phone.value | scPhoneFormat }}\"\n >\n {{ user.contacts.phone.value | scPhoneFormat }}\n </a>\n <span\n *ngIf=\"!user.contacts.phone.isApproved\"\n class=\"text-tui-text-03\"\n >\n (Телефон не подтвержден.\n <button\n tuiLink\n [pseudo]=\"true\"\n (click)=\"approvePhoneClick.emit()\"\n >\n Подтвердить</button\n >)\n </span>\n </div>\n <div\n *tuiLet=\"!!(isSendApproveEmail$ | async) as isSendApproveEmail\"\n class=\"flex flex-wrap gap-x-2\"\n >\n <a\n tuiLink\n iconStart=\"@tui.mail\"\n [pseudo]=\"true\"\n scEmailLink\n linkLocation=\"profile\"\n href=\"mailto:{{ user.contacts.email.value }}\"\n >\n {{ user.contacts.email.value }}\n </a>\n <span\n *ngIf=\"!isSendApproveEmail && !user.contacts.email.isApproved\"\n class=\"inline-flex flex-wrap gap-1 text-tui-text-03\"\n >\n E-mail не подтвержден.\n <tui-loader\n [showLoader]=\"!!(approveEmailLoading$ | async)\"\n [overlay]=\"true\"\n >\n <button\n tuiLink\n [pseudo]=\"true\"\n (click)=\"onSendApproveEmail.next(user.contacts.email.value)\"\n >\n Подтвердить\n </button>\n </tui-loader>\n </span>\n <span\n *ngIf=\"isSendApproveEmail\"\n class=\"text-tui-success-fill\"\n @tuiFadeIn\n >\n Письмо для подтверждения успешно отправлено. Перейдите по ссылке в письме и обновите эту страницу.\n </span>\n </div>\n <tui-loader\n [showLoader]=\"!!(getNewsLoading$ | async)\"\n [overlay]=\"true\"\n >\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"s\"\n class=\"w-full\"\n [formControl]=\"getNewsControl\"\n [ngModel]=\"user.getNews\"\n />\n Я хочу получать рассылку Снабцентр о скидках и новостях по электронной почте.\n </label>\n </tui-loader>\n </div>\n\n <button\n tuiIconButton\n size=\"m\"\n type=\"button\"\n iconStart=\"@tui.pencil\"\n appearance=\"flat\"\n (click)=\"editProfileClick.emit()\"\n ></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\n *ngIf=\"user\"\n [contacts$]=\"userContacts$\"\n (addContactClick)=\"addUserContactClick.emit(user.id)\"\n (deleteButtonClick)=\"deleteUserContactClick.emit($event)\"\n ></sc-contacts-accordion>\n <sc-accordion\n #passwordAccordion\n [showArrow]=\"false\"\n [showAddButton]=\"false\"\n >\n Изменить пароль\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","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiIcon, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiCheckbox } from '@taiga-ui/kit';\n\nimport { ScAccordionModule } from '../accordion';\nimport { ScContactsModule } from '../contacts';\nimport { ScContragentsModule } from '../contragents';\nimport { ScDeliveryAddressModule } from '../delivery-address';\nimport { ScLinks, ScTerminalLinkDirective } from '../directives';\nimport { ScUserModule } from '../user';\nimport { ScProfileAccordionsContentComponent } from './sc-profile-accordions-content/sc-profile-accordions-content.component';\n\n/**\n * Модуль профиля пользователя.\n */\n@NgModule({\n declarations: [ScProfileAccordionsContentComponent],\n imports: [\n CommonModule,\n ScUserModule,\n ScAccordionModule,\n ScContragentsModule,\n ScDeliveryAddressModule,\n TuiLoader,\n TuiLet,\n TuiLink,\n TuiLabel,\n TuiIcon,\n FormsModule,\n ReactiveFormsModule,\n TuiButton,\n ScContactsModule,\n ScTerminalLinkDirective,\n ...ScLinks,\n TuiCheckbox,\n ],\n exports: [ScProfileAccordionsContentComponent],\n})\nexport class ScProfileModule {}\n","/*\n * Public API Surface of ui\n */\n\nexport * from './auth';\nexport * from './accordion';\nexport * from './banner';\nexport * from './cart';\nexport * from './catalog';\nexport * from './contragents';\nexport * from './contacts';\nexport * from './delivery-address';\nexport * from './dialogs';\nexport * from './directives';\nexport * from './error-handler';\nexport * from './files';\nexport * from './form-fields';\nexport * from './icons';\nexport * from './loader';\nexport * from './brands-list';\nexport * from './news';\nexport * from './order';\nexport * from './pages';\nexport * from './pipes';\nexport * from './samples';\nexport * from './providers';\nexport * from './feedback';\nexport * from './qrcode';\nexport * from './share-button';\nexport * from './user';\nexport * from './validators';\nexport * from './verification';\nexport * from './profile';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i6","i7","i9","i4","i5","i6.ScVerificationPhoneCheckFormComponent","i2","i3","i4.ScSignInFormByPhoneComponent","i5.ScSignInFormByEmailComponent","i8","i9.ScSuggestionFieldComponent","i10","i1","i2.ScSuggestionFieldComponent","i8.ScVerificationPhoneCheckFormComponent","i9.ScAddressesSelectionFieldComponent","i10.ScSuggestionFieldComponent","i11","i12","i13.ScNewContragentBankAccountsFormComponent","i14.ScNewContragentFormComponent","i15.ScNewContactFormComponent","i5.ScNewContactFormComponent","i2.ScAccordionComponent","i3.ScAccordionContentDirective","i6.ScTelLinkDirective","i7.ScEmailLinkDirective","i8.ScPhoneFormatPipe","i5.ScNewContragentBankAccountsFormComponent","i7.ScNewContragentBankAccountsFormComponent","i8.ScNewContragentFormComponent","i3.ScAccordionComponent","i4.ScAccordionContentDirective","i7.ScContactsAccordionComponent","i7.ScContragentsAccordionItemComponent","i2.ScPxConverter","i5.ScFavoriteButtonComponent","AngularxQRCodeModule","i5.HoverImageCarouselComponent","i6.CostWithDiscountComponent","i7.ScFavoriteButtonComponent","i8.ScInputQuantityComponent","i9.ScPriceWarehouseStockComponent","i4.ScInputQuantityComponent","i5.ScPriceWarehouseStockComponent","i7.ScSuggestionFieldComponent","i5.ScContactsAccordionComponent","i7.ScDeliveryAddressAccordionItemComponent","i2.TreeIconService","i1.TreeIconService","i6.TreeDirective","i7.TreeTopDirective","i4.ScPriceWarehouseStockComponent","i7.ScAddressesSelectionFieldComponent","i8.ScSuggestionFieldComponent","i4.ScTerminalLinkDirective","i5.ScTelLinkDirective","i6.ScEmailLinkDirective","i7.ScPhoneFormatPipe","i2.ScTelLinkDirective","i3.ScEmailLinkDirective","i4.ScPhoneFormatPipe","i3.ScResetUserPasswordComponent","i4.ScAccordionComponent","i5.ScAccordionContentDirective","i6.ScContragentsAccordionComponent","i7.ScDeliveryAddressAccordionComponent","i11.ScContactsAccordionComponent","i12.ScTerminalLinkDirective","i13.ScTelLinkDirective","i14.ScEmailLinkDirective","i15","i16.ScPhoneFormatPipe","i1.ScTelLinkDirective","i2.ScEmailLinkDirective","i3.ScPhoneFormatPipe"],"mappings":"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"}