@snabcentr/client-ui 3.38.0 → 3.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/catalog/category-card/sc-category-card.component.d.ts +1 -1
- package/esm2022/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.mjs +12 -26
- package/esm2022/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.mjs +9 -23
- package/esm2022/catalog/category-card/sc-category-card.component.mjs +2 -2
- package/esm2022/pages/index.mjs +2 -1
- package/esm2022/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.mjs +2 -2
- package/esm2022/pages/public-offer/sc-public-offer.component.mjs +32 -0
- package/esm2022/verification/index.mjs +1 -2
- package/esm2022/verification/verification-phone-check-form/sc-verification-phone-check-form.component.mjs +9 -27
- package/fesm2022/snabcentr-client-ui.mjs +58 -93
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +2 -2
- package/pages/index.d.ts +1 -0
- package/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.d.ts +1 -1
- package/pages/public-offer/sc-public-offer.component.d.ts +22 -0
- package/release_notes.tmp +3 -10
- package/styles/tailwind/tailwind.scss +4 -0
- package/verification/index.d.ts +0 -1
- package/verification/verification-phone-check-form/sc-verification-phone-check-form.component.d.ts +0 -4
- package/esm2022/verification/providers/index.mjs +0 -3
- package/esm2022/verification/providers/sc-phone-approve-code-sender.provider.mjs +0 -12
- package/esm2022/verification/providers/sc-phone-approve-code-sender.token.mjs +0 -7
- package/verification/providers/index.d.ts +0 -2
- package/verification/providers/sc-phone-approve-code-sender.provider.d.ts +0 -6
- package/verification/providers/sc-phone-approve-code-sender.token.d.ts +0 -7
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"snabcentr-client-ui.mjs","sources":["../../../projects/client-ui/providers/sc-help-notification-close.ts","../../../projects/client-ui/providers/sc-help-notification-limit.ts","../../../projects/client-ui/services/sc-help-notification.service.ts","../../../projects/client-ui/validators/sc-phone-validator.ts","../../../projects/client-ui/contacts/tokens/sc-show-help-notification-in-phone-input.token.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/providers/sc-verification-code-timeout.ts","../../../projects/client-ui/verification/providers/sc-phone-approve-code-sender.token.ts","../../../projects/client-ui/verification/providers/sc-phone-approve-code-sender.provider.ts","../../../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/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/providers/date-value-transformer/sc-date-value-transformer-with-start-time.ts","../../../projects/client-ui/providers/date-value-transformer/sc-date-value-transformer-with-end-time.ts","../../../projects/client-ui/directives/sc-date-value-transformer.directive.ts","../../../projects/client-ui/directives/select-on-focusin/sc-select-on-focusin.directive.ts","../../../projects/client-ui/contacts/tokens/sc-manager-qr-handler.token.ts","../../../projects/client-ui/contacts/manager-card/sc-manager-card.component.ts","../../../projects/client-ui/contacts/manager-card/sc-manager-card.component.html","../../../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/providers/sc-allow-select-terminated.ts","../../../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/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.ts","../../../projects/client-ui/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.html","../../../projects/client-ui/auth/enums/auth-method.ts","../../../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/validators/sc-at-least-one-required-validator.ts","../../../projects/client-ui/providers/sc-country-ids.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/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/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/providers/sc-max-files-in-form-input.ts","../../../projects/client-ui/providers/sc-page-size-options.ts","../../../projects/client-ui/providers/sc-user-providers.ts","../../../projects/client-ui/providers/sc-date-formatter.ts","../../../projects/client-ui/providers/sc-date-value-transformer.ts","../../../projects/client-ui/providers/sc-notify-when-in-stock-required-fields.ts","../../../projects/client-ui/pipes/sc-format-date.ts","../../../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/hover-image-carousel/sc-hover-image-carousel.component.ts","../../../projects/client-ui/catalog/hover-image-carousel/sc-hover-image-carousel.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/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/cart/cart-item/sc-cart-item.component.ts","../../../projects/client-ui/cart/cart-item/sc-cart-item.component.html","../../../projects/client-ui/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.ts","../../../projects/client-ui/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.html","../../../projects/client-ui/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.ts","../../../projects/client-ui/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.html","../../../projects/client-ui/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.ts","../../../projects/client-ui/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.html","../../../projects/client-ui/catalog/download-price-list/sc-download-price-list.component.ts","../../../projects/client-ui/catalog/download-price-list/sc-download-price-list.component.html","../../../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/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.ts","../../../projects/client-ui/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.html","../../../projects/client-ui/catalog/notify-when-in-stock-dialog/sc-product-in-all-warehouses.pipe.ts","../../../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/contacts/manager-card-push/sc-manager-card-push.component.ts","../../../projects/client-ui/contacts/manager-card-push/sc-manager-card-push.component.html","../../../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/pages/frequently-asked-questions/sc-frequently-asked-questions.component.ts","../../../projects/client-ui/pages/frequently-asked-questions/sc-frequently-asked-questions.component.html","../../../projects/client-ui/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.ts","../../../projects/client-ui/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.html","../../../projects/client-ui/pages/frequently-asked-questions/sc-page-size-options.ts","../../../projects/client-ui/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.ts","../../../projects/client-ui/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.html","../../../projects/client-ui/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.ts","../../../projects/client-ui/pages/personal-data-processing-policy/sc-personal-data-processing-policy.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-preview-samples-mosquito/sc-preview-samples-mosquito.component.ts","../../../projects/client-ui/samples/sc-preview-samples-mosquito/sc-preview-samples-mosquito.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":["import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\nimport { EMPTY, Observable } from 'rxjs';\n\n/**\n * Поток для закрытия уведомлений помощи.\n */\nexport const SC_HELP_NOTIFICATION_CLOSE: InjectionToken<Observable<unknown>> = tuiCreateToken<Observable<unknown>>(EMPTY);\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен максимального количества отображаемых уведомлений с контактами для помощи.\n */\nexport const SC_HELP_NOTIFICATION_LIMIT: InjectionToken<number> = tuiCreateToken<number>(3);\n","import { inject, Injectable } from '@angular/core';\nimport { ScContactsService, ScIOrgContact, ScUserService } from '@snabcentr/client-core';\nimport { BehaviorSubject, Observable, of, shareReplay, switchMap } from 'rxjs';\n\nimport { SC_HELP_NOTIFICATION_CLOSE } from '../providers/sc-help-notification-close';\nimport { SC_HELP_NOTIFICATION_LIMIT } from '../providers/sc-help-notification-limit';\n\n/**\n * Сервис для отображения Push-уведомлений с контактами для помощи клиенту.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScHelpNotificationService {\n /**\n * Список контактов для показа в уведомлении.\n */\n private readonly contactsShow: BehaviorSubject<ScIOrgContact[]> = new BehaviorSubject<ScIOrgContact[]>([]);\n\n /**\n * Сервис для работы с контактными лицами.\n */\n private readonly contactsService = inject(ScContactsService);\n\n /**\n * Максимальное количество отображаемых уведомлений.\n */\n private readonly notificationLimit = inject(SC_HELP_NOTIFICATION_LIMIT);\n\n /**\n * Поток для закрытия уведомлений.\n */\n private readonly close$ = inject(SC_HELP_NOTIFICATION_CLOSE);\n\n /**\n * Сервис для работы с пользователем.\n */\n private readonly userService = inject(ScUserService);\n\n /**\n * Список контактов для показа в уведомлении.\n */\n public readonly userHelpContacts = this.userService.getUserChange$().pipe(\n switchMap((user) => (user.isGuest ? of([]) : this.contactsService.getHelpContacts$({ phone: user.contacts.phone.value }))),\n shareReplay(1)\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScHelpNotificationService}.\n */\n public constructor() {\n this.close$.subscribe(() => {\n this.closeAllHelpNotification();\n });\n }\n\n /**\n * Установить список контактов для показа в уведомлении.\n *\n * @param contacts Данные контактов.\n */\n public setShowContacts(...contacts: ScIOrgContact[]): void {\n this.contactsShow.next(contacts.slice(0, this.notificationLimit));\n }\n\n /**\n * Возвращает список менеджеров для показа в уведомлении.\n */\n public getContactsShow$(): Observable<ScIOrgContact[]> {\n return this.contactsShow.asObservable();\n }\n\n /**\n * Закрывает уведомление по номеру телефона.\n *\n * @param contact Контакт.\n */\n public closeHelpNotification(contact: ScIOrgContact): void {\n this.contactsShow.next(this.contactsShow.getValue().filter((c) => c.id !== contact.id));\n }\n\n /**\n * Закрывает все уведомления.\n */\n public closeAllHelpNotification(): void {\n this.contactsShow.next([]);\n }\n\n /**\n * Показать уведомление по номеру телефона.\n *\n * @param phone Номер телефона.\n */\n public helpNotificationByPhone(phone: string): void {\n this.contactsService.getHelpContacts$({ phone }).subscribe((contacts) => {\n this.setShowContacts(...contacts);\n });\n }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { isValidPhoneNumber } from 'libphonenumber-js/max';\n\n/**\n * Проверяет корректность введенного номера телефона.\n */\nexport function phoneValidator(): ValidatorFn {\n return (control: AbstractControl<string | null>): ValidationErrors | null => {\n if (control.value) {\n const isValid = isValidPhoneNumber(control.value);\n\n return isValid ? null : { phone: true };\n }\n\n return null;\n };\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { TUI_IS_MOBILE, tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\n\n/**\n * Токен признака, следует ли отображать уведомление помощи в поле ввода телефона.\n */\nexport const SC_SHOW_HELP_NOTIFICATION_IN_PHONE_INPUT: InjectionToken<boolean> = tuiCreateTokenFromFactory(() => inject(TUI_IS_MOBILE));\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","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен времени ожидания (в секундах) перед повторной отправкой кода подтверждения.\n */\nexport const SC_VERIFICATION_CODE_TIMEOUT: InjectionToken<number> = tuiCreateToken<number>(60);\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Токен для получения кода подтверждения телефона.\n * Позволяет подключать внешнюю логику получения кода подтверждения.\n */\nexport const SC_PHONE_APPROVE_CODE_SENDER = new InjectionToken<(phoneNumber: string) => Observable<void>>('SC_PHONE_APPROVE_CODE_SENDER');\n","import { Provider } from '@angular/core';\nimport { ScVerificationService } from '@snabcentr/client-core';\n\nimport { SC_PHONE_APPROVE_CODE_SENDER } from './sc-phone-approve-code-sender.token';\n\n/**\n * Провайдер по умолчанию для получения кода подтверждения телефона.\n * Использует ScVerificationService для отправки кода.\n */\nexport const SC_PHONE_APPROVE_CODE_SENDER_PROVIDER: Provider = {\n provide: SC_PHONE_APPROVE_CODE_SENDER,\n useFactory: (verificationService: ScVerificationService) => (phoneNumber: string) => verificationService.sendPhoneApproveCode(phoneNumber),\n deps: [ScVerificationService],\n};\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, signal, WritableSignal } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { SC_PATH_IMAGE_NOT_FOUND, ScAuthService, ScCartItem, ScIImage, ScImage, 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({\n host: { ngSkipHydration: 'true' },\n}) // Абстрактный класс имеет декоратор @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>(null, { 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 public readonly autoFocuseQuantityInput: WritableSignal<boolean> = signal(false);\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(): ScIImage {\n return this.product ? this.imageHelper.getImagePreview(this.product) : new ScImage(this.pathImageNotFound, `Товар не найден`);\n }\n\n /**\n * Возвращает массив превью-изображений товара.\n *\n * @param product Объект товара.\n */\n public getCardImagePreviewList(product: ScProduct): ScIImage[] {\n return this.imageHelper.getProductImagePreviewList(product, true);\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","/* 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","/* eslint-disable class-methods-use-this */\n\nimport { Injectable } from '@angular/core';\nimport { TuiDay, TuiValueTransformer } from '@taiga-ui/cdk';\n\nimport { From, To } from './sc-date-value-transformer-types';\n\n/**\n * Преобразователь даты формата \"YYYY-MM-DD 00:00:00\".\n */\n@Injectable()\nexport class DateValueTransformerWithStartTime extends TuiValueTransformer<From, To> {\n /**\n * Преобразует значение из {@link To} формата в {@link From}.\n *\n * @param controlValue Значение из формы поля ввода.\n */\n public fromControlValue(controlValue: To): From {\n if (controlValue === null || controlValue.length === 0) {\n return null;\n }\n\n return TuiDay.fromLocalNativeDate(new Date(controlValue));\n }\n\n /**\n * Преобразует значение из {@link From} формата в {@link To} в формат \"YYYY-MM-DD 00:00:00\".\n *\n * @param componentValue Значение из компонента поля ввода.\n */\n public toControlValue(componentValue: From): To {\n if (!componentValue) {\n return null;\n }\n\n return `${componentValue.toString('YMD', '-')} 00:00:00`;\n }\n}\n","/* eslint-disable class-methods-use-this */\n\nimport { Injectable } from '@angular/core';\n\nimport { From, To } from './sc-date-value-transformer-types';\nimport { DateValueTransformerWithStartTime } from './sc-date-value-transformer-with-start-time';\n\n/**\n * Преобразователь даты формата \"YYYY-MM-DD 23:59:59\".\n */\n@Injectable()\nexport class DateValueTransformerWithEndTime extends DateValueTransformerWithStartTime {\n /**\n * Преобразует значение из {@link From} формата в {@link To} в формат \"YYYY-MM-DD 23:59:59\".\n *\n * @param componentValue Значение из компонента поля ввода.\n */\n public override toControlValue(componentValue: From): To {\n if (!componentValue) {\n return null;\n }\n\n return `${componentValue.toString('YMD', '-')} 23:59:59`;\n }\n}\n","import { Directive } from '@angular/core';\nimport { TUI_DATE_VALUE_TRANSFORMER } from '@taiga-ui/kit';\n\nimport { DateValueTransformerWithEndTime } from '../providers/date-value-transformer';\n\n/**\n * Директива для преобразования даты в формат \"YYYY-MM-DD 23:59:59\".\n */\n@Directive({\n standalone: true,\n selector: 'tui-input-date[toFinishDateTime]',\n providers: [\n {\n provide: TUI_DATE_VALUE_TRANSFORMER,\n useClass: DateValueTransformerWithEndTime,\n },\n ],\n})\nexport class FinishDateTimeTransformerDirective {}\n","import { Directive } from '@angular/core';\n\n/**\n * Директива для обработки события фокуса поля ввода, для последующего выделения содержимого поля ввода.\n */\n@Directive({\n standalone: true,\n selector: 'tui-input-number, tui-input, tui-input-phone, tui-input-date, tui-input-password, input[tuiInputNumber]',\n host: {\n '(focusin)': 'onFocusIn($event.target)',\n },\n})\nexport class ScSelectOnFocusinDirective {\n /**\n * Слушатель и обработчик события `focusin`.\n *\n * @param target Целевой объект события `focusin`.\n */\n // eslint-disable-next-line class-methods-use-this\n protected onFocusIn(target: HTMLElement): void {\n if (target instanceof HTMLInputElement) {\n target.select();\n }\n }\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { ScIOrgContact, ScVCardService } from '@snabcentr/client-core';\nimport { tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\nimport { TuiDialogService } from '@taiga-ui/core';\nimport { PolymorpheusComponent } from '@taiga-ui/polymorpheus';\n\nimport { ScQRCodeDialogComponent } from '../../qrcode/qrcode-dialog/sc-qrcode-dialog.component';\n\n/**\n * Токен для обработчика QR кода менеджера.\n */\nexport const SC_MANAGER_QR_HANDLER: InjectionToken<undefined | ((contact: ScIOrgContact, description?: string) => void)> = tuiCreateTokenFromFactory(() => {\n const dialog = inject(TuiDialogService);\n const vCardService = inject(ScVCardService);\n\n return (contact: ScIOrgContact, description?: string) => {\n const qrdata = vCardService.createIndividualVCardStr(contact.name, contact.phone, contact.email, description);\n\n dialog\n .open(new PolymorpheusComponent(ScQRCodeDialogComponent), {\n size: 's',\n label: contact.name,\n data: { qrdata },\n })\n .subscribe();\n };\n});\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input, InputSignal } from '@angular/core';\nimport { ScIOrgContact } from '@snabcentr/client-core';\nimport { TuiAppearance, TuiButton, TuiFallbackSrcPipe, TuiIcon, TuiIcons, TuiInitialsPipe, TuiLink, TuiWithAppearance, TuiWithIcons } from '@taiga-ui/core';\nimport { TuiAvatar } from '@taiga-ui/kit';\n\nimport { ScLinks, ScTerminalLinkDirective } from '../../directives';\nimport { SC_MANAGER_QR_HANDLER } from '../tokens/sc-manager-qr-handler.token';\n\n/**\n * Компонент карточки менеджера.\n */\n@Component({\n standalone: true,\n selector: 'sc-manager-card',\n templateUrl: './sc-manager-card.component.html',\n imports: [\n NgIf,\n ScTerminalLinkDirective,\n TuiAppearance,\n TuiWithAppearance,\n TuiAvatar,\n TuiIcons,\n TuiWithIcons,\n TuiLink,\n AsyncPipe,\n ScLinks,\n TuiFallbackSrcPipe,\n TuiInitialsPipe,\n TuiButton,\n TuiIcon,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScManagerCardComponent {\n /**\n * Данные менеджера.\n */\n public readonly manager: InputSignal<ScIOrgContact> = input.required<ScIOrgContact>();\n\n /**\n * Объект описаний типов в {@link IOrgContact}.\n */\n protected readonly descriptions: Record<string, string> = {\n any: 'По любым вопросам',\n manager: 'Менеджер',\n operator: 'Оператор',\n retail: 'Розничный магазин',\n reclamation: 'По вопросам рекламации',\n finance: 'По финансовым вопросам',\n };\n\n /**\n * Токен для обработчика QR кода.\n */\n protected readonly handleQrClick?: (contact: ScIOrgContact, description?: string) => void = inject(SC_MANAGER_QR_HANDLER);\n}\n","<div class=\"flex gap-2\">\n @if (manager().photo) {\n <tui-avatar\n *ngIf=\"manager().photo\"\n [src]=\"manager().photo || '' | tuiFallbackSrc: (manager().name | tuiInitials) | async\"\n [round]=\"false\"\n size=\"l\"\n />\n } @else {\n <tui-avatar\n [src]=\"manager().name | tuiInitials\"\n [round]=\"false\"\n size=\"l\"\n />\n }\n <div class=\"flex grow flex-col gap-1\">\n <div class=\"flex\">\n <span class=\"text-body-l-bold\">{{ manager().name }}</span>\n <button\n *ngIf=\"handleQrClick\"\n tuiIconButton\n type=\"button\"\n appearance=\"flat\"\n size=\"s\"\n (click)=\"handleQrClick(manager(), descriptions[manager().type])\"\n class=\"!ml-auto\"\n >\n <tui-icon\n icon=\"@tui.scan-qr-code\"\n class=\"!text-2xl\"\n />\n </button>\n </div>\n <span *ngIf=\"descriptions[manager().type] as description\">{{ description }}</span>\n <a\n tuiLink\n [pseudo]=\"true\"\n [scTelLink]=\"manager().phone\"\n linkLocation=\"manager-card\"\n href=\"tel:{{ manager().phone | scPhoneFormat }}\"\n iconStart=\"@tui.phone\"\n appearance=\"action-grayscale\"\n >\n {{ manager().phone | scPhoneFormat }}\n </a>\n <a\n tuiLink\n scEmailLink\n linkLocation=\"manager-card\"\n [pseudo]=\"true\"\n href=\"mailto:{{ manager().email }}\"\n iconStart=\"@tui.mail\"\n appearance=\"action-grayscale\"\n >\n {{ manager().email }}\n </a>\n </div>\n</div>\n","/* eslint-disable no-underscore-dangle,lodash/prefer-constant */\n\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, inject, Input, input, InputSignal, model, ModelSignal, OnInit, output, OutputEmitterRef, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, FormGroupDirective } from '@angular/forms';\nimport { MaskitoOptions } from '@maskito/core';\nimport { ScIKeycloakErrorResponse, ScIOrgContact, ScVerificationService } from '@snabcentr/client-core';\nimport { tuiControlValue } from '@taiga-ui/cdk';\nimport type { TuiCountryIsoCode } from '@taiga-ui/i18n';\nimport { getCountries } from 'libphonenumber-js';\nimport { isNil } from 'lodash-es';\nimport {\n catchError,\n distinctUntilChanged,\n endWith,\n filter,\n finalize,\n map,\n Observable,\n of,\n scan,\n share,\n shareReplay,\n startWith,\n Subject,\n switchMap,\n takeWhile,\n tap,\n timer,\n} from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { SC_SHOW_HELP_NOTIFICATION_IN_PHONE_INPUT } from '../../contacts/tokens/sc-show-help-notification-in-phone-input.token';\nimport { scPhoneVerificationCodeMask } from '../../masks';\nimport { SC_VERIFICATION_CODE_TIMEOUT } from '../../providers/sc-verification-code-timeout';\nimport { ScHelpNotificationService } from '../../services';\nimport { SC_PHONE_APPROVE_CODE_SENDER } from '../providers';\n\n/**\n * Компонент формы проверки телефона и получения кода подтверждения.\n */\n@Component({\n selector: 'sc-verification-phone-check-form',\n templateUrl: './sc-verification-phone-check-form.component.html',\n host: { ngSkipHydration: 'true' },\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 protected readonly verificationService = inject(ScVerificationService);\n\n /**\n * Функция отправки кода подтверждения телефона.\n */\n protected readonly sendPhoneApproveCode = inject(SC_PHONE_APPROVE_CODE_SENDER);\n\n /**\n * Директива c `FormGroup` из DOM.\n */\n protected readonly formGroupDirective = inject(FormGroupDirective, { optional: true });\n\n /**\n * HTTP-клиент.\n */\n protected readonly http = inject(HttpClient);\n\n /**\n * Признак, что поле ввода телефона только для чтения.\n */\n public readonly readOnly: InputSignal<boolean> = input(false);\n\n /**\n * Признак, что поле ввода телефона псевдо-невалидное.\n */\n public readonly pseudoInvalid: InputSignal<boolean> = input(false);\n\n /**\n * Признак, что поле ввода телефона и кода подтверждения обязательные.\n */\n public readonly required: InputSignal<boolean> = input(false);\n\n /**\n * Текст подсказки.\n */\n public readonly subtitle: InputSignal<string> = input('');\n\n /**\n * Признак, следует ли телефону быть в системе. От этого признака зависит, в каких случаях выдавать ошибку при проверке занятости телефона.\n */\n public readonly shouldBeBusy: InputSignal<boolean | undefined> = input<boolean | undefined>();\n\n /**\n * Признак, следует ли проверять, подтверждён ли телефон в системе. При `true` будет вызывать ошибку при наличии телефона в системе без подтверждения.\n */\n public readonly shouldBeConfirmed: InputSignal<boolean | undefined> = input<boolean | undefined>();\n\n /**\n * Список стран.\n */\n protected readonly countries: readonly TuiCountryIsoCode[] = getCountries();\n\n /**\n * Сервис для отображения Push-уведомлений с контактами для помощи клиенту.\n */\n protected readonly helpNotificationService: ScHelpNotificationService = inject(ScHelpNotificationService);\n\n /**\n * Список контактов для отправки push-уведомлений.\n */\n protected readonly pushContacts: Signal<ScIOrgContact[] | undefined> = toSignal(this.helpNotificationService.getContactsShow$());\n\n /**\n * Наличие кода подтверждения у пользователя.\n */\n public readonly haveCode: ModelSignal<boolean> = model(false);\n\n /**\n * {@link Observable} запроса проверки номера телефона.\n */\n public phoneCheck$?: Observable<boolean | null>;\n\n /**\n * {@link OutputEmitter} события изменения признака занятости телефона.\n */\n public readonly isBusyChange: OutputEmitterRef<boolean | null> = output<boolean | null>();\n\n /**\n * {@link OutputEmitter} события изменения признака подтверждения телефона.\n */\n public readonly isConfirmedChange: OutputEmitterRef<boolean | null> = output<boolean | null>();\n\n /**\n * {@link Subject} события отправки кода подтверждения.\n */\n protected readonly onSendCode: Subject<void> = new Subject<void>();\n\n /**\n * Таймаут отправки кода подтверждения.\n */\n protected readonly codeTimeout: number = inject(SC_VERIFICATION_CODE_TIMEOUT);\n\n /**\n * {@link Observable} запроса данных получения кода подтверждения.\n */\n protected 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.sendPhoneApproveCode(value).pipe(\n tap(() => {\n this.reloadTimer$.next(this.codeTimeout);\n }),\n map(() => false),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n let seconds: number | null = null;\n\n if ('error' in error.error) {\n const errorResponse = error.error as ScIKeycloakErrorResponse;\n\n const regex = /(\\d{1,3})\\s+seconds/;\n const match = regex.exec(errorResponse.error);\n\n if (match) {\n seconds = Number.parseInt(match[1], 10);\n }\n } else {\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 seconds = Number.parseInt(timeParts[1], 10);\n }\n }\n\n if (seconds) {\n this.reloadTimer$.next(seconds);\n } else {\n this.phoneControl.setErrors({ serverResponse: ['Неизвестная ошибка, попробуйте позже.'] });\n }\n }\n\n return of(false);\n }),\n finalize(() => {\n this.setHaveCode(true);\n }),\n startWith(true),\n shareReplay({ refCount: true, bufferSize: 1 })\n )\n ),\n startWith(false),\n share()\n );\n\n /**\n * Маска поля ввода кода для подтверждения.\n */\n protected readonly verificationCodeMask: MaskitoOptions = scPhoneVerificationCodeMask;\n\n /**\n * {@link Subject} события запуска/остановки таймера.\n */\n protected readonly reloadTimer$: Subject<number> = new Subject<number>();\n\n /**\n * {@link Observable} Таймера.\n *\n * TODO: Вынести таймер в отдельную директиву TASK:[#9260].\n */\n protected 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 protected readonly showHelpNotification = inject(SC_SHOW_HELP_NOTIFICATION_IN_PHONE_INPUT);\n\n /**\n * Признак, следует ли отображать функционал кода подтверждения.\n */\n private _showCodeFields: boolean = true;\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 this.isBusyChange.emit(null);\n this.isConfirmedChange.emit(null);\n this.helpNotificationService.closeAllHelpNotification();\n\n if (this.form.controls.verificationCode.value) {\n this.form.controls.verificationCode.setValue(null);\n }\n }),\n switchMap((value) => {\n if (this.phoneControl.valid && !!value) {\n return this.verificationService.getPhoneCheck$(value).pipe(\n // eslint-disable-next-line sonarjs/cognitive-complexity\n map((result) => {\n if (this.shouldBeBusy() === undefined && !isNil(this.shouldBeConfirmed()) && result.isConfirmed !== null) {\n this.isBusyChange.emit(result.isBusy);\n\n if (!isNil(result.isConfirmed)) {\n this.isConfirmedChange.emit(result.isConfirmed);\n\n return this.shouldBeConfirmed() === result.isConfirmed;\n }\n\n return true;\n }\n\n if (this.shouldBeBusy() !== undefined && 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 tap((check) => {\n if (!check) {\n this.helpNotificationService.helpNotificationByPhone(value);\n }\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 protected setHaveCode(haveCode: boolean): void {\n this.haveCode.set(haveCode);\n }\n\n /**\n * Закрытие уведомления.\n */\n protected closeNotification(): void {\n this.helpNotificationService.closeAllHelpNotification();\n }\n}\n","@let phoneCheck = phoneCheck$ | async;\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-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [invalid]=\"pseudoInvalid() || null\"\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <p\n *ngIf=\"subtitle()\"\n class=\"text-body-s text-tui-text-tertiary\"\n >\n {{ subtitle() }}\n </p>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n @if (showHelpNotification && pushContacts()) {\n @for (manager of pushContacts(); track manager.id) {\n <tui-push\n type=\"Свяжитесь с нами для решения возникших вопросов\"\n (close)=\"closeNotification()\"\n class=\"!w-auto\"\n >\n <tui-icon icon=\"@tui.message-square\" />\n <sc-manager-card [manager]=\"manager\" />\n </tui-push>\n }\n }\n </label>\n\n <ng-container *ngIf=\"showCodeFields && form.enabled && phoneCheck\">\n <label\n *ngIf=\"!loadingApproveCode && haveCode()\"\n tuiLabel\n >\n Код из СМС\n <tui-input\n formControlName=\"verificationCode\"\n [required]=\"required() || showCodeFields\"\n >\n Код из СМС\n <input\n tuiAutoFocus\n tuiTextfieldLegacy\n [maskito]=\"verificationCodeMask\"\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"verificationCode\"\n [error]=\"[] | tuiFieldError | async\"\n />\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 || 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 || 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 >\n (через {{ timer }})\n </ng-container>\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 && phoneControl.valid\"\n class=\"size-4\"\n />\n</ng-template>\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен признака, что разрешено выбирать записи ликвидированных организаций.\n */\nexport const SC_ALLOW_SELECT_TERMINATED: InjectionToken<boolean> = tuiCreateToken<boolean>(false);\n","/* eslint-disable class-methods-use-this */\n\nimport { 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, ScISuggestionOrganization, 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';\nimport { SC_ALLOW_SELECT_TERMINATED } from '../../providers/sc-allow-select-terminated';\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 * Признак, что разрешено выбирать записи ликвидированных организаций.\n */\n private readonly allowSelectTerminated: boolean = inject(SC_ALLOW_SELECT_TERMINATED);\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 /**\n * Возвращает признак, что элемент выпадающего списка подсказок отключён.\n *\n * @param suggestion Объект подсказки.\n */\n public isDisabledSuggestion(suggestion: ScSuggestion): boolean {\n switch (this.type) {\n case ScISuggestionType.fio:\n case ScISuggestionType.address:\n case ScISuggestionType.bank:\n case ScISuggestionType.email:\n return false;\n case ScISuggestionType.organization:\n if ('inn' in suggestion && !('bic' in suggestion)) {\n return !this.allowSelectTerminated && this.isOrgTerminated(suggestion);\n }\n break;\n default:\n return false;\n }\n\n return false;\n }\n\n /**\n * Проверяет прекращена ли деятельность указанной организации.\n *\n * @param suggestion Объект подсказки по организации.\n */\n public isOrgTerminated(suggestion: ScISuggestionOrganization): boolean {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(suggestion.rawData?.['state']?.status === 'LIQUIDATED');\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 [disabled]=\"isDisabledSuggestion(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-1 text-tui-text-02\">инн: {{ option.inn }}</span>\n <span\n *ngIf=\"isOrgTerminated(option)\"\n class=\"text-tui-negative\"\n >\n Ликвидировано\n </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","/* eslint-disable @typescript-eslint/no-explicit-any,no-param-reassign,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, inject, OnInit, output, OutputEmitterRef, OutputRef, Signal, signal } from '@angular/core';\nimport { outputFromObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n IAuthToken,\n ScAuthService,\n ScConvertersService,\n ScIOrgContact,\n ScISimpleUserOnDataCreate,\n ScISuggestionType,\n ScUser,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n ScUserService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { tuiDropdownOptionsProvider } from '@taiga-ui/core';\nimport { catchError, filter, map, of, share, startWith, Subject, switchMap } from 'rxjs';\n\nimport { ScHelpNotificationService } from '../../services';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\nimport { ApiErrorResponse } from '../interfaces/api-error-response';\n\n/**\n * Компонент упрощенной регистрации.\n */\n@Component({\n selector: 'sc-simple-sign-up-form',\n templateUrl: './sc-simple-sign-up-form.component.html',\n providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSimpleSignUpFormComponent implements OnInit {\n /**\n * Сервис данных о пользователе.\n */\n private readonly userService = inject(ScUserService);\n\n /**\n * Сервис аутентификации.\n */\n private readonly authService = inject(ScAuthService);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService = inject(ScConvertersService);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Группа полей ввода для формы регистрации.\n */\n protected 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, phoneValidator()]),\n verificationCode: new FormControl<string | null>(null, [Validators.required, Validators.minLength(6)]),\n getNews: new FormControl<boolean>(false),\n acceptRules: new FormControl<boolean>(false, Validators.requiredTrue),\n contragent: new FormGroup<any>({}),\n });\n\n /**\n * Признак, следует ли отображать функционал кода подтверждения.\n */\n protected readonly showCodeFields = signal(false);\n\n /**\n * Признак, занят ли телефон (существует ли пользователь с таким телефоном).\n */\n protected readonly isPhoneBusy = signal<boolean | null>(null);\n\n /**\n * Признак, нужно ли отображать дополнительные поля для регистрации.\n */\n protected readonly showAdditionalFields = signal(false);\n\n /**\n * Список контактов для отправки push-уведомлений.\n */\n protected readonly pushContacts: Signal<ScIOrgContact[] | undefined> = toSignal(inject(ScHelpNotificationService).getContactsShow$());\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 private readonly request$ = this.onSubmit$.pipe(\n map(() => this.form.value),\n filter((value): value is ScISimpleUserOnDataCreate => (this.isPhoneBusy() ? this.form.controls.verificationCode.valid : this.form.valid)),\n switchMap((value) => {\n if (this.isPhoneBusy()) {\n return this.authService.getSignIn$({ phone: value.phone, verificationCode: value.verificationCode }).pipe(\n catchError((error: unknown) => {\n this.handleError(error);\n\n return of({} as IAuthToken);\n }),\n startWith(null)\n );\n }\n\n this.createBaseContragent(value);\n value.isGeneratePassword = true;\n value.isUnknownCity = true;\n\n return this.userService.signUp$(this.convertersService.removeNullRecursive(value)).pipe(\n catchError((error: unknown) => {\n this.handleError(error);\n\n return of({} as IAuthToken);\n }),\n startWith(null)\n );\n }),\n share()\n );\n\n /**\n * Сигнал изменения состояния загрузки данных.\n */\n protected readonly loading: Signal<boolean> = toSignal(this.request$.pipe(map(tuiIsFalsy)), { initialValue: false });\n\n /**\n * Сигнал события аутентификации после успешной регистрации.\n */\n public readonly successAuth: OutputRef<ScUser> = outputFromObservable(this.userService.getUserChange$().pipe(filter((user) => !user.isGuest)));\n\n /**\n * Сигнал нажатия на \"Договор оферты\".\n */\n public readonly clickOffer: OutputEmitterRef<void> = output();\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.simpleSsignUpShow,\n });\n }\n\n /**\n * Обрабатывает событие изменения занятости телефона.\n *\n * @param isBusy Признак занятости телефона.\n */\n protected onIsBusyChange(isBusy: boolean | null): void {\n this.isPhoneBusy.set(isBusy);\n this.showCodeFields.set(isBusy !== null);\n this.showAdditionalFields.set(!isBusy);\n }\n\n /**\n * Обрабатывает событие изменения подтверждения телефона.\n *\n * @param isConfirmed Признак подтверждения телефона.\n */\n protected onIsConfirmedChange(isConfirmed: boolean | null): void {\n if (isConfirmed === false) {\n this.form.controls.phone.setErrors({\n serverResponse: ['Номер телефона не подтверждён. Обратитесь к вашему персональному менеджеру или войдите с использованием e-mail и пароля.'],\n });\n\n this.form.controls.phone.markAsTouched();\n }\n }\n\n /**\n * Обрабатывает ошибки запросов.\n *\n * @param error Объект ошибки\n */\n private handleError(error: unknown): void {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\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\n /**\n * Создаёт базового контрагента для клиента физического лица.\n *\n * @param formValue Значение формы при регистрации\n */\n private createBaseContragent(formValue: ScSimpleSignUpFormComponent['form']['value']): void {\n if (this.form.invalid) {\n return;\n }\n\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","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit$.next()\"\n class=\"flex flex-col gap-6\"\n>\n <div class=\"flex flex-col gap-3\">\n <sc-verification-phone-check-form\n (isBusyChange)=\"onIsBusyChange($event)\"\n (isConfirmedChange)=\"onIsConfirmedChange($event)\"\n [showCodeFields]=\"form.controls.phone.valid && form.controls.phone.valid\"\n [shouldBeConfirmed]=\"true\"\n />\n @if (isPhoneBusy() !== null && form.controls.phone.valid) {\n @if (!isPhoneBusy()) {\n <label tuiLabel>\n Ф.И.О.\n <tui-input formControlName=\"name\">\n Ф.И.О.\n <input\n tuiTextfieldLegacy\n autocomplete=\"name\"\n />\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <label tuiLabel>\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 <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n />\n\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n />\n Я хочу получать рассылку Снабцентр о скидках и новостях по электронной почте.\n </label>\n\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(); clickOffer.emit()\"\n >\n Договором оферты\n </a>\n .\n </span>\n <span class=\"text-tui-negative\">*</span>\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </div>\n </label>\n }\n }\n </div>\n <button\n tuiButton\n [disabled]=\"isPhoneBusy() ? form.controls.verificationCode.invalid || form.controls.phone.invalid : form.invalid\"\n [loading]=\"loading()\"\n type=\"submit\"\n class=\"self-center\"\n >\n {{ isPhoneBusy() ? 'Войти' : 'Купить' }}\n </button>\n</form>\n","/**\n * Перечисление типов аутентификации.\n */\nexport enum AuthMethod {\n /**\n * Аутентификация по номеру телефона и коду подтверждения.\n */\n byPhone = 'by_phone',\n\n /**\n * Аутентификация по логину и паролю.\n */\n byEmail = 'by_email',\n}\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, ScIKeycloakErrorResponse } from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap } from 'rxjs';\n\nimport { phoneValidator } from '../../../validators/sc-phone-validator';\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, phoneValidator()]),\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 // eslint-disable-next-line sonarjs/cognitive-complexity\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n if ('error' in error.error) {\n const errorResponse = error.error as ScIKeycloakErrorResponse;\n\n if (errorResponse.error.includes('invalid_credentials')) {\n this.form.setErrors({ serverResponse: ['Неверный код подтверждения.'] });\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this.form.setErrors({ serverResponse: [errorResponse.errorDescription ?? errorResponse.error] });\n }\n } else {\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\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 />\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n />\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, ScIKeycloakErrorResponse } 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 username: 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 // eslint-disable-next-line sonarjs/cognitive-complexity\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n if ('error' in error.error) {\n const errorResponse = error.error as ScIKeycloakErrorResponse;\n\n if (errorResponse.error.includes('invalid_grant')) {\n this.formByEmail.setErrors({ serverResponse: ['Пользователь с указанными учетными данными не найден. Проверьте правильность ввода.'] });\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this.formByEmail.setErrors({ serverResponse: [errorResponse.errorDescription ?? errorResponse.error] });\n }\n } else {\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\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=\"username\">\n Адрес электронной почты\n <input\n tuiTextfieldLegacy\n autocomplete=\"email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"username\"\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 host: { ngSkipHydration: 'true' },\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","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Проверяет, что хотя бы одно поле из списка заполнено.\n * Поддерживает как отдельные поля, так и группы полей.\n *\n * @param fields Массив полей для проверки. Каждый элемент может быть строкой или массивом строк.\n * @param blockName Имя блока для идентификации ошибки\n * @returns ValidatorFn\n */\nexport function scAtLeastOneRequiredValidator(fields: Array<string | string[]>, blockName?: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (fields.length === 0) {\n return null;\n }\n\n const hasValue = fields.some((fieldKey) => {\n if (Array.isArray(fieldKey)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n return fieldKey.every((key) => !!control.get(key)?.value?.toString().trim());\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n return !!control.get(fieldKey)?.value?.toString().trim();\n });\n\n return hasValue ? null : { [blockName ?? 'atLeastOneRequired']: true };\n };\n}\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен ID России.\n */\nexport const CURRENT_COUNTRY_ID: InjectionToken<number> = tuiCreateToken(-1);\n","/* eslint-disable no-unused-expressions,class-methods-use-this,@typescript-eslint/unbound-method */\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, effect, Inject, inject, model, OnInit, SkipSelf } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroupDirective, Validators } from '@angular/forms';\nimport { ScICity, ScICityWithRegionAndCountry, 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\nimport { CURRENT_COUNTRY_ID } from '../../providers/sc-country-ids';\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 * Флаг возможности выбора страны.\n */\n public readonly canSelectCountry = model<boolean>(false);\n\n /**\n * Идентификатор текущей страны системы.\n */\n private readonly russiaCountryId: number = inject(CURRENT_COUNTRY_ID);\n\n /**\n * FormControl для поля страны.\n */\n protected readonly countryControl: FormControl<ScICountry | null> = new FormControl<ScICountry | null>(null, Validators.required);\n\n /**\n * FormControl для поля региона.\n */\n protected readonly regionControl: FormControl<ScIRegion | null> = new FormControl<ScIRegion | null>(null, Validators.required);\n\n /**\n * FormControl для поля города.\n */\n protected cityControl: FormControl<ScICity | null> = new FormControl<ScICountry | null>(null, Validators.required);\n\n /**\n * {@link Observable} изменения списка стран.\n */\n protected countries$: Observable<ScICountry[] | null> = this.locationsService.getCountries$().pipe(share(), startWith(null));\n\n /**\n * {@link Observable} изменения списка регионов.\n */\n protected 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 protected 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 protected 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 effect(() => {\n if (this.canSelectCountry()) {\n this.countryControl.setValue(null);\n } else {\n this.countryControl.setValue({\n id: this.russiaCountryId,\n name: 'Россия',\n });\n }\n });\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 .getCityById$(Number(this.cityIdControl.value))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((city: ScICityWithRegionAndCountry) => {\n this.countryControl.patchValue(city.region.country);\n this.regionControl.patchValue(city.region);\n this.cityControl.patchValue(city);\n this.canSelectCountry.set(city.region.country.id !== this.russiaCountryId);\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 protected 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","<label\n *ngIf=\"canSelectCountry()\"\n tuiLabel\n class=\"mb-2\"\n>\n Страна\n <tui-combo-box\n *tuiLet=\"(countries$ | async) ?? [] as countries\"\n [formControl]=\"countryControl\"\n [stringify]=\"stringify\"\n >\n Страна\n <input\n tuiTextfieldLegacy\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocomplete=\"new-password\"\n />\n <tui-data-list-wrapper\n *tuiDataList\n [itemContent]=\"stringify | tuiStringifyContent\"\n [items]=\"countries | tuiFilterByInput\"\n ></tui-data-list-wrapper>\n </tui-combo-box>\n <tui-error\n [formControl]=\"countryControl\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n</label>\n<div class=\"grid items-start gap-4 sm:grid-cols-2\">\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 autocomplete=\"new-password\"\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 autocomplete=\"new-password\"\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 { ChangeDetectionStrategy, Component, Input, input, InputSignal } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MaskitoOptions } from '@maskito/core';\nimport { ScICurrency, ScISuggestionType, ScOpfList, 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 * Организационно-правовая форма.\n */\n public readonly opf: InputSignal<keyof typeof ScOpfList> = input.required<keyof typeof ScOpfList>();\n\n /**\n * Перечисление организационно-правовых форм.\n */\n protected readonly opfListEnum: typeof ScOpfList = ScOpfList;\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 @if (opfListEnum[opf()] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.bank\"\n />\n }\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 @if (opfListEnum[opf()] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.bank\"\n />\n }\n </tui-input>\n <tui-error\n formControlName=\"bic\"\n [error]=\"[] | tuiFieldError | async\"\n />\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 />\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 />\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 />\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';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\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),\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, phoneValidator()]),\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 protected readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * {@link Observable} выбора ОПФ.\n */\n protected 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 this.legalGroup.controls.kpp.disable();\n this.entrepreneurGroup.controls.inn.disable();\n this.entrepreneurGroup.controls.okpo.disable();\n }\n })\n );\n\n /**\n * Маска поля ввода КПП.\n */\n protected readonly kppMask = scKppMask;\n\n /**\n * Перечисление организационно-правовых форм.\n */\n protected readonly opfListEnum: typeof ScOpfList = ScOpfList;\n\n /**\n * Ссылка для автоматического управления уничтожением зависимостей.\n */\n private destroyRef: DestroyRef = inject(DestroyRef);\n\n /**\n * Возвращает {@link Observable} списка стран.\n */\n protected readonly countries$: Observable<ScICountry[]> = this.locationsService.getCountries$();\n\n /**\n * Возвращает {@link Observable} списка идентификаторов стран.\n */\n protected readonly countriesId$: Observable<number[]> = this.countries$.pipe(map((countries) => countries.map((country) => country.id)));\n\n /**\n * Маска поля ввода ИНН.\n *\n * @param opf Организационно-правовая форма.\n */\n // eslint-disable-next-line security/detect-object-injection\n protected 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 protected readonly okpoMask = (opf: keyof typeof ScOpfList) => (ScOpfList[opf] > ScOpfList.entrepreneur ? scLegalOkpoMask : scEntrepreneurOkpoMask);\n\n /**\n * Функция преобразования объекта сортировки в значение, отображаемое в поле ввода.\n *\n * @param items Список стран.\n */\n protected readonly stringify = (items: readonly ScICountry[]) => {\n const itemsMap = new Map(\n items.map((item) => {\n return [item.id, item.name] as [number, string];\n })\n );\n\n return (id: number) => itemsMap.get(id) ?? '';\n };\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 protected getDirectionById$(directionId: number): Observable<ScISalesDirection | undefined> {\n return this.referencesService.getDirectionById$(directionId);\n }\n\n /**\n * Возвращает {@link Observable} список организационно-правовых форм..\n */\n protected 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 protected 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 * @param countryId — Идентификатор страны.\n */\n protected getCountryNameById$(countryId: number): Observable<string | undefined> {\n return this.locationsService.getCountries$().pipe(map((countries) => countries.find((country) => country.id === countryId)?.name ?? ''));\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 />\n </label>\n\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? 'Ф.И.О.' : 'Название организации';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-input formControlName=\"name\">\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n {{ nameLabel }}\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n />\n } @else {\n Название организации\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n />\n }\n }\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n @if (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 />\n </tui-input>\n <tui-error\n formControlName=\"inn\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n @if (opfListEnum[selectOpf] === opfListEnum.legal) {\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 />\n </label>\n }\n <label tuiLabel>\n Ф.И.О. руководителя\n <tui-input formControlName=\"directorName\">\n Ф.И.О. руководителя\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n />\n </tui-input>\n <tui-error\n formControlName=\"directorName\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Должность руководителя\n <tui-input formControlName=\"directorPosition\"> Должность руководителя </tui-input>\n <tui-error\n formControlName=\"directorPosition\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Основания полномочий руководителя\n <tui-input formControlName=\"directorActsOn\"> Основания полномочий руководителя </tui-input>\n <tui-error\n formControlName=\"directorActsOn\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Юридический адрес\n <tui-input formControlName=\"legalAddress\">\n Юридический адрес\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n />\n }\n </tui-input>\n <tui-error\n formControlName=\"legalAddress\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Почтовый адрес\n <tui-input formControlName=\"postalAddress\">\n Почтовый адрес\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n />\n }\n </tui-input>\n <tui-error\n formControlName=\"postalAddress\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Фактический адрес\n <tui-input formControlName=\"actualAddress\">\n Фактический адрес\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n />\n }\n </tui-input>\n <tui-error\n formControlName=\"actualAddress\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n @if (opfListEnum[selectOpf] === opfListEnum.legal) {\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 />\n </label>\n }\n }\n\n @if (opfListEnum[selectOpf] === opfListEnum.non_resident_legal) {\n @let countries = countries$ | async;\n @let countriesId = countriesId$ | async;\n\n <label\n *ngIf=\"countries\"\n tuiLabel\n >\n Страна регистрации юридического лица\n <tui-combo-box\n formControlName=\"registrationCountryId\"\n [stringify]=\"stringify(countries ?? [])\"\n >\n Страна регистрации юридического лица\n <input\n tuiTextfieldLegacy\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocomplete=\"new-password\"\n />\n <tui-data-list-wrapper\n *tuiDataList\n [itemContent]=\"stringify(countries ?? []) | tuiStringifyContent\"\n [items]=\"countriesId | tuiFilterByInput\"\n />\n </tui-combo-box>\n <ng-template\n #CountryContent\n let-data\n >\n <div>{{ (getCountryNameById$(data) | async) ?? '' }}</div>\n </ng-template>\n <tui-error\n formControlName=\"registrationCountryId\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <ng-template #selectLoading> <tui-loader /> </ng-template>\n <label tuiLabel>\n Регистрационный номер юридического лица\n <tui-input formControlName=\"registrationNumber\"> Регистрационный номер юридического лица </tui-input>\n <tui-error\n formControlName=\"registrationNumber\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Налоговый номер юридического лица\n <tui-input formControlName=\"taxNumber\"> Налоговый номер юридического лица </tui-input>\n <tui-error\n formControlName=\"taxNumber\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { ScISuggestionType } from '@snabcentr/client-core';\nimport { TuiCountryIsoCode } from '@taiga-ui/i18n';\nimport { getCountries } from 'libphonenumber-js';\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 /**\n * Список стран.\n */\n protected readonly countries: readonly TuiCountryIsoCode[] = getCountries();\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 />\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Телефон\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\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 <label tuiLabel>\n Должность контактного лица\n <tui-input formControlName=\"position\"> Должность контактного лица </tui-input>\n <tui-error\n formControlName=\"position\"\n [error]=\"[] | tuiFieldError | async\"\n />\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, OnInit, output, OutputEmitterRef, OutputRef } from '@angular/core';\nimport { outputFromObservable, 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 ScUser,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n ScUserService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy } 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 { phoneValidator } from '../../validators/sc-phone-validator';\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 host: { ngSkipHydration: 'true' },\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, phoneValidator()]),\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 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 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 public readonly successAuth: OutputRef<ScUser> = outputFromObservable(this.userService.getUserChange$().pipe(filter((user) => !user.isGuest)));\n\n /**\n * Сигнал нажатия на \"Договор оферты\".\n */\n public readonly clickOfferEvent: OutputEmitterRef<void> = output();\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 // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.form.get('contragent')?.reset({ salesDirectionId: this.form.get('contragent')?.get('salesDirectionId')?.value ?? null });\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) && key !== 'bankAccounts' && key !== 'contacts') {\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, phoneValidator()]),\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 *ngIf=\"opfControl.value as selectOpf\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n>\n <ng-container *tuiLet=\"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 <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\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? 'Ф.И.О.' : 'Название организации';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-input formControlName=\"name\">\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n {{ nameLabel }}\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n />\n } @else {\n Название организации\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n (selectedClick)=\"onSelectedOrganization($event)\"\n />\n }\n }\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <sc-verification-phone-check-form [shouldBeBusy]=\"false\" />\n <label tuiLabel>\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 </div>\n\n <sc-addresses-selection-field [canSelectCountry]=\"opfListEnum[selectOpf] === opfListEnum.non_resident_legal\" />\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 />\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 />\n </label>\n </div>\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n />\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 >\n Договором оферты\n </a>\n .\n </span>\n <span class=\"text-tui-negative\">*</span>\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </div>\n </label>\n </div>\n </div>\n @if (!isIndividual) {\n <sc-new-contragent-form\n [opfControl]=\"opfControl\"\n [class.!hidden]=\"stepIndex !== 1\"\n />\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\" />\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\n *ngIf=\"opfControl.value as selectOpf\"\n [opf]=\"selectOpf\"\n [form]=\"bankAccount\"\n />\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 }\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, 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 public readonly disabledButtons = input<boolean>(false);\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 [disabled]=\"disabledButtons()\"\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 [disabled]=\"disabledButtons()\"\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","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';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\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, phoneValidator()]),\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, TuiTextfield } from '@taiga-ui/core';\nimport { TuiInputPhoneInternational } from '@taiga-ui/experimental';\nimport { TuiButtonLoading, TuiDataListWrapper, TuiFieldErrorPipe, TuiSortCountriesPipe } 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 TuiInputPhoneInternational,\n ...TuiTextfield,\n TuiSortCountriesPipe,\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, ScIOpf } 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; opf: ScIOpf }>\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\n [opf]=\"$any(context.data).opf.slug\"\n [form]=\"form\"\n />\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';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\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 * Список этапов создания контрагента.\n */\n readonly steps: string[] = ['Общие данные контрагента', 'Контакты контрагента', 'Банковские реквизиты контрагента'];\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.controls.contragent.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 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 *\n * @param index Индекс этапа для которого нужно проверить валидность.\n * @returns Выводит значение `boolean` на основании {@link index}.\n */\n public canNextStep(index: number): boolean {\n switch (index) {\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 const { contacts } = this.form.controls.contragent.controls;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return contacts?.valid ?? false;\n }\n case 2: {\n const { bankAccounts } = this.form.controls.contragent.controls;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return bankAccounts?.valid ?? false;\n }\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, phoneValidator()]),\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-stepper [(activeItemIndex)]=\"stepIndex\">\n @for (step of steps; track $index) {\n <button\n *ngIf=\"$index !== 2 || form.controls.contragent.controls['bankAccounts']\"\n [stepState]=\"!canNextStep($index) ? 'error' : 'pass'\"\n [attr.disabled]=\"$index && !canNextStep($index - 1) ? '' : null\"\n type=\"button\"\n tuiStep\n >\n {{ step }}\n </button>\n }\n </tui-stepper>\n <tui-elastic-container>\n <sc-new-contragent-form [class.!hidden]=\"stepIndex !== 0\" />\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\n *ngIf=\"form.controls.contragent.controls['opf'].value as opf\"\n [form]=\"bankAccount\"\n [opf]=\"opf\"\n />\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(stepIndex)\"\n type=\"button\"\n (click)=\"navigate(1)\"\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 {\n TuiButtonLoading,\n TuiCarousel,\n TuiDataListWrapper,\n TuiElasticContainer,\n TuiFieldErrorPipe,\n TuiFilterByInputPipe,\n TuiStepper,\n TuiStringifyContentPipe,\n} from '@taiga-ui/kit';\nimport { TuiComboBoxModule, 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 TuiComboBoxModule,\n TuiStringifyContentPipe,\n TuiFilterByInputPipe,\n ...TuiStepper,\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 { TuiAutoFocus, TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiError, TuiIcon, TuiLabel, TuiLink, TuiLoader, TuiTextfield, TuiTitle } from '@taiga-ui/core';\nimport { TuiInputPhoneInternational } from '@taiga-ui/experimental';\nimport { TuiButtonLoading, TuiFieldErrorPipe, TuiPush, TuiSortCountriesPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPasswordModule, TuiInputPhoneModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScManagerCardComponent } from '../contacts/manager-card/sc-manager-card.component';\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 ScManagerCardComponent,\n TuiTitle,\n TuiIcon,\n ...TuiPush,\n TuiInputPhoneInternational,\n ...TuiTextfield,\n TuiSortCountriesPipe,\n TuiAutoFocus,\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 { ScSimpleSignUpFormComponent } from './sc-simple-sign-up-form/sc-simple-sign-up-form.component';\nimport { ScSignUpFormComponent } from './sign-up-form/sc-sign-up-form.component';\n\n/**\n * Модуль аутентификации.\n */\n@NgModule({\n declarations: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent, ScSimpleSignUpFormComponent],\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, ScSimpleSignUpFormComponent],\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 providers: [IntersectionObserverService],\n host: { ngSkipHydration: 'true' },\n changeDetection: ChangeDetectionStrategy.OnPush,\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 class=\"size-full\"\n >\n <picture>\n @if (banner.mediaFileWebp) {\n <source\n type=\"image/webp\"\n [srcset]=\"banner.mediaFileWebp | scMediaImageTransformer\"\n />\n }\n <img\n [src]=\"banner.mediaFile | scMediaImageTransformer: true\"\n [alt]=\"banner.title\"\n class=\"size-full object-cover\"\n />\n </picture>\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 { ScMediaImageTransformerPipe } from '@snabcentr/client-core';\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, ScMediaImageTransformerPipe],\n exports: [ScBannerComponent],\n})\nexport class ScBannerModule {}\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\n/**\n * Токен перечисления размеров страниц пагинации.\n */\nexport const SC_PAGE_SIZE_OPTIONS: InjectionToken<number[]> = tuiCreateToken<number[]>([5]);\n","import { inject, InjectionToken, Provider } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ScICityWithRegionAndCountry, ScLocationsService, ScUser, ScUserService } from '@snabcentr/client-core';\nimport { tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\nimport { map, Observable, of, switchMap } from 'rxjs';\n\nimport { CURRENT_COUNTRY_ID } from './sc-country-ids';\n\n/**\n * Токен потока данных о текущем пользователе.\n */\nexport const SC_USER_INFO: InjectionToken<Observable<ScUser>> = tuiCreateTokenFromFactory(() => inject(ScUserService).getUserChange$().pipe(takeUntilDestroyed()));\n\n/**\n * Токен потока данных о текущем городе пользователя с информацией о регионе и стране.\n */\nexport const SC_USER_CITY_INFO: InjectionToken<Observable<ScICityWithRegionAndCountry>> = tuiCreateTokenFromFactory(() => {\n const userService = inject(ScUserService);\n const locationService = inject(ScLocationsService);\n\n return userService.getUserChange$().pipe(\n switchMap((user: ScUser) => (user.city ? locationService.getCityById$(user.city) : of())),\n takeUntilDestroyed()\n );\n});\n\n/**\n * Токен проверки, является ли текущая страна пользователя верной.\n */\nexport const IS_DEFAULT_COUNTRY: InjectionToken<Observable<boolean>> = tuiCreateTokenFromFactory(() => {\n const cityInfo = inject(SC_USER_CITY_INFO);\n const russiaCountryId = inject(CURRENT_COUNTRY_ID);\n\n return cityInfo.pipe(map((city) => city.region.country.id === russiaCountryId));\n});\n\n/**\n * Провайдер потока данных о текущем пользователе.\n *\n * @deprecated\n */\nexport const SC_USER_PROVIDERS: Provider[] = [];\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken, TuiDay, TuiTime } from '@taiga-ui/cdk';\n\n/**\n * Токен для функции форматирования даты и времени.\n * По умолчанию используется формат 'DD.MM.YYYY HH:MM'.\n */\nexport const SC_DATE_FORMATTER: InjectionToken<(date: string) => string> = tuiCreateToken<(date: string) => string>((date: string) => {\n const dateObject = new Date(date);\n const day = TuiDay.fromLocalNativeDate(dateObject).toString('DMY', '.');\n const time = TuiTime.fromLocalNativeDate(dateObject).toString('HH:MM');\n\n return `${day} ${time}`;\n});\n","import { Provider } from '@angular/core';\nimport { TUI_DATE_VALUE_TRANSFORMER } from '@taiga-ui/kit';\n\nimport { DateValueTransformerWithStartTime } from './date-value-transformer';\n\n/**\n * Провайдер преобразователя даты по умолчанию.\n */\nexport const tuiDateValueTransformerDefaultProvider: Provider[] = [\n {\n provide: TUI_DATE_VALUE_TRANSFORMER,\n useClass: DateValueTransformerWithStartTime,\n },\n];\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен для массива полей, которые должны быть заполнены хотя бы одним значением, в запросе на уведомление о поступлении товара.\n */\nexport const SC_NOTIFY_WHEN_IN_STOCK_REQUIRED_FIELDS: InjectionToken<string[]> = tuiCreateToken<string[]>([]);\n","import type { PipeTransform } from '@angular/core';\nimport { inject, Pipe } from '@angular/core';\n\nimport { SC_DATE_FORMATTER } from '../providers';\n\n/**\n * Пайп для форматирования даты и времени.\n */\n@Pipe({\n standalone: true,\n name: 'scFormatDate',\n})\nexport class ScFormatDatePipe implements PipeTransform {\n /**\n * Функция форматирования даты и времени.\n */\n private readonly formatter: (date: string) => string = inject(SC_DATE_FORMATTER);\n\n /**\n * Форматирует строку даты через {@link SC_DATE_FORMATTER}.\n *\n * @param timeString - Строка времени.\n * @returns Форматированная дата и время.\n */\n public transform(timeString?: string): string | undefined {\n return timeString && this.formatter(timeString);\n }\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\nimport { ScFormatDatePipe } from '../../pipes';\n\n/**\n * Компонент центы товара с отображением скидки.\n */\n@Component({\n standalone: true,\n selector: 'sc-cost-with-discount',\n imports: [CommonModule, TuiBadge, ...TuiHint, ScFormatDatePipe],\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\n @let expiredAt = product.discount.expiredAt | scFormatDate;\n\n <div class=\"flex gap-0.5\">\n <p class=\"flex line-through\">{{ product.discountCostString }}</p>\n <div *ngIf=\"expiredAt\">до {{ expiredAt.substring(0, 5) }}</div>\n </div>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"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, computed, input, InputSignal, Signal, signal, WritableSignal } from '@angular/core';\nimport { ScIImage } from '@snabcentr/client-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: './sc-hover-image-carousel.component.html',\n styleUrl: './sc-hover-image-carousel.component.scss',\n host: {\n '(mousemove.silent)': 'onHover($event.offsetX, $event.target)',\n '(mouseleave.silent)': 'onLeave()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScHoverImageCarouselComponent {\n /**\n * Массив изображений.\n */\n public readonly images: InputSignal<ScIImage[]> = input.required<ScIImage[]>();\n\n /**\n * Признак что необходимо отобразить элементы управления.\n */\n public readonly isShowActions: InputSignal<boolean> = input<boolean>(true);\n\n /**\n * {@link WritableSignal} для отслеживания текущего индекса изображения.\n */\n public readonly currentIndex: WritableSignal<number> = signal(0);\n\n /**\n * {@link WritableSignal} для отслеживания текущего индекса изображения.\n */\n public readonly currentImage: Signal<ScIImage> = computed(() => this.images()[this.currentIndex()]);\n\n /**\n * Название товара.\n */\n public readonly productName: InputSignal<string | undefined> = input<string | undefined>();\n\n /**\n * Обработчик события `mousemove.silent`.\n *\n * @param offsetX Отступ курсора мыши по оси X от края {@link HTMLElement}.\n * @param target Объект {@link HTMLElement} в котором лежат изображения\n */\n private onHover(offsetX: number, target: HTMLElement): void {\n if (this.images().length <= 1 || offsetX < 0) {\n return;\n }\n\n const elementWidth = target.offsetWidth;\n const hoverPercentage = Math.min(offsetX / elementWidth, 1);\n\n const newIndex = Math.min(Math.floor(hoverPercentage * this.images().length), this.images().length - 1);\n\n this.currentIndex.set(newIndex);\n }\n\n /**\n * Обработчик события `mouseleave.silent`.\n */\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 @let image = currentImage();\n <picture>\n @if (image.imageWebp) {\n <source\n type=\"image/webp\"\n [srcset]=\"image.imageWebp\"\n />\n }\n\n @if (image.image) {\n <img\n [src]=\"image.image\"\n [alt]=\"image.alt\"\n class=\"size-full rounded-xl object-contain\"\n />\n }\n </picture>\n</div>\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","/* eslint-disable @typescript-eslint/dot-notation */\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { TuiButton, TuiHint, TuiIcon, TuiLoader, TuiSizeL, TuiSizeM, TuiSizeS } from '@taiga-ui/core';\nimport { TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { AbstractTuiNullableControl, TuiInputNumberComponent, TuiInputNumberModule, TuiIslandDirective, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { stepValidator } from '../../validators';\n\n/**\n * Компонент поля ввода количества.\n */\n@Component({\n standalone: true,\n selector: 'sc-input-quantity',\n templateUrl: './sc-input-quantity.component.html',\n styleUrl: './sc-input-quantity.component.scss',\n imports: [\n CommonModule,\n RouterModule,\n TuiButton,\n TuiIcon,\n TuiIslandDirective,\n TuiInputNumberModule,\n TuiTextfieldControllerModule,\n FormsModule,\n ReactiveFormsModule,\n ...TuiHint,\n TuiFieldErrorPipe,\n TuiLoader,\n ],\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","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { ScIWarehouse, ScIWarehouseStockCount, ScProduct, ScWarehouseService } from '@snabcentr/client-core';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiHint, TuiLink } from '@taiga-ui/core';\nimport { TuiTextfieldControllerModule } from '@taiga-ui/legacy';\nimport { map, Observable, switchMap } from 'rxjs';\n\nimport { ScFormatDatePipe } from '../../pipes/sc-format-date';\n\n/**\n * Компонент данных о наличии товара на складе.\n */\n@Component({\n standalone: true,\n selector: 'sc-price-warehouse-stock',\n templateUrl: './sc-price-warehouse-stock.component.html',\n styleUrl: 'sc-price-warehouse-stock.component.scss',\n imports: [CommonModule, RouterModule, TuiTextfieldControllerModule, FormsModule, ReactiveFormsModule, ...TuiHint, TuiLink, TuiLet, ScFormatDatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\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 @let isDisabled = product.isHidden || product.isNull;\n\n <ng-container *ngIf=\"selectedWarehouse$ | async as warehouseSelect\">\n <span *tuiLet=\"withStockHint && !!(warehousesList$ | async)?.length as showStockHint\">\n <ng-container *ngIf=\"!product.stockCount?.length && 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 [class.disabled]=\"isDisabled\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [style.color]=\"'var(--tui-status-negative)'\"\n [style.cursor]=\"showPlaningHint && planingHint ? 'pointer' : 'default'\"\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 <span *ngIf=\"product.stockCount && product.stockCount.length && !product.onOrder\">\n <span\n tuiLink\n [style.color]=\"'var(--tui-status-positive)'\"\n [tuiHint]=\"showStockHint && stockHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [ngClass]=\"classList\"\n [class.disabled]=\"isDisabled\"\n class=\"!underline\"\n >\n Проверить наличие\n </span>\n </span>\n\n <span\n *ngIf=\"product.onOrder\"\n [style.color]=\"'var(--tui-status-warning)'\"\n [ngClass]=\"classList\"\n >\n Под заказ\n </span>\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","/* eslint-disable no-underscore-dangle */\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, output, OutputEmitterRef, TemplateRef } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { SEARCH_TERM_PROVIDERS } from '@snabcentr/client-core';\nimport { TuiCurrencyPipe } from '@taiga-ui/addon-commerce';\nimport { TuiAutoFocus } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDialogContext, TuiFormatNumberPipe, TuiHint, TuiIcon, TuiLink } from '@taiga-ui/core';\nimport { TuiHighlight, TuiPreview, TuiPreviewDialogService } from '@taiga-ui/kit';\nimport { TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { CostWithDiscountComponent } from '../../catalog/cost-with-discount/cost-with-discount.component';\nimport { ScHoverImageCarouselComponent } from '../../catalog/hover-image-carousel/sc-hover-image-carousel.component';\nimport { ScInputQuantityComponent } from '../../catalog/input-quantity/sc-input-quantity.component';\nimport { ScPriceWarehouseStockComponent } from '../../catalog/price-warehouse-stock/sc-price-warehouse-stock.component';\nimport { AbstractScPriceCard } from '../../directives/abstract-price-card/abstract-sc-price-card.directive';\nimport { ScFormatDatePipe } from '../../pipes/sc-format-date';\n\n/**\n * Компонент карточки элемента корзины.\n */\n@Component({\n standalone: true,\n selector: 'sc-cart-item',\n templateUrl: './sc-cart-item.component.html',\n imports: [\n CommonModule,\n RouterModule,\n TuiButton,\n TuiIcon,\n TuiTextfieldControllerModule,\n FormsModule,\n ReactiveFormsModule,\n TuiHint,\n TuiLink,\n TuiHighlight,\n TuiAutoFocus,\n ScHoverImageCarouselComponent,\n CostWithDiscountComponent,\n ScPriceWarehouseStockComponent,\n ScInputQuantityComponent,\n TuiCurrencyPipe,\n TuiFormatNumberPipe,\n TuiPreview,\n ScFormatDatePipe,\n ],\n providers: [SEARCH_TERM_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScCartItemComponent extends AbstractScPriceCard {\n /**\n * Событие нажатия на кнопку редактирования конфигурации.\n */\n public readonly clickSettings: OutputEmitterRef<void> = output();\n\n /**\n * Сервис диалогового окна предварительного просмотра.\n */\n private readonly previewDialogService: TuiPreviewDialogService = inject(TuiPreviewDialogService);\n\n /**\n * Отображает спецификацию.\n *\n * @param specificationPreviewReference Шаблон спецификации.\n */\n protected showSpecification(specificationPreviewReference: TemplateRef<TuiDialogContext>): void {\n this.previewDialogService.open(specificationPreviewReference).subscribe();\n }\n}\n","<div\n *ngIf=\"product && cartItem; else skeleton\"\n class=\"relative flex w-full gap-4 rounded-xl p-1 text-body-s hover:bg-tui-background-neutral-1\"\n>\n @let isDisabled = product.isHidden || product.isNull;\n <sc-hover-image-carousel\n (click)=\"isDisabled ? null : clickCardEvent.emit()\"\n [images]=\"!isMobile ? getCardImagePreviewList(product) : [getCardImagePreview()]\"\n [isShowActions]=\"false\"\n class=\"aspect-square w-24 shrink-0 cursor-pointer self-start\"\n />\n <div class=\"flex w-full flex-col justify-between gap-4 md:flex-row md:items-center md:gap-5\">\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.disabled]=\"isDisabled\"\n class=\"!text-body-m-bold\"\n >\n {{ product.name }}\n </a>\n <span\n *ngIf=\"product.supplierSku\"\n class=\"text-tui-text-02\"\n >\n Артикул производителя: {{ product.supplierSku }}\n </span>\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 />\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </div>\n\n <sc-cost-with-discount [product]=\"product\" />\n </div>\n <a\n tuiLink\n *ngIf=\"cartItem.specificationImgUrl\"\n (click)=\"showSpecification(specificationPreview)\"\n [class.disabled]=\"isDisabled\"\n >\n Спецификация\n </a>\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 shrink-0 flex-col gap-4 sm:flex-row md:w-1/2 lg:w-3/5 xl:w-1/2 xl:gap-8 2xl:w-2/5\">\n <div class=\"flex flex-wrap items-center gap-4 md:flex-col md:items-start lg:flex-row lg:items-center lg:gap-8\">\n <sc-input-quantity\n #inputQuantity\n [tuiAutoFocus]=\"autoFocuseQuantityInput()\"\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n size=\"m\"\n [showCross]=\"false\"\n [isDisabled]=\"isDisabled\"\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-32 shrink-0\"\n />\n <div class=\"flex w-36 items-center gap-1\">\n @if (cartItem.height || cartItem.length || cartItem.width) {\n <button\n tuiIconButton\n iconStart=\"@tui.settings\"\n [disabled]=\"isDisabled\"\n (click)=\"clickSettings.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-col 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 }\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <p class=\"whitespace-nowrap\">\n Сумма:\n <strong> {{ cartItem.costRub | tuiFormatNumber: { precision: 2, decimalSeparator: '.', rounding: 'ceil' } | async }} {{ 'RUB' | tuiCurrency }}</strong>\n </p>\n <sc-price-warehouse-stock [product]=\"product\" />\n </div>\n <button\n tuiIconButton\n iconStart=\"@tui.trash\"\n (click)=\"clickClearEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"!absolute left-1 top-1 lg:!relative lg:left-0 lg:top-0 lg:ml-auto\"\n ></button>\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","import { NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { WA_WINDOW } from '@ng-web-apis/common';\nimport { ScCartService, ScUploadedFile } from '@snabcentr/client-core';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDialogContext, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiFiles } from '@taiga-ui/kit';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { filter, map, Observable, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\n/**\n * Компонент диалога для добавления товаров в корзину из CSV файла.\n */\n@Component({\n standalone: true,\n selector: 'sc-cart-add-products-from-csv-dialog',\n templateUrl: './sc-cart-add-products-from-csv-dialog.component.html',\n imports: [TuiLink, TuiLoader, TuiFiles, ReactiveFormsModule, NgIf, TuiButton, TuiButtonLoading],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScCartAddProductsFromCsvDialogComponent {\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context: TuiDialogContext = inject<TuiDialogContext>(POLYMORPHEUS_CONTEXT);\n\n /**\n * Сервис для работы с корзиной.\n */\n private readonly cartService: ScCartService = inject(ScCartService);\n\n /**\n * Объект окна.\n */\n private readonly window: Window & typeof globalThis = inject<Window & typeof globalThis>(WA_WINDOW);\n\n /**\n * {@link Subject} события скачивания цен каталога.\n */\n protected readonly onDownloadClick: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса на скачивание цен каталога.\n */\n protected readonly downloadRequest$ = this.onDownloadClick.pipe(\n switchMap(() =>\n this.cartService.getCartCsvExample$().pipe(\n tap((blob: Blob) => {\n this.downloadExampleFile(blob);\n }),\n startWith(null)\n )\n ),\n share(),\n // eslint-disable-next-line unicorn/no-useless-undefined\n startWith(undefined)\n );\n\n /**\n * Признак того, что запрос выполняется.\n */\n protected readonly isDownloadLoading: Signal<boolean> = toSignal(this.downloadRequest$.pipe(map((value) => value === null)), {\n initialValue: false,\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n protected readonly onSubmit$: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса на добавление товаров из CSV файла.\n */\n protected readonly submitRequest$ = this.onSubmit$.pipe(\n map(() => this.control.value),\n filter(tuiIsPresent),\n switchMap(\n (file: File) =>\n new Observable<ScUploadedFile>((observer) => {\n const reader = new FileReader();\n\n reader.addEventListener('load', () => {\n observer.next(new ScUploadedFile(file.name, reader.result as string));\n });\n\n reader.addEventListener('error', (e) => {\n observer.error(e);\n });\n\n reader.readAsDataURL(file);\n\n return () => {\n reader.abort();\n };\n })\n ),\n switchMap((file) =>\n this.cartService.addProductsFromCsv$(file).pipe(\n tap(() => {\n this.context.$implicit.complete();\n }),\n startWith(null)\n )\n )\n );\n\n /**\n * Признак того, что запрос на добавление товаров выполняется.\n */\n protected readonly isSubmitLoading: Signal<boolean> = toSignal(this.submitRequest$.pipe(map((value) => value === null)), {\n initialValue: false,\n });\n\n /**\n * Поле для загрузки файла.\n */\n protected readonly control: FormControl<File | null> = new FormControl<File | null>(null);\n\n /**\n * Метод для удаления загруженного файла.\n */\n protected removeFile(): void {\n this.control.setValue(null);\n }\n\n /**\n * Метод для скачивания примера файла.\n *\n * @param blob Бинарный объект.\n */\n private downloadExampleFile(blob: Blob): void {\n const url = this.window.URL.createObjectURL(blob);\n // используем ссылку и download, чтобы указать название файла.\n const a = this.window.document.createElement('a');\n\n a.href = url;\n a.download = 'Пример файла добавления товаров в корзину.csv';\n a.click();\n this.window.URL.revokeObjectURL(url);\n }\n}\n","<div class=\"flex flex-col items-center gap-8\">\n <tui-loader\n [overlay]=\"true\"\n [showLoader]=\"isDownloadLoading()\"\n size=\"s\"\n class=\"mt-8\"\n >\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"onDownloadClick.next()\"\n >\n Пример .csv файла\n </button>\n </tui-loader>\n\n <div class=\"flex w-full flex-col gap-1\">\n <label\n tuiInputFiles\n class=\"w-full\"\n >\n <input\n accept=\"text/csv\"\n tuiInputFiles\n [formControl]=\"control\"\n />\n </label>\n\n <tui-files class=\"tui-space_top-1\">\n <tui-file\n *ngIf=\"control.value as file\"\n [file]=\"file\"\n (remove)=\"removeFile()\"\n />\n </tui-files>\n </div>\n <div class=\"flex gap-2\">\n <button\n tuiButton\n [disabled]=\"!control.value\"\n [loading]=\"isSubmitLoading()\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n (click)=\"onSubmit$.next()\"\n >\n Загрузить\n </button>\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n </div>\n</div>\n","/* eslint-disable sonarjs/no-nested-template-literals,@typescript-eslint/unbound-method */\n\nimport { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, OnInit, output } from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport {\n ScCartItem,\n ScConvertersService,\n ScINewCartItemBase,\n ScINewCartItemMeasured,\n ScProduct,\n ScUnitsHelper,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n} from '@snabcentr/client-core';\nimport { TuiAmountPipe } from '@taiga-ui/addon-commerce';\nimport { tuiControlValue, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { TuiButton, TuiError, TuiLabel, TuiNumberFormat, TuiTextfield } from '@taiga-ui/core';\nimport { TuiAppearance, TuiWithAppearance } from '@taiga-ui/core/directives/appearance';\nimport { TuiIcons, TuiWithIcons } from '@taiga-ui/core/directives/icons';\nimport { TuiButtonLoading, TuiChip, TuiFieldErrorPipe, TuiInputNumber } from '@taiga-ui/kit';\nimport { TuiInputModule } from '@taiga-ui/legacy';\nimport { isUndefined } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, filter, map, Observable, pairwise, startWith } from 'rxjs';\n\nimport { ScNextInputFocusModule } from '../../../directives/next-input-focus/sc-next-input-focus.module';\nimport { ScSelectOnFocusinDirective } from '../../../directives/select-on-focusin/sc-select-on-focusin.directive';\nimport { stepValidator } from '../../../validators/step-validator';\n\n/**\n * Компонент добавления / изменения товара в корзине.\n */\n@Component({\n standalone: true,\n selector: 'sc-add-or-editing-cart-item-form',\n templateUrl: './sc-add-or-editing-cart-item-form.component.html',\n imports: [\n NgIf,\n FormsModule,\n ScNextInputFocusModule,\n ReactiveFormsModule,\n TuiLabel,\n ScSelectOnFocusinDirective,\n TuiNumberFormat,\n TuiError,\n TuiInputModule,\n TuiAppearance,\n TuiWithAppearance,\n TuiIcons,\n TuiWithIcons,\n TuiButton,\n TuiButtonLoading,\n AsyncPipe,\n TuiFieldErrorPipe,\n TuiInputNumber,\n TuiNumberFormat,\n TuiTextfield,\n TuiAmountPipe,\n TuiChip,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddOrEditingCartItemFormComponent implements OnInit {\n /**\n * Группа полей добавления / изменения товара в корзине.\n */\n public readonly form = new FormGroup<{\n length?: FormControl<number | null>;\n quantity: FormControl<number | null>;\n marker: FormControl<string | null>;\n }>({\n quantity: new FormControl<number | null>(null, Validators.required),\n marker: new FormControl<string | null>(''),\n });\n\n /**\n * Данные о товаре.\n */\n public readonly product = input.required<ScProduct>();\n\n /**\n * Признак того, что для указанной категории или продукта действует конфигуратор длины.\n */\n protected readonly isLengthConfigurator = computed(() => Boolean(this.product().properties?.['isLengthConfigurator']));\n\n /**\n * Данные о товаре в корзине.\n */\n public readonly cartItem = input<ScCartItem | undefined>();\n\n /**\n * Признак загрузки данных.\n */\n public readonly isLoading = input(false);\n\n /**\n * Признак возможности продажи товара на метраж.\n */\n protected readonly productIsMeasurable = computed(() => this.unitsHelper.productIsMeasurable(this.product()));\n\n /**\n * Кратность количества для товара.\n */\n protected readonly productMultiplicity = computed(() => this.unitsHelper.productMultiplicity(this.product()));\n\n /**\n * Минимальный метраж для товара.\n */\n protected readonly minLength = computed(() => this.product().properties?.minLength ?? (this.product().ignoreMinCountCheck ? 0 : this.product().minCount));\n\n /**\n * Максимальный метраж для товара.\n */\n protected readonly maxLength = computed(() => this.product().properties?.maxLength);\n\n /**\n * Шаг изменения метража.\n */\n protected readonly lengthStep = computed(() => this.product().properties?.lengthStep ?? (this.product().ignoreMinCountCheck ? 0 : this.product().minCount));\n\n /**\n * Подсказка по минимальному и максимальному метражу товара.\n */\n protected readonly lengthHint = computed(() => {\n const min = this.minLength();\n const max = this.maxLength();\n\n // eslint-disable-next-line sonarjs/no-nested-conditional, sonarjs/prefer-nullish-coalescing\n return min || max ? `(${min ? `от ${min}` : ''}${min && max ? ' ' : ''}${max ? `до ${max}` : ''} ${this.product().unit})` : '';\n });\n\n /**\n * Итоговая стоимость заказа.\n */\n protected totalCost$: Observable<number>;\n\n /**\n * {@link Output} события добавления товара в корзину.\n */\n public readonly addToCart = output<ScINewCartItemBase>();\n\n /**\n * {@link Output} события редактирования товара в корзине.\n */\n public readonly editCartItem = output<Omit<ScINewCartItemBase, 'productId'>>();\n\n /**\n * Объект-помощник для работы со значениями единиц измерения товара.\n */\n private readonly unitsHelper: ScUnitsHelper = inject(ScUnitsHelper);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.cartItemAddShow,\n params: { product_id: this.product().id },\n });\n\n if (this.productIsMeasurable()) {\n // Добавляем поле ввода длины, если товар измеряемый.\n this.form.addControl('length', new FormControl<number | null>(this.cartItem()?.length ?? this.minLength() ?? 0.01, [Validators.required, Validators.min(0.01)]));\n }\n\n // Устанавливаем количество из корзины или кратности товара.\n this.form.patchValue({\n quantity: this.cartItem()?.quantity ?? this.unitsHelper.productMultiplicity(this.product()),\n marker: this.cartItem()?.marker ?? '',\n });\n\n const step = this.lengthStep();\n\n if (this.isLengthConfigurator() && this.lengthStep() && this.form.controls.quantity.value && step) {\n // Если есть конфигуратор длины, рассчитываем начально значение длины.\n this.form.controls.length?.patchValue(this.form.controls.quantity.value * step);\n }\n\n // Добавляем валидацию шага для количества.\n this.form.controls.quantity.addValidators(stepValidator(this.unitsHelper.productStepForValidator(this.product())));\n // Добавляем валидацию шага для длины.\n this.form.get('length')?.addValidators(stepValidator(this.product().properties?.lengthStep ?? (this.product().ignoreMinCountCheck ? 0 : (this.product().minCount ?? 0))));\n\n // Считаем итоговую стоимость заказа.\n this.totalCost$ = tuiControlValue<{\n length?: number;\n quantity: number;\n }>(this.form).pipe(\n debounceTime(0), // Исправляем ошибку NG0950.\n filter(() => this.form.valid),\n distinctUntilChanged((previous, current) => previous.length === current.length && previous.quantity === current.quantity), // Только при изменении значений\n startWith(this.form.value as { length?: number; quantity: number }),\n pairwise(),\n map(([previous, current]) => {\n const lengthControl = this.form.get('length');\n\n // Если нет конфигуратора длины или некорректные данные — возвращаем без изменений.\n if (!this.isLengthConfigurator() || isUndefined(current.length) || !lengthControl || this.form.invalid || !step) {\n return current;\n }\n\n // Если изменилось количество — пересчитываем длину.\n if (previous.quantity !== current.quantity && this.form.controls.quantity.value) {\n const newValue = this.form.controls.quantity.value * step;\n lengthControl.patchValue(newValue);\n }\n\n // Если изменилась длина — пересчитываем количество и возвращаем значение длины.\n if (previous.length !== current.length && lengthControl.value) {\n const newValue = lengthControl.value / step;\n this.form.controls.quantity.patchValue(newValue);\n\n return { length: step, quantity: newValue };\n }\n\n // Возвращаем итоговые значения для расчёта стоимости.\n return { length: step, quantity: current.quantity };\n }),\n // Считаем стоимость: цена * длина * количество.\n map(({ length, quantity }) => (this.product().costRub ?? 0) * (length ?? 1) * quantity),\n map((sum) => Math.round(sum * 100) / 100)\n );\n }\n\n /**\n * Обработчик события шага метража.\n *\n * @param step Шаг.\n */\n protected onStepLength(step: number): void {\n const lengthControl = this.form.get('length');\n\n if (!this.productIsMeasurable() || !lengthControl) {\n return;\n }\n\n const length = lengthControl.value ?? 0;\n let newLength = Math.max(this.minLength() ?? step, length + step);\n // Округляем до ближайшего кратного числа.\n newLength = Math.round(newLength / step) * step;\n lengthControl.setValue(Number(newLength.toFixed(2)));\n }\n\n /**\n * Обработчик события шага количества.\n *\n * @param step Шаг.\n */\n protected onStepQuantity(step: number): void {\n const quantity = this.form.controls.quantity.value ?? 0;\n\n this.form.controls.quantity.setValue(Math.max(this.productMultiplicity(), quantity - (quantity % step) + step));\n }\n\n /**\n * Обработчик события отправки формы.\n */\n protected onSubmit(): void {\n // Удаляем null-поля из значения формы.\n const value = this.convertersService.removeNull<ScINewCartItemMeasured>(this.form.value as ScINewCartItemMeasured);\n\n // Если это добавление нового товара — добавляем productId.\n if (!this.cartItem()) {\n value.productId = this.product().id;\n }\n\n const step = this.lengthStep();\n\n // Если товар измеряемый и есть конфигуратор длины — устанавливаем длину по шагу (количество уже будет вычислено по формуле Метраж/min-count)\n if (this.productIsMeasurable() && this.isLengthConfigurator() && step) {\n value.length = step;\n }\n\n // Помечаем все поля формы как \"touch\" и запускаем валидацию для отображения ошибок с сервера.\n tuiMarkControlAsTouchedAndValidate(this.form);\n\n // В зависимости от режима — редактируем или добавляем товар.\n if (this.cartItem()) {\n this.editCartItem.emit(value);\n } else {\n this.addToCart.emit(value);\n }\n }\n}\n","<!-- Форма добавления измеряемого товара. -->\n<form\n *ngIf=\"product\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit()\"\n ScNextInputFocus\n class=\"flex flex-col gap-2\"\n>\n @let step = lengthStep();\n\n <!-- Длина товара (метраж) -->\n <label\n *ngIf=\"productIsMeasurable()\"\n tuiLabel\n >\n Метраж, {{ product().unit }}\n @if (!step || maxLength()) {\n {{ lengthHint() }}\n }\n\n <tui-textfield>\n <input\n tuiInputNumber\n formControlName=\"length\"\n [tuiNumberFormat]=\"{ precision: 2 }\"\n [max]=\"maxLength() || null\"\n [min]=\"minLength() || null\"\n (keydown.arrowDown)=\"onStepLength(-(lengthStep() ?? 0.01))\"\n (keydown.arrowUp)=\"onStepLength(lengthStep() ?? 0.01)\"\n autocomplete=\"length\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"length\"\n [error]=\"[] | tuiFieldError | async\"\n />\n <p\n *ngIf=\"lengthStep()\"\n class=\"tui-form__field-note\"\n >\n Метраж должен быть кратен {{ lengthStep() }}\n </p>\n </label>\n\n <!-- Количество товара -->\n <label tuiLabel>\n Количество, шт.\n <tui-textfield>\n <tui-chip\n *ngIf=\"isLengthConfigurator() && productMultiplicity() && step\"\n size=\"s\"\n appearance=\"negative\"\n class=\"font-bold\"\n >\n x {{ step }} {{ product().unit }}\n </tui-chip>\n\n <input\n placeholder=\"Количество\"\n tuiInputNumber\n [tuiNumberFormat]=\"{ decimalMode: 'not-zero' }\"\n [min]=\"productMultiplicity()\"\n (keydown.arrowDown)=\"onStepQuantity(-productMultiplicity())\"\n (keydown.arrowUp)=\"onStepQuantity(productMultiplicity())\"\n formControlName=\"quantity\"\n autocomplete=\"quantity\"\n />\n </tui-textfield>\n <p class=\"tui-form__field-note\">Количество должно быть кратно {{ productMultiplicity() }}</p>\n <tui-error\n formControlName=\"quantity\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Маркировка -->\n <label tuiLabel>\n Маркировка\n <tui-input formControlName=\"marker\">\n Маркировка\n <input\n tuiTextfieldLegacy\n autocomplete=\"marker\"\n />\n </tui-input>\n <tui-error\n formControlName=\"marker\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Кнопка добавления / редактирования товара в корзину -->\n <div class=\"flex flex-col items-center\">\n @let cost = totalCost$ | async;\n\n <div *ngIf=\"cost\">\n Итого:<span class=\"text-2xl font-bold\">\n {{ cost | tuiAmount | async }}\n {{ product().currency }}\n </span>\n </div>\n\n <!-- Кнопка добавления / редактирования товара в корзину -->\n <button\n tuiButton\n iconStart=\"@tui.check\"\n [disabled]=\"form.invalid\"\n [loading]=\"isLoading()\"\n type=\"submit\"\n class=\"mt-2\"\n >\n {{ cartItem() ? 'Изменить' : 'Добавить в корзину' }}\n </button>\n </div>\n</form>\n","/* eslint-disable sonarjs/no-nested-template-literals,@typescript-eslint/unbound-method,@typescript-eslint/no-unused-vars */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, inject, Signal, viewChild } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ScCartItem, ScCartService, ScINewCartItemBase, ScProduct } from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { injectContext } from '@taiga-ui/polymorpheus';\nimport { isObject } from 'lodash-es';\nimport { catchError, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { ScAddOrEditingCartItemFormComponent } from './add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component';\n\n/**\n * Компонент добавления / изменения товара в корзине.\n */\n@Component({\n standalone: true,\n selector: 'sc-add-or-editing-cart-item-dialog',\n templateUrl: './sc-add-or-editing-cart-item-dialog.component.html',\n imports: [ScAddOrEditingCartItemFormComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddOrEditingCartItemDialogComponent {\n /**\n * Компонент формы добавления / изменения товара в корзине.\n */\n public readonly formComponent = viewChild.required<ScAddOrEditingCartItemFormComponent>(ScAddOrEditingCartItemFormComponent);\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<ScINewCartItemBase | Omit<ScINewCartItemBase, 'productId'>> = new Subject<ScINewCartItemBase | Omit<ScINewCartItemBase, 'productId'>>();\n\n /**\n * {@link Observable} запроса добавления / изменения товара в корзине.\n */\n public readonly submit$ = this.onSubmit.pipe(\n switchMap((value) =>\n (this.cartItem && !('productId' in value) ? this.cartService.patchCartItem$(this.cartItem.id, value) : this.cartService.addToCart$(value as ScINewCartItemBase)).pipe(\n tap(() => {\n this.context.$implicit.complete();\n }),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n if (errors && isObject(errors)) {\n Object.entries(errors).forEach(([k, v]) => {\n this.formComponent().form.get(k)?.setErrors({ serverResponse: v });\n });\n }\n\n if (message) {\n this.formComponent().form.setErrors({ serverResponse: [message] });\n }\n\n this.formComponent().form.updateValueAndValidity();\n this.formComponent().form.markAsDirty();\n }\n return of();\n }),\n startWith(null)\n )\n ),\n startWith(),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных.\n */\n public readonly loading: Signal<boolean> = toSignal(this.submit$.pipe(map(tuiIsFalsy)), { initialValue: false });\n\n /**\n * Контекст диалогового окна.\n */\n public readonly context = injectContext<TuiDialogContext<boolean, { product: ScProduct; cartItem: ScCartItem | undefined }>>();\n\n /**\n * Данные о товаре.\n */\n public readonly product = this.context.data.product;\n\n /**\n * Данные о товаре в корзине.\n */\n public readonly cartItem = this.context.data.cartItem;\n\n /**\n * Сервис для работы с корзиной.\n */\n private readonly cartService: ScCartService = inject(ScCartService);\n}\n","@if (product) {\n <sc-add-or-editing-cart-item-form\n [product]=\"product\"\n [cartItem]=\"cartItem\"\n (addToCart)=\"onSubmit.next($event)\"\n (editCartItem)=\"onSubmit.next($event)\"\n [isLoading]=\"loading()\"\n ></sc-add-or-editing-cart-item-form>\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, input } from '@angular/core';\nimport { WA_WINDOW } from '@ng-web-apis/common';\nimport { ScCatalogService, ScMimeTypes } from '@snabcentr/client-core';\nimport { TuiAppearance, TuiButton, TuiHint, TuiIcons, TuiWithAppearance, TuiWithIcons } from '@taiga-ui/core';\nimport { TuiButtonLoading } from '@taiga-ui/kit';\nimport { share, startWith, Subject, switchMap, tap } from 'rxjs';\n\n/**\n * Компонент скачивания каталога.\n */\n@Component({\n standalone: true,\n selector: 'sc-download-price-list',\n templateUrl: './sc-download-price-list.component.html',\n imports: [TuiAppearance, TuiWithAppearance, TuiIcons, TuiWithIcons, TuiButton, TuiButtonLoading, AsyncPipe, TuiHint],\n})\nexport class ScDownloadPriceListComponent {\n /**\n * Идентификатор категории, для которой нужно скачать прайс.\n */\n public categoryId = input<number>();\n\n /**\n * {@link Subject} события скачивания цен каталога.\n */\n protected readonly onDownload: Subject<ScMimeTypes> = new Subject<ScMimeTypes>();\n\n /**\n * {@link Observable} запроса на скачивание цен каталога.\n */\n protected readonly request$ = this.onDownload.pipe(\n switchMap((type) =>\n this.catalogService.downloadPrice$(type, this.categoryId()).pipe(\n tap((blob: Blob) => {\n const priceWindow = type === ScMimeTypes.pdf ? this.window.open('/', '_blank', 'rel=\"nofollow noreferrer\"') : this.window;\n (priceWindow ?? this.window).location.assign(this.window.URL.createObjectURL(blob));\n }),\n startWith(type)\n )\n ),\n share(),\n // eslint-disable-next-line unicorn/no-useless-undefined\n startWith(undefined)\n );\n\n /**\n * Текст подсказки при скачивании.\n */\n protected readonly pdfLoadingHint: string = 'Скачивание каталога может занять некоторое время...';\n\n /**\n * Сервис для работы с каталогом.\n */\n private readonly catalogService: ScCatalogService = inject(ScCatalogService);\n\n /**\n * Объект окна.\n */\n private readonly window: Window & typeof globalThis = inject<Window & typeof globalThis>(WA_WINDOW);\n\n /**\n * Перечисление MIME-типов.\n */\n protected readonly mimeTypes: typeof ScMimeTypes = ScMimeTypes;\n}\n","@let request = request$ | async;\n@let pdfLoading = request === mimeTypes.pdf;\n@let csvLoading = request === mimeTypes.csv;\n\n<div class=\"dropdown flex flex-col gap-2 p-4\">\n <button\n tuiButton\n [loading]=\"pdfLoading\"\n (click)=\"onDownload.next(mimeTypes.pdf)\"\n iconStart=\"@tui.sc.file-p\"\n size=\"s\"\n [tuiHint]=\"pdfLoading ? pdfLoadingHint : null\"\n appearance=\"mono\"\n >\n Скачать прайс в формате PDF\n </button>\n <button\n tuiButton\n [loading]=\"csvLoading\"\n (click)=\"onDownload.next(mimeTypes.csv)\"\n iconStart=\"@tui.sc.file-x\"\n size=\"s\"\n appearance=\"mono\"\n >\n Скачать прайс в формате CSV\n </button>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TuiButton, TuiIcon } from '@taiga-ui/core';\nimport { TuiButtonLoading } from '@taiga-ui/kit';\n\n/**\n * Компонент кнопки избранных товаров и категорий.\n */\n@Component({\n standalone: true,\n selector: 'sc-favorite-button',\n templateUrl: './sc-favorite-button.component.html',\n imports: [TuiButton, TuiButtonLoading, TuiIcon],\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 * Устанавливает компонент в очередь на обновление.\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 flex flex-col overflow-hidden rounded-tui-radius-m border border-tui-base-04 text-center\"\n >\n <div class=\"img-wrapper w-full grow overflow-hidden\">\n <picture *ngIf=\"category\">\n @if (category.properties?.imageWebp) {\n <source\n type=\"image/webp\"\n [srcset]=\"category.properties?.imageWebp | scMediaImageTransformer\"\n />\n }\n <img\n [src]=\"category.properties?.image | scMediaImageTransformer: true\"\n [alt]=\"category.name\"\n [ngClass]=\"{ '!object-contain p-2': appearance() === 'normal' || !category.properties?.image }\"\n class=\"size-full rounded-xl object-cover\"\n />\n </picture>\n <!-- Блок для скелетона карточки -->\n <div\n *ngIf=\"!category\"\n class=\"img-wrapper size-full bg-tui-base-02\"\n ></div>\n </div>\n\n <div class=\"name flex w-full items-center justify-center break-all\">\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 class-methods-use-this,unicorn/no-useless-undefined, @typescript-eslint/unbound-method */\n\nimport { AsyncPipe, NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, inject, OnInit, Signal } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport {\n ScCatalogService,\n ScConvertersService,\n ScIProductNotifyWhenInStock,\n ScISuggestionType,\n ScIWarehouse,\n ScProduct,\n ScUser,\n ScUserService,\n ScWarehouseService,\n} from '@snabcentr/client-core';\nimport { TuiContext, TuiStringHandler } from '@taiga-ui/cdk';\nimport { TuiAppearance, TuiButton, TuiDialogContext, TuiError, TuiIcon, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiFieldErrorPipe, TuiTooltip } from '@taiga-ui/kit';\nimport { TuiCardLarge } from '@taiga-ui/layout';\nimport { TuiInputModule, TuiSelectModule } from '@taiga-ui/legacy';\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';\nimport { ScFormFieldsModule } from '../../form-fields/form-fields.module';\nimport { SC_NOTIFY_WHEN_IN_STOCK_REQUIRED_FIELDS } from '../../providers';\nimport { scAtLeastOneRequiredValidator } from '../../validators/sc-at-least-one-required-validator';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\nimport { ScVerificationModule } from '../../verification/sc-verification.module';\n\n/**\n * Компонент формы отправки запроса на уведомление о поступлении товара.\n */\n@Component({\n standalone: true,\n selector: 'sc-notify-when-in-stock-dialog',\n templateUrl: './sc-notify-when-in-stock-dialog.component.html',\n imports: [\n ScVerificationModule,\n FormsModule,\n ReactiveFormsModule,\n TuiInputModule,\n TuiLink,\n TuiButton,\n TuiLabel,\n TuiFieldErrorPipe,\n TuiError,\n ScVerificationModule,\n ScFormFieldsModule,\n TuiSelectModule,\n TuiButtonLoading,\n TuiLoader,\n AsyncPipe,\n NgIf,\n TuiAppearance,\n TuiCardLarge,\n TuiIcon,\n TuiTooltip,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNotifyWhenInStockDialogComponent implements OnInit {\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context: TuiDialogContext<void, { product: ScProduct; onClickOfferHandler: () => void; onErrorHandler: (error: HttpErrorResponse) => void }> =\n inject<TuiDialogContext<void, { product: ScProduct; onClickOfferHandler: () => void; onErrorHandler: (error: HttpErrorResponse) => void }>>(POLYMORPHEUS_CONTEXT);\n\n /**\n * Товар.\n */\n protected readonly product: ScProduct = this.context.data.product;\n\n /**\n * Форма для отправки запроса на уведомление о поступлении товара.\n */\n protected readonly form = new FormGroup({\n email: new FormControl<string | null>(null, [Validators.email]),\n phone: new FormControl<string | null>(null, [phoneValidator()]),\n verificationCode: new FormControl<string | null>(null, [Validators.minLength(6)]),\n warehouseId: new FormControl<string | null>(null, Validators.required),\n });\n\n /**\n * Список складов.\n */\n protected readonly warehouses: Signal<ScIWarehouse[] | null> = toSignal(inject(ScWarehouseService).getWarehouses$(), { initialValue: null });\n\n /**\n * Перечисление типов подсказок.\n */\n protected readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Массив полей, которые должны быть заполнены хотя бы одним значением.\n */\n protected readonly requiredFields = inject(SC_NOTIFY_WHEN_IN_STOCK_REQUIRED_FIELDS);\n\n /**\n * Сервис для работы с каталогом.\n */\n protected readonly catalogService: ScCatalogService = inject(ScCatalogService);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * {@link Observable} данных о пользователе.\n */\n protected readonly user$: Observable<ScUser | null> = inject(ScUserService)\n .getUserChange$()\n .pipe(\n tap((user) => {\n if (!user.isGuest) {\n if (this.requiredFields.includes('phone')) {\n this.form.get('phone')?.setValue(user.contacts.phone.value);\n }\n\n if (this.requiredFields.includes('email')) {\n this.form.get('email')?.setValue(user.contacts.email.value);\n }\n }\n })\n );\n\n /**\n * {@link Subject} события отправки формы.\n */\n protected 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.getRawValue() as ScIProductNotifyWhenInStock),\n switchMap((value) =>\n this.catalogService.getProductNotifyWhenInStock$(this.product.id, this.convertersService.removeNullRecursive(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 // eslint-disable-next-line no-shadow\n Object.entries(errors).forEach(([key, value]) => {\n this.form.get(key)?.setErrors({ serverResponse: value });\n });\n } else if (message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n\n this.context.data.onErrorHandler(error);\n }\n\n return of(undefined);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * Сигнал изменения состояния загрузки данных.\n */\n protected readonly loading: Signal<boolean> = toSignal(this.request$.pipe(map((value) => value === null)), { initialValue: false });\n\n /**\n * Инициализирует экземпляр класса {@link ScNotifyWhenInStockDialogComponent}.\n */\n public constructor() {\n this.user$.pipe(takeUntilDestroyed()).subscribe();\n }\n\n /**\n * Инициализация компонента.\n */\n public ngOnInit(): void {\n if (this.requiredFields.length === 1) {\n this.form.get(this.requiredFields[0])?.setValidators(Validators.required);\n } else if (this.requiredFields.length > 1) {\n this.form.setValidators(scAtLeastOneRequiredValidator(this.requiredFields));\n }\n }\n\n /**\n * Проверяет, является ли товар в наличии.\n */\n protected isStock(): boolean {\n const warehouseId = Number(this.form.get('warehouseId')?.value ?? 0);\n\n return this.product.isWarehouseStockExist(warehouseId);\n }\n\n /**\n * Преобразует объект в значение, отображаемое в поле ввода.\n *\n * @param items Выбранные значения.\n */\n protected stringify(items: readonly ScIWarehouse[]): TuiStringHandler<TuiContext<number>> {\n const itemsMap = new Map(\n items.map((item) => {\n return [item.id, item.name] as [number, string];\n })\n );\n\n return ({ $implicit }: TuiContext<number>) => itemsMap.get($implicit) ?? '';\n }\n}\n","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit$.next()\"\n class=\"flex flex-col gap-6\"\n>\n @let isPhoneVisible = requiredFields.includes('phone');\n @let isEmailVisible = requiredFields.includes('email');\n @let phoneTouched = form.get('phone')?.touched;\n @let emailTouched = form.get('email')?.touched;\n @let isShowError = form.errors?.['atLeastOneRequired'] && ((isPhoneVisible && phoneTouched) || (isEmailVisible && emailTouched));\n @let user = user$ | async;\n @let userPhone = user?.contacts?.phone;\n @let isShowCodeFields = !!form.controls.phone.value && (user?.isGuest || userPhone?.value !== form.controls.phone.value || !userPhone?.isApproved);\n\n <div\n *ngIf=\"user\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel>\n <div\n [tuiAppearance]=\"isPhoneVisible && isEmailVisible ? 'outline-grayscale' : 'flat'\"\n [tuiAppearanceMode]=\"isShowError ? 'invalid' : null\"\n tuiCardLarge\n class=\"flex flex-col !gap-1\"\n [style.padding]=\"requiredFields.length <= 1 ? '0' : undefined\"\n [style.border-radius]=\"requiredFields.length <= 1 ? '0' : undefined\"\n >\n <sc-verification-phone-check-form\n *ngIf=\"isPhoneVisible\"\n [required]=\"!form.controls.email.value\"\n [showCodeFields]=\"isShowCodeFields\"\n [pseudoInvalid]=\"isShowError\"\n />\n <div\n *ngIf=\"isPhoneVisible && isEmailVisible\"\n class=\"tui-island__paragraph flex items-center gap-3\"\n [style.color]=\"isShowError ? 'var(--tui-text-negative)' : 'var(--tui-text-tertiary)'\"\n >\n <div\n class=\"h-px flex-1\"\n [style.background-color]=\"isShowError ? 'var(--tui-text-negative)' : 'var(--tui-text-tertiary)'\"\n ></div>\n <div class=\"text-body-s font-bold\">\n Или(и)\n <tui-icon\n [appearance]=\"isShowError ? 'negative' : 'grayscale'\"\n tuiHintDirection=\"right\"\n tuiHintAppearance=\"dark\"\n tuiTooltip=\"Пожалуйста, укажите номер телефона или(и) адрес электронной почты\"\n />\n </div>\n <div\n class=\"h-px flex-1\"\n [style.background-color]=\"isShowError ? 'var(--tui-text-negative)' : 'var(--tui-text-tertiary)'\"\n ></div>\n </div>\n <label\n tuiLabel\n *ngIf=\"isEmailVisible\"\n >\n Адрес электронной почты\n <tui-input\n [pseudoInvalid]=\"isShowError\"\n formControlName=\"email\"\n >\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 </div>\n <tui-error\n *ngIf=\"isShowError\"\n error=\"Пожалуйста, укажите номер телефона и(или) адрес электронной почты для уведомления о поступлении товара\"\n />\n </label>\n <label tuiLabel>\n Склад\n <tui-select\n formControlName=\"warehouseId\"\n [valueContent]=\"warehouses() ? stringify(warehouses()!) : selectLoading\"\n >\n Склад\n <tui-data-list *tuiDataList>\n @for (warehouse of warehouses(); track warehouse.id) {\n @if (!product.isWarehouseStockExist(warehouse.id)) {\n <button\n tuiOption\n [value]=\"warehouse.id\"\n >\n {{ warehouse.name }}\n </button>\n }\n }\n </tui-data-list>\n </tui-select>\n <tui-error\n formControlName=\"warehouseId\"\n [error]=\"[] | tuiFieldError | async\"\n />\n\n <span\n *ngIf=\"isStock()\"\n [style.color]=\"'var(--tui-text-positive)'\"\n >\n Товар имеется в наличии на выбранном складе\n </span>\n </label>\n <ng-template #selectLoading> <tui-loader /> </ng-template>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <button\n tuiButton\n type=\"submit\"\n [disabled]=\"form.invalid || isStock() || (isShowCodeFields && !form.controls.verificationCode.value && form.controls.phone.valid)\"\n [loading]=\"loading()\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n Отправить\n </button>\n <div class=\"grow basis-60 text-body-s\">\n Нажимая на кнопку, вы соглашаетесь с\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context.data.onClickOfferHandler()\"\n >\n Политикой конфиденциальности\n </button>\n </div>\n </div>\n\n <tui-error\n *ngIf=\"form.errors && form.errors['serverResponse']\"\n [error]=\"[] | tuiFieldError | async\"\n />\n</form>\n","/* eslint-disable class-methods-use-this */\n\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { ScIWarehouse, ScProduct, ScWarehouseService } from '@snabcentr/client-core';\nimport { map, Observable } from 'rxjs';\n\n/**\n * Пайп для вычисления есть ли товар на всех складах.\n */\n@Pipe({\n standalone: true,\n name: 'scProductInAllWarehouses',\n})\nexport class ScProductInAllWarehousesPipe implements PipeTransform {\n /**\n * Список складов.\n */\n protected readonly warehouses$: Observable<ScIWarehouse[]> = inject(ScWarehouseService).getWarehouses$();\n\n /**\n * Вычисляет есть ли товар на всех складах.\n *\n * @param product - Продукт.\n * @returns Имя продукта.\n */\n public transform(product: ScProduct): Observable<boolean> {\n return this.warehouses$.pipe(map((warehouses) => warehouses.every((warehouse) => product.isWarehouseStockExist(warehouse.id))));\n }\n}\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 />\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 />\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 />\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 <span\n *ngIf=\"product.supplierSku\"\n class=\"text-tui-text-02\"\n >\n Артикул производителя: {{ product.supplierSku }}\n </span>\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 />\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </div>\n <sc-cost-with-discount\n [product]=\"product\"\n [size]=\"size\"\n />\n <sc-price-warehouse-stock [product]=\"product\" />\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 />\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 />\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 { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { SEARCH_TERM_PROVIDERS } from '@snabcentr/client-core';\nimport { TuiAutoFocus } from '@taiga-ui/cdk';\nimport { TuiButton, TuiHint, TuiIcon, TuiLink } from '@taiga-ui/core';\nimport { TuiAvatar, TuiButtonLoading, TuiHighlight } from '@taiga-ui/kit';\nimport { TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { AbstractScPriceCard } from '../../directives';\nimport { ScFormatDatePipe } from '../../pipes/sc-format-date';\nimport { CostWithDiscountComponent } from '../cost-with-discount/cost-with-discount.component';\nimport { ScHoverImageCarouselComponent } from '../hover-image-carousel/sc-hover-image-carousel.component';\nimport { ScInputQuantityComponent } from '../input-quantity/sc-input-quantity.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@Component({\n standalone: true,\n selector: 'sc-price-card-inline',\n templateUrl: './sc-price-card-inline.component.html',\n styleUrl: './sc-price-card-inline.component.scss',\n providers: [SEARCH_TERM_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n RouterModule,\n TuiButton,\n TuiIcon,\n TuiTextfieldControllerModule,\n FormsModule,\n ReactiveFormsModule,\n ...TuiHint,\n TuiLink,\n TuiHighlight,\n TuiAutoFocus,\n TuiButtonLoading,\n TuiAvatar,\n ScHoverImageCarouselComponent,\n CostWithDiscountComponent,\n ScPriceWarehouseStockComponent,\n ScFavoriteButtonComponent,\n ScInputQuantityComponent,\n ScFormatDatePipe,\n ],\n})\nexport class ScPriceCardInlineComponent extends AbstractScPriceCard {\n public readonly type = input<'catalogItem' | 'cartItem' | 'orderItem'>('catalogItem');\n}\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 />\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 <span\n *ngIf=\"product.supplierSku\"\n class=\"text-tui-text-02\"\n >\n Артикул производителя: {{ product.supplierSku }}\n </span>\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 />\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </div>\n\n <sc-cost-with-discount [product]=\"product\" />\n\n <sc-price-warehouse-stock [product]=\"product\" />\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 />\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 />\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 [tuiAutoFocus]=\"autoFocuseQuantityInput()\"\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 />\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 />\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 { ScMediaImageTransformerPipe } from '@snabcentr/client-core';\nimport { TuiAxes, TuiLineDaysChart, TuiLineDaysChartHint } from '@taiga-ui/addon-charts';\nimport { TuiAutoFocus, 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 { ScFormatDatePipe } from '../pipes/sc-format-date';\nimport { ScCategoryCardComponent } from './category-card/sc-category-card.component';\nimport { CostWithDiscountComponent } from './cost-with-discount/cost-with-discount.component';\nimport { ScHoverImageCarouselComponent } from './hover-image-carousel/sc-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: [ScPriceListPaginationComponent, ScCategoryCardComponent, ScPriceCardComponent, ScPriceHistoryComponent],\n exports: [ScPriceListPaginationComponent, ScCategoryCardComponent, ScPriceCardComponent, ScPriceHistoryComponent],\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 TuiAutoFocus,\n TuiLineDaysChartHint,\n TuiAxes,\n TuiButtonLoading,\n TuiAvatar,\n TuiBadge,\n ScHoverImageCarouselComponent,\n TuiLineClamp,\n TuiHovered,\n CostWithDiscountComponent,\n ScPriceCardInlineComponent,\n ScPriceWarehouseStockComponent,\n ScFavoriteButtonComponent,\n ScInputQuantityComponent,\n ScFormatDatePipe,\n ScMediaImageTransformerPipe,\n ],\n})\nexport class ScCatalogModule {}\n","import { ChangeDetectionStrategy, Component, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\nimport { ScIOrgContact } from '@snabcentr/client-core';\nimport { TuiIcon } from '@taiga-ui/core';\nimport { TuiPush } from '@taiga-ui/kit';\n\nimport { ScManagerCardComponent } from '../manager-card/sc-manager-card.component';\n\n/**\n * Компонент карточки менеджера Push-уведомлений.\n */\n@Component({\n standalone: true,\n selector: 'sc-manager-card-push',\n templateUrl: './sc-manager-card-push.component.html',\n imports: [ScManagerCardComponent, TuiPush, TuiIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScManagerCardPushComponent {\n /**\n * Данные менеджера.\n */\n public readonly manager: InputSignal<ScIOrgContact> = input.required<ScIOrgContact>();\n\n /**\n * Событие закрытия уведомления.\n */\n public readonly closeEvent: OutputEmitterRef<ScIOrgContact> = output<ScIOrgContact>();\n}\n","<tui-push\n *tuiPush=\"!!manager()\"\n type=\"Свяжитесь с нами для решения возникших вопросов\"\n (close)=\"closeEvent.emit(manager())\"\n>\n <tui-icon icon=\"@tui.message-square\" />\n <sc-manager-card [manager]=\"manager()\" />\n</tui-push>\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 ScIOrgContact,\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 { TuiCountryIsoCode } from '@taiga-ui/i18n';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { YaReadyEvent } from 'angular8-yandex-maps';\nimport { getCountries } from 'libphonenumber-js';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth';\nimport { IS_DEFAULT_COUNTRY } from '../../providers';\nimport { ScHelpNotificationService } from '../../services';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\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 protected readonly userHelpContacts$: Observable<ScIOrgContact[]> = inject(ScHelpNotificationService).userHelpContacts;\n\n /**\n * Признак того, что текущая страна является верной.\n */\n protected readonly isDefaultCountry: Observable<boolean> = inject(IS_DEFAULT_COUNTRY);\n\n /**\n * Список стран.\n */\n protected readonly countries: readonly TuiCountryIsoCode[] = getCountries();\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, phoneValidator()]),\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","@let isEnabledAddDeliveryAddress = isDefaultCountry | async;\n\n@if (isEnabledAddDeliveryAddress) {\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 />\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"address\"\n [error]=\"[] | tuiFieldError | async\"\n />\n <tui-error\n *ngIf=\"addressControl.valid && form.controls.coordinates.invalid\"\n error=\"Выберите вариант из списка\"\n />\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 />\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Телефон\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\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 />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Должность\n <tui-input formControlName=\"position\"> Должность </tui-input>\n <tui-error\n formControlName=\"position\"\n [error]=\"[] | tuiFieldError | async\"\n />\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 />\n </div>\n </div>\n </div>\n} @else {\n @let helpContacts = userHelpContacts$ | async;\n\n @if (helpContacts && helpContacts.length) {\n <tui-push\n type=\"Чтобы добавить адрес доставки, свяжитесь с нами\"\n class=\"!w-auto\"\n >\n <tui-icon icon=\"@tui.message-square\" />\n <sc-manager-card [manager]=\"helpContacts[0]\" />\n </tui-push>\n }\n}\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, inject, Output } from '@angular/core';\nimport { ScDeliveryAddressService, ScIContact, ScIDeliveryAddress, ScIOrgContact } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\nimport { IS_DEFAULT_COUNTRY } from '../../providers';\nimport { ScHelpNotificationService } from '../../services/sc-help-notification.service';\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 Observable} данных контактов дл помощи.\n */\n protected readonly userHelpContacts$: Observable<ScIOrgContact[]> = inject(ScHelpNotificationService).userHelpContacts;\n\n /**\n * Признак того, что текущая страна пользователя верной.\n */\n protected readonly isDefaultCountry: Observable<boolean> = inject(IS_DEFAULT_COUNTRY);\n\n /**\n * Инициализирует экземпляр класса {@link ScDeliveryAddressAccordionComponent}.\n *\n * @param deliveryAddressService Сервис работы с адресами доставки.\n */\n public constructor(private readonly deliveryAddressService: ScDeliveryAddressService) {}\n}\n","@let isEnabledAddDeliveryAddress = isDefaultCountry | async;\n\n<sc-accordion\n (addButtonClick)=\"addDeliveryAddressClick.emit()\"\n [disabledButtons]=\"!isEnabledAddDeliveryAddress\"\n>\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 <!-- Показываем уведомление о том, что добавить адрес доставки можно только через сотрудника. -->\n @let helpContacts = userHelpContacts$ | async;\n @if (!isEnabledAddDeliveryAddress && helpContacts && helpContacts.length) {\n <tui-push\n type=\"Чтобы добавить адрес доставки, свяжитесь с нами\"\n class=\"m-2 !w-auto\"\n >\n <tui-icon icon=\"@tui.message-square\" />\n <sc-manager-card [manager]=\"helpContacts[0]\" />\n </tui-push>\n }\n\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 />\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, TuiIcon, TuiLabel, TuiLoader, TuiNotification, TuiTextfield } from '@taiga-ui/core';\nimport { TuiInputPhoneInternational } from '@taiga-ui/experimental';\nimport { TuiButtonLoading, TuiElasticContainer, TuiFieldErrorPipe, TuiPush, TuiSortCountriesPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule } from '@taiga-ui/legacy';\nimport { AngularYandexMapsModule } from 'angular8-yandex-maps';\n\nimport { ScAccordionModule } from '../accordion';\nimport { ScManagerCardComponent } from '../contacts/manager-card/sc-manager-card.component';\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@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 ...TuiPush,\n TuiIcon,\n ScManagerCardComponent,\n TuiInputPhoneInternational,\n ...TuiTextfield,\n TuiSortCountriesPipe,\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 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 | scFormatDate }}</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 { ScFormatDatePipe } from '../pipes';\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, ScFormatDatePipe],\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 'grid-height-arrow',\n 'grid-width-arrow',\n 'retail-store',\n 'puzzle',\n 'deadline',\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 'img.window-handle-lock',\n 'img.phone',\n 'img.principles.assistance',\n 'img.principles.delivery',\n 'img.principles.installation',\n 'img.principles.maintenance',\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, inject, input, InputSignal } 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 host: {\n '[class.is_mobile]': 'isMobile',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewsCardComponent {\n /**\n * Данные о новости.\n */\n public news: InputSignal<ScNewsTile> = input.required<ScNewsTile>();\n\n /**\n * Ссылка на страницу новости. Используется именно `href`, так как остановить событие клика для `routerLink` не вышло.\n */\n public href: InputSignal<string | null> = input.required<string | null>();\n\n /**\n * Признак того, что этот компонент отображается на мобильном устройстве.\n */\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n}\n","<a\n [routerLink]=\"href()\"\n class=\"black-link relative flex h-full cursor-pointer flex-col gap-2 overflow-hidden rounded-xl bg-white px-2 pb-4 pt-2 shadow-sc\"\n>\n <div class=\"w-full grow overflow-hidden rounded-xl bg-tui-base-02 bg-cover bg-center bg-no-repeat\">\n <picture>\n @if (news().imageWebp) {\n <source\n type=\"image/webp\"\n [srcset]=\"news().imageWebp | scMediaImageTransformer\"\n />\n }\n <img\n [src]=\"news().image | scMediaImageTransformer: true\"\n [alt]=\"news().subject\"\n class=\"size-full object-cover\"\n />\n </picture>\n </div>\n <div class=\"flex w-full shrink-0 flex-col justify-between gap-2 overflow-hidden bg-white align-baseline\">\n <p class=\"text-sm font-medium text-tui-text-02\">{{ news().createdAt | scFormatDate }}</p>\n\n <div class=\"line-clamp-3 font-extrabold\">{{ news().subject }}</div>\n </div>\n</a>\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';\nimport { ScMediaImageTransformerPipe } from '@snabcentr/client-core';\n\nimport { ScFormatDatePipe } from '../pipes/sc-format-date';\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, ScFormatDatePipe, ScMediaImageTransformerPipe],\n exports: [ScNewsCardComponent, ScNewsCardSkeletonComponent],\n})\nexport class ScNewsModule {}\n","import { ChangeDetectionStrategy, Component, computed, EventEmitter, Inject, input, InputSignal, Output, Signal, TemplateRef, ViewChild } from '@angular/core';\nimport { ScCartItem, ScIImage } 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 styleUrl: './sc-order-item-mobile.component.less',\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 public readonly orderItem: InputSignal<ScCartItem | undefined> = input<ScCartItem | undefined>();\n\n /**\n * Событие нажатия на дополнительные действия.\n */\n @Output()\n public clickActionsEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Изображение товара в заказе.\n */\n public readonly cartImage: Signal<ScIImage | undefined> = computed(() => {\n const product = this.orderItem()?.product;\n return product ? this.imageHelper.getImage(product) : undefined;\n });\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 showSpecification(): void {\n this.previewDialogService.open(this.specificationPreviewRef ?? '').subscribe();\n }\n}\n","@let orderItemData = orderItem();\n@let product = orderItemData?.product;\n@let cartImageData = cartImage();\n\n<div\n [style.opacity]=\"product?.isHidden ? 'var(--tui-disabled-opacity)' : ''\"\n 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>\n <ng-container *ngIf=\"orderItemData && product; else skeleton\">\n <button\n tuiIconButton\n (click)=\"product.isHidden ? null : 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 <picture *ngIf=\"cartImageData\">\n @if (cartImageData.imageWebp) {\n <source\n type=\"image/webp\"\n [srcset]=\"cartImageData.imageWebp\"\n />\n }\n @if (cartImageData.image) {\n <img\n (click)=\"product.isHidden ? null : clickCardEvent.emit()\"\n [src]=\"cartImageData.image\"\n [alt]=\"product.name\"\n [class.p-5]=\"!product.images?.length\"\n class=\"cursor-pointer\"\n />\n }\n </picture>\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 [class.disabled]=\"product.isHidden\"\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 <span *ngIf=\"product.supplierSku\"> Артикул производителя: {{ product.supplierSku }} </span>\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=\"orderItemData.specificationImgUrl\"\n (click)=\"showSpecification()\"\n [class.disabled]=\"product.isHidden\"\n >\n Спецификация\n </a>\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItemData.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItemData.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 <sc-cost-with-discount [product]=\"product\" />\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=\"orderItemData.height; else length\">\n <p>Высота: {{ orderItemData.height }} м.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"orderItemData.length\">Длина: {{ orderItemData.length }} м.</p>\n </ng-template>\n <p *ngIf=\"orderItemData.width\">Ширина: {{ orderItemData.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\">{{ orderItemData.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\"> {{ orderItemData.getCostRubStr() }} </span>\n </p>\n <sc-price-warehouse-stock\n [product]=\"product\"\n [fromMain]=\"false\"\n />\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 { CostWithDiscountComponent } from '../catalog/cost-with-discount/cost-with-discount.component';\nimport { ScPriceWarehouseStockComponent } from '../catalog/price-warehouse-stock/sc-price-warehouse-stock.component';\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: [\n CommonModule,\n TuiLink,\n TuiButton,\n TuiIcon,\n ...TuiBlockStatus,\n ...TuiPreview,\n ScCatalogModule,\n PolymorpheusTemplate,\n PolymorpheusOutlet,\n ScPriceWarehouseStockComponent,\n CostWithDiscountComponent,\n ],\n})\nexport class ScOrderModule {}\n","import { NgFor } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, InputSignal } from '@angular/core';\nimport { ScFaqItem } from '@snabcentr/client-core';\nimport { TuiLoader } from '@taiga-ui/core';\nimport { TuiAccordion } from '@taiga-ui/kit';\n\n/**\n * Компонент часто задаваемых вопросов.\n */\n@Component({\n standalone: true,\n selector: 'sc-frequently-asked-questions',\n templateUrl: './sc-frequently-asked-questions.component.html',\n imports: [TuiAccordion, TuiLoader, NgFor],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFrequentlyAskedQuestionsComponent {\n /**\n * {@link InputSignal} списка группы часто задаваемых вопросов.\n */\n public readonly items: InputSignal<ScFaqItem[]> = input.required<ScFaqItem[]>();\n\n /**\n * {@link InputSignal} отображения загрузки.\n */\n public readonly showLoading: InputSignal<boolean> = input<boolean>(false);\n}\n","<tui-loader\n [showLoader]=\"showLoading()\"\n [overlay]=\"true\"\n>\n <tui-accordion\n *ngFor=\"let item of items()\"\n [closeOthers]=\"false\"\n >\n <tui-accordion-item borders=\"top-bottom\">\n <!-- Заголовок вопроса. -->\n <span class=\"!whitespace-normal text-body-m-bold\">{{ item.question }}</span>\n\n <!-- Блок ответа с использованием [innerHTML]. -->\n <div\n tuiAccordionItemContent\n [innerHTML]=\"item.answer\"\n ></div>\n </tui-accordion-item>\n </tui-accordion>\n</tui-loader>\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input, InputSignal, OutputRef } from '@angular/core';\nimport { outputFromObservable } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ScFaqGroup, ScFrequentlyAskedQuestionsService } from '@snabcentr/client-core';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList } from '@taiga-ui/core';\nimport { TuiDataListWrapper, tuiItemsHandlersProvider } from '@taiga-ui/kit';\nimport { TuiSelectModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\nimport { filter, first, map, Observable, tap } from 'rxjs';\n\n/**\n * Компонент выбора группы часто задаваемых вопросов.\n */\n@Component({\n standalone: true,\n selector: 'sc-frequently-asked-questions-group-selector',\n templateUrl: './sc-frequently-asked-questions-group-selector.component.html',\n imports: [AsyncPipe, TuiSelectModule, TuiTextfieldControllerModule, ReactiveFormsModule, TuiDataList, TuiDataListWrapper, NgIf, TuiButton, FormsModule],\n providers: [\n tuiItemsHandlersProvider({\n stringify: (item: ScFaqGroup) => item.name,\n }),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFrequentlyAskedQuestionsGroupSelectorComponent {\n /**\n * {@link Observable} списка группы часто задаваемых вопросов.\n */\n protected readonly groups$: Observable<ScFaqGroup[]> = inject(ScFrequentlyAskedQuestionsService).groups$.pipe(\n first(),\n tap((groups) => {\n if (groups.length > 0) {\n this.groupControl.setValue(groups[0]);\n }\n })\n );\n\n /**\n * {@link FormControl} выбранной группы.\n */\n protected readonly groupControl: FormControl<ScFaqGroup | null> = new FormControl<ScFaqGroup | null>(null);\n\n /**\n * {@link OutputRef} сигнал изменения идентификатора группы.\n */\n public readonly groupIdChange: OutputRef<number> = outputFromObservable(\n this.groupControl.valueChanges.pipe(\n filter(tuiIsPresent),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n map((group) => group.id!)\n )\n );\n\n /**\n * Формат отображения. 'list' - в виде списка, 'select' в виде выпадающего списка.\n */\n public readonly viewMode: InputSignal<'list' | 'select'> = input<'list' | 'select'>('list');\n}\n","@let groups = groups$ | async;\n\n@if (groups && groups.length) {\n @switch (viewMode()) {\n @case ('list') {\n <div class=\"flex flex-col items-center gap-3 rounded-xl p-4 shadow-sc\">\n <div class=\"flex w-full flex-col gap-2\">\n @for (item of groups; track $index) {\n <button\n tuiButton\n size=\"xs\"\n [tuiAppearanceState]=\"groupControl.value === item ? 'hover' : null\"\n [disabled]=\"groupControl.value === item\"\n (click)=\"groupControl.patchValue(item)\"\n appearance=\"flat-grayscale\"\n class=\"!justify-start !text-body-s-bold\"\n >\n {{ item.name }}\n </button>\n }\n </div>\n </div>\n }\n\n @case ('select') {\n <form>\n <tui-select\n [formControl]=\"groupControl\"\n [tuiTextfieldLabelOutside]=\"true\"\n >\n <tui-data-list-wrapper\n *tuiDataList\n [items]=\"groups\"\n />\n </tui-select>\n </form>\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен перечисления размеров страниц пагинации.\n */\nexport const SC_PAGE_SIZE_OPTIONS: InjectionToken<number[]> = tuiCreateToken<number[]>([5]);\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, output, OutputEmitterRef } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ScConvertersService, ScFaqItem, ScFrequentlyAskedQuestionsService, ScIFrequentlyAskedQuestionsPaginationParams, ScIPaginate } from '@snabcentr/client-core';\nimport { TUI_WINDOW_SIZE, tuiIsFalsy, tuiIsPresent } from '@taiga-ui/cdk';\nimport { TuiButton } from '@taiga-ui/core';\nimport { TuiPagination } from '@taiga-ui/kit';\nimport { BehaviorSubject, combineLatest, debounceTime, filter, map, Observable, shareReplay, startWith, Subject, switchMap } from 'rxjs';\n\nimport { ScFrequentlyAskedQuestionsComponent, ScFrequentlyAskedQuestionsGroupSelectorComponent } from '..';\nimport { SC_PAGE_SIZE_OPTIONS } from '../frequently-asked-questions/sc-page-size-options';\n\n/**\n * Компонент часто задаваемых вопросов с возможностью выбора группы вопросов.\n */\n@Component({\n standalone: true,\n selector: 'sc-frequently-asked-questions-with-groups',\n templateUrl: './sc-frequently-asked-questions-with-groups.component.html',\n imports: [AsyncPipe, NgIf, ScFrequentlyAskedQuestionsGroupSelectorComponent, TuiButton, ScFrequentlyAskedQuestionsComponent, TuiPagination],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFrequentlyAskedQuestionsWithGroupsComponent {\n /**\n * {@link Observable} изменения Email для связи по вопросам рекламаций.\n */\n protected readonly frequentlyAskedQuestionsService: ScFrequentlyAskedQuestionsService = inject(ScFrequentlyAskedQuestionsService);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * Индекс первой страницы.\n */\n private readonly firstPageIndex: number = 1;\n\n /**\n * Количество записей на странице пагинации.\n */\n private readonly pageSizeOptions: number[] = inject(SC_PAGE_SIZE_OPTIONS);\n\n /**\n * {@link BehaviorSubject} изменения количества записей на странице.\n */\n private readonly perPage$: BehaviorSubject<number> = new BehaviorSubject<number>(this.pageSizeOptions[0]);\n\n /**\n * {@link BehaviorSubject} изменения номера страницы.\n */\n private readonly page$: BehaviorSubject<number> = new BehaviorSubject<number>(this.firstPageIndex);\n\n /**\n * {@link BehaviorSubject} изменения идентификатора группы.\n */\n protected readonly groupId$: Subject<number> = new Subject<number>();\n\n /**\n * Сигнал нажатия на кнопку \"Задать вопрос\".\n */\n public readonly clickSendQuestion: OutputEmitterRef<void> = output();\n\n /**\n * {@link Observable} запроса данных списка заказов.\n */\n private readonly request$: Observable<ScIPaginate<ScFaqItem> | null> = combineLatest({\n page: this.page$,\n perPage: this.perPage$,\n group: this.groupId$,\n }).pipe(\n // Нулевой debounceTime для случая, когда меняются направление и поле сортировки одновременно.\n debounceTime(0),\n switchMap((value: ScIFrequentlyAskedQuestionsPaginationParams) =>\n this.frequentlyAskedQuestionsService\n .getFrequentlyAskedQuestions$(this.convertersService.removeNull<ScIFrequentlyAskedQuestionsPaginationParams>(value))\n .pipe(startWith(null))\n ),\n shareReplay({ refCount: true, bufferSize: 1 })\n );\n\n /**\n * {@link Observable} изменения общего количества страниц пагинации.\n */\n protected readonly pageCount$: Observable<number> = this.request$.pipe(\n filter(tuiIsPresent),\n map(({ meta }) => meta.lastPage)\n );\n\n /**\n * {@link Observable} изменения номера страницы пагинации из данных пагинации запроса.\n */\n protected readonly currentPage$: Observable<number> = this.request$.pipe(\n filter(tuiIsPresent),\n map(({ meta }) => meta.currentPage - 1)\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных.\n */\n protected readonly isLoading = toSignal(this.request$.pipe(map(tuiIsFalsy)), { initialValue: false });\n\n /**\n * {@link Observable} изменения списка заказов страницы пагинации.\n */\n protected readonly data$: Observable<ScFaqItem[] | null> = this.request$.pipe(\n filter(tuiIsPresent),\n map((data) => data.data),\n startWith(null)\n );\n\n /**\n * {@link Observable} изменения формата отображения фильтра групп.\n */\n protected readonly viewMode$: Observable<'list' | 'select'> = inject(TUI_WINDOW_SIZE).pipe(map((rect) => (rect.width > 768 ? 'list' : 'select')));\n\n /**\n * Устанавливает данные пагинации.\n *\n * @param pageIndex Индекс страницы.\n */\n protected paginationChange(pageIndex: number): void {\n this.page$.next(pageIndex + 1);\n }\n\n /**\n * Устанавливает идентификатор группы.\n *\n * @param id Идентификатор группы.\n */\n protected groupIdChange(id: number): void {\n this.groupId$.next(id);\n this.paginationChange(0);\n }\n}\n","@let items = data$ | async;\n@let pageCount = pageCount$ | async;\n@let viewMode = viewMode$ | async;\n\n<div\n *ngIf=\"viewMode\"\n class=\"flex gap-6\"\n [class.flex-col]=\"viewMode === 'select'\"\n>\n <div class=\"flex flex-col gap-7\">\n <sc-frequently-asked-questions-group-selector\n (groupIdChange)=\"groupIdChange($event)\"\n [viewMode]=\"viewMode\"\n class=\"shrink-0\"\n [class.w-64]=\"viewMode !== 'select'\"\n />\n\n <button\n *ngIf=\"viewMode === 'list'\"\n tuiButton\n size=\"m\"\n type=\"button\"\n iconStart=\"@tui.circle-help\"\n appearance=\"secondary\"\n (click)=\"clickSendQuestion.emit()\"\n class=\"self-center\"\n >\n Задать вопрос\n </button>\n </div>\n\n <div class=\"grow\">\n @if (items && items.length) {\n <sc-frequently-asked-questions\n [items]=\"items\"\n [showLoading]=\"isLoading()\"\n />\n\n <tui-pagination\n *ngIf=\"pageCount && pageCount > 1\"\n [length]=\"pageCount\"\n [index]=\"(currentPage$ | async) ?? 0\"\n (indexChange)=\"paginationChange($event)\"\n class=\"mt-4 !justify-items-center\"\n />\n } @else {\n <p class=\"text-body-s-bold\">Список вопросов пуст</p>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { SC_COMPANY_INFO, SC_URLS, ScICompanyBaseInfo, ScIUrls } from '@snabcentr/client-core';\nimport { TuiLink, TuiScrollbar } from '@taiga-ui/core';\nimport { TuiAppearance, TuiWithAppearance } from '@taiga-ui/core/directives/appearance';\nimport { TuiGroup } from '@taiga-ui/core/directives/group';\nimport { TuiIcons, TuiWithIcons } from '@taiga-ui/core/directives/icons';\nimport { TuiAccordionDirective, TuiAccordionItem, TuiAccordionItemContent } from '@taiga-ui/kit';\n\n/**\n * Компонент политики обработки персональных данных пользователей сайта.\n */\n@Component({\n standalone: true,\n selector: 'sc-personal-data-processing-policy',\n styleUrls: ['./sc-personal-data-processing-policy.component.scss'],\n templateUrl: './sc-personal-data-processing-policy.component.html',\n imports: [TuiGroup, TuiAccordionDirective, TuiAccordionItem, TuiAccordionItemContent, TuiAppearance, TuiWithAppearance, TuiIcons, TuiWithIcons, TuiLink, TuiScrollbar],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPersonalDataProcessingPolicyComponent {\n /**\n * Данные о компании.\n */\n protected readonly companyInfo: Readonly<ScICompanyBaseInfo> = inject(SC_COMPANY_INFO);\n\n /**\n * Список ссылок на разделы backend'a.\n */\n protected readonly urls: ScIUrls = inject(SC_URLS);\n}\n","<p class=\"headers\">\n Политика {{ companyInfo.name }} в отношении обработки персональных данных пользователей сайта\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }}\n </a>\n .\n</p>\n<tui-accordion class=\"mt-4\">\n <tui-accordion-item borders=\"top-bottom\">\n 1. Общие положения\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 1.1. Политика {{ companyInfo.name }} (Юридический адрес: {{ companyInfo.legalAddress }}, ОГРН: {{ companyInfo.ogrn }}, ИНН: {{ companyInfo.inn }}) (далее по\n тексту также — «Общество») в отношении обработки персональных данных (далее по тексту также — «Политика») определяет позицию и намерения Общества в области\n обработки и защиты персональных данных, с целью соблюдения и защиты прав и свобод каждого человека и, в особенности, права на неприкосновенность частной жизни,\n личную и семейную тайну, защиту своей чести и доброго имени.\n </p>\n <p>1.2. Политика неукоснительно исполняется руководителями и работниками всех структурных подразделений, филиалов и представительств Общества.</p>\n <p>\n 1.3. Действие Политики распространяется на все персональные данные субъектов, обрабатываемые в Обществе с применением средств автоматизации и без применения\n таких средств.\n </p>\n <p>1.4. К настоящей Политике имеет доступ любой субъект персональных данных, в том числе с использованием сети «Интернет».</p>\n <p>\n 1.5. Общество периодически актуализирует настоящую Политику и вправе в одностороннем порядке в любой момент изменять ее условия. Общество рекомендует регулярно\n проверять содержание настоящей Политики на предмет ее возможных изменений. Если иное не предусмотрено Политикой, все вносимые в нее изменения вступают в силу с\n даты, указанной в Политике.\n </p>\n <p class=\"mb-3\">\n 1.6. Во всем ином, что не предусмотрено настоящей Политикой, Общество руководствуется положениями действующего законодательства Российской Федерации.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 2. Термины\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 2.1. Персональные данные — любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу (субъекту персональных данных). К\n такой информации, в частности, можно отнести: ФИО, год, месяц, дата и место рождения, адрес, сведения о семейном, социальном, имущественном положении, сведения\n об образовании, профессии, доходах, а также другую информацию, позволяющую по совокупности определить (идентифицировать) субъекта персональных данных.\n </p>\n <p>\n 2.2. Обработка персональных данных — любое действие (операция) или совокупность действий (операций), совершаемых с использованием средств автоматизации или без\n использования таких средств с персональными данными, включая сбор, запись, систематизацию, накопление, хранение, уточнение (обновление, изменение), извлечение,\n использование, передачу (распространение, предоставление, доступ), обезличивание, блокирование, удаление, уничтожение персональных данных.\n </p>\n <p>2.3. Субъект персональных данных — физическое лицо, чьи персональные данные обрабатываются.</p>\n <p>\n 2.4. Оператор — лицо, самостоятельно или совместно с иными лицами организующее и (или) осуществляющее обработку персональных данных, а также определяющие цели\n обработки персональных данных, состав персональных данных, подлежащих обработке, действия (операции), совершаемые с персональными данными. Для целей настоящей\n Политики Общество, обрабатывая персональные данные, является оператором, если иное прямо не указано в Политике.\n </p>\n <p>\n 2.5. Обработчик — любое лицо, которое на основании договора с оператором осуществляет обработку персональных данных по поручению такого оператора, действуя от\n имени и (или) в интересах последнего при обработке персональных данных. Оператор несет ответственность перед субъектом персональных данных за действия или\n бездействия обработчика. Обработчик несет ответственность перед оператором.\n </p>\n <p>\n 2.6. Cookies — это небольшие текстовые файлы, содержащие некоторую информацию, которые загружаются на пользовательское устройство (ПК, смартфон и т.д.) во время\n просмотра веб-страницы.\n </p>\n <p class=\"mb-3\">\n 2.7. Прочие термины используются в настоящей Политике в соответствии со значениями, определяемыми действующим законодательством Российской Федерации, если иное\n прямо не указано в Политике.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 3. Порядок и условия обработки персональных данных\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 3.1. Под безопасностью персональных данных Общество понимает защищенность персональных данных от неправомерного или случайного доступа к ним, уничтожения,\n изменения, блокирования, копирования, предоставления, распространения персональных данных, а также от иных неправомерных действий в отношении персональных\n данных и принимает необходимые правовые, организационные и технические меры для защиты персональных данных.\n </p>\n <p>\n 3.2. Обработка и обеспечение безопасности персональных данных в Обществе осуществляется в соответствии с требованиями Конституции Российской Федерации,\n Федерального закона № 152-ФЗ «О персональных данных», подзаконных актов, других определяющих случаи и особенности обработки персональных данных законов\n Российской Федерации, а также руководящих и методических документов Правительства Российской Федерации, Минцифры России, Роскомнадзора, ФСТЭК России и ФСБ\n России.\n </p>\n <p>3.3. При обработке персональных данных Общество придерживается следующих принципов:</p>\n <ul class=\"ml-4 list-disc\">\n <li>законности и справедливости;</li>\n <li>ограничения обработки персональных данных достижением конкретных, заранее определенных и законных целей;</li>\n <li>недопущения обработки персональных данных, несовместимой с целями сбора персональных данных;</li>\n <li>недопущения объединения баз данных, содержащих персональные данные, обработка которых осуществляется в целях, несовместимых между собой;</li>\n <li>соответствия содержания и объема обрабатываемых персональных данных заявленным целям обработки;</li>\n <li>недопущения избыточности обрабатываемых персональных данных по отношению к заявленным целям обработки;</li>\n <li>\n обеспечения точности персональных данных, их достаточности, а в необходимых случаях и актуальности по отношению к целям обработки персональных данных, а\n также принятия мер по удалению или уточнению неполных или неточных данных;\n </li>\n <li>\n прозрачности обработки персональных данных: субъекту персональных данных может предоставляться соответствующая информация, касающаяся обработки его\n персональных данных;\n </li>\n <li>\n осуществления хранения персональных данных в форме, позволяющей определить субъекта персональных данных, не дольше, чем этого требуют заявленные цели\n обработки персональных данных.\n </li>\n </ul>\n <p>3.4. Общество обрабатывает персональные данные в следующих случаях:</p>\n <p>• осуществление Обществом деятельности в качестве владельца сайта, предоставляющего информацию о товарах (услугах) «{{ urls.siteUrl }}»;</p>\n <tui-scrollbar class=\"my-4 w-full\">\n <table class=\"w-full min-w-[44rem] table-fixed border border-gray-300\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th class=\"w-1/4 border border-gray-300 px-4 py-2 text-left\">Цель обработки персональных данных</th>\n <th class=\"w-1/5 border border-gray-300 px-4 py-2 text-left\">Категории субъектов персональных данных</th>\n <th class=\"w-6/12 border border-gray-300 px-4 py-2 text-left\">Перечень персональных данных</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class=\"border border-gray-300 px-4 py-2\">\n Использование, в том числе посещение, сайта Общества в соответствии с предоставляемой функциональностью, включая регистрацию и авторизацию на\n Сайте, сообщения через формы обратной связи\n </td>\n <td class=\"border border-gray-300 px-4 py-2\">Пользователи Сайта</td>\n <td class=\"border border-gray-300 px-4 py-2\">\n <ul class=\"list-disc\">\n <li>ФИО;</li>\n <li>контактная информация (номер телефона, адрес электронной почты, ID в мессенджерах и пр.);</li>\n <li>\n иные персональные данные, самостоятельно предоставленные лицами в адрес Общества (в рамках заполнения сведений на Сайте или в иных\n сервисах Общества);\n </li>\n <li>\n сведения, собираемые посредством метрических программ, в том числе технические сведения о пользовательских устройствах и идентификаторах\n (IP-адрес, cookies, геолокация устройства, метаданные и пр.)\n </li>\n </ul>\n </td>\n </tr>\n <tr>\n <td class=\"border border-gray-300 px-4 py-2\">Оформление заказов (товаров и услуг) на сайте Общества</td>\n <td class=\"border border-gray-300 px-4 py-2\">\n Лица, оформляющие и (или) получающие (возвращающие) заказы в пределах Российской Федерации, а также их представители\n </td>\n <td class=\"border border-gray-300 px-4 py-2\">\n <ul class=\"list-disc\">\n <li>ФИО;</li>\n <li>адрес доставки;</li>\n <li>контактная информация (номер телефона, адрес электронной почты, ID в мессенджерах и пр.);</li>\n <li>должность, реквизиты доверенностей;</li>\n <li>записи звонков (разговоров);</li>\n <li>банковские реквизиты, включая данные платежной карты;</li>\n <li>ОГРНИП и ИНН (если лицо оформляет заказ как Физическое лицо или ИП);</li>\n <li>иные данные, самостоятельно предоставленные лицами в адрес Общества (в рамках оформления и доставки (возврата) заказа);</li>\n <li>\n сведения, собираемые посредством метрических программ, в том числе технические сведения о пользовательских устройствах и идентификаторах\n (IP-адрес, cookies, геолокация устройства, метаданные и пр.)\n </li>\n </ul>\n </td>\n </tr>\n <tr>\n <td class=\"border border-gray-300 px-4 py-2\">Направление рекламы</td>\n <td class=\"border border-gray-300 px-4 py-2\">Получатели рекламы или новостных рассылок, предварительно выразившие на это согласие</td>\n <td class=\"border border-gray-300 px-4 py-2\">\n <ul class=\"list-disc\">\n <li>ФИО;</li>\n <li>контактная информация (номер телефона, адрес электронной почты, ID в мессенджерах и пр.);</li>\n <li>\n иные данные, самостоятельно предоставленные лицами в адрес Общества (в рамках выражения согласия на получения рекламы или новостей);\n </li>\n <li>\n сведения, собираемые посредством метрических программ, в том числе технические сведения о пользовательских устройствах и идентификаторах\n (IP-адрес, cookies, геолокация устройства, метаданные и пр.)\n </li>\n </ul>\n </td>\n </tr>\n <tr>\n <td class=\"border border-gray-300 px-4 py-2\">Контроль качества использования Сайта Общества</td>\n <td class=\"border border-gray-300 px-4 py-2\">Пользователи Сайта Общества (покупатели, продавцы, и пр.)</td>\n <td class=\"border border-gray-300 px-4 py-2\">\n <ul class=\"list-disc\">\n <li>ФИО;</li>\n <li>контактная информация (номер телефона, адрес электронной почты, ID в мессенджерах и пр.);</li>\n <li>\n иные данные, самостоятельно предоставленные лицами в адрес Общества (в рамках использования Сайта Общества) – например, отзывы по\n приобретенным товарам (услугам);\n </li>\n <li>\n сведения, собираемые посредством метрических программ, в том числе технические сведения о пользовательских устройствах и идентификаторах\n (IP-адрес, cookies, геолокация устройства, метаданные и пр.)\n </li>\n </ul>\n </td>\n </tr>\n </tbody>\n </table>\n </tui-scrollbar>\n\n <p>3.5. Общество обрабатывает персональные данные только при наличии хотя бы одного из условий ниже в течение следующих сроков:</p>\n <ol class=\"ml-4 list-decimal\">\n <li>\n С согласия субъекта персональных данных на обработку его персональных данных - в течение срока, на который было дано согласие на обработку персональных\n данных,\n </li>\n <li>\n Для достижения целей, предусмотренных международным договором Российской Федерации или законом, для осуществления и выполнения возложенных законодательством\n Российской Федерации на оператора функций, полномочий и обязанностей - в течение срока, установленного соответствующими международными договорами или\n законами.\n </li>\n <li>\n При необходимости обработки персональных данных, подлежащих опубликованию или обязательному раскрытию в соответствии с федеральным законом - в течение\n срока, установленного соответствующими законами.\n </li>\n <li>\n Для исполнения судебного акта, акта другого органа или должностного лица, подлежащих исполнению в соответствии с законодательством Российской Федерации об\n исполнительном производстве - в течение срока, необходимо для исполнения соответствующего акта.\n </li>\n <li>\n В связи с участием лица в конституционном, гражданском, административном, уголовном судопроизводстве, судопроизводстве в арбитражных судах - в течение срока\n участия в соответствующем судопроизводстве, включая сроки обжалования (оспаривания) судебных актов, кроме случаев, когда более длительный срок обработки\n персональных данных установлен действующим законодательством Российской Федерации,\n </li>\n <li>\n Для исполнения договора, стороной которого либо выгодоприобретателем или поручителем по которому является субъект персональных данных, а также для\n заключения договора по инициативе субъекта персональных данных или договора, по которому субъект персональных данных будет являться выгодоприобретателем или\n поручителем - в течение срока действия такого договора, кроме случаев, когда более длительный срок обработки персональных данных установлен действующим\n законодательством Российской Федерации или договором.\n </li>\n <li>\n Для защиты жизни, здоровья или иных жизненно важных интересов субъекта персональных данных, если получение согласия субъекта персональных данных невозможно\n - до момента, когда получение согласия субъекта персональных данных станет возможным или когда соответствующие основания, угрожающие жизни, здоровью или\n иным жизненно важным интересам, отпадут (в зависимости от того, какое обстоятельство наступит раньше)\n </li>\n <li>\n Для осуществления прав и законных интересов оператора или третьих лиц при условии, что при этом не нарушаются права и свободы субъекта персональных данных -\n в течение срока, необходимого для осуществления прав и обеспечения законных интересов\n </li>\n </ol>\n <p>\n Конкретный срок определяется Обществом с учетом положений настоящей Политики, внутренних документов и локальных нормативных актов Общества, а также принципов\n обработки персональных данных и требований действующего законодательства Российской Федерации, в том числе в части прекращения обработки персональных данных при\n достижении конкретных, заранее определенных и законных целей такой обработки.\n </p>\n <p>\n 3.6. Общество вправе поручить обработку персональных данных Обработчикам на основании заключаемых с ними договоров. Это означает, что Общество делегирует часть\n своих функций определенному им лицу, которое при этом действует от имени или в интересах Общества.\n </p>\n <p>\n Общество привлекает таких лиц, когда не обладает необходимым уровнем знаний или ресурсов для достижения соответствующего результата (например, когда Обществу\n необходимы дополнительные вычислительные мощности для эксплуатации своих веб-сайтов и онлайн-сервисов, он может арендовать выделенные серверы у третьего лица в\n отсутствие собственных серверов) или когда ему более эффективно с точки зрения собственных трудозатрат и качества деятельности передать отдельные функции на\n аутсорсинг (например, если количество пользователей веб-сайтов и онлайн-сервисов Общества резко возрастет, ему может потребоваться обратиться к третьему лицу за\n услугами контактного центра по работе с клиентами).\n </p>\n <p>\n Обработчики обязуются соблюдать принципы и правила обработки персональных данных, предусмотренные Федеральным законом № 152-ФЗ «О персональных данных» (включая\n ст. 18.1 и ч. 5 ст. 18), иными законами и подзаконными актами. Для каждого обработчика в договоре будут определены:\n </p>\n <ul class=\"ml-4 list-disc\">\n <li>перечень обрабатываемых персональных данных;</li>\n <li>цели их обработки;</li>\n <li>перечень действий (операций), которые будут совершаться с персональными данными обработчиком;</li>\n <li>\n обязанности обработчика по соблюдению конфиденциальности и обеспечению безопасности персональных данных при их обработке, а также перечень принимаемых\n обработчиком мер по обеспечению защиты обрабатываемых им персональных данных, включая требование об уведомлении Общества об инцидентах с персональными\n данными;\n </li>\n <li>\n обязанность по запросу Общества в течение срока действия поручения на обработку персональных данных предоставлять Обществу документы и иную информацию,\n подтверждающие принятие мер и соблюдение в целях исполнения поручения Общества требований, установленных Федеральным законом № 152-ФЗ «О персональных\n данных».\n </li>\n </ul>\n <p>\n Обработчик не обязан получать согласие субъекта персональных данных на обработку его персональных данных. Если для обработки персональных данных по поручению\n Общества необходимо получение согласия субъекта персональных данных, такое согласие получает непосредственно Общество.\n </p>\n <p>\n 3.7. При наличии соответствующих правовых оснований, установленных законодательством Российской Федерации, Общество вправе осуществлять передачу персональных\n данных третьим лицам без поручения таким лицам обработки персональных данных.\n </p>\n <p>\n К указанным лицам, например, относятся банки, осуществляющие расчеты с контрагентами Общества, перевозчики и экспедиторы, осуществляющие доставку заказов в\n соответствии со своими правилами, контрагенты Общества, которым Общество передает данные доверенностей своих представителей, государственные органы,\n запрашивающие персональные данные в пределах своей компетенции, и т.д.\n </p>\n <p>\n Такие лица не обрабатывают персональные данные от имени Общества или в его интересах, поскольку имеют собственные цель и правовые основания такой обработки\n (например, банки принимают платежные документы в соответствии с требованиями банковского законодательства, а Общество не вправе вмешиваться в их деятельность).\n </p>\n <p>Общество осуществляет передачу персональных данных:</p>\n <ul class=\"ml-4 list-disc\">\n <li>ООО «ЯНДЕКС» (Россия). 119021, Россия, Москва, ул. Льва Толстого, д. 16. Сбор веб-аналитики (сервис Яндекс.Метрика);</li>\n <li>\n АО «ПРЕДПРОЦЕССИНГОВЫЙ РАСЧЕТНЫЙ ЦЕНТР». 129110, Россия, Москва, Олимпийский проспект, дом 16, строение 5, этаж 4, блок А<br />Телефон: 8 (495) 987-19-60\n </li>\n <li>ООО \"ЕПОЧТА СОФТВАРЕ\". 603005, Россия, Нижегородская обл, г. Нижний Новгород, ул. Нестерова, д. 4А, офис кв. 57</li>\n </ul>\n <p>\n 3.8. В случае, когда конкретное лицо, которому Общество передает персональные данные, в том числе без поручения обработки персональных данных, является\n иностранным и передача осуществляются за пределы Российской Федерации (например, продавцу товара с доставкой из-за пределов Российской Федерации), Общество\n осуществляет трансграничную передачу персональных данных. Такая передача осуществляется Обществом при наличии соответствующего правового основания обработки\n персональных данных, а также при условии уведомления Роскомнадзора в порядке, предусмотренном ст. 22 Федерального закона № 152-ФЗ «О персональных данных».\n </p>\n <p>\n 3.9. Если иное не предусмотрено законодательством Российской Федерации, Общество прекращает обработку персональных данных (в отношении любой из заявленных выше\n целей) и уничтожает их в случаях:\n </p>\n <ul class=\"ml-4 list-disc\">\n <li>ликвидации Общества;</li>\n <li>реорганизации Общества, влекущей прекращение его деятельности;</li>\n <li>отпадения правовых оснований обработки персональных данных и/или достижения целей обработки персональных данных.</li>\n </ul>\n <p>\n Конкретный порядок уничтожения персональных данных на носителях, содержащих персональные данные, в том числе внешних/съемных электронных носителях, бумажных\n носителях и в информационных системах персональных данных, определяются Обществом в своих внутренних документах и локальных нормативных актах.\n </p>\n <p>3.10. Обработка персональных данных Обществом ведется смешанным способом: с использованием средств автоматизации, и без использования средств автоматизации.</p>\n <p>\n В ряде случаев, как это описано ниже, Общество получает и обрабатывает персональные данные автоматически с помощью метрических программ, используемых на\n веб-сайтах и в онлайн-сервисах Общества. Для работы с такими данными Общество использует cookies.\n </p>\n <p>\n Cookies используются сайтами для распознавания пользовательских устройств, определения пользовательских предпочтений (в том числе рекламных), а также для сбора\n статистик взаимодействия пользователя с сайтами, для улучшения опыта использования такого сайта или для устранения различных ошибок, которые могут периодически\n возникать. При этом перечень целей, для достижения которых необходимы cookies, не является исчерпывающим и зависит от конкретного сайта, который пользователь\n посещает или иным образом использует.\n </p>\n <p>\n Пользователи также могут самостоятельно ограничить или полностью отключить установку cookies через настройки своего веб-браузера. Однако без использования\n технических cookies веб-сайты и онлайн-сервисы Общества могут работать некорректно, а часть их функционала может оказаться недоступна.\n </p>\n <p>3.11. Общество при осуществлении обработки персональных данных:</p>\n <ul class=\"ml-4 list-disc\">\n <li>\n принимает меры, необходимые и достаточные для обеспечения выполнения требований законодательства Российской Федерации, внутренних документов и локальных\n нормативных актов Общества в области персональных данных;\n </li>\n <li>\n принимает правовые, организационные и технические меры для защиты персональных данных от неправомерного или случайного доступа к ним, уничтожения,\n изменения, блокирования, копирования, предоставления, распространения персональных данных, а также от иных неправомерных действий в отношении персональных\n данных;\n </li>\n <li>назначает лицо, ответственное за организацию обработки персональных данных в Обществе;</li>\n <li>\n издает внутренние документы, определяющие политику Общества в отношении обработки персональных данных, локальные акты по вопросам обработки персональных\n данных, а также локальные акты, устанавливающие процедуры, направленные на предотвращение и выявление нарушений законодательства Российской Федерации,\n устранение последствий таких нарушений;\n </li>\n <li>\n осуществляет ознакомление работников Общества, его филиалов, представительств и структурных подразделений, непосредственно осуществляющих обработку\n персональных данных, с положениями законодательства Российской Федерации, внутренних документов и локальных нормативных актов Общества в области\n персональных данных, в том числе с требованиями к защите персональных данных, и обучение указанных работников;\n </li>\n <li>проводит регулярные обязательные тренинги для своих работников по вопросам персональных данных;</li>\n <li>\n осуществляет внутренний контроль и (или) аудит соответствия обработки персональных данных требованиям законодательства Российской Федерации и принятым в\n соответствии с ним нормативным правовым актам, иным требованиям к защите персональных данных, настоящей Политике, внутренним документам и локальным\n нормативным актам Общества в области персональных данных;\n </li>\n <li>публикует или иным образом обеспечивает неограниченный доступ к настоящей Политике;</li>\n <li>прекращает обработку персональных данных и уничтожает их в случаях, предусмотренных законодательством Российской Федерации;</li>\n <li>совершает иные действия, предусмотренные законодательством Российской Федерации в области персональных данных.</li>\n </ul>\n <p class=\"mb-3\">\n 3.12. Общество вправе направлять пользователям информационные и рекламные рассылки, связанные с предоставляемыми услугами. Пользователь может в любой момент\n отказаться от рассылки, обратившись в поддержку.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 4. Права субъекта персональных данных\n <ng-template tuiAccordionItemContent>\n <div>\n <p>Лицо, персональные данные которого обрабатываются Обществом, имеет:</p>\n <ul class=\"ml-4 list-disc\">\n <li>право на отзыв ранее данного им согласия на обработку персональных данных;</li>\n <li>право на получение информации, касающейся обработки персональных данных;</li>\n <li>\n право требовать уточнения своих персональных данных, их блокирования или уничтожения, если персональные данные являются неполными, устаревшими,\n недостоверными, незаконно полученными, не являются необходимыми для заявленной цели обработки, а также требовать прекращения обработки персональных данных,\n если цель такой обработки достигнута Обществом.\n </li>\n </ul>\n <p>\n Если иной порядок взаимодействия Общества и субъекта персональных данных не предусмотрен соответствующим документом между ними (например, договором или текстом\n согласия на обработку персональных данных), для реализации указанных прав субъекту персональных данных необходимо направить Обществу заявление: в письменной\n форме и подписанное собственноручной подписью — по адресу {{ companyInfo.legalAddress }}.\n </p>\n <p>Такое заявление должно в обязательном порядке содержать описание требований субъекта персональных данных, а также следующие сведения:</p>\n <ul class=\"ml-4 list-disc\">\n <li>ФИО субъекта персональных данных;</li>\n <li>\n номер основного документа, удостоверяющего личность субъекта персональных данных или его представителя, сведения о дате выдачи указанного документа и\n выдавшем его органе ЛИБО иные данные, позволяющие однозначно идентифицировать субъекта персональных данных;\n </li>\n <li>\n сведения, подтверждающие участие субъекта персональных данных в отношениях с Обществом, ЛИБО сведения, иным способом подтверждающие факт обработки\n персональных данных Обществом;\n </li>\n <li>подпись субъекта персональных данных или его представителя.</li>\n </ul>\n <p class=\"mb-3\">\n Субъект персональных данных также вправе обжаловать действия (бездействия) и решения Общества, нарушающие его права при обработке персональных данных, в\n уполномоченный орган по защите прав субъектов персональных данных (Роскомнадзор) и в суд в порядке, установленном законодательством Российской Федерации.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 5. Сведения о реализуемых требованиях к защите персональных данных\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n Общество при обработке персональных данных принимает необходимые правовые, организационные и технические меры для защиты персональных данных от неправомерного\n или случайного доступа к ним, уничтожения, изменения, блокирования, копирования, предоставления, распространения персональных данных, а также от иных\n неправомерных действий в отношении персональных данных. Общество регулярно пересматривает и актуализирует принимаемые меры для обеспечения наилучшей\n защищенности обрабатываемых персональных данных – такие меры описываются в настоящей Политике, внутренних документах и локальных нормативных актах Общества.\n </p>\n <p>К таким мерам, в частности, относится:</p>\n <ul class=\"ml-4 list-disc\">\n <li>разработка моделей угроз;</li>\n <li>определение угроз безопасности персональных данных при их обработке в информационных системах персональных данных;</li>\n <li>\n применение организационных и технических мер по обеспечению безопасности персональных данных при их обработке в информационных системах персональных данных,\n необходимых для выполнения требований к защите персональных данных, исполнение которых обеспечивает установленные Правительством Российской Федерации уровни\n защищенности персональных данных;\n </li>\n <li>применение прошедших в установленном порядке процедуру оценки соответствия средств защиты информации;</li>\n <li>\n оценка эффективности принимаемых мер по обеспечению безопасности персональных данных до ввода в эксплуатацию информационной системы персональных данных;\n </li>\n <li>обнаружение фактов несанкционированного доступа к персональным данным и принятием мер;</li>\n <li>восстановление персональных данных, модифицированных или уничтоженных вследствие несанкционированного доступа к ним;</li>\n <li>\n установление правил доступа к персональным данным, обрабатываемым в информационной системе персональных данных, а также обеспечением регистрации и учета\n всех действий, совершаемых с персональными данными в информационной системе персональных данных;\n </li>\n <li>контроль за принимаемыми мерами по обеспечению безопасности персональных данных и уровня защищенности информационных систем персональных данных;</li>\n <li>учет машинных носителей персональных данных;</li>\n <li>организация пропускного и внутриобъектового режимов на территории Общества;</li>\n <li>размещение технических средств обработки персональных данных в пределах охраняемой территории;</li>\n <li>поддержание технических средств охраны, сигнализации в постоянной готовности;</li>\n <li>проведение мониторинга действий пользователей, проведение разбирательств по фактам нарушения требований безопасности персональных данных.</li>\n </ul>\n </div>\n </ng-template>\n </tui-accordion-item>\n</tui-accordion>\n","import { ChangeDetectionStrategy, Component, inject, input, InputSignal, model, ModelSignal } from '@angular/core';\nimport { TUI_IS_MOBILE } from '@taiga-ui/cdk';\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 host: { ngSkipHydration: 'true' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPreviewSampleComponent {\n /**\n * Индекс элемента в галерее.\n */\n public readonly index: ModelSignal<number> = model<number>(0);\n\n /**\n * Длительность переключения карусели.\n */\n public duration: InputSignal<number> = input<number>(5000);\n\n /**\n * Объект данных товара.\n */\n public sample: InputSignal<ScIPreviewSample> = input.required<ScIPreviewSample>();\n\n /**\n * Признак, что необходимо отображать переключатели на карусели.\n */\n public isShowCarouselSwitches: InputSignal<boolean> = input(!inject(TUI_IS_MOBILE));\n\n /**\n * Признак, что при горизонтальном отображении компонент должен быть развёрнут.\n */\n public isReverse: InputSignal<boolean> = input(false);\n}\n","<div\n *ngIf=\"sample() as sample\"\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 @let isShownSwitches = sample.items && sample.items.length > 1;\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 [round]=\"false\"\n *ngFor=\"let item of sample.items; let itemIndex = index\"\n (tuiHoveredChange)=\"index.set(itemIndex)\"\n [class.active]=\"index() === itemIndex\"\n >\n <picture>\n <source\n type=\"image/webp\"\n [srcset]=\"item.buttonImageUrl.webp\"\n />\n <img\n [src]=\"item.buttonImageUrl.defaultFormat\"\n [alt]=\"item.buttonImageUrl.alt ?? 'Кнопка переключателя цвета ' + item.color\"\n />\n </picture>\n </tui-avatar>\n </div>\n <div\n *ngIf=\"sample.items as items\"\n class=\"text-body-m-bold\"\n >\n {{ 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 <a\n *ngFor=\"let action of sample.items[index()].actions\"\n tuiButton\n [attr.href]=\"action.href\"\n (click)=\"action.handler ? $event.preventDefault() : {}; action.handler?.()\"\n [iconStart]=\"action.icon\"\n appearance=\"secondary\"\n >\n {{ action.label }}\n </a>\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)=\"carousel.prev()\"\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 #carousel\n [(index)]=\"index\"\n [duration]=\"duration()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n <ng-container *ngFor=\"let item of sample.items; let itemIndex = index\">\n <picture *tuiItem>\n <source\n type=\"image/webp\"\n [srcset]=\"item.carouselItemImage.webp\"\n />\n <img\n [src]=\"item.carouselItemImage.defaultFormat\"\n [alt]=\"item.carouselItemImage.alt ?? 'Образец товара ' + sample.title + ' в цвете ' + item.color + itemIndex\"\n class=\"h-[19em] w-full object-cover object-right md:h-96 lg:h-[28rem]\"\n />\n </picture>\n </ng-container>\n </tui-carousel>\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches()\"\n tuiIconButton\n (click)=\"carousel.next()\"\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 { NgFor } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, InputSignal, output, OutputEmitterRef, Signal, signal, WritableSignal } from '@angular/core';\nimport { TUI_IS_MOBILE, TuiHovered } from '@taiga-ui/cdk';\nimport { TuiAppearance, TuiButton, TuiIcon, TuiSurface } from '@taiga-ui/core';\nimport { TuiBadge, TuiCarousel, TuiChip } from '@taiga-ui/kit';\nimport { TuiCardLarge, TuiHeader } from '@taiga-ui/layout';\n\nimport { ScPreviewMosquitoConfig } from '../interfaces';\n\n/**\n * Компонент представления москитной сетки.\n */\n@Component({\n standalone: true,\n selector: 'sc-preview-samples-mosquito',\n templateUrl: './sc-preview-samples-mosquito.component.html',\n styleUrl: './sc-preview-samples-mosquito.component.scss',\n imports: [TuiCarousel, TuiButton, TuiIcon, TuiChip, TuiBadge, NgFor, TuiAppearance, TuiHovered, TuiCardLarge, TuiHeader, TuiIcon, TuiSurface],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPreviewSamplesMosquitoComponent {\n /**\n * Выбранный индекс цвета профиля.\n */\n public readonly colorIndex: WritableSignal<number> = signal<number>(0);\n\n /**\n * Выбранный индекс типа сетки.\n */\n public readonly netTypeIndex: WritableSignal<number> = signal<number>(0);\n\n /**\n * Выбранный тип сетки.\n */\n public readonly netTypeIndexSelected: Signal<string> = computed(() => this.config().netType[this.netTypeIndex()]);\n\n /**\n * Выбранный цвет профиля.\n */\n public readonly colorIndexSelected: Signal<string> = computed(() => this.config().color[this.colorIndex()]);\n\n /**\n * Конфигурация для отображения образца москитной сетки.\n */\n public readonly config: InputSignal<ScPreviewMosquitoConfig> = input.required<ScPreviewMosquitoConfig>();\n\n /**\n * Событие, которое происходит при нажатии на кнопку \"Назад в Конфигуратор\".\n */\n public readonly openConfiguratorClick: OutputEmitterRef<void> = output();\n\n /**\n * Ссылка на страницу конфигуратора.\n */\n public readonly configuratorPageUrl: InputSignal<string | undefined> = input<string | undefined>();\n\n /**\n * Событие, которое происходит при нажатии на кнопку \"Консультация\".\n */\n public readonly openConsultationClick: OutputEmitterRef<void> = output();\n\n /**\n * Интервал автоматического прочитывания списка товаров в миллисекундах.\n */\n public readonly autoSlideIntervale: InputSignal<number> = input<number>(0);\n\n /**\n * Признак, что необходимо отображать переключатели на карусели.\n */\n protected readonly isShowCarouselSwitches: InputSignal<boolean> = input(!inject(TUI_IS_MOBILE));\n}\n","@let descriptions = config().descriptions;\n@let colors = config().color;\n@let netTypes = config().netType;\n\n<!-- Основной контейнер с сеткой. -->\n<div class=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <!-- Левая колонка с информацией. -->\n <div class=\"flex flex-col gap-4\">\n <!-- Кнопки выбора типа сетки. -->\n <div class=\"flex flex-wrap gap-4\">\n <button\n *ngFor=\"let item of netTypes; let itemIndex = index\"\n tuiCardLarge\n tuiHeader\n tuiSurface=\"floating\"\n type=\"button\"\n (click)=\"netTypeIndex.set(itemIndex)\"\n [class.active]=\"netTypeIndex() === itemIndex\"\n class=\"h-12 !items-center gap-2 !rounded-xl !px-4 !py-0\"\n >\n <img\n [src]=\"config().icons[item]\"\n [alt]=\"'Кнопка переключателя типа сетки ' + descriptions['netType'][item]\"\n class=\"size-8\"\n />\n <div>{{ descriptions['netType'][item] }}</div>\n </button>\n </div>\n\n <!-- Описание выбранного типа сетки. -->\n <div class=\"text-body-l-bold\">Сетка {{ descriptions['netType'][netTypeIndexSelected()] }}</div>\n {{ config().subtitles[netTypeIndexSelected()] }}\n\n <!-- Информационные бейджи. -->\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ colors.length }}\n </tui-badge>\n - колличество цветов профиля\n </div>\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ netTypes.length }}\n </tui-badge>\n - колличество типов сеток\n </div>\n\n <!-- Размеры сеток. -->\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-height-arrow\" />\n Высота сеток от {{ config().minHeight }} до {{ config().maxHeights[netTypeIndexSelected()] }} мм\n </div>\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-width-arrow\" />\n Ширина сеток от {{ config().minWidth }} до {{ config().maxWidths[netTypeIndexSelected()] }} мм\n </div>\n\n <!-- Теги характеристик. -->\n <div class=\"flex flex-wrap gap-2\">\n <button\n *ngFor=\"let tag of config().tags[netTypeIndexSelected()]\"\n tuiChip\n appearance=\"neutral\"\n >\n {{ tag }}\n </button>\n </div>\n\n <!-- Выбор цвета профиля. -->\n <div class=\"flex gap-4\">\n <picture\n *ngFor=\"let image of config().color; let itemIndex = index\"\n class=\"size-11 rounded-xl\"\n (tuiHoveredChange)=\"colorIndex.set(itemIndex)\"\n >\n @let color = config().color[colorIndex()];\n <source\n type=\"image/webp\"\n [srcset]=\"config().colorsIcons[image].webp\"\n />\n <img\n [class.active]=\"colorIndex() === itemIndex\"\n [src]=\"config().colorsIcons[image].defaultFormat\"\n [alt]=\"config().colorsIcons[image].alt ?? 'Кнопка переключателя цвета ' + descriptions['color'][color]\"\n class=\"size-11 rounded-xl\"\n />\n </picture>\n </div>\n\n <!-- Кнопки действий. -->\n <div class=\"flex gap-2\">\n <a\n tuiButton\n [attr.href]=\"configuratorPageUrl()\"\n (click)=\"$event.preventDefault(); openConfiguratorClick.emit()\"\n iconStart=\"@tui.sliders-horizontal\"\n >\n Сделать расчет\n </a>\n\n <button\n tuiButton\n (click)=\"openConsultationClick.emit()\"\n iconStart=\"@tui.messages-square\"\n >\n Консультация\n </button>\n </div>\n </div>\n\n <!-- Правая колонка с каруселью изображений. -->\n <div class=\"relative -order-1 h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:order-2 lg:h-[28rem]\">\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n (click)=\"carousel.prev()\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n @let imagePreviews = config().imagePreviewsByColor[colorIndexSelected()];\n\n <tui-carousel\n #carousel\n [duration]=\"autoSlideIntervale()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n @for (item of imagePreviews; track $index) {\n <picture *tuiItem>\n <source\n type=\"image/webp\"\n [srcset]=\"item.webp\"\n />\n <img\n [alt]=\"item.alt ?? 'Москитная сетка в цвете ' + descriptions['color'][colorIndexSelected()] + $index\"\n [src]=\"item.defaultFormat\"\n class=\"h-[19em] w-full object-cover object-center md:h-96 lg:h-[28rem]\"\n />\n </picture>\n }\n </tui-carousel>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n (click)=\"carousel.next()\"\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 class-methods-use-this,@typescript-eslint/unbound-method */\n\nimport { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, InputSignal, output, OutputEmitterRef, Signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport {\n ScConvertersService,\n ScFeedbackForms,\n ScFeedbackService,\n ScIFeedbackMessage,\n ScISuggestionType,\n ScPhoneService,\n ScUploadedFile,\n ScUser,\n ScUserService,\n} from '@snabcentr/client-core';\nimport { TuiLooseUnion, tuiPure, TuiValidationError } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDialogContext, TuiError, TuiLabel, TuiLink, TuiTextfield, TuiTitle } from '@taiga-ui/core';\nimport { TuiInputPhoneInternational } from '@taiga-ui/experimental';\nimport { TuiCountryIsoCode } from '@taiga-ui/i18n';\nimport { TuiButtonLoading, TuiCheckbox, TuiFieldErrorPipe, TuiFileLike, TuiFiles, tuiFilesAccepted, TuiSortCountriesPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule, TuiTextareaModule } from '@taiga-ui/legacy';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { getCountries } from 'libphonenumber-js';\nimport { RecaptchaComponent, 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';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\nimport { ScFeedbackFormConfig, ScFeedbackFormFieldType } from '../interfaces';\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 TuiCheckbox,\n TuiTitle,\n TuiFiles,\n TuiInputPhoneInternational,\n ...TuiTextfield,\n TuiSortCountriesPipe,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFeedbackFormComponent {\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context: TuiDialogContext<void, { onClickOfferHandler: () => void } & ScFeedbackFormConfig> | null = inject<\n TuiDialogContext<void, { onClickOfferHandler: () => void } & ScFeedbackFormConfig>\n >(POLYMORPHEUS_CONTEXT, { optional: true });\n\n /**\n * Символьное обозначение (slug) формы.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n public readonly slugInput: InputSignal<TuiLooseUnion<ScFeedbackForms>> = input<TuiLooseUnion<ScFeedbackForms>>('common', { alias: 'slug' });\n\n /**\n * Список полей, доступных в данной форме.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n public readonly fieldsInput: InputSignal<ScFeedbackFormFieldType[]> = input<ScFeedbackFormFieldType[]>(['name', 'email', 'phone', 'message', 'files'], { alias: 'fields' });\n\n /**\n * Символьное обозначение (slug) формы.\n */\n protected readonly slug: Signal<TuiLooseUnion<ScFeedbackForms>> = computed(() => this.context?.data.slug ?? this.slugInput());\n\n /**\n * Список полей, доступных в данной форме.\n */\n protected readonly fields: Signal<ScFeedbackFormFieldType[]> = computed(() => this.context?.data.fields ?? this.fieldsInput());\n\n /**\n * Событие нажатия на кнопку договора оферты.\n */\n public readonly clickOffer: OutputEmitterRef<void> = output();\n\n /**\n * Событие успешной отправки формы.\n */\n public readonly sendSuccess: 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\n const fields = this.fields();\n this.form.patchValue({\n name: fields.includes('name') ? user.name : null,\n phone: fields.includes('phone') ? user.contacts.phone.value : null,\n email: fields.includes('email') ? user.contacts.email.value : null,\n });\n }\n })\n );\n\n /**\n * Поле ввода для recaptcha.\n */\n protected readonly recaptchaControl: FormControl<string | null> = new FormControl<string | null>(null, Validators.required);\n\n /**\n * Группа полей ввода для формы «Пожелания и предложения по улучшению сайта».\n */\n protected readonly form = new FormGroup({\n name: new FormControl<string | null>(null),\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>([]),\n isShouldUseMessenger: new FormControl<boolean | null>(false),\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 tap((value: ScIFeedbackMessage) => {\n if (value.phone && !ScPhoneService.isValidPhoneNumberForMessenger(value.phone)) {\n // eslint-disable-next-line no-param-reassign\n delete value.isShouldUseMessenger;\n }\n }),\n switchMap((value) =>\n this.feedbackService.sendFeedback(this.slug() as ScFeedbackForms, this.convertersService.removeNullRecursive(value)).pipe(\n tap(() => {\n if (this.context) {\n this.context.completeWith();\n } else {\n this.resetForm();\n this.onRemoveAll();\n this.sendSuccess.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 * Список стран.\n */\n protected readonly countries: readonly TuiCountryIsoCode[] = getCountries();\n\n /**\n * Инициализирует экземпляр класса {@link ScFeedbackFormComponent}.\n */\n public constructor() {\n /**\n * Это решение ошибки #4940, было @see [предложено](https://github.com/DethAriel/ng-recaptcha/issues/123#issuecomment-426112101) автором {@link RecaptchaComponent}.\n */\n RecaptchaComponent.prototype.ngOnDestroy = function (): void {\n // eslint-disable-next-line @typescript-eslint/dot-notation\n if (this['subscription']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/dot-notation\n this['subscription'].unsubscribe();\n }\n };\n\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 this.clearAllValidators();\n this.setAllValidators(this.fields());\n });\n }\n\n /**\n * Удаляет валидацию со всех полей ввода.\n */\n private clearAllValidators(): void {\n Object.keys(this.form.controls).forEach((key) => {\n const control = this.form.get(key);\n\n if (control && control !== this.recaptchaControl) {\n control.clearValidators();\n control.updateValueAndValidity();\n }\n });\n }\n\n /**\n * Устанавливает валидацию со для указанных полей ввода.\n *\n * @param fields Поля, для которых нужно установить валидацию.\n */\n private setAllValidators(fields: ScFeedbackFormFieldType[]): void {\n fields.forEach((filed: ScFeedbackFormFieldType) => {\n // eslint-disable-next-line default-case\n switch (filed) {\n case 'name':\n this.form.get('name')?.setValidators([Validators.required, Validators.minLength(3)]);\n break;\n case 'phone':\n this.form.get('phone')?.setValidators([Validators.required, phoneValidator()]);\n break;\n case 'email':\n this.form.get('email')?.setValidators([Validators.required, Validators.email]);\n break;\n case 'message':\n this.form.get('message')?.setValidators([Validators.required]);\n break;\n case 'files':\n this.form.get('files')?.setValidators([Validators.required, this.maxFilesLength(5)]);\n break;\n }\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 protected onRemoveAll(): void {\n this.rejected = [];\n this.loadedFile.setValue([]);\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 isShouldUseMessenger: false,\n });\n }\n\n /**\n * Проверяет, что номер телефона подходит для использования в мессенджерах.\n *\n * @param value Номер телефона, который необходимо проверить.\n * @returns Признак того, что номер телефона подходит для мессенджеров.\n */\n @tuiPure\n protected isValidPhoneNumberForMessenger(value: string): boolean {\n return ScPhoneService.isValidPhoneNumberForMessenger(value);\n }\n}\n","@let fieldsList = fields();\n<form\n *ngIf=\"fieldsList.length > 0\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <!-- ФИО -->\n <label\n *ngIf=\"fieldsList.includes('name')\"\n tuiLabel\n >\n ФИО\n <tui-input formControlName=\"name\"> Укажите Ваши Ф.И.О. </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Телефон -->\n @if (fieldsList.includes('phone')) {\n <label tuiLabel>\n Телефон\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <label\n *ngIf=\"fieldsList.includes('isShouldUseMessenger') && form.controls.phone.value && isValidPhoneNumberForMessenger(form.controls.phone.value)\"\n tuiLabel\n >\n <input\n formControlName=\"isShouldUseMessenger\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span tuiTitle> Написать в мессенджерах, а не звонить </span>\n </label>\n }\n <!-- Адрес электронной почты -->\n <label\n *ngIf=\"fieldsList.includes('email')\"\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=\"fieldsList.includes('message')\"\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=\"fieldsList.includes('files')\"\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 flex-wrap items-center 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=\"grow basis-60 text-body-s\">\n Нажимая на кнопку, вы соглашаетесь с\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); clickOffer.emit()\"\n >\n Политикой конфиденциальности\n </button>\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=\"!size-20 !text-5xl text-tui-success-fill\"\n />\n <p class=\"text-h5\">Спасибо!</p>\n <p\n [innerHTML]=\"context?.data?.subTitle ?? 'Ваши данные успешно отправлены. Мы свяжемся с вами в ближайшее время.'\"\n class=\"mx-2 text-body-m\"\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 [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 { takeUntilDestroyed } from '@angular/core/rxjs-interop';\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 } from '../../providers';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\n\n/**\n * Диалоговое окно изменения данных пользователя.\n */\n@Component({\n selector: 'sc-update-user-info-dialog',\n templateUrl: './sc-update-user-info-dialog.component.html',\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, phoneValidator()]),\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$\n .pipe(\n filter((user) => !user.isGuest),\n takeUntilDestroyed()\n )\n .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 } from '../../providers/sc-user-providers';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\n\n/**\n * Диалоговое окно подтверждения номера телефона.\n */\n@Component({\n selector: 'sc-user-phone-approve-dialog',\n templateUrl: './sc-user-phone-approve-dialog.component.html',\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, phoneValidator()]),\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$\n .pipe(\n filter((user) => !user.isGuest),\n takeUntilDestroyed()\n )\n .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 [shouldBeBusy]=\"true\"\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 {\n ScContactsService,\n ScContragent,\n ScIBankAccount,\n ScICityWithRegionAndCountry,\n ScIContact,\n ScIDeliveryAddress,\n ScUser,\n ScUserService,\n ScVerificationService,\n} from '@snabcentr/client-core';\nimport { TUI_TRUE_HANDLER, tuiIsFalsy, tuiIsPresent } 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_CITY_INFO, SC_USER_INFO } from '../../providers';\n\n/**\n * Компонент контента профиля пользователя в виде раскрывающихся смысловых блоков.\n */\n@Component({\n selector: 'sc-profile-accordions-content',\n templateUrl: './sc-profile-accordions-content.component.html',\n animations: [tuiFadeIn],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScProfileAccordionsContentComponent {\n /**\n * Сервис данных о пользователе.\n */\n private readonly userService = inject(ScUserService);\n\n /**\n * Сервис для работы с контактными лицами..\n */\n private readonly contactsService = inject(ScContactsService);\n\n /**\n * Сервис верификации.\n */\n private readonly verificationService = inject(ScVerificationService);\n\n /**\n * Поток данных о текущем пользователе.\n */\n protected readonly user$ = inject<Observable<ScUser>>(SC_USER_INFO);\n\n /**\n * Поток данных о текущем городе пользователя.\n */\n protected readonly userCity$ = inject<Observable<ScICityWithRegionAndCountry>>(SC_USER_CITY_INFO);\n\n /**\n * {@link FormControl} переключателя 'Я хочу получать рассылку'.\n */\n protected 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 protected readonly getNewsLoading$: Observable<boolean> = this.getNewsRequest$.pipe(map(tuiIsFalsy));\n\n /**\n * {@link Subject} события отправки сообщения для подтверждения адреса электронной почты.\n */\n protected 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 protected readonly approveEmailLoading$: Observable<boolean> = this.sendApproveEmailRequest$.pipe(map(tuiIsFalsy));\n\n /**\n * {@link Observable} изменения состояния признака, отправлено ли сообщение для подтверждения адреса электронной почты.\n */\n protected readonly isSendApproveEmail$: Observable<boolean> = this.sendApproveEmailRequest$.pipe(filter(tuiIsPresent));\n\n /**\n * {@link Observable} изменения списка контактных лиц пользователя.\n */\n protected readonly userContacts$ = this.contactsService.userContacts.item$;\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","<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 && (userCity$ | 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 './models';\nexport * from './services';\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":["AngularxQRCodeModule","i1","i2","i3","i4","i5","i6","i9","i10.ScManagerCardComponent","i5.ScVerificationPhoneCheckFormComponent","i6.ScSuggestionFieldComponent","i7","i8","i6.ScVerificationPhoneCheckFormComponent","i4.ScSignInFormByPhoneComponent","i5.ScSignInFormByEmailComponent","i9.ScSuggestionFieldComponent","i10","i10.ScSuggestionFieldComponent","i2.ScSuggestionFieldComponent","i8.ScVerificationPhoneCheckFormComponent","i9.ScAddressesSelectionFieldComponent","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","SC_PAGE_SIZE_OPTIONS","i2.ScNextInputFocusDirective","TuiAppearance","TuiWithAppearance","TuiIcons","TuiWithIcons","i5.ScFavoriteButtonComponent","i1.ScVerificationPhoneCheckFormComponent","i4.ScSuggestionFieldComponent","i5.ScHoverImageCarouselComponent","i6.CostWithDiscountComponent","i7.ScPriceWarehouseStockComponent","i8.ScFavoriteButtonComponent","i9.ScInputQuantityComponent","i8.ScSuggestionFieldComponent","i11.ScManagerCardComponent","i5.ScContactsAccordionComponent","i8.ScManagerCardComponent","i9.ScDeliveryAddressAccordionItemComponent","i2.TreeIconService","i1.TreeIconService","i6.TreeDirective","i7.TreeTopDirective","i8.ScFormatDatePipe","i2.ScFormatDatePipe","i5.ScPriceWarehouseStockComponent","i7.ScAddressesSelectionFieldComponent","i4.ScTerminalLinkDirective","i5.ScTelLinkDirective","i6.ScEmailLinkDirective","i7.ScPhoneFormatPipe","i2.ScTelLinkDirective","i3.ScEmailLinkDirective","i4.ScPhoneFormatPipe","i2.ScResetUserPasswordComponent","i5.ScContragentsAccordionComponent","i6.ScDeliveryAddressAccordionComponent","i10.ScContactsAccordionComponent","i11.ScTerminalLinkDirective","i12.ScTelLinkDirective","i13.ScEmailLinkDirective","i14","i15.ScPhoneFormatPipe","i1.ScTelLinkDirective","i2.ScEmailLinkDirective","i3.ScPhoneFormatPipe"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"snabcentr-client-ui.mjs","sources":["../../../projects/client-ui/providers/sc-help-notification-close.ts","../../../projects/client-ui/providers/sc-help-notification-limit.ts","../../../projects/client-ui/services/sc-help-notification.service.ts","../../../projects/client-ui/validators/sc-phone-validator.ts","../../../projects/client-ui/contacts/tokens/sc-show-help-notification-in-phone-input.token.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/providers/sc-verification-code-timeout.ts","../../../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/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/providers/date-value-transformer/sc-date-value-transformer-with-start-time.ts","../../../projects/client-ui/providers/date-value-transformer/sc-date-value-transformer-with-end-time.ts","../../../projects/client-ui/directives/sc-date-value-transformer.directive.ts","../../../projects/client-ui/directives/select-on-focusin/sc-select-on-focusin.directive.ts","../../../projects/client-ui/contacts/tokens/sc-manager-qr-handler.token.ts","../../../projects/client-ui/contacts/manager-card/sc-manager-card.component.ts","../../../projects/client-ui/contacts/manager-card/sc-manager-card.component.html","../../../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/providers/sc-allow-select-terminated.ts","../../../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/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.ts","../../../projects/client-ui/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.html","../../../projects/client-ui/auth/enums/auth-method.ts","../../../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/validators/sc-at-least-one-required-validator.ts","../../../projects/client-ui/providers/sc-country-ids.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/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/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/providers/sc-max-files-in-form-input.ts","../../../projects/client-ui/providers/sc-page-size-options.ts","../../../projects/client-ui/providers/sc-user-providers.ts","../../../projects/client-ui/providers/sc-date-formatter.ts","../../../projects/client-ui/providers/sc-date-value-transformer.ts","../../../projects/client-ui/providers/sc-notify-when-in-stock-required-fields.ts","../../../projects/client-ui/pipes/sc-format-date.ts","../../../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/hover-image-carousel/sc-hover-image-carousel.component.ts","../../../projects/client-ui/catalog/hover-image-carousel/sc-hover-image-carousel.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/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/cart/cart-item/sc-cart-item.component.ts","../../../projects/client-ui/cart/cart-item/sc-cart-item.component.html","../../../projects/client-ui/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.ts","../../../projects/client-ui/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.html","../../../projects/client-ui/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.ts","../../../projects/client-ui/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.html","../../../projects/client-ui/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.ts","../../../projects/client-ui/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.html","../../../projects/client-ui/catalog/download-price-list/sc-download-price-list.component.ts","../../../projects/client-ui/catalog/download-price-list/sc-download-price-list.component.html","../../../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/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.ts","../../../projects/client-ui/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.html","../../../projects/client-ui/catalog/notify-when-in-stock-dialog/sc-product-in-all-warehouses.pipe.ts","../../../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/contacts/manager-card-push/sc-manager-card-push.component.ts","../../../projects/client-ui/contacts/manager-card-push/sc-manager-card-push.component.html","../../../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/pages/frequently-asked-questions/sc-frequently-asked-questions.component.ts","../../../projects/client-ui/pages/frequently-asked-questions/sc-frequently-asked-questions.component.html","../../../projects/client-ui/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.ts","../../../projects/client-ui/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.html","../../../projects/client-ui/pages/frequently-asked-questions/sc-page-size-options.ts","../../../projects/client-ui/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.ts","../../../projects/client-ui/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.html","../../../projects/client-ui/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.ts","../../../projects/client-ui/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.html","../../../projects/client-ui/pages/public-offer/sc-public-offer.component.ts","../../../projects/client-ui/pages/public-offer/sc-public-offer.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-preview-samples-mosquito/sc-preview-samples-mosquito.component.ts","../../../projects/client-ui/samples/sc-preview-samples-mosquito/sc-preview-samples-mosquito.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":["import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\nimport { EMPTY, Observable } from 'rxjs';\n\n/**\n * Поток для закрытия уведомлений помощи.\n */\nexport const SC_HELP_NOTIFICATION_CLOSE: InjectionToken<Observable<unknown>> = tuiCreateToken<Observable<unknown>>(EMPTY);\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен максимального количества отображаемых уведомлений с контактами для помощи.\n */\nexport const SC_HELP_NOTIFICATION_LIMIT: InjectionToken<number> = tuiCreateToken<number>(3);\n","import { inject, Injectable } from '@angular/core';\nimport { ScContactsService, ScIOrgContact, ScUserService } from '@snabcentr/client-core';\nimport { BehaviorSubject, Observable, of, shareReplay, switchMap } from 'rxjs';\n\nimport { SC_HELP_NOTIFICATION_CLOSE } from '../providers/sc-help-notification-close';\nimport { SC_HELP_NOTIFICATION_LIMIT } from '../providers/sc-help-notification-limit';\n\n/**\n * Сервис для отображения Push-уведомлений с контактами для помощи клиенту.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ScHelpNotificationService {\n /**\n * Список контактов для показа в уведомлении.\n */\n private readonly contactsShow: BehaviorSubject<ScIOrgContact[]> = new BehaviorSubject<ScIOrgContact[]>([]);\n\n /**\n * Сервис для работы с контактными лицами.\n */\n private readonly contactsService = inject(ScContactsService);\n\n /**\n * Максимальное количество отображаемых уведомлений.\n */\n private readonly notificationLimit = inject(SC_HELP_NOTIFICATION_LIMIT);\n\n /**\n * Поток для закрытия уведомлений.\n */\n private readonly close$ = inject(SC_HELP_NOTIFICATION_CLOSE);\n\n /**\n * Сервис для работы с пользователем.\n */\n private readonly userService = inject(ScUserService);\n\n /**\n * Список контактов для показа в уведомлении.\n */\n public readonly userHelpContacts = this.userService.getUserChange$().pipe(\n switchMap((user) => (user.isGuest ? of([]) : this.contactsService.getHelpContacts$({ phone: user.contacts.phone.value }))),\n shareReplay(1)\n );\n\n /**\n * Инициализирует экземпляр класса {@link ScHelpNotificationService}.\n */\n public constructor() {\n this.close$.subscribe(() => {\n this.closeAllHelpNotification();\n });\n }\n\n /**\n * Установить список контактов для показа в уведомлении.\n *\n * @param contacts Данные контактов.\n */\n public setShowContacts(...contacts: ScIOrgContact[]): void {\n this.contactsShow.next(contacts.slice(0, this.notificationLimit));\n }\n\n /**\n * Возвращает список менеджеров для показа в уведомлении.\n */\n public getContactsShow$(): Observable<ScIOrgContact[]> {\n return this.contactsShow.asObservable();\n }\n\n /**\n * Закрывает уведомление по номеру телефона.\n *\n * @param contact Контакт.\n */\n public closeHelpNotification(contact: ScIOrgContact): void {\n this.contactsShow.next(this.contactsShow.getValue().filter((c) => c.id !== contact.id));\n }\n\n /**\n * Закрывает все уведомления.\n */\n public closeAllHelpNotification(): void {\n this.contactsShow.next([]);\n }\n\n /**\n * Показать уведомление по номеру телефона.\n *\n * @param phone Номер телефона.\n */\n public helpNotificationByPhone(phone: string): void {\n this.contactsService.getHelpContacts$({ phone }).subscribe((contacts) => {\n this.setShowContacts(...contacts);\n });\n }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { isValidPhoneNumber } from 'libphonenumber-js/max';\n\n/**\n * Проверяет корректность введенного номера телефона.\n */\nexport function phoneValidator(): ValidatorFn {\n return (control: AbstractControl<string | null>): ValidationErrors | null => {\n if (control.value) {\n const isValid = isValidPhoneNumber(control.value);\n\n return isValid ? null : { phone: true };\n }\n\n return null;\n };\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { TUI_IS_MOBILE, tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\n\n/**\n * Токен признака, следует ли отображать уведомление помощи в поле ввода телефона.\n */\nexport const SC_SHOW_HELP_NOTIFICATION_IN_PHONE_INPUT: InjectionToken<boolean> = tuiCreateTokenFromFactory(() => inject(TUI_IS_MOBILE));\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","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен времени ожидания (в секундах) перед повторной отправкой кода подтверждения.\n */\nexport const SC_VERIFICATION_CODE_TIMEOUT: InjectionToken<number> = tuiCreateToken<number>(60);\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, signal, WritableSignal } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { SC_PATH_IMAGE_NOT_FOUND, ScAuthService, ScCartItem, ScIImage, ScImage, 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({\n host: { ngSkipHydration: 'true' },\n}) // Абстрактный класс имеет декоратор @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>(null, { 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 public readonly autoFocuseQuantityInput: WritableSignal<boolean> = signal(false);\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(): ScIImage {\n return this.product ? this.imageHelper.getImagePreview(this.product) : new ScImage(this.pathImageNotFound, `Товар не найден`);\n }\n\n /**\n * Возвращает массив превью-изображений товара.\n *\n * @param product Объект товара.\n */\n public getCardImagePreviewList(product: ScProduct): ScIImage[] {\n return this.imageHelper.getProductImagePreviewList(product, true);\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","/* 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","/* eslint-disable class-methods-use-this */\n\nimport { Injectable } from '@angular/core';\nimport { TuiDay, TuiValueTransformer } from '@taiga-ui/cdk';\n\nimport { From, To } from './sc-date-value-transformer-types';\n\n/**\n * Преобразователь даты формата \"YYYY-MM-DD 00:00:00\".\n */\n@Injectable()\nexport class DateValueTransformerWithStartTime extends TuiValueTransformer<From, To> {\n /**\n * Преобразует значение из {@link To} формата в {@link From}.\n *\n * @param controlValue Значение из формы поля ввода.\n */\n public fromControlValue(controlValue: To): From {\n if (controlValue === null || controlValue.length === 0) {\n return null;\n }\n\n return TuiDay.fromLocalNativeDate(new Date(controlValue));\n }\n\n /**\n * Преобразует значение из {@link From} формата в {@link To} в формат \"YYYY-MM-DD 00:00:00\".\n *\n * @param componentValue Значение из компонента поля ввода.\n */\n public toControlValue(componentValue: From): To {\n if (!componentValue) {\n return null;\n }\n\n return `${componentValue.toString('YMD', '-')} 00:00:00`;\n }\n}\n","/* eslint-disable class-methods-use-this */\n\nimport { Injectable } from '@angular/core';\n\nimport { From, To } from './sc-date-value-transformer-types';\nimport { DateValueTransformerWithStartTime } from './sc-date-value-transformer-with-start-time';\n\n/**\n * Преобразователь даты формата \"YYYY-MM-DD 23:59:59\".\n */\n@Injectable()\nexport class DateValueTransformerWithEndTime extends DateValueTransformerWithStartTime {\n /**\n * Преобразует значение из {@link From} формата в {@link To} в формат \"YYYY-MM-DD 23:59:59\".\n *\n * @param componentValue Значение из компонента поля ввода.\n */\n public override toControlValue(componentValue: From): To {\n if (!componentValue) {\n return null;\n }\n\n return `${componentValue.toString('YMD', '-')} 23:59:59`;\n }\n}\n","import { Directive } from '@angular/core';\nimport { TUI_DATE_VALUE_TRANSFORMER } from '@taiga-ui/kit';\n\nimport { DateValueTransformerWithEndTime } from '../providers/date-value-transformer';\n\n/**\n * Директива для преобразования даты в формат \"YYYY-MM-DD 23:59:59\".\n */\n@Directive({\n standalone: true,\n selector: 'tui-input-date[toFinishDateTime]',\n providers: [\n {\n provide: TUI_DATE_VALUE_TRANSFORMER,\n useClass: DateValueTransformerWithEndTime,\n },\n ],\n})\nexport class FinishDateTimeTransformerDirective {}\n","import { Directive } from '@angular/core';\n\n/**\n * Директива для обработки события фокуса поля ввода, для последующего выделения содержимого поля ввода.\n */\n@Directive({\n standalone: true,\n selector: 'tui-input-number, tui-input, tui-input-phone, tui-input-date, tui-input-password, input[tuiInputNumber]',\n host: {\n '(focusin)': 'onFocusIn($event.target)',\n },\n})\nexport class ScSelectOnFocusinDirective {\n /**\n * Слушатель и обработчик события `focusin`.\n *\n * @param target Целевой объект события `focusin`.\n */\n // eslint-disable-next-line class-methods-use-this\n protected onFocusIn(target: HTMLElement): void {\n if (target instanceof HTMLInputElement) {\n target.select();\n }\n }\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { ScIOrgContact, ScVCardService } from '@snabcentr/client-core';\nimport { tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\nimport { TuiDialogService } from '@taiga-ui/core';\nimport { PolymorpheusComponent } from '@taiga-ui/polymorpheus';\n\nimport { ScQRCodeDialogComponent } from '../../qrcode/qrcode-dialog/sc-qrcode-dialog.component';\n\n/**\n * Токен для обработчика QR кода менеджера.\n */\nexport const SC_MANAGER_QR_HANDLER: InjectionToken<undefined | ((contact: ScIOrgContact, description?: string) => void)> = tuiCreateTokenFromFactory(() => {\n const dialog = inject(TuiDialogService);\n const vCardService = inject(ScVCardService);\n\n return (contact: ScIOrgContact, description?: string) => {\n const qrdata = vCardService.createIndividualVCardStr(contact.name, contact.phone, contact.email, description);\n\n dialog\n .open(new PolymorpheusComponent(ScQRCodeDialogComponent), {\n size: 's',\n label: contact.name,\n data: { qrdata },\n })\n .subscribe();\n };\n});\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input, InputSignal } from '@angular/core';\nimport { ScIOrgContact } from '@snabcentr/client-core';\nimport { TuiAppearance, TuiButton, TuiFallbackSrcPipe, TuiIcon, TuiIcons, TuiInitialsPipe, TuiLink, TuiWithAppearance, TuiWithIcons } from '@taiga-ui/core';\nimport { TuiAvatar } from '@taiga-ui/kit';\n\nimport { ScLinks, ScTerminalLinkDirective } from '../../directives';\nimport { SC_MANAGER_QR_HANDLER } from '../tokens/sc-manager-qr-handler.token';\n\n/**\n * Компонент карточки менеджера.\n */\n@Component({\n standalone: true,\n selector: 'sc-manager-card',\n templateUrl: './sc-manager-card.component.html',\n imports: [\n NgIf,\n ScTerminalLinkDirective,\n TuiAppearance,\n TuiWithAppearance,\n TuiAvatar,\n TuiIcons,\n TuiWithIcons,\n TuiLink,\n AsyncPipe,\n ScLinks,\n TuiFallbackSrcPipe,\n TuiInitialsPipe,\n TuiButton,\n TuiIcon,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScManagerCardComponent {\n /**\n * Данные менеджера.\n */\n public readonly manager: InputSignal<ScIOrgContact> = input.required<ScIOrgContact>();\n\n /**\n * Объект описаний типов в {@link IOrgContact}.\n */\n protected readonly descriptions: Record<string, string> = {\n any: 'По любым вопросам',\n manager: 'Менеджер',\n operator: 'Оператор',\n retail: 'Розничный магазин',\n reclamation: 'По вопросам рекламации',\n finance: 'По финансовым вопросам',\n };\n\n /**\n * Токен для обработчика QR кода.\n */\n protected readonly handleQrClick?: (contact: ScIOrgContact, description?: string) => void = inject(SC_MANAGER_QR_HANDLER);\n}\n","<div class=\"flex gap-2\">\n @if (manager().photo) {\n <tui-avatar\n *ngIf=\"manager().photo\"\n [src]=\"manager().photo || '' | tuiFallbackSrc: (manager().name | tuiInitials) | async\"\n [round]=\"false\"\n size=\"l\"\n />\n } @else {\n <tui-avatar\n [src]=\"manager().name | tuiInitials\"\n [round]=\"false\"\n size=\"l\"\n />\n }\n <div class=\"flex grow flex-col gap-1\">\n <div class=\"flex\">\n <span class=\"text-body-l-bold\">{{ manager().name }}</span>\n <button\n *ngIf=\"handleQrClick\"\n tuiIconButton\n type=\"button\"\n appearance=\"flat\"\n size=\"s\"\n (click)=\"handleQrClick(manager(), descriptions[manager().type])\"\n class=\"!ml-auto\"\n >\n <tui-icon\n icon=\"@tui.scan-qr-code\"\n class=\"!text-2xl\"\n />\n </button>\n </div>\n <span *ngIf=\"descriptions[manager().type] as description\">{{ description }}</span>\n <a\n tuiLink\n [pseudo]=\"true\"\n [scTelLink]=\"manager().phone\"\n linkLocation=\"manager-card\"\n href=\"tel:{{ manager().phone | scPhoneFormat }}\"\n iconStart=\"@tui.phone\"\n appearance=\"action-grayscale\"\n >\n {{ manager().phone | scPhoneFormat }}\n </a>\n <a\n tuiLink\n scEmailLink\n linkLocation=\"manager-card\"\n [pseudo]=\"true\"\n href=\"mailto:{{ manager().email }}\"\n iconStart=\"@tui.mail\"\n appearance=\"action-grayscale\"\n >\n {{ manager().email }}\n </a>\n </div>\n</div>\n","/* eslint-disable no-underscore-dangle,lodash/prefer-constant */\n\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, inject, Input, input, InputSignal, model, ModelSignal, OnInit, output, OutputEmitterRef, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, FormGroupDirective } from '@angular/forms';\nimport { MaskitoOptions } from '@maskito/core';\nimport { ScIOrgContact, ScVerificationService } from '@snabcentr/client-core';\nimport { tuiControlValue } from '@taiga-ui/cdk';\nimport type { TuiCountryIsoCode } from '@taiga-ui/i18n';\nimport { getCountries } from 'libphonenumber-js';\nimport { isNil } from 'lodash-es';\nimport {\n catchError,\n distinctUntilChanged,\n endWith,\n filter,\n finalize,\n map,\n Observable,\n of,\n scan,\n share,\n shareReplay,\n startWith,\n Subject,\n switchMap,\n takeWhile,\n tap,\n timer,\n} from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { SC_SHOW_HELP_NOTIFICATION_IN_PHONE_INPUT } from '../../contacts/tokens/sc-show-help-notification-in-phone-input.token';\nimport { scPhoneVerificationCodeMask } from '../../masks';\nimport { SC_VERIFICATION_CODE_TIMEOUT } from '../../providers/sc-verification-code-timeout';\nimport { ScHelpNotificationService } from '../../services';\n\n/**\n * Компонент формы проверки телефона и получения кода подтверждения.\n */\n@Component({\n selector: 'sc-verification-phone-check-form',\n templateUrl: './sc-verification-phone-check-form.component.html',\n host: { ngSkipHydration: 'true' },\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 protected readonly verificationService = inject(ScVerificationService);\n\n /**\n * Директива c `FormGroup` из DOM.\n */\n protected readonly formGroupDirective = inject(FormGroupDirective, { optional: true });\n\n /**\n * HTTP-клиент.\n */\n protected readonly http = inject(HttpClient);\n\n /**\n * Признак, что поле ввода телефона только для чтения.\n */\n public readonly readOnly: InputSignal<boolean> = input(false);\n\n /**\n * Признак, что поле ввода телефона псевдо-невалидное.\n */\n public readonly pseudoInvalid: InputSignal<boolean> = input(false);\n\n /**\n * Признак, что поле ввода телефона и кода подтверждения обязательные.\n */\n public readonly required: InputSignal<boolean> = input(false);\n\n /**\n * Текст подсказки.\n */\n public readonly subtitle: InputSignal<string> = input('');\n\n /**\n * Признак, следует ли телефону быть в системе. От этого признака зависит, в каких случаях выдавать ошибку при проверке занятости телефона.\n */\n public readonly shouldBeBusy: InputSignal<boolean | undefined> = input<boolean | undefined>();\n\n /**\n * Признак, следует ли проверять, подтверждён ли телефон в системе. При `true` будет вызывать ошибку при наличии телефона в системе без подтверждения.\n */\n public readonly shouldBeConfirmed: InputSignal<boolean | undefined> = input<boolean | undefined>();\n\n /**\n * Список стран.\n */\n protected readonly countries: readonly TuiCountryIsoCode[] = getCountries();\n\n /**\n * Сервис для отображения Push-уведомлений с контактами для помощи клиенту.\n */\n protected readonly helpNotificationService: ScHelpNotificationService = inject(ScHelpNotificationService);\n\n /**\n * Список контактов для отправки push-уведомлений.\n */\n protected readonly pushContacts: Signal<ScIOrgContact[] | undefined> = toSignal(this.helpNotificationService.getContactsShow$());\n\n /**\n * Наличие кода подтверждения у пользователя.\n */\n public readonly haveCode: ModelSignal<boolean> = model(false);\n\n /**\n * {@link Observable} запроса проверки номера телефона.\n */\n public phoneCheck$?: Observable<boolean | null>;\n\n /**\n * {@link OutputEmitter} события изменения признака занятости телефона.\n */\n public readonly isBusyChange: OutputEmitterRef<boolean | null> = output<boolean | null>();\n\n /**\n * {@link OutputEmitter} события изменения признака подтверждения телефона.\n */\n public readonly isConfirmedChange: OutputEmitterRef<boolean | null> = output<boolean | null>();\n\n /**\n * {@link Subject} события отправки кода подтверждения.\n */\n protected readonly onSendCode: Subject<void> = new Subject<void>();\n\n /**\n * Таймаут отправки кода подтверждения.\n */\n protected readonly codeTimeout: number = inject(SC_VERIFICATION_CODE_TIMEOUT);\n\n /**\n * {@link Observable} запроса данных получения кода подтверждения.\n */\n protected 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(this.codeTimeout);\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 shareReplay({ refCount: true, bufferSize: 1 })\n )\n ),\n startWith(false),\n share()\n );\n\n /**\n * Маска поля ввода кода для подтверждения.\n */\n protected readonly verificationCodeMask: MaskitoOptions = scPhoneVerificationCodeMask;\n\n /**\n * {@link Subject} события запуска/остановки таймера.\n */\n protected readonly reloadTimer$: Subject<number> = new Subject<number>();\n\n /**\n * {@link Observable} Таймера.\n *\n * TODO: Вынести таймер в отдельную директиву TASK:[#9260].\n */\n protected 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 protected readonly showHelpNotification = inject(SC_SHOW_HELP_NOTIFICATION_IN_PHONE_INPUT);\n\n /**\n * Признак, следует ли отображать функционал кода подтверждения.\n */\n private _showCodeFields: boolean = true;\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 this.isBusyChange.emit(null);\n this.isConfirmedChange.emit(null);\n this.helpNotificationService.closeAllHelpNotification();\n\n if (this.form.controls.verificationCode.value) {\n this.form.controls.verificationCode.setValue(null);\n }\n }),\n switchMap((value) => {\n if (this.phoneControl.valid && !!value) {\n return this.verificationService.getPhoneCheck$(value).pipe(\n // eslint-disable-next-line sonarjs/cognitive-complexity\n map((result) => {\n if (this.shouldBeBusy() === undefined && !isNil(this.shouldBeConfirmed()) && result.isConfirmed !== null) {\n this.isBusyChange.emit(result.isBusy);\n\n if (!isNil(result.isConfirmed)) {\n this.isConfirmedChange.emit(result.isConfirmed);\n\n return this.shouldBeConfirmed() === result.isConfirmed;\n }\n\n return true;\n }\n\n if (this.shouldBeBusy() !== undefined && 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 tap((check) => {\n if (!check) {\n this.helpNotificationService.helpNotificationByPhone(value);\n }\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 protected setHaveCode(haveCode: boolean): void {\n this.haveCode.set(haveCode);\n }\n\n /**\n * Закрытие уведомления.\n */\n protected closeNotification(): void {\n this.helpNotificationService.closeAllHelpNotification();\n }\n}\n","@let phoneCheck = phoneCheck$ | async;\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-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [invalid]=\"pseudoInvalid() || null\"\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <p\n *ngIf=\"subtitle()\"\n class=\"text-body-s text-tui-text-tertiary\"\n >\n {{ subtitle() }}\n </p>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n @if (showHelpNotification && pushContacts()) {\n @for (manager of pushContacts(); track manager.id) {\n <tui-push\n type=\"Свяжитесь с нами для решения возникших вопросов\"\n (close)=\"closeNotification()\"\n class=\"!w-auto\"\n >\n <tui-icon icon=\"@tui.message-square\" />\n <sc-manager-card [manager]=\"manager\" />\n </tui-push>\n }\n }\n </label>\n\n <ng-container *ngIf=\"showCodeFields && form.enabled && phoneCheck\">\n <label\n *ngIf=\"!loadingApproveCode && haveCode()\"\n tuiLabel\n >\n Код из СМС\n <tui-input\n formControlName=\"verificationCode\"\n [required]=\"required() || showCodeFields\"\n >\n Код из СМС\n <input\n tuiAutoFocus\n tuiTextfieldLegacy\n [maskito]=\"verificationCodeMask\"\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"verificationCode\"\n [error]=\"[] | tuiFieldError | async\"\n />\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 || 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 || 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 >\n (через {{ timer }})\n </ng-container>\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 && phoneControl.valid\"\n class=\"size-4\"\n />\n</ng-template>\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен признака, что разрешено выбирать записи ликвидированных организаций.\n */\nexport const SC_ALLOW_SELECT_TERMINATED: InjectionToken<boolean> = tuiCreateToken<boolean>(false);\n","/* eslint-disable class-methods-use-this */\n\nimport { 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, ScISuggestionOrganization, 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';\nimport { SC_ALLOW_SELECT_TERMINATED } from '../../providers/sc-allow-select-terminated';\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 * Признак, что разрешено выбирать записи ликвидированных организаций.\n */\n private readonly allowSelectTerminated: boolean = inject(SC_ALLOW_SELECT_TERMINATED);\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 /**\n * Возвращает признак, что элемент выпадающего списка подсказок отключён.\n *\n * @param suggestion Объект подсказки.\n */\n public isDisabledSuggestion(suggestion: ScSuggestion): boolean {\n switch (this.type) {\n case ScISuggestionType.fio:\n case ScISuggestionType.address:\n case ScISuggestionType.bank:\n case ScISuggestionType.email:\n return false;\n case ScISuggestionType.organization:\n if ('inn' in suggestion && !('bic' in suggestion)) {\n return !this.allowSelectTerminated && this.isOrgTerminated(suggestion);\n }\n break;\n default:\n return false;\n }\n\n return false;\n }\n\n /**\n * Проверяет прекращена ли деятельность указанной организации.\n *\n * @param suggestion Объект подсказки по организации.\n */\n public isOrgTerminated(suggestion: ScISuggestionOrganization): boolean {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(suggestion.rawData?.['state']?.status === 'LIQUIDATED');\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 [disabled]=\"isDisabledSuggestion(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-1 text-tui-text-02\">инн: {{ option.inn }}</span>\n <span\n *ngIf=\"isOrgTerminated(option)\"\n class=\"text-tui-negative\"\n >\n Ликвидировано\n </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","/* eslint-disable @typescript-eslint/no-explicit-any,no-param-reassign,@typescript-eslint/unbound-method */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, inject, OnInit, output, OutputEmitterRef, OutputRef, Signal, signal } from '@angular/core';\nimport { outputFromObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n IAuthToken,\n ScAuthService,\n ScConvertersService,\n ScIOrgContact,\n ScISimpleUserOnDataCreate,\n ScISuggestionType,\n ScUser,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n ScUserService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { tuiDropdownOptionsProvider } from '@taiga-ui/core';\nimport { catchError, filter, map, of, share, startWith, Subject, switchMap } from 'rxjs';\n\nimport { ScHelpNotificationService } from '../../services';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\nimport { ApiErrorResponse } from '../interfaces/api-error-response';\n\n/**\n * Компонент упрощенной регистрации.\n */\n@Component({\n selector: 'sc-simple-sign-up-form',\n templateUrl: './sc-simple-sign-up-form.component.html',\n providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScSimpleSignUpFormComponent implements OnInit {\n /**\n * Сервис данных о пользователе.\n */\n private readonly userService = inject(ScUserService);\n\n /**\n * Сервис аутентификации.\n */\n private readonly authService = inject(ScAuthService);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService = inject(ScConvertersService);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Группа полей ввода для формы регистрации.\n */\n protected 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, phoneValidator()]),\n verificationCode: new FormControl<string | null>(null, [Validators.required, Validators.minLength(6)]),\n getNews: new FormControl<boolean>(false),\n acceptRules: new FormControl<boolean>(false, Validators.requiredTrue),\n contragent: new FormGroup<any>({}),\n });\n\n /**\n * Признак, следует ли отображать функционал кода подтверждения.\n */\n protected readonly showCodeFields = signal(false);\n\n /**\n * Признак, занят ли телефон (существует ли пользователь с таким телефоном).\n */\n protected readonly isPhoneBusy = signal<boolean | null>(null);\n\n /**\n * Признак, нужно ли отображать дополнительные поля для регистрации.\n */\n protected readonly showAdditionalFields = signal(false);\n\n /**\n * Список контактов для отправки push-уведомлений.\n */\n protected readonly pushContacts: Signal<ScIOrgContact[] | undefined> = toSignal(inject(ScHelpNotificationService).getContactsShow$());\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 private readonly request$ = this.onSubmit$.pipe(\n map(() => this.form.value),\n filter((value): value is ScISimpleUserOnDataCreate => (this.isPhoneBusy() ? this.form.controls.verificationCode.valid : this.form.valid)),\n switchMap((value) => {\n if (this.isPhoneBusy()) {\n return this.authService.getSignIn$({ phone: value.phone, verificationCode: value.verificationCode }).pipe(\n catchError((error: unknown) => {\n this.handleError(error);\n\n return of({} as IAuthToken);\n }),\n startWith(null)\n );\n }\n\n this.createBaseContragent(value);\n value.isGeneratePassword = true;\n value.isUnknownCity = true;\n\n return this.userService.signUp$(this.convertersService.removeNullRecursive(value)).pipe(\n catchError((error: unknown) => {\n this.handleError(error);\n\n return of({} as IAuthToken);\n }),\n startWith(null)\n );\n }),\n share()\n );\n\n /**\n * Сигнал изменения состояния загрузки данных.\n */\n protected readonly loading: Signal<boolean> = toSignal(this.request$.pipe(map(tuiIsFalsy)), { initialValue: false });\n\n /**\n * Сигнал события аутентификации после успешной регистрации.\n */\n public readonly successAuth: OutputRef<ScUser> = outputFromObservable(this.userService.getUserChange$().pipe(filter((user) => !user.isGuest)));\n\n /**\n * Сигнал нажатия на \"Договор оферты\".\n */\n public readonly clickOffer: OutputEmitterRef<void> = output();\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.simpleSsignUpShow,\n });\n }\n\n /**\n * Обрабатывает событие изменения занятости телефона.\n *\n * @param isBusy Признак занятости телефона.\n */\n protected onIsBusyChange(isBusy: boolean | null): void {\n this.isPhoneBusy.set(isBusy);\n this.showCodeFields.set(isBusy !== null);\n this.showAdditionalFields.set(!isBusy);\n }\n\n /**\n * Обрабатывает событие изменения подтверждения телефона.\n *\n * @param isConfirmed Признак подтверждения телефона.\n */\n protected onIsConfirmedChange(isConfirmed: boolean | null): void {\n if (isConfirmed === false) {\n this.form.controls.phone.setErrors({\n serverResponse: ['Номер телефона не подтверждён. Обратитесь к вашему персональному менеджеру или войдите с использованием e-mail и пароля.'],\n });\n\n this.form.controls.phone.markAsTouched();\n }\n }\n\n /**\n * Обрабатывает ошибки запросов.\n *\n * @param error Объект ошибки\n */\n private handleError(error: unknown): void {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in errors) {\n if (Object.hasOwn(errors, key)) {\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\n /**\n * Создаёт базового контрагента для клиента физического лица.\n *\n * @param formValue Значение формы при регистрации\n */\n private createBaseContragent(formValue: ScSimpleSignUpFormComponent['form']['value']): void {\n if (this.form.invalid) {\n return;\n }\n\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","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit$.next()\"\n class=\"flex flex-col gap-6\"\n>\n <div class=\"flex flex-col gap-3\">\n <sc-verification-phone-check-form\n (isBusyChange)=\"onIsBusyChange($event)\"\n (isConfirmedChange)=\"onIsConfirmedChange($event)\"\n [showCodeFields]=\"form.controls.phone.valid && form.controls.phone.valid\"\n [shouldBeConfirmed]=\"true\"\n />\n @if (isPhoneBusy() !== null && form.controls.phone.valid) {\n @if (!isPhoneBusy()) {\n <label tuiLabel>\n Ф.И.О.\n <tui-input formControlName=\"name\">\n Ф.И.О.\n <input\n tuiTextfieldLegacy\n autocomplete=\"name\"\n />\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <label tuiLabel>\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 <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n />\n\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n />\n Я хочу получать рассылку Снабцентр о скидках и новостях по электронной почте.\n </label>\n\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(); clickOffer.emit()\"\n >\n Договором оферты\n </a>\n .\n </span>\n <span class=\"text-tui-negative\">*</span>\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </div>\n </label>\n }\n }\n </div>\n <button\n tuiButton\n [disabled]=\"isPhoneBusy() ? form.controls.verificationCode.invalid || form.controls.phone.invalid : form.invalid\"\n [loading]=\"loading()\"\n type=\"submit\"\n class=\"self-center\"\n >\n {{ isPhoneBusy() ? 'Войти' : 'Купить' }}\n </button>\n</form>\n","/**\n * Перечисление типов аутентификации.\n */\nexport enum AuthMethod {\n /**\n * Аутентификация по номеру телефона и коду подтверждения.\n */\n byPhone = 'by_phone',\n\n /**\n * Аутентификация по логину и паролю.\n */\n byEmail = 'by_email',\n}\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 { phoneValidator } from '../../../validators/sc-phone-validator';\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, phoneValidator()]),\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 />\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n />\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 host: { ngSkipHydration: 'true' },\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","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n/**\n * Проверяет, что хотя бы одно поле из списка заполнено.\n * Поддерживает как отдельные поля, так и группы полей.\n *\n * @param fields Массив полей для проверки. Каждый элемент может быть строкой или массивом строк.\n * @param blockName Имя блока для идентификации ошибки\n * @returns ValidatorFn\n */\nexport function scAtLeastOneRequiredValidator(fields: Array<string | string[]>, blockName?: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (fields.length === 0) {\n return null;\n }\n\n const hasValue = fields.some((fieldKey) => {\n if (Array.isArray(fieldKey)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n return fieldKey.every((key) => !!control.get(key)?.value?.toString().trim());\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n return !!control.get(fieldKey)?.value?.toString().trim();\n });\n\n return hasValue ? null : { [blockName ?? 'atLeastOneRequired']: true };\n };\n}\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен ID России.\n */\nexport const CURRENT_COUNTRY_ID: InjectionToken<number> = tuiCreateToken(-1);\n","/* eslint-disable no-unused-expressions,class-methods-use-this,@typescript-eslint/unbound-method */\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, effect, Inject, inject, model, OnInit, SkipSelf } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroupDirective, Validators } from '@angular/forms';\nimport { ScICity, ScICityWithRegionAndCountry, 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\nimport { CURRENT_COUNTRY_ID } from '../../providers/sc-country-ids';\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 * Флаг возможности выбора страны.\n */\n public readonly canSelectCountry = model<boolean>(false);\n\n /**\n * Идентификатор текущей страны системы.\n */\n private readonly russiaCountryId: number = inject(CURRENT_COUNTRY_ID);\n\n /**\n * FormControl для поля страны.\n */\n protected readonly countryControl: FormControl<ScICountry | null> = new FormControl<ScICountry | null>(null, Validators.required);\n\n /**\n * FormControl для поля региона.\n */\n protected readonly regionControl: FormControl<ScIRegion | null> = new FormControl<ScIRegion | null>(null, Validators.required);\n\n /**\n * FormControl для поля города.\n */\n protected cityControl: FormControl<ScICity | null> = new FormControl<ScICountry | null>(null, Validators.required);\n\n /**\n * {@link Observable} изменения списка стран.\n */\n protected countries$: Observable<ScICountry[] | null> = this.locationsService.getCountries$().pipe(share(), startWith(null));\n\n /**\n * {@link Observable} изменения списка регионов.\n */\n protected 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 protected 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 protected 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 effect(() => {\n if (this.canSelectCountry()) {\n this.countryControl.setValue(null);\n } else {\n this.countryControl.setValue({\n id: this.russiaCountryId,\n name: 'Россия',\n });\n }\n });\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 .getCityById$(Number(this.cityIdControl.value))\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((city: ScICityWithRegionAndCountry) => {\n this.countryControl.patchValue(city.region.country);\n this.regionControl.patchValue(city.region);\n this.cityControl.patchValue(city);\n this.canSelectCountry.set(city.region.country.id !== this.russiaCountryId);\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 protected 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","<label\n *ngIf=\"canSelectCountry()\"\n tuiLabel\n class=\"mb-2\"\n>\n Страна\n <tui-combo-box\n *tuiLet=\"(countries$ | async) ?? [] as countries\"\n [formControl]=\"countryControl\"\n [stringify]=\"stringify\"\n >\n Страна\n <input\n tuiTextfieldLegacy\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocomplete=\"new-password\"\n />\n <tui-data-list-wrapper\n *tuiDataList\n [itemContent]=\"stringify | tuiStringifyContent\"\n [items]=\"countries | tuiFilterByInput\"\n ></tui-data-list-wrapper>\n </tui-combo-box>\n <tui-error\n [formControl]=\"countryControl\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n</label>\n<div class=\"grid items-start gap-4 sm:grid-cols-2\">\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 autocomplete=\"new-password\"\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 autocomplete=\"new-password\"\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 { ChangeDetectionStrategy, Component, Input, input, InputSignal } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MaskitoOptions } from '@maskito/core';\nimport { ScICurrency, ScISuggestionType, ScOpfList, 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 * Организационно-правовая форма.\n */\n public readonly opf: InputSignal<keyof typeof ScOpfList> = input.required<keyof typeof ScOpfList>();\n\n /**\n * Перечисление организационно-правовых форм.\n */\n protected readonly opfListEnum: typeof ScOpfList = ScOpfList;\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 @if (opfListEnum[opf()] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.bank\"\n />\n }\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 @if (opfListEnum[opf()] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.bank\"\n />\n }\n </tui-input>\n <tui-error\n formControlName=\"bic\"\n [error]=\"[] | tuiFieldError | async\"\n />\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 />\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 />\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 />\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';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\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),\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, phoneValidator()]),\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 protected readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * {@link Observable} выбора ОПФ.\n */\n protected 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 this.legalGroup.controls.kpp.disable();\n this.entrepreneurGroup.controls.inn.disable();\n this.entrepreneurGroup.controls.okpo.disable();\n }\n })\n );\n\n /**\n * Маска поля ввода КПП.\n */\n protected readonly kppMask = scKppMask;\n\n /**\n * Перечисление организационно-правовых форм.\n */\n protected readonly opfListEnum: typeof ScOpfList = ScOpfList;\n\n /**\n * Ссылка для автоматического управления уничтожением зависимостей.\n */\n private destroyRef: DestroyRef = inject(DestroyRef);\n\n /**\n * Возвращает {@link Observable} списка стран.\n */\n protected readonly countries$: Observable<ScICountry[]> = this.locationsService.getCountries$();\n\n /**\n * Возвращает {@link Observable} списка идентификаторов стран.\n */\n protected readonly countriesId$: Observable<number[]> = this.countries$.pipe(map((countries) => countries.map((country) => country.id)));\n\n /**\n * Маска поля ввода ИНН.\n *\n * @param opf Организационно-правовая форма.\n */\n // eslint-disable-next-line security/detect-object-injection\n protected 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 protected readonly okpoMask = (opf: keyof typeof ScOpfList) => (ScOpfList[opf] > ScOpfList.entrepreneur ? scLegalOkpoMask : scEntrepreneurOkpoMask);\n\n /**\n * Функция преобразования объекта сортировки в значение, отображаемое в поле ввода.\n *\n * @param items Список стран.\n */\n protected readonly stringify = (items: readonly ScICountry[]) => {\n const itemsMap = new Map(\n items.map((item) => {\n return [item.id, item.name] as [number, string];\n })\n );\n\n return (id: number) => itemsMap.get(id) ?? '';\n };\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 protected getDirectionById$(directionId: number): Observable<ScISalesDirection | undefined> {\n return this.referencesService.getDirectionById$(directionId);\n }\n\n /**\n * Возвращает {@link Observable} список организационно-правовых форм..\n */\n protected 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 protected 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 * @param countryId — Идентификатор страны.\n */\n protected getCountryNameById$(countryId: number): Observable<string | undefined> {\n return this.locationsService.getCountries$().pipe(map((countries) => countries.find((country) => country.id === countryId)?.name ?? ''));\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 />\n </label>\n\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? 'Ф.И.О.' : 'Название организации';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-input formControlName=\"name\">\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n {{ nameLabel }}\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n />\n } @else {\n Название организации\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n />\n }\n }\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n @if (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 />\n </tui-input>\n <tui-error\n formControlName=\"inn\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n @if (opfListEnum[selectOpf] === opfListEnum.legal) {\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 />\n </label>\n }\n <label tuiLabel>\n Ф.И.О. руководителя\n <tui-input formControlName=\"directorName\">\n Ф.И.О. руководителя\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n />\n </tui-input>\n <tui-error\n formControlName=\"directorName\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Должность руководителя\n <tui-input formControlName=\"directorPosition\"> Должность руководителя </tui-input>\n <tui-error\n formControlName=\"directorPosition\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Основания полномочий руководителя\n <tui-input formControlName=\"directorActsOn\"> Основания полномочий руководителя </tui-input>\n <tui-error\n formControlName=\"directorActsOn\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Юридический адрес\n <tui-input formControlName=\"legalAddress\">\n Юридический адрес\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n />\n }\n </tui-input>\n <tui-error\n formControlName=\"legalAddress\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Почтовый адрес\n <tui-input formControlName=\"postalAddress\">\n Почтовый адрес\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n />\n }\n </tui-input>\n <tui-error\n formControlName=\"postalAddress\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Фактический адрес\n <tui-input formControlName=\"actualAddress\">\n Фактический адрес\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.address\"\n />\n }\n </tui-input>\n <tui-error\n formControlName=\"actualAddress\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n @if (opfListEnum[selectOpf] === opfListEnum.legal) {\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 />\n </label>\n }\n }\n\n @if (opfListEnum[selectOpf] === opfListEnum.non_resident_legal) {\n @let countries = countries$ | async;\n @let countriesId = countriesId$ | async;\n\n <label\n *ngIf=\"countries\"\n tuiLabel\n >\n Страна регистрации юридического лица\n <tui-combo-box\n formControlName=\"registrationCountryId\"\n [stringify]=\"stringify(countries ?? [])\"\n >\n Страна регистрации юридического лица\n <input\n tuiTextfieldLegacy\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocomplete=\"new-password\"\n />\n <tui-data-list-wrapper\n *tuiDataList\n [itemContent]=\"stringify(countries ?? []) | tuiStringifyContent\"\n [items]=\"countriesId | tuiFilterByInput\"\n />\n </tui-combo-box>\n <ng-template\n #CountryContent\n let-data\n >\n <div>{{ (getCountryNameById$(data) | async) ?? '' }}</div>\n </ng-template>\n <tui-error\n formControlName=\"registrationCountryId\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <ng-template #selectLoading> <tui-loader /> </ng-template>\n <label tuiLabel>\n Регистрационный номер юридического лица\n <tui-input formControlName=\"registrationNumber\"> Регистрационный номер юридического лица </tui-input>\n <tui-error\n formControlName=\"registrationNumber\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Налоговый номер юридического лица\n <tui-input formControlName=\"taxNumber\"> Налоговый номер юридического лица </tui-input>\n <tui-error\n formControlName=\"taxNumber\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { ScISuggestionType } from '@snabcentr/client-core';\nimport { TuiCountryIsoCode } from '@taiga-ui/i18n';\nimport { getCountries } from 'libphonenumber-js';\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 /**\n * Список стран.\n */\n protected readonly countries: readonly TuiCountryIsoCode[] = getCountries();\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 />\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Телефон\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\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 <label tuiLabel>\n Должность контактного лица\n <tui-input formControlName=\"position\"> Должность контактного лица </tui-input>\n <tui-error\n formControlName=\"position\"\n [error]=\"[] | tuiFieldError | async\"\n />\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, OnInit, output, OutputEmitterRef, OutputRef } from '@angular/core';\nimport { outputFromObservable, 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 ScUser,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n ScUserService,\n} from '@snabcentr/client-core';\nimport { tuiIsFalsy } 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 { phoneValidator } from '../../validators/sc-phone-validator';\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 host: { ngSkipHydration: 'true' },\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, phoneValidator()]),\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 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 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 public readonly successAuth: OutputRef<ScUser> = outputFromObservable(this.userService.getUserChange$().pipe(filter((user) => !user.isGuest)));\n\n /**\n * Сигнал нажатия на \"Договор оферты\".\n */\n public readonly clickOfferEvent: OutputEmitterRef<void> = output();\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 // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.form.get('contragent')?.reset({ salesDirectionId: this.form.get('contragent')?.get('salesDirectionId')?.value ?? null });\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) && key !== 'bankAccounts' && key !== 'contacts') {\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, phoneValidator()]),\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 *ngIf=\"opfControl.value as selectOpf\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n>\n <ng-container *tuiLet=\"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 <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\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? 'Ф.И.О.' : 'Название организации';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-input formControlName=\"name\">\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n {{ nameLabel }}\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n />\n } @else {\n Название организации\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n (selectedClick)=\"onSelectedOrganization($event)\"\n />\n }\n }\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <sc-verification-phone-check-form [shouldBeBusy]=\"false\" />\n <label tuiLabel>\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 </div>\n\n <sc-addresses-selection-field [canSelectCountry]=\"opfListEnum[selectOpf] === opfListEnum.non_resident_legal\" />\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 />\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 />\n </label>\n </div>\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n />\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 >\n Договором оферты\n </a>\n .\n </span>\n <span class=\"text-tui-negative\">*</span>\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </div>\n </label>\n </div>\n </div>\n @if (!isIndividual) {\n <sc-new-contragent-form\n [opfControl]=\"opfControl\"\n [class.!hidden]=\"stepIndex !== 1\"\n />\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\" />\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\n *ngIf=\"opfControl.value as selectOpf\"\n [opf]=\"selectOpf\"\n [form]=\"bankAccount\"\n />\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 }\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, 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 public readonly disabledButtons = input<boolean>(false);\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 [disabled]=\"disabledButtons()\"\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 [disabled]=\"disabledButtons()\"\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","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';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\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, phoneValidator()]),\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, TuiTextfield } from '@taiga-ui/core';\nimport { TuiInputPhoneInternational } from '@taiga-ui/experimental';\nimport { TuiButtonLoading, TuiDataListWrapper, TuiFieldErrorPipe, TuiSortCountriesPipe } 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 TuiInputPhoneInternational,\n ...TuiTextfield,\n TuiSortCountriesPipe,\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, ScIOpf } 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; opf: ScIOpf }>\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\n [opf]=\"$any(context.data).opf.slug\"\n [form]=\"form\"\n />\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';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\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 * Список этапов создания контрагента.\n */\n readonly steps: string[] = ['Общие данные контрагента', 'Контакты контрагента', 'Банковские реквизиты контрагента'];\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.controls.contragent.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 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 *\n * @param index Индекс этапа для которого нужно проверить валидность.\n * @returns Выводит значение `boolean` на основании {@link index}.\n */\n public canNextStep(index: number): boolean {\n switch (index) {\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 const { contacts } = this.form.controls.contragent.controls;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return contacts?.valid ?? false;\n }\n case 2: {\n const { bankAccounts } = this.form.controls.contragent.controls;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return bankAccounts?.valid ?? false;\n }\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, phoneValidator()]),\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-stepper [(activeItemIndex)]=\"stepIndex\">\n @for (step of steps; track $index) {\n <button\n *ngIf=\"$index !== 2 || form.controls.contragent.controls['bankAccounts']\"\n [stepState]=\"!canNextStep($index) ? 'error' : 'pass'\"\n [attr.disabled]=\"$index && !canNextStep($index - 1) ? '' : null\"\n type=\"button\"\n tuiStep\n >\n {{ step }}\n </button>\n }\n </tui-stepper>\n <tui-elastic-container>\n <sc-new-contragent-form [class.!hidden]=\"stepIndex !== 0\" />\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\n *ngIf=\"form.controls.contragent.controls['opf'].value as opf\"\n [form]=\"bankAccount\"\n [opf]=\"opf\"\n />\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(stepIndex)\"\n type=\"button\"\n (click)=\"navigate(1)\"\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 {\n TuiButtonLoading,\n TuiCarousel,\n TuiDataListWrapper,\n TuiElasticContainer,\n TuiFieldErrorPipe,\n TuiFilterByInputPipe,\n TuiStepper,\n TuiStringifyContentPipe,\n} from '@taiga-ui/kit';\nimport { TuiComboBoxModule, 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 TuiComboBoxModule,\n TuiStringifyContentPipe,\n TuiFilterByInputPipe,\n ...TuiStepper,\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 { TuiAutoFocus, TuiLet } from '@taiga-ui/cdk';\nimport { TuiButton, TuiError, TuiIcon, TuiLabel, TuiLink, TuiLoader, TuiTextfield, TuiTitle } from '@taiga-ui/core';\nimport { TuiInputPhoneInternational } from '@taiga-ui/experimental';\nimport { TuiButtonLoading, TuiFieldErrorPipe, TuiPush, TuiSortCountriesPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPasswordModule, TuiInputPhoneModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { ScManagerCardComponent } from '../contacts/manager-card/sc-manager-card.component';\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 ScManagerCardComponent,\n TuiTitle,\n TuiIcon,\n ...TuiPush,\n TuiInputPhoneInternational,\n ...TuiTextfield,\n TuiSortCountriesPipe,\n TuiAutoFocus,\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 { ScSimpleSignUpFormComponent } from './sc-simple-sign-up-form/sc-simple-sign-up-form.component';\nimport { ScSignUpFormComponent } from './sign-up-form/sc-sign-up-form.component';\n\n/**\n * Модуль аутентификации.\n */\n@NgModule({\n declarations: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent, ScSimpleSignUpFormComponent],\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, ScSimpleSignUpFormComponent],\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 providers: [IntersectionObserverService],\n host: { ngSkipHydration: 'true' },\n changeDetection: ChangeDetectionStrategy.OnPush,\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 class=\"size-full\"\n >\n <picture>\n @if (banner.mediaFileWebp) {\n <source\n type=\"image/webp\"\n [srcset]=\"banner.mediaFileWebp | scMediaImageTransformer\"\n />\n }\n <img\n [src]=\"banner.mediaFile | scMediaImageTransformer: true\"\n [alt]=\"banner.title\"\n class=\"size-full object-cover\"\n />\n </picture>\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 { ScMediaImageTransformerPipe } from '@snabcentr/client-core';\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, ScMediaImageTransformerPipe],\n exports: [ScBannerComponent],\n})\nexport class ScBannerModule {}\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\n/**\n * Токен перечисления размеров страниц пагинации.\n */\nexport const SC_PAGE_SIZE_OPTIONS: InjectionToken<number[]> = tuiCreateToken<number[]>([5]);\n","import { inject, InjectionToken, Provider } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ScICityWithRegionAndCountry, ScLocationsService, ScUser, ScUserService } from '@snabcentr/client-core';\nimport { tuiCreateTokenFromFactory } from '@taiga-ui/cdk';\nimport { map, Observable, of, switchMap } from 'rxjs';\n\nimport { CURRENT_COUNTRY_ID } from './sc-country-ids';\n\n/**\n * Токен потока данных о текущем пользователе.\n */\nexport const SC_USER_INFO: InjectionToken<Observable<ScUser>> = tuiCreateTokenFromFactory(() => inject(ScUserService).getUserChange$().pipe(takeUntilDestroyed()));\n\n/**\n * Токен потока данных о текущем городе пользователя с информацией о регионе и стране.\n */\nexport const SC_USER_CITY_INFO: InjectionToken<Observable<ScICityWithRegionAndCountry>> = tuiCreateTokenFromFactory(() => {\n const userService = inject(ScUserService);\n const locationService = inject(ScLocationsService);\n\n return userService.getUserChange$().pipe(\n switchMap((user: ScUser) => (user.city ? locationService.getCityById$(user.city) : of())),\n takeUntilDestroyed()\n );\n});\n\n/**\n * Токен проверки, является ли текущая страна пользователя верной.\n */\nexport const IS_DEFAULT_COUNTRY: InjectionToken<Observable<boolean>> = tuiCreateTokenFromFactory(() => {\n const cityInfo = inject(SC_USER_CITY_INFO);\n const russiaCountryId = inject(CURRENT_COUNTRY_ID);\n\n return cityInfo.pipe(map((city) => city.region.country.id === russiaCountryId));\n});\n\n/**\n * Провайдер потока данных о текущем пользователе.\n *\n * @deprecated\n */\nexport const SC_USER_PROVIDERS: Provider[] = [];\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken, TuiDay, TuiTime } from '@taiga-ui/cdk';\n\n/**\n * Токен для функции форматирования даты и времени.\n * По умолчанию используется формат 'DD.MM.YYYY HH:MM'.\n */\nexport const SC_DATE_FORMATTER: InjectionToken<(date: string) => string> = tuiCreateToken<(date: string) => string>((date: string) => {\n const dateObject = new Date(date);\n const day = TuiDay.fromLocalNativeDate(dateObject).toString('DMY', '.');\n const time = TuiTime.fromLocalNativeDate(dateObject).toString('HH:MM');\n\n return `${day} ${time}`;\n});\n","import { Provider } from '@angular/core';\nimport { TUI_DATE_VALUE_TRANSFORMER } from '@taiga-ui/kit';\n\nimport { DateValueTransformerWithStartTime } from './date-value-transformer';\n\n/**\n * Провайдер преобразователя даты по умолчанию.\n */\nexport const tuiDateValueTransformerDefaultProvider: Provider[] = [\n {\n provide: TUI_DATE_VALUE_TRANSFORMER,\n useClass: DateValueTransformerWithStartTime,\n },\n];\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен для массива полей, которые должны быть заполнены хотя бы одним значением, в запросе на уведомление о поступлении товара.\n */\nexport const SC_NOTIFY_WHEN_IN_STOCK_REQUIRED_FIELDS: InjectionToken<string[]> = tuiCreateToken<string[]>([]);\n","import type { PipeTransform } from '@angular/core';\nimport { inject, Pipe } from '@angular/core';\n\nimport { SC_DATE_FORMATTER } from '../providers';\n\n/**\n * Пайп для форматирования даты и времени.\n */\n@Pipe({\n standalone: true,\n name: 'scFormatDate',\n})\nexport class ScFormatDatePipe implements PipeTransform {\n /**\n * Функция форматирования даты и времени.\n */\n private readonly formatter: (date: string) => string = inject(SC_DATE_FORMATTER);\n\n /**\n * Форматирует строку даты через {@link SC_DATE_FORMATTER}.\n *\n * @param timeString - Строка времени.\n * @returns Форматированная дата и время.\n */\n public transform(timeString?: string): string | undefined {\n return timeString && this.formatter(timeString);\n }\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\nimport { ScFormatDatePipe } from '../../pipes';\n\n/**\n * Компонент центы товара с отображением скидки.\n */\n@Component({\n standalone: true,\n selector: 'sc-cost-with-discount',\n imports: [CommonModule, TuiBadge, ...TuiHint, ScFormatDatePipe],\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\n @let expiredAt = product.discount.expiredAt | scFormatDate;\n\n <div class=\"flex gap-0.5\">\n <p class=\"flex line-through\">{{ product.discountCostString }}</p>\n <div *ngIf=\"expiredAt\">до {{ expiredAt.substring(0, 5) }}</div>\n </div>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"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, computed, input, InputSignal, Signal, signal, WritableSignal } from '@angular/core';\nimport { ScIImage } from '@snabcentr/client-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: './sc-hover-image-carousel.component.html',\n styleUrl: './sc-hover-image-carousel.component.scss',\n host: {\n '(mousemove.silent)': 'onHover($event.offsetX, $event.target)',\n '(mouseleave.silent)': 'onLeave()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScHoverImageCarouselComponent {\n /**\n * Массив изображений.\n */\n public readonly images: InputSignal<ScIImage[]> = input.required<ScIImage[]>();\n\n /**\n * Признак что необходимо отобразить элементы управления.\n */\n public readonly isShowActions: InputSignal<boolean> = input<boolean>(true);\n\n /**\n * {@link WritableSignal} для отслеживания текущего индекса изображения.\n */\n public readonly currentIndex: WritableSignal<number> = signal(0);\n\n /**\n * {@link WritableSignal} для отслеживания текущего индекса изображения.\n */\n public readonly currentImage: Signal<ScIImage> = computed(() => this.images()[this.currentIndex()]);\n\n /**\n * Название товара.\n */\n public readonly productName: InputSignal<string | undefined> = input<string | undefined>();\n\n /**\n * Обработчик события `mousemove.silent`.\n *\n * @param offsetX Отступ курсора мыши по оси X от края {@link HTMLElement}.\n * @param target Объект {@link HTMLElement} в котором лежат изображения\n */\n private onHover(offsetX: number, target: HTMLElement): void {\n if (this.images().length <= 1 || offsetX < 0) {\n return;\n }\n\n const elementWidth = target.offsetWidth;\n const hoverPercentage = Math.min(offsetX / elementWidth, 1);\n\n const newIndex = Math.min(Math.floor(hoverPercentage * this.images().length), this.images().length - 1);\n\n this.currentIndex.set(newIndex);\n }\n\n /**\n * Обработчик события `mouseleave.silent`.\n */\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 @let image = currentImage();\n <picture>\n @if (image.imageWebp) {\n <source\n type=\"image/webp\"\n [srcset]=\"image.imageWebp\"\n />\n }\n\n @if (image.image) {\n <img\n [src]=\"image.image\"\n [alt]=\"image.alt\"\n class=\"size-full rounded-xl object-contain\"\n />\n }\n </picture>\n</div>\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","/* eslint-disable @typescript-eslint/dot-notation */\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { TuiButton, TuiHint, TuiIcon, TuiLoader, TuiSizeL, TuiSizeM, TuiSizeS } from '@taiga-ui/core';\nimport { TuiFieldErrorPipe } from '@taiga-ui/kit';\nimport { AbstractTuiNullableControl, TuiInputNumberComponent, TuiInputNumberModule, TuiIslandDirective, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { stepValidator } from '../../validators';\n\n/**\n * Компонент поля ввода количества.\n */\n@Component({\n standalone: true,\n selector: 'sc-input-quantity',\n templateUrl: './sc-input-quantity.component.html',\n styleUrl: './sc-input-quantity.component.scss',\n imports: [\n CommonModule,\n RouterModule,\n TuiButton,\n TuiIcon,\n TuiIslandDirective,\n TuiInputNumberModule,\n TuiTextfieldControllerModule,\n FormsModule,\n ReactiveFormsModule,\n ...TuiHint,\n TuiFieldErrorPipe,\n TuiLoader,\n ],\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","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { ScIWarehouse, ScIWarehouseStockCount, ScProduct, ScWarehouseService } from '@snabcentr/client-core';\nimport { TuiLet } from '@taiga-ui/cdk';\nimport { TuiHint, TuiLink } from '@taiga-ui/core';\nimport { TuiTextfieldControllerModule } from '@taiga-ui/legacy';\nimport { map, Observable, switchMap } from 'rxjs';\n\nimport { ScFormatDatePipe } from '../../pipes/sc-format-date';\n\n/**\n * Компонент данных о наличии товара на складе.\n */\n@Component({\n standalone: true,\n selector: 'sc-price-warehouse-stock',\n templateUrl: './sc-price-warehouse-stock.component.html',\n styleUrl: 'sc-price-warehouse-stock.component.scss',\n imports: [CommonModule, RouterModule, TuiTextfieldControllerModule, FormsModule, ReactiveFormsModule, ...TuiHint, TuiLink, TuiLet, ScFormatDatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\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 @let isDisabled = product.isHidden || product.isNull;\n\n <ng-container *ngIf=\"selectedWarehouse$ | async as warehouseSelect\">\n <span *tuiLet=\"withStockHint && !!(warehousesList$ | async)?.length as showStockHint\">\n <ng-container *ngIf=\"!product.stockCount?.length && 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 [class.disabled]=\"isDisabled\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [style.color]=\"'var(--tui-status-negative)'\"\n [style.cursor]=\"showPlaningHint && planingHint ? 'pointer' : 'default'\"\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 <span *ngIf=\"product.stockCount && product.stockCount.length && !product.onOrder\">\n <span\n tuiLink\n [style.color]=\"'var(--tui-status-positive)'\"\n [tuiHint]=\"showStockHint && stockHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [ngClass]=\"classList\"\n [class.disabled]=\"isDisabled\"\n class=\"!underline\"\n >\n Проверить наличие\n </span>\n </span>\n\n <span\n *ngIf=\"product.onOrder\"\n [style.color]=\"'var(--tui-status-warning)'\"\n [ngClass]=\"classList\"\n >\n Под заказ\n </span>\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","/* eslint-disable no-underscore-dangle */\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, output, OutputEmitterRef, TemplateRef } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { SEARCH_TERM_PROVIDERS } from '@snabcentr/client-core';\nimport { TuiCurrencyPipe } from '@taiga-ui/addon-commerce';\nimport { TuiAutoFocus } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDialogContext, TuiFormatNumberPipe, TuiHint, TuiIcon, TuiLink } from '@taiga-ui/core';\nimport { TuiHighlight, TuiPreview, TuiPreviewDialogService } from '@taiga-ui/kit';\nimport { TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { CostWithDiscountComponent } from '../../catalog/cost-with-discount/cost-with-discount.component';\nimport { ScHoverImageCarouselComponent } from '../../catalog/hover-image-carousel/sc-hover-image-carousel.component';\nimport { ScInputQuantityComponent } from '../../catalog/input-quantity/sc-input-quantity.component';\nimport { ScPriceWarehouseStockComponent } from '../../catalog/price-warehouse-stock/sc-price-warehouse-stock.component';\nimport { AbstractScPriceCard } from '../../directives/abstract-price-card/abstract-sc-price-card.directive';\nimport { ScFormatDatePipe } from '../../pipes/sc-format-date';\n\n/**\n * Компонент карточки элемента корзины.\n */\n@Component({\n standalone: true,\n selector: 'sc-cart-item',\n templateUrl: './sc-cart-item.component.html',\n imports: [\n CommonModule,\n RouterModule,\n TuiButton,\n TuiIcon,\n TuiTextfieldControllerModule,\n FormsModule,\n ReactiveFormsModule,\n TuiHint,\n TuiLink,\n TuiHighlight,\n TuiAutoFocus,\n ScHoverImageCarouselComponent,\n CostWithDiscountComponent,\n ScPriceWarehouseStockComponent,\n ScInputQuantityComponent,\n TuiCurrencyPipe,\n TuiFormatNumberPipe,\n TuiPreview,\n ScFormatDatePipe,\n ],\n providers: [SEARCH_TERM_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScCartItemComponent extends AbstractScPriceCard {\n /**\n * Событие нажатия на кнопку редактирования конфигурации.\n */\n public readonly clickSettings: OutputEmitterRef<void> = output();\n\n /**\n * Сервис диалогового окна предварительного просмотра.\n */\n private readonly previewDialogService: TuiPreviewDialogService = inject(TuiPreviewDialogService);\n\n /**\n * Отображает спецификацию.\n *\n * @param specificationPreviewReference Шаблон спецификации.\n */\n protected showSpecification(specificationPreviewReference: TemplateRef<TuiDialogContext>): void {\n this.previewDialogService.open(specificationPreviewReference).subscribe();\n }\n}\n","<div\n *ngIf=\"product && cartItem; else skeleton\"\n class=\"relative flex w-full gap-4 rounded-xl p-1 text-body-s hover:bg-tui-background-neutral-1\"\n>\n @let isDisabled = product.isHidden || product.isNull;\n <sc-hover-image-carousel\n (click)=\"isDisabled ? null : clickCardEvent.emit()\"\n [images]=\"!isMobile ? getCardImagePreviewList(product) : [getCardImagePreview()]\"\n [isShowActions]=\"false\"\n class=\"aspect-square w-24 shrink-0 cursor-pointer self-start\"\n />\n <div class=\"flex w-full flex-col justify-between gap-4 md:flex-row md:items-center md:gap-5\">\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.disabled]=\"isDisabled\"\n class=\"!text-body-m-bold\"\n >\n {{ product.name }}\n </a>\n <span\n *ngIf=\"product.supplierSku\"\n class=\"text-tui-text-02\"\n >\n Артикул производителя: {{ product.supplierSku }}\n </span>\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 />\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </div>\n\n <sc-cost-with-discount [product]=\"product\" />\n </div>\n <a\n tuiLink\n *ngIf=\"cartItem.specificationImgUrl\"\n (click)=\"showSpecification(specificationPreview)\"\n [class.disabled]=\"isDisabled\"\n >\n Спецификация\n </a>\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 shrink-0 flex-col gap-4 sm:flex-row md:w-1/2 lg:w-3/5 xl:w-1/2 xl:gap-8 2xl:w-2/5\">\n <div class=\"flex flex-wrap items-center gap-4 md:flex-col md:items-start lg:flex-row lg:items-center lg:gap-8\">\n <sc-input-quantity\n #inputQuantity\n [tuiAutoFocus]=\"autoFocuseQuantityInput()\"\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n size=\"m\"\n [showCross]=\"false\"\n [isDisabled]=\"isDisabled\"\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-32 shrink-0\"\n />\n <div class=\"flex w-36 items-center gap-1\">\n @if (cartItem.height || cartItem.length || cartItem.width) {\n <button\n tuiIconButton\n iconStart=\"@tui.settings\"\n [disabled]=\"isDisabled\"\n (click)=\"clickSettings.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-col 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 }\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <p class=\"whitespace-nowrap\">\n Сумма:\n <strong> {{ cartItem.costRub | tuiFormatNumber: { precision: 2, decimalSeparator: '.', rounding: 'ceil' } | async }} {{ 'RUB' | tuiCurrency }}</strong>\n </p>\n <sc-price-warehouse-stock [product]=\"product\" />\n </div>\n <button\n tuiIconButton\n iconStart=\"@tui.trash\"\n (click)=\"clickClearEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"!absolute left-1 top-1 lg:!relative lg:left-0 lg:top-0 lg:ml-auto\"\n ></button>\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","import { NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { WA_WINDOW } from '@ng-web-apis/common';\nimport { ScCartService, ScUploadedFile } from '@snabcentr/client-core';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDialogContext, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiFiles } from '@taiga-ui/kit';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { filter, map, Observable, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\n/**\n * Компонент диалога для добавления товаров в корзину из CSV файла.\n */\n@Component({\n standalone: true,\n selector: 'sc-cart-add-products-from-csv-dialog',\n templateUrl: './sc-cart-add-products-from-csv-dialog.component.html',\n imports: [TuiLink, TuiLoader, TuiFiles, ReactiveFormsModule, NgIf, TuiButton, TuiButtonLoading],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScCartAddProductsFromCsvDialogComponent {\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context: TuiDialogContext = inject<TuiDialogContext>(POLYMORPHEUS_CONTEXT);\n\n /**\n * Сервис для работы с корзиной.\n */\n private readonly cartService: ScCartService = inject(ScCartService);\n\n /**\n * Объект окна.\n */\n private readonly window: Window & typeof globalThis = inject<Window & typeof globalThis>(WA_WINDOW);\n\n /**\n * {@link Subject} события скачивания цен каталога.\n */\n protected readonly onDownloadClick: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса на скачивание цен каталога.\n */\n protected readonly downloadRequest$ = this.onDownloadClick.pipe(\n switchMap(() =>\n this.cartService.getCartCsvExample$().pipe(\n tap((blob: Blob) => {\n this.downloadExampleFile(blob);\n }),\n startWith(null)\n )\n ),\n share(),\n // eslint-disable-next-line unicorn/no-useless-undefined\n startWith(undefined)\n );\n\n /**\n * Признак того, что запрос выполняется.\n */\n protected readonly isDownloadLoading: Signal<boolean> = toSignal(this.downloadRequest$.pipe(map((value) => value === null)), {\n initialValue: false,\n });\n\n /**\n * {@link Subject} события отправки формы.\n */\n protected readonly onSubmit$: Subject<void> = new Subject<void>();\n\n /**\n * {@link Observable} запроса на добавление товаров из CSV файла.\n */\n protected readonly submitRequest$ = this.onSubmit$.pipe(\n map(() => this.control.value),\n filter(tuiIsPresent),\n switchMap(\n (file: File) =>\n new Observable<ScUploadedFile>((observer) => {\n const reader = new FileReader();\n\n reader.addEventListener('load', () => {\n observer.next(new ScUploadedFile(file.name, reader.result as string));\n });\n\n reader.addEventListener('error', (e) => {\n observer.error(e);\n });\n\n reader.readAsDataURL(file);\n\n return () => {\n reader.abort();\n };\n })\n ),\n switchMap((file) =>\n this.cartService.addProductsFromCsv$(file).pipe(\n tap(() => {\n this.context.$implicit.complete();\n }),\n startWith(null)\n )\n )\n );\n\n /**\n * Признак того, что запрос на добавление товаров выполняется.\n */\n protected readonly isSubmitLoading: Signal<boolean> = toSignal(this.submitRequest$.pipe(map((value) => value === null)), {\n initialValue: false,\n });\n\n /**\n * Поле для загрузки файла.\n */\n protected readonly control: FormControl<File | null> = new FormControl<File | null>(null);\n\n /**\n * Метод для удаления загруженного файла.\n */\n protected removeFile(): void {\n this.control.setValue(null);\n }\n\n /**\n * Метод для скачивания примера файла.\n *\n * @param blob Бинарный объект.\n */\n private downloadExampleFile(blob: Blob): void {\n const url = this.window.URL.createObjectURL(blob);\n // используем ссылку и download, чтобы указать название файла.\n const a = this.window.document.createElement('a');\n\n a.href = url;\n a.download = 'Пример файла добавления товаров в корзину.csv';\n a.click();\n this.window.URL.revokeObjectURL(url);\n }\n}\n","<div class=\"flex flex-col items-center gap-8\">\n <tui-loader\n [overlay]=\"true\"\n [showLoader]=\"isDownloadLoading()\"\n size=\"s\"\n class=\"mt-8\"\n >\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"onDownloadClick.next()\"\n >\n Пример .csv файла\n </button>\n </tui-loader>\n\n <div class=\"flex w-full flex-col gap-1\">\n <label\n tuiInputFiles\n class=\"w-full\"\n >\n <input\n accept=\"text/csv\"\n tuiInputFiles\n [formControl]=\"control\"\n />\n </label>\n\n <tui-files class=\"tui-space_top-1\">\n <tui-file\n *ngIf=\"control.value as file\"\n [file]=\"file\"\n (remove)=\"removeFile()\"\n />\n </tui-files>\n </div>\n <div class=\"flex gap-2\">\n <button\n tuiButton\n [disabled]=\"!control.value\"\n [loading]=\"isSubmitLoading()\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n (click)=\"onSubmit$.next()\"\n >\n Загрузить\n </button>\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n appearance=\"secondary\"\n >\n Отмена\n </button>\n </div>\n</div>\n","/* eslint-disable sonarjs/no-nested-template-literals,@typescript-eslint/unbound-method */\n\nimport { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, OnInit, output } from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport {\n ScCartItem,\n ScConvertersService,\n ScINewCartItemBase,\n ScINewCartItemMeasured,\n ScProduct,\n ScUnitsHelper,\n ScUserMetrikaGoalsEnum,\n ScUserMetrikaService,\n} from '@snabcentr/client-core';\nimport { TuiAmountPipe } from '@taiga-ui/addon-commerce';\nimport { tuiControlValue, tuiMarkControlAsTouchedAndValidate } from '@taiga-ui/cdk';\nimport { TuiButton, TuiError, TuiLabel, TuiNumberFormat, TuiTextfield } from '@taiga-ui/core';\nimport { TuiAppearance, TuiWithAppearance } from '@taiga-ui/core/directives/appearance';\nimport { TuiIcons, TuiWithIcons } from '@taiga-ui/core/directives/icons';\nimport { TuiButtonLoading, TuiChip, TuiFieldErrorPipe, TuiInputNumber } from '@taiga-ui/kit';\nimport { TuiInputModule } from '@taiga-ui/legacy';\nimport { isUndefined } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, filter, map, Observable, pairwise, startWith } from 'rxjs';\n\nimport { ScNextInputFocusModule } from '../../../directives/next-input-focus/sc-next-input-focus.module';\nimport { ScSelectOnFocusinDirective } from '../../../directives/select-on-focusin/sc-select-on-focusin.directive';\nimport { stepValidator } from '../../../validators/step-validator';\n\n/**\n * Компонент добавления / изменения товара в корзине.\n */\n@Component({\n standalone: true,\n selector: 'sc-add-or-editing-cart-item-form',\n templateUrl: './sc-add-or-editing-cart-item-form.component.html',\n imports: [\n NgIf,\n FormsModule,\n ScNextInputFocusModule,\n ReactiveFormsModule,\n TuiLabel,\n ScSelectOnFocusinDirective,\n TuiNumberFormat,\n TuiError,\n TuiInputModule,\n TuiAppearance,\n TuiWithAppearance,\n TuiIcons,\n TuiWithIcons,\n TuiButton,\n TuiButtonLoading,\n AsyncPipe,\n TuiFieldErrorPipe,\n TuiInputNumber,\n TuiNumberFormat,\n TuiTextfield,\n TuiAmountPipe,\n TuiChip,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddOrEditingCartItemFormComponent implements OnInit {\n /**\n * Группа полей добавления / изменения товара в корзине.\n */\n public readonly form = new FormGroup<{\n length?: FormControl<number | null>;\n quantity: FormControl<number | null>;\n marker: FormControl<string | null>;\n }>({\n quantity: new FormControl<number | null>(null, Validators.required),\n marker: new FormControl<string | null>(''),\n });\n\n /**\n * Данные о товаре.\n */\n public readonly product = input.required<ScProduct>();\n\n /**\n * Признак того, что для указанной категории или продукта действует конфигуратор длины.\n */\n protected readonly isLengthConfigurator = computed(() => Boolean(this.product().properties?.['isLengthConfigurator']));\n\n /**\n * Данные о товаре в корзине.\n */\n public readonly cartItem = input<ScCartItem | undefined>();\n\n /**\n * Признак загрузки данных.\n */\n public readonly isLoading = input(false);\n\n /**\n * Признак возможности продажи товара на метраж.\n */\n protected readonly productIsMeasurable = computed(() => this.unitsHelper.productIsMeasurable(this.product()));\n\n /**\n * Кратность количества для товара.\n */\n protected readonly productMultiplicity = computed(() => this.unitsHelper.productMultiplicity(this.product()));\n\n /**\n * Минимальный метраж для товара.\n */\n protected readonly minLength = computed(() => this.product().properties?.minLength ?? (this.product().ignoreMinCountCheck ? 0 : this.product().minCount));\n\n /**\n * Максимальный метраж для товара.\n */\n protected readonly maxLength = computed(() => this.product().properties?.maxLength);\n\n /**\n * Шаг изменения метража.\n */\n protected readonly lengthStep = computed(() => this.product().properties?.lengthStep ?? (this.product().ignoreMinCountCheck ? 0 : this.product().minCount));\n\n /**\n * Подсказка по минимальному и максимальному метражу товара.\n */\n protected readonly lengthHint = computed(() => {\n const min = this.minLength();\n const max = this.maxLength();\n\n // eslint-disable-next-line sonarjs/no-nested-conditional, sonarjs/prefer-nullish-coalescing\n return min || max ? `(${min ? `от ${min}` : ''}${min && max ? ' ' : ''}${max ? `до ${max}` : ''} ${this.product().unit})` : '';\n });\n\n /**\n * Итоговая стоимость заказа.\n */\n protected totalCost$: Observable<number>;\n\n /**\n * {@link Output} события добавления товара в корзину.\n */\n public readonly addToCart = output<ScINewCartItemBase>();\n\n /**\n * {@link Output} события редактирования товара в корзине.\n */\n public readonly editCartItem = output<Omit<ScINewCartItemBase, 'productId'>>();\n\n /**\n * Объект-помощник для работы со значениями единиц измерения товара.\n */\n private readonly unitsHelper: ScUnitsHelper = inject(ScUnitsHelper);\n\n /**\n * Сервис для сбора метрик о действиях пользователей.\n */\n private readonly userMetrikaService: ScUserMetrikaService = inject(ScUserMetrikaService);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /** @inheritDoc */\n public ngOnInit(): void {\n this.userMetrikaService.emitUserMetrikaEvent({\n target: ScUserMetrikaGoalsEnum.cartItemAddShow,\n params: { product_id: this.product().id },\n });\n\n if (this.productIsMeasurable()) {\n // Добавляем поле ввода длины, если товар измеряемый.\n this.form.addControl('length', new FormControl<number | null>(this.cartItem()?.length ?? this.minLength() ?? 0.01, [Validators.required, Validators.min(0.01)]));\n }\n\n // Устанавливаем количество из корзины или кратности товара.\n this.form.patchValue({\n quantity: this.cartItem()?.quantity ?? this.unitsHelper.productMultiplicity(this.product()),\n marker: this.cartItem()?.marker ?? '',\n });\n\n const step = this.lengthStep();\n\n if (this.isLengthConfigurator() && this.lengthStep() && this.form.controls.quantity.value && step) {\n // Если есть конфигуратор длины, рассчитываем начально значение длины.\n this.form.controls.length?.patchValue(this.form.controls.quantity.value * step);\n }\n\n // Добавляем валидацию шага для количества.\n this.form.controls.quantity.addValidators(stepValidator(this.unitsHelper.productStepForValidator(this.product())));\n // Добавляем валидацию шага для длины.\n this.form.get('length')?.addValidators(stepValidator(this.product().properties?.lengthStep ?? (this.product().ignoreMinCountCheck ? 0 : (this.product().minCount ?? 0))));\n\n // Считаем итоговую стоимость заказа.\n this.totalCost$ = tuiControlValue<{\n length?: number;\n quantity: number;\n }>(this.form).pipe(\n debounceTime(0), // Исправляем ошибку NG0950.\n filter(() => this.form.valid),\n distinctUntilChanged((previous, current) => previous.length === current.length && previous.quantity === current.quantity), // Только при изменении значений\n startWith(this.form.value as { length?: number; quantity: number }),\n pairwise(),\n map(([previous, current]) => {\n const lengthControl = this.form.get('length');\n\n // Если нет конфигуратора длины или некорректные данные — возвращаем без изменений.\n if (!this.isLengthConfigurator() || isUndefined(current.length) || !lengthControl || this.form.invalid || !step) {\n return current;\n }\n\n // Если изменилось количество — пересчитываем длину.\n if (previous.quantity !== current.quantity && this.form.controls.quantity.value) {\n const newValue = this.form.controls.quantity.value * step;\n lengthControl.patchValue(newValue);\n }\n\n // Если изменилась длина — пересчитываем количество и возвращаем значение длины.\n if (previous.length !== current.length && lengthControl.value) {\n const newValue = lengthControl.value / step;\n this.form.controls.quantity.patchValue(newValue);\n\n return { length: step, quantity: newValue };\n }\n\n // Возвращаем итоговые значения для расчёта стоимости.\n return { length: step, quantity: current.quantity };\n }),\n // Считаем стоимость: цена * длина * количество.\n map(({ length, quantity }) => (this.product().costRub ?? 0) * (length ?? 1) * quantity),\n map((sum) => Math.round(sum * 100) / 100)\n );\n }\n\n /**\n * Обработчик события шага метража.\n *\n * @param step Шаг.\n */\n protected onStepLength(step: number): void {\n const lengthControl = this.form.get('length');\n\n if (!this.productIsMeasurable() || !lengthControl) {\n return;\n }\n\n const length = lengthControl.value ?? 0;\n let newLength = Math.max(this.minLength() ?? step, length + step);\n // Округляем до ближайшего кратного числа.\n newLength = Math.round(newLength / step) * step;\n lengthControl.setValue(Number(newLength.toFixed(2)));\n }\n\n /**\n * Обработчик события шага количества.\n *\n * @param step Шаг.\n */\n protected onStepQuantity(step: number): void {\n const quantity = this.form.controls.quantity.value ?? 0;\n\n this.form.controls.quantity.setValue(Math.max(this.productMultiplicity(), quantity - (quantity % step) + step));\n }\n\n /**\n * Обработчик события отправки формы.\n */\n protected onSubmit(): void {\n // Удаляем null-поля из значения формы.\n const value = this.convertersService.removeNull<ScINewCartItemMeasured>(this.form.value as ScINewCartItemMeasured);\n\n // Если это добавление нового товара — добавляем productId.\n if (!this.cartItem()) {\n value.productId = this.product().id;\n }\n\n const step = this.lengthStep();\n\n // Если товар измеряемый и есть конфигуратор длины — устанавливаем длину по шагу (количество уже будет вычислено по формуле Метраж/min-count)\n if (this.productIsMeasurable() && this.isLengthConfigurator() && step) {\n value.length = step;\n }\n\n // Помечаем все поля формы как \"touch\" и запускаем валидацию для отображения ошибок с сервера.\n tuiMarkControlAsTouchedAndValidate(this.form);\n\n // В зависимости от режима — редактируем или добавляем товар.\n if (this.cartItem()) {\n this.editCartItem.emit(value);\n } else {\n this.addToCart.emit(value);\n }\n }\n}\n","<!-- Форма добавления измеряемого товара. -->\n<form\n *ngIf=\"product\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit()\"\n ScNextInputFocus\n class=\"flex flex-col gap-2\"\n>\n @let step = lengthStep();\n\n <!-- Длина товара (метраж) -->\n <label\n *ngIf=\"productIsMeasurable()\"\n tuiLabel\n >\n Метраж, {{ product().unit }}\n @if (!step || maxLength()) {\n {{ lengthHint() }}\n }\n\n <tui-textfield>\n <input\n tuiInputNumber\n formControlName=\"length\"\n [tuiNumberFormat]=\"{ precision: 2 }\"\n [max]=\"maxLength() || null\"\n [min]=\"minLength() || null\"\n (keydown.arrowDown)=\"onStepLength(-(lengthStep() ?? 0.01))\"\n (keydown.arrowUp)=\"onStepLength(lengthStep() ?? 0.01)\"\n autocomplete=\"length\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"length\"\n [error]=\"[] | tuiFieldError | async\"\n />\n <p\n *ngIf=\"lengthStep()\"\n class=\"tui-form__field-note\"\n >\n Метраж должен быть кратен {{ lengthStep() }}\n </p>\n </label>\n\n <!-- Количество товара -->\n <label tuiLabel>\n Количество, шт.\n <tui-textfield>\n <tui-chip\n *ngIf=\"isLengthConfigurator() && productMultiplicity() && step\"\n size=\"s\"\n appearance=\"negative\"\n class=\"font-bold\"\n >\n x {{ step }} {{ product().unit }}\n </tui-chip>\n\n <input\n placeholder=\"Количество\"\n tuiInputNumber\n [tuiNumberFormat]=\"{ decimalMode: 'not-zero' }\"\n [min]=\"productMultiplicity()\"\n (keydown.arrowDown)=\"onStepQuantity(-productMultiplicity())\"\n (keydown.arrowUp)=\"onStepQuantity(productMultiplicity())\"\n formControlName=\"quantity\"\n autocomplete=\"quantity\"\n />\n </tui-textfield>\n <p class=\"tui-form__field-note\">Количество должно быть кратно {{ productMultiplicity() }}</p>\n <tui-error\n formControlName=\"quantity\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Маркировка -->\n <label tuiLabel>\n Маркировка\n <tui-input formControlName=\"marker\">\n Маркировка\n <input\n tuiTextfieldLegacy\n autocomplete=\"marker\"\n />\n </tui-input>\n <tui-error\n formControlName=\"marker\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Кнопка добавления / редактирования товара в корзину -->\n <div class=\"flex flex-col items-center\">\n @let cost = totalCost$ | async;\n\n <div *ngIf=\"cost\">\n Итого:<span class=\"text-2xl font-bold\">\n {{ cost | tuiAmount | async }}\n {{ product().currency }}\n </span>\n </div>\n\n <!-- Кнопка добавления / редактирования товара в корзину -->\n <button\n tuiButton\n iconStart=\"@tui.check\"\n [disabled]=\"form.invalid\"\n [loading]=\"isLoading()\"\n type=\"submit\"\n class=\"mt-2\"\n >\n {{ cartItem() ? 'Изменить' : 'Добавить в корзину' }}\n </button>\n </div>\n</form>\n","/* eslint-disable sonarjs/no-nested-template-literals,@typescript-eslint/unbound-method,@typescript-eslint/no-unused-vars */\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, inject, Signal, viewChild } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ScCartItem, ScCartService, ScINewCartItemBase, ScProduct } from '@snabcentr/client-core';\nimport { tuiIsFalsy } from '@taiga-ui/cdk';\nimport { TuiDialogContext } from '@taiga-ui/core';\nimport { injectContext } from '@taiga-ui/polymorpheus';\nimport { isObject } from 'lodash-es';\nimport { catchError, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth/interfaces/api-error-response';\nimport { ScAddOrEditingCartItemFormComponent } from './add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component';\n\n/**\n * Компонент добавления / изменения товара в корзине.\n */\n@Component({\n standalone: true,\n selector: 'sc-add-or-editing-cart-item-dialog',\n templateUrl: './sc-add-or-editing-cart-item-dialog.component.html',\n imports: [ScAddOrEditingCartItemFormComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScAddOrEditingCartItemDialogComponent {\n /**\n * Компонент формы добавления / изменения товара в корзине.\n */\n public readonly formComponent = viewChild.required<ScAddOrEditingCartItemFormComponent>(ScAddOrEditingCartItemFormComponent);\n\n /**\n * {@link Subject} события отправки формы.\n */\n public readonly onSubmit: Subject<ScINewCartItemBase | Omit<ScINewCartItemBase, 'productId'>> = new Subject<ScINewCartItemBase | Omit<ScINewCartItemBase, 'productId'>>();\n\n /**\n * {@link Observable} запроса добавления / изменения товара в корзине.\n */\n public readonly submit$ = this.onSubmit.pipe(\n switchMap((value) =>\n (this.cartItem && !('productId' in value) ? this.cartService.patchCartItem$(this.cartItem.id, value) : this.cartService.addToCart$(value as ScINewCartItemBase)).pipe(\n tap(() => {\n this.context.$implicit.complete();\n }),\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const { errors, message } = error.error as ApiErrorResponse;\n\n if (errors && isObject(errors)) {\n Object.entries(errors).forEach(([k, v]) => {\n this.formComponent().form.get(k)?.setErrors({ serverResponse: v });\n });\n }\n\n if (message) {\n this.formComponent().form.setErrors({ serverResponse: [message] });\n }\n\n this.formComponent().form.updateValueAndValidity();\n this.formComponent().form.markAsDirty();\n }\n return of();\n }),\n startWith(null)\n )\n ),\n startWith(),\n share()\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных.\n */\n public readonly loading: Signal<boolean> = toSignal(this.submit$.pipe(map(tuiIsFalsy)), { initialValue: false });\n\n /**\n * Контекст диалогового окна.\n */\n public readonly context = injectContext<TuiDialogContext<boolean, { product: ScProduct; cartItem: ScCartItem | undefined }>>();\n\n /**\n * Данные о товаре.\n */\n public readonly product = this.context.data.product;\n\n /**\n * Данные о товаре в корзине.\n */\n public readonly cartItem = this.context.data.cartItem;\n\n /**\n * Сервис для работы с корзиной.\n */\n private readonly cartService: ScCartService = inject(ScCartService);\n}\n","@if (product) {\n <sc-add-or-editing-cart-item-form\n [product]=\"product\"\n [cartItem]=\"cartItem\"\n (addToCart)=\"onSubmit.next($event)\"\n (editCartItem)=\"onSubmit.next($event)\"\n [isLoading]=\"loading()\"\n ></sc-add-or-editing-cart-item-form>\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, input } from '@angular/core';\nimport { WA_WINDOW } from '@ng-web-apis/common';\nimport { ScCatalogService, ScMimeTypes } from '@snabcentr/client-core';\nimport { TuiAppearance, TuiButton, TuiHint, TuiIcons, TuiWithAppearance, TuiWithIcons } from '@taiga-ui/core';\nimport { TuiButtonLoading } from '@taiga-ui/kit';\nimport { share, startWith, Subject, switchMap, tap } from 'rxjs';\n\n/**\n * Компонент скачивания каталога.\n */\n@Component({\n standalone: true,\n selector: 'sc-download-price-list',\n templateUrl: './sc-download-price-list.component.html',\n imports: [TuiAppearance, TuiWithAppearance, TuiIcons, TuiWithIcons, TuiButton, TuiButtonLoading, AsyncPipe, TuiHint],\n})\nexport class ScDownloadPriceListComponent {\n /**\n * Идентификатор категории, для которой нужно скачать прайс.\n */\n public categoryId = input<number>();\n\n /**\n * {@link Subject} события скачивания цен каталога.\n */\n protected readonly onDownload: Subject<ScMimeTypes> = new Subject<ScMimeTypes>();\n\n /**\n * {@link Observable} запроса на скачивание цен каталога.\n */\n protected readonly request$ = this.onDownload.pipe(\n switchMap((type) =>\n this.catalogService.downloadPrice$(type, this.categoryId()).pipe(\n tap((blob: Blob) => {\n const priceWindow = type === ScMimeTypes.pdf ? this.window.open('/', '_blank', 'rel=\"nofollow noreferrer\"') : this.window;\n (priceWindow ?? this.window).location.assign(this.window.URL.createObjectURL(blob));\n }),\n startWith(type)\n )\n ),\n share(),\n // eslint-disable-next-line unicorn/no-useless-undefined\n startWith(undefined)\n );\n\n /**\n * Текст подсказки при скачивании.\n */\n protected readonly pdfLoadingHint: string = 'Скачивание каталога может занять некоторое время...';\n\n /**\n * Сервис для работы с каталогом.\n */\n private readonly catalogService: ScCatalogService = inject(ScCatalogService);\n\n /**\n * Объект окна.\n */\n private readonly window: Window & typeof globalThis = inject<Window & typeof globalThis>(WA_WINDOW);\n\n /**\n * Перечисление MIME-типов.\n */\n protected readonly mimeTypes: typeof ScMimeTypes = ScMimeTypes;\n}\n","@let request = request$ | async;\n@let pdfLoading = request === mimeTypes.pdf;\n@let csvLoading = request === mimeTypes.csv;\n\n<div class=\"dropdown flex flex-col gap-2 p-4\">\n <button\n tuiButton\n [loading]=\"pdfLoading\"\n (click)=\"onDownload.next(mimeTypes.pdf)\"\n iconStart=\"@tui.sc.file-p\"\n size=\"s\"\n [tuiHint]=\"pdfLoading ? pdfLoadingHint : null\"\n appearance=\"mono\"\n >\n Скачать прайс в формате PDF\n </button>\n <button\n tuiButton\n [loading]=\"csvLoading\"\n (click)=\"onDownload.next(mimeTypes.csv)\"\n iconStart=\"@tui.sc.file-x\"\n size=\"s\"\n appearance=\"mono\"\n >\n Скачать прайс в формате CSV\n </button>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TuiButton, TuiIcon } from '@taiga-ui/core';\nimport { TuiButtonLoading } from '@taiga-ui/kit';\n\n/**\n * Компонент кнопки избранных товаров и категорий.\n */\n@Component({\n standalone: true,\n selector: 'sc-favorite-button',\n templateUrl: './sc-favorite-button.component.html',\n imports: [TuiButton, TuiButtonLoading, TuiIcon],\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 Список ссылок приложения.\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 * Устанавливает компонент в очередь на обновление.\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 flex flex-col overflow-hidden rounded-tui-radius-m border border-tui-base-04 text-center\"\n >\n <div class=\"img-wrapper w-full grow overflow-hidden\">\n <picture *ngIf=\"category\">\n @if (category.properties?.imageWebp) {\n <source\n type=\"image/webp\"\n [srcset]=\"category.properties?.imageWebp | scMediaImageTransformer\"\n />\n }\n <img\n [src]=\"category.properties?.image | scMediaImageTransformer: true\"\n [alt]=\"category.name\"\n [ngClass]=\"{ '!object-contain p-2': appearance() === 'normal' || !category.properties?.image }\"\n class=\"size-full rounded-xl object-cover\"\n />\n </picture>\n <!-- Блок для скелетона карточки -->\n <div\n *ngIf=\"!category\"\n class=\"img-wrapper size-full bg-tui-base-02\"\n ></div>\n </div>\n\n <div class=\"name flex w-full items-center justify-center break-all\">\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 class-methods-use-this,unicorn/no-useless-undefined, @typescript-eslint/unbound-method */\n\nimport { AsyncPipe, NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, inject, OnInit, Signal } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport {\n ScCatalogService,\n ScConvertersService,\n ScIProductNotifyWhenInStock,\n ScISuggestionType,\n ScIWarehouse,\n ScProduct,\n ScUser,\n ScUserService,\n ScWarehouseService,\n} from '@snabcentr/client-core';\nimport { TuiContext, TuiStringHandler } from '@taiga-ui/cdk';\nimport { TuiAppearance, TuiButton, TuiDialogContext, TuiError, TuiIcon, TuiLabel, TuiLink, TuiLoader } from '@taiga-ui/core';\nimport { TuiButtonLoading, TuiFieldErrorPipe, TuiTooltip } from '@taiga-ui/kit';\nimport { TuiCardLarge } from '@taiga-ui/layout';\nimport { TuiInputModule, TuiSelectModule } from '@taiga-ui/legacy';\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';\nimport { ScFormFieldsModule } from '../../form-fields/form-fields.module';\nimport { SC_NOTIFY_WHEN_IN_STOCK_REQUIRED_FIELDS } from '../../providers';\nimport { scAtLeastOneRequiredValidator } from '../../validators/sc-at-least-one-required-validator';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\nimport { ScVerificationModule } from '../../verification/sc-verification.module';\n\n/**\n * Компонент формы отправки запроса на уведомление о поступлении товара.\n */\n@Component({\n standalone: true,\n selector: 'sc-notify-when-in-stock-dialog',\n templateUrl: './sc-notify-when-in-stock-dialog.component.html',\n imports: [\n ScVerificationModule,\n FormsModule,\n ReactiveFormsModule,\n TuiInputModule,\n TuiLink,\n TuiButton,\n TuiLabel,\n TuiFieldErrorPipe,\n TuiError,\n ScVerificationModule,\n ScFormFieldsModule,\n TuiSelectModule,\n TuiButtonLoading,\n TuiLoader,\n AsyncPipe,\n NgIf,\n TuiAppearance,\n TuiCardLarge,\n TuiIcon,\n TuiTooltip,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNotifyWhenInStockDialogComponent implements OnInit {\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context: TuiDialogContext<void, { product: ScProduct; onClickOfferHandler: () => void; onErrorHandler: (error: HttpErrorResponse) => void }> =\n inject<TuiDialogContext<void, { product: ScProduct; onClickOfferHandler: () => void; onErrorHandler: (error: HttpErrorResponse) => void }>>(POLYMORPHEUS_CONTEXT);\n\n /**\n * Товар.\n */\n protected readonly product: ScProduct = this.context.data.product;\n\n /**\n * Форма для отправки запроса на уведомление о поступлении товара.\n */\n protected readonly form = new FormGroup({\n email: new FormControl<string | null>(null, [Validators.email]),\n phone: new FormControl<string | null>(null, [phoneValidator()]),\n verificationCode: new FormControl<string | null>(null, [Validators.minLength(6)]),\n warehouseId: new FormControl<string | null>(null, Validators.required),\n });\n\n /**\n * Список складов.\n */\n protected readonly warehouses: Signal<ScIWarehouse[] | null> = toSignal(inject(ScWarehouseService).getWarehouses$(), { initialValue: null });\n\n /**\n * Перечисление типов подсказок.\n */\n protected readonly suggestionType: typeof ScISuggestionType = ScISuggestionType;\n\n /**\n * Массив полей, которые должны быть заполнены хотя бы одним значением.\n */\n protected readonly requiredFields = inject(SC_NOTIFY_WHEN_IN_STOCK_REQUIRED_FIELDS);\n\n /**\n * Сервис для работы с каталогом.\n */\n protected readonly catalogService: ScCatalogService = inject(ScCatalogService);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * {@link Observable} данных о пользователе.\n */\n protected readonly user$: Observable<ScUser | null> = inject(ScUserService)\n .getUserChange$()\n .pipe(\n tap((user) => {\n if (!user.isGuest) {\n if (this.requiredFields.includes('phone')) {\n this.form.get('phone')?.setValue(user.contacts.phone.value);\n }\n\n if (this.requiredFields.includes('email')) {\n this.form.get('email')?.setValue(user.contacts.email.value);\n }\n }\n })\n );\n\n /**\n * {@link Subject} события отправки формы.\n */\n protected 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.getRawValue() as ScIProductNotifyWhenInStock),\n switchMap((value) =>\n this.catalogService.getProductNotifyWhenInStock$(this.product.id, this.convertersService.removeNullRecursive(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 // eslint-disable-next-line no-shadow\n Object.entries(errors).forEach(([key, value]) => {\n this.form.get(key)?.setErrors({ serverResponse: value });\n });\n } else if (message) {\n this.form.setErrors({ serverResponse: [message] });\n }\n\n this.context.data.onErrorHandler(error);\n }\n\n return of(undefined);\n }),\n startWith(null)\n )\n ),\n share()\n );\n\n /**\n * Сигнал изменения состояния загрузки данных.\n */\n protected readonly loading: Signal<boolean> = toSignal(this.request$.pipe(map((value) => value === null)), { initialValue: false });\n\n /**\n * Инициализирует экземпляр класса {@link ScNotifyWhenInStockDialogComponent}.\n */\n public constructor() {\n this.user$.pipe(takeUntilDestroyed()).subscribe();\n }\n\n /**\n * Инициализация компонента.\n */\n public ngOnInit(): void {\n if (this.requiredFields.length === 1) {\n this.form.get(this.requiredFields[0])?.setValidators(Validators.required);\n } else if (this.requiredFields.length > 1) {\n this.form.setValidators(scAtLeastOneRequiredValidator(this.requiredFields));\n }\n }\n\n /**\n * Проверяет, является ли товар в наличии.\n */\n protected isStock(): boolean {\n const warehouseId = Number(this.form.get('warehouseId')?.value ?? 0);\n\n return this.product.isWarehouseStockExist(warehouseId);\n }\n\n /**\n * Преобразует объект в значение, отображаемое в поле ввода.\n *\n * @param items Выбранные значения.\n */\n protected stringify(items: readonly ScIWarehouse[]): TuiStringHandler<TuiContext<number>> {\n const itemsMap = new Map(\n items.map((item) => {\n return [item.id, item.name] as [number, string];\n })\n );\n\n return ({ $implicit }: TuiContext<number>) => itemsMap.get($implicit) ?? '';\n }\n}\n","<form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit$.next()\"\n class=\"flex flex-col gap-6\"\n>\n @let isPhoneVisible = requiredFields.includes('phone');\n @let isEmailVisible = requiredFields.includes('email');\n @let phoneTouched = form.get('phone')?.touched;\n @let emailTouched = form.get('email')?.touched;\n @let isShowError = form.errors?.['atLeastOneRequired'] && ((isPhoneVisible && phoneTouched) || (isEmailVisible && emailTouched));\n @let user = user$ | async;\n @let userPhone = user?.contacts?.phone;\n @let isShowCodeFields = !!form.controls.phone.value && (user?.isGuest || userPhone?.value !== form.controls.phone.value || !userPhone?.isApproved);\n\n <div\n *ngIf=\"user\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel>\n <div\n [tuiAppearance]=\"isPhoneVisible && isEmailVisible ? 'outline-grayscale' : 'flat'\"\n [tuiAppearanceMode]=\"isShowError ? 'invalid' : null\"\n tuiCardLarge\n class=\"flex flex-col !gap-1\"\n [style.padding]=\"requiredFields.length <= 1 ? '0' : undefined\"\n [style.border-radius]=\"requiredFields.length <= 1 ? '0' : undefined\"\n >\n <sc-verification-phone-check-form\n *ngIf=\"isPhoneVisible\"\n [required]=\"!form.controls.email.value\"\n [showCodeFields]=\"isShowCodeFields\"\n [pseudoInvalid]=\"isShowError\"\n />\n <div\n *ngIf=\"isPhoneVisible && isEmailVisible\"\n class=\"tui-island__paragraph flex items-center gap-3\"\n [style.color]=\"isShowError ? 'var(--tui-text-negative)' : 'var(--tui-text-tertiary)'\"\n >\n <div\n class=\"h-px flex-1\"\n [style.background-color]=\"isShowError ? 'var(--tui-text-negative)' : 'var(--tui-text-tertiary)'\"\n ></div>\n <div class=\"text-body-s font-bold\">\n Или(и)\n <tui-icon\n [appearance]=\"isShowError ? 'negative' : 'grayscale'\"\n tuiHintDirection=\"right\"\n tuiHintAppearance=\"dark\"\n tuiTooltip=\"Пожалуйста, укажите номер телефона или(и) адрес электронной почты\"\n />\n </div>\n <div\n class=\"h-px flex-1\"\n [style.background-color]=\"isShowError ? 'var(--tui-text-negative)' : 'var(--tui-text-tertiary)'\"\n ></div>\n </div>\n <label\n tuiLabel\n *ngIf=\"isEmailVisible\"\n >\n Адрес электронной почты\n <tui-input\n [pseudoInvalid]=\"isShowError\"\n formControlName=\"email\"\n >\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 </div>\n <tui-error\n *ngIf=\"isShowError\"\n error=\"Пожалуйста, укажите номер телефона и(или) адрес электронной почты для уведомления о поступлении товара\"\n />\n </label>\n <label tuiLabel>\n Склад\n <tui-select\n formControlName=\"warehouseId\"\n [valueContent]=\"warehouses() ? stringify(warehouses()!) : selectLoading\"\n >\n Склад\n <tui-data-list *tuiDataList>\n @for (warehouse of warehouses(); track warehouse.id) {\n @if (!product.isWarehouseStockExist(warehouse.id)) {\n <button\n tuiOption\n [value]=\"warehouse.id\"\n >\n {{ warehouse.name }}\n </button>\n }\n }\n </tui-data-list>\n </tui-select>\n <tui-error\n formControlName=\"warehouseId\"\n [error]=\"[] | tuiFieldError | async\"\n />\n\n <span\n *ngIf=\"isStock()\"\n [style.color]=\"'var(--tui-text-positive)'\"\n >\n Товар имеется в наличии на выбранном складе\n </span>\n </label>\n <ng-template #selectLoading> <tui-loader /> </ng-template>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-3\">\n <button\n tuiButton\n type=\"submit\"\n [disabled]=\"form.invalid || isStock() || (isShowCodeFields && !form.controls.verificationCode.value && form.controls.phone.valid)\"\n [loading]=\"loading()\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n Отправить\n </button>\n <div class=\"grow basis-60 text-body-s\">\n Нажимая на кнопку, вы соглашаетесь с\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context.data.onClickOfferHandler()\"\n >\n Политикой конфиденциальности\n </button>\n </div>\n </div>\n\n <tui-error\n *ngIf=\"form.errors && form.errors['serverResponse']\"\n [error]=\"[] | tuiFieldError | async\"\n />\n</form>\n","/* eslint-disable class-methods-use-this */\n\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { ScIWarehouse, ScProduct, ScWarehouseService } from '@snabcentr/client-core';\nimport { map, Observable } from 'rxjs';\n\n/**\n * Пайп для вычисления есть ли товар на всех складах.\n */\n@Pipe({\n standalone: true,\n name: 'scProductInAllWarehouses',\n})\nexport class ScProductInAllWarehousesPipe implements PipeTransform {\n /**\n * Список складов.\n */\n protected readonly warehouses$: Observable<ScIWarehouse[]> = inject(ScWarehouseService).getWarehouses$();\n\n /**\n * Вычисляет есть ли товар на всех складах.\n *\n * @param product - Продукт.\n * @returns Имя продукта.\n */\n public transform(product: ScProduct): Observable<boolean> {\n return this.warehouses$.pipe(map((warehouses) => warehouses.every((warehouse) => product.isWarehouseStockExist(warehouse.id))));\n }\n}\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 />\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 />\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 />\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 <span\n *ngIf=\"product.supplierSku\"\n class=\"text-tui-text-02\"\n >\n Артикул производителя: {{ product.supplierSku }}\n </span>\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 />\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </div>\n <sc-cost-with-discount\n [product]=\"product\"\n [size]=\"size\"\n />\n <sc-price-warehouse-stock [product]=\"product\" />\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 />\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 />\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 { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { SEARCH_TERM_PROVIDERS } from '@snabcentr/client-core';\nimport { TuiAutoFocus } from '@taiga-ui/cdk';\nimport { TuiButton, TuiHint, TuiIcon, TuiLink } from '@taiga-ui/core';\nimport { TuiAvatar, TuiButtonLoading, TuiHighlight } from '@taiga-ui/kit';\nimport { TuiTextfieldControllerModule } from '@taiga-ui/legacy';\n\nimport { AbstractScPriceCard } from '../../directives';\nimport { ScFormatDatePipe } from '../../pipes/sc-format-date';\nimport { CostWithDiscountComponent } from '../cost-with-discount/cost-with-discount.component';\nimport { ScHoverImageCarouselComponent } from '../hover-image-carousel/sc-hover-image-carousel.component';\nimport { ScInputQuantityComponent } from '../input-quantity/sc-input-quantity.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@Component({\n standalone: true,\n selector: 'sc-price-card-inline',\n templateUrl: './sc-price-card-inline.component.html',\n styleUrl: './sc-price-card-inline.component.scss',\n providers: [SEARCH_TERM_PROVIDERS],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n RouterModule,\n TuiButton,\n TuiIcon,\n TuiTextfieldControllerModule,\n FormsModule,\n ReactiveFormsModule,\n ...TuiHint,\n TuiLink,\n TuiHighlight,\n TuiAutoFocus,\n TuiButtonLoading,\n TuiAvatar,\n ScHoverImageCarouselComponent,\n CostWithDiscountComponent,\n ScPriceWarehouseStockComponent,\n ScFavoriteButtonComponent,\n ScInputQuantityComponent,\n ScFormatDatePipe,\n ],\n})\nexport class ScPriceCardInlineComponent extends AbstractScPriceCard {\n public readonly type = input<'catalogItem' | 'cartItem' | 'orderItem'>('catalogItem');\n}\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 />\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 <span\n *ngIf=\"product.supplierSku\"\n class=\"text-tui-text-02\"\n >\n Артикул производителя: {{ product.supplierSku }}\n </span>\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 />\n <ng-template #minCountHint>\n Доступен заказ <br />\n произвольного <br />\n количества\n </ng-template>\n </div>\n\n <sc-cost-with-discount [product]=\"product\" />\n\n <sc-price-warehouse-stock [product]=\"product\" />\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 />\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 />\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 [tuiAutoFocus]=\"autoFocuseQuantityInput()\"\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 />\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 />\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 { ScMediaImageTransformerPipe } from '@snabcentr/client-core';\nimport { TuiAxes, TuiLineDaysChart, TuiLineDaysChartHint } from '@taiga-ui/addon-charts';\nimport { TuiAutoFocus, 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 { ScFormatDatePipe } from '../pipes/sc-format-date';\nimport { ScCategoryCardComponent } from './category-card/sc-category-card.component';\nimport { CostWithDiscountComponent } from './cost-with-discount/cost-with-discount.component';\nimport { ScHoverImageCarouselComponent } from './hover-image-carousel/sc-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: [ScPriceListPaginationComponent, ScCategoryCardComponent, ScPriceCardComponent, ScPriceHistoryComponent],\n exports: [ScPriceListPaginationComponent, ScCategoryCardComponent, ScPriceCardComponent, ScPriceHistoryComponent],\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 TuiAutoFocus,\n TuiLineDaysChartHint,\n TuiAxes,\n TuiButtonLoading,\n TuiAvatar,\n TuiBadge,\n ScHoverImageCarouselComponent,\n TuiLineClamp,\n TuiHovered,\n CostWithDiscountComponent,\n ScPriceCardInlineComponent,\n ScPriceWarehouseStockComponent,\n ScFavoriteButtonComponent,\n ScInputQuantityComponent,\n ScFormatDatePipe,\n ScMediaImageTransformerPipe,\n ],\n})\nexport class ScCatalogModule {}\n","import { ChangeDetectionStrategy, Component, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\nimport { ScIOrgContact } from '@snabcentr/client-core';\nimport { TuiIcon } from '@taiga-ui/core';\nimport { TuiPush } from '@taiga-ui/kit';\n\nimport { ScManagerCardComponent } from '../manager-card/sc-manager-card.component';\n\n/**\n * Компонент карточки менеджера Push-уведомлений.\n */\n@Component({\n standalone: true,\n selector: 'sc-manager-card-push',\n templateUrl: './sc-manager-card-push.component.html',\n imports: [ScManagerCardComponent, TuiPush, TuiIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScManagerCardPushComponent {\n /**\n * Данные менеджера.\n */\n public readonly manager: InputSignal<ScIOrgContact> = input.required<ScIOrgContact>();\n\n /**\n * Событие закрытия уведомления.\n */\n public readonly closeEvent: OutputEmitterRef<ScIOrgContact> = output<ScIOrgContact>();\n}\n","<tui-push\n *tuiPush=\"!!manager()\"\n type=\"Свяжитесь с нами для решения возникших вопросов\"\n (close)=\"closeEvent.emit(manager())\"\n>\n <tui-icon icon=\"@tui.message-square\" />\n <sc-manager-card [manager]=\"manager()\" />\n</tui-push>\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 ScIOrgContact,\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 { TuiCountryIsoCode } from '@taiga-ui/i18n';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { YaReadyEvent } from 'angular8-yandex-maps';\nimport { getCountries } from 'libphonenumber-js';\nimport { catchError, filter, map, Observable, of, share, startWith, Subject, switchMap, tap } from 'rxjs';\n\nimport { ApiErrorResponse } from '../../auth';\nimport { IS_DEFAULT_COUNTRY } from '../../providers';\nimport { ScHelpNotificationService } from '../../services';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\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 protected readonly userHelpContacts$: Observable<ScIOrgContact[]> = inject(ScHelpNotificationService).userHelpContacts;\n\n /**\n * Признак того, что текущая страна является верной.\n */\n protected readonly isDefaultCountry: Observable<boolean> = inject(IS_DEFAULT_COUNTRY);\n\n /**\n * Список стран.\n */\n protected readonly countries: readonly TuiCountryIsoCode[] = getCountries();\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, phoneValidator()]),\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","@let isEnabledAddDeliveryAddress = isDefaultCountry | async;\n\n@if (isEnabledAddDeliveryAddress) {\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 />\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input>\n <tui-error\n formControlName=\"address\"\n [error]=\"[] | tuiFieldError | async\"\n />\n <tui-error\n *ngIf=\"addressControl.valid && form.controls.coordinates.invalid\"\n error=\"Выберите вариант из списка\"\n />\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 />\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Телефон\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\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 />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n Должность\n <tui-input formControlName=\"position\"> Должность </tui-input>\n <tui-error\n formControlName=\"position\"\n [error]=\"[] | tuiFieldError | async\"\n />\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 />\n </div>\n </div>\n </div>\n} @else {\n @let helpContacts = userHelpContacts$ | async;\n\n @if (helpContacts && helpContacts.length) {\n <tui-push\n type=\"Чтобы добавить адрес доставки, свяжитесь с нами\"\n class=\"!w-auto\"\n >\n <tui-icon icon=\"@tui.message-square\" />\n <sc-manager-card [manager]=\"helpContacts[0]\" />\n </tui-push>\n }\n}\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, inject, Output } from '@angular/core';\nimport { ScDeliveryAddressService, ScIContact, ScIDeliveryAddress, ScIOrgContact } from '@snabcentr/client-core';\nimport { Observable } from 'rxjs';\n\nimport { IS_DEFAULT_COUNTRY } from '../../providers';\nimport { ScHelpNotificationService } from '../../services/sc-help-notification.service';\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 Observable} данных контактов дл помощи.\n */\n protected readonly userHelpContacts$: Observable<ScIOrgContact[]> = inject(ScHelpNotificationService).userHelpContacts;\n\n /**\n * Признак того, что текущая страна пользователя верной.\n */\n protected readonly isDefaultCountry: Observable<boolean> = inject(IS_DEFAULT_COUNTRY);\n\n /**\n * Инициализирует экземпляр класса {@link ScDeliveryAddressAccordionComponent}.\n *\n * @param deliveryAddressService Сервис работы с адресами доставки.\n */\n public constructor(private readonly deliveryAddressService: ScDeliveryAddressService) {}\n}\n","@let isEnabledAddDeliveryAddress = isDefaultCountry | async;\n\n<sc-accordion\n (addButtonClick)=\"addDeliveryAddressClick.emit()\"\n [disabledButtons]=\"!isEnabledAddDeliveryAddress\"\n>\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 <!-- Показываем уведомление о том, что добавить адрес доставки можно только через сотрудника. -->\n @let helpContacts = userHelpContacts$ | async;\n @if (!isEnabledAddDeliveryAddress && helpContacts && helpContacts.length) {\n <tui-push\n type=\"Чтобы добавить адрес доставки, свяжитесь с нами\"\n class=\"m-2 !w-auto\"\n >\n <tui-icon icon=\"@tui.message-square\" />\n <sc-manager-card [manager]=\"helpContacts[0]\" />\n </tui-push>\n }\n\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 />\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, TuiIcon, TuiLabel, TuiLoader, TuiNotification, TuiTextfield } from '@taiga-ui/core';\nimport { TuiInputPhoneInternational } from '@taiga-ui/experimental';\nimport { TuiButtonLoading, TuiElasticContainer, TuiFieldErrorPipe, TuiPush, TuiSortCountriesPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule } from '@taiga-ui/legacy';\nimport { AngularYandexMapsModule } from 'angular8-yandex-maps';\n\nimport { ScAccordionModule } from '../accordion';\nimport { ScManagerCardComponent } from '../contacts/manager-card/sc-manager-card.component';\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@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 ...TuiPush,\n TuiIcon,\n ScManagerCardComponent,\n TuiInputPhoneInternational,\n ...TuiTextfield,\n TuiSortCountriesPipe,\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 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 | scFormatDate }}</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 { ScFormatDatePipe } from '../pipes';\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, ScFormatDatePipe],\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 'grid-height-arrow',\n 'grid-width-arrow',\n 'retail-store',\n 'puzzle',\n 'deadline',\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 'img.window-handle-lock',\n 'img.phone',\n 'img.principles.assistance',\n 'img.principles.delivery',\n 'img.principles.installation',\n 'img.principles.maintenance',\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, inject, input, InputSignal } 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 host: {\n '[class.is_mobile]': 'isMobile',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScNewsCardComponent {\n /**\n * Данные о новости.\n */\n public news: InputSignal<ScNewsTile> = input.required<ScNewsTile>();\n\n /**\n * Ссылка на страницу новости. Используется именно `href`, так как остановить событие клика для `routerLink` не вышло.\n */\n public href: InputSignal<string | null> = input.required<string | null>();\n\n /**\n * Признак того, что этот компонент отображается на мобильном устройстве.\n */\n public readonly isMobile: boolean = inject(TUI_IS_MOBILE);\n}\n","<a\n [routerLink]=\"href()\"\n class=\"black-link relative flex h-full cursor-pointer flex-col gap-2 overflow-hidden rounded-xl bg-white px-2 pb-4 pt-2 shadow-sc\"\n>\n <div class=\"w-full grow overflow-hidden rounded-xl bg-tui-base-02 bg-cover bg-center bg-no-repeat\">\n <picture>\n @if (news().imageWebp) {\n <source\n type=\"image/webp\"\n [srcset]=\"news().imageWebp | scMediaImageTransformer\"\n />\n }\n <img\n [src]=\"news().image | scMediaImageTransformer: true\"\n [alt]=\"news().subject\"\n class=\"size-full object-cover\"\n />\n </picture>\n </div>\n <div class=\"flex w-full shrink-0 flex-col justify-between gap-2 overflow-hidden bg-white align-baseline\">\n <p class=\"text-sm font-medium text-tui-text-02\">{{ news().createdAt | scFormatDate }}</p>\n\n <div class=\"line-clamp-3 font-extrabold\">{{ news().subject }}</div>\n </div>\n</a>\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';\nimport { ScMediaImageTransformerPipe } from '@snabcentr/client-core';\n\nimport { ScFormatDatePipe } from '../pipes/sc-format-date';\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, ScFormatDatePipe, ScMediaImageTransformerPipe],\n exports: [ScNewsCardComponent, ScNewsCardSkeletonComponent],\n})\nexport class ScNewsModule {}\n","import { ChangeDetectionStrategy, Component, computed, EventEmitter, Inject, input, InputSignal, Output, Signal, TemplateRef, ViewChild } from '@angular/core';\nimport { ScCartItem, ScIImage } 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 styleUrl: './sc-order-item-mobile.component.less',\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 public readonly orderItem: InputSignal<ScCartItem | undefined> = input<ScCartItem | undefined>();\n\n /**\n * Событие нажатия на дополнительные действия.\n */\n @Output()\n public clickActionsEvent: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Изображение товара в заказе.\n */\n public readonly cartImage: Signal<ScIImage | undefined> = computed(() => {\n const product = this.orderItem()?.product;\n return product ? this.imageHelper.getImage(product) : undefined;\n });\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 showSpecification(): void {\n this.previewDialogService.open(this.specificationPreviewRef ?? '').subscribe();\n }\n}\n","@let orderItemData = orderItem();\n@let product = orderItemData?.product;\n@let cartImageData = cartImage();\n\n<div\n [style.opacity]=\"product?.isHidden ? 'var(--tui-disabled-opacity)' : ''\"\n 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>\n <ng-container *ngIf=\"orderItemData && product; else skeleton\">\n <button\n tuiIconButton\n (click)=\"product.isHidden ? null : 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 <picture *ngIf=\"cartImageData\">\n @if (cartImageData.imageWebp) {\n <source\n type=\"image/webp\"\n [srcset]=\"cartImageData.imageWebp\"\n />\n }\n @if (cartImageData.image) {\n <img\n (click)=\"product.isHidden ? null : clickCardEvent.emit()\"\n [src]=\"cartImageData.image\"\n [alt]=\"product.name\"\n [class.p-5]=\"!product.images?.length\"\n class=\"cursor-pointer\"\n />\n }\n </picture>\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 [class.disabled]=\"product.isHidden\"\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 <span *ngIf=\"product.supplierSku\"> Артикул производителя: {{ product.supplierSku }} </span>\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=\"orderItemData.specificationImgUrl\"\n (click)=\"showSpecification()\"\n [class.disabled]=\"product.isHidden\"\n >\n Спецификация\n </a>\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItemData.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItemData.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 <sc-cost-with-discount [product]=\"product\" />\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=\"orderItemData.height; else length\">\n <p>Высота: {{ orderItemData.height }} м.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"orderItemData.length\">Длина: {{ orderItemData.length }} м.</p>\n </ng-template>\n <p *ngIf=\"orderItemData.width\">Ширина: {{ orderItemData.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\">{{ orderItemData.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\"> {{ orderItemData.getCostRubStr() }} </span>\n </p>\n <sc-price-warehouse-stock\n [product]=\"product\"\n [fromMain]=\"false\"\n />\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 { CostWithDiscountComponent } from '../catalog/cost-with-discount/cost-with-discount.component';\nimport { ScPriceWarehouseStockComponent } from '../catalog/price-warehouse-stock/sc-price-warehouse-stock.component';\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: [\n CommonModule,\n TuiLink,\n TuiButton,\n TuiIcon,\n ...TuiBlockStatus,\n ...TuiPreview,\n ScCatalogModule,\n PolymorpheusTemplate,\n PolymorpheusOutlet,\n ScPriceWarehouseStockComponent,\n CostWithDiscountComponent,\n ],\n})\nexport class ScOrderModule {}\n","import { NgFor } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, InputSignal } from '@angular/core';\nimport { ScFaqItem } from '@snabcentr/client-core';\nimport { TuiLoader } from '@taiga-ui/core';\nimport { TuiAccordion } from '@taiga-ui/kit';\n\n/**\n * Компонент часто задаваемых вопросов.\n */\n@Component({\n standalone: true,\n selector: 'sc-frequently-asked-questions',\n templateUrl: './sc-frequently-asked-questions.component.html',\n imports: [TuiAccordion, TuiLoader, NgFor],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFrequentlyAskedQuestionsComponent {\n /**\n * {@link InputSignal} списка группы часто задаваемых вопросов.\n */\n public readonly items: InputSignal<ScFaqItem[]> = input.required<ScFaqItem[]>();\n\n /**\n * {@link InputSignal} отображения загрузки.\n */\n public readonly showLoading: InputSignal<boolean> = input<boolean>(false);\n}\n","<tui-loader\n [showLoader]=\"showLoading()\"\n [overlay]=\"true\"\n>\n <tui-accordion\n *ngFor=\"let item of items()\"\n [closeOthers]=\"false\"\n >\n <tui-accordion-item borders=\"top-bottom\">\n <!-- Заголовок вопроса. -->\n <span class=\"!whitespace-normal text-body-m-bold\">{{ item.question }}</span>\n\n <!-- Блок ответа с использованием [innerHTML]. -->\n <div\n tuiAccordionItemContent\n [innerHTML]=\"item.answer\"\n ></div>\n </tui-accordion-item>\n </tui-accordion>\n</tui-loader>\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input, InputSignal, OutputRef } from '@angular/core';\nimport { outputFromObservable } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ScFaqGroup, ScFrequentlyAskedQuestionsService } from '@snabcentr/client-core';\nimport { tuiIsPresent } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDataList } from '@taiga-ui/core';\nimport { TuiDataListWrapper, tuiItemsHandlersProvider } from '@taiga-ui/kit';\nimport { TuiSelectModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';\nimport { filter, first, map, Observable, tap } from 'rxjs';\n\n/**\n * Компонент выбора группы часто задаваемых вопросов.\n */\n@Component({\n standalone: true,\n selector: 'sc-frequently-asked-questions-group-selector',\n templateUrl: './sc-frequently-asked-questions-group-selector.component.html',\n imports: [AsyncPipe, TuiSelectModule, TuiTextfieldControllerModule, ReactiveFormsModule, TuiDataList, TuiDataListWrapper, NgIf, TuiButton, FormsModule],\n providers: [\n tuiItemsHandlersProvider({\n stringify: (item: ScFaqGroup) => item.name,\n }),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFrequentlyAskedQuestionsGroupSelectorComponent {\n /**\n * {@link Observable} списка группы часто задаваемых вопросов.\n */\n protected readonly groups$: Observable<ScFaqGroup[]> = inject(ScFrequentlyAskedQuestionsService).groups$.pipe(\n first(),\n tap((groups) => {\n if (groups.length > 0) {\n this.groupControl.setValue(groups[0]);\n }\n })\n );\n\n /**\n * {@link FormControl} выбранной группы.\n */\n protected readonly groupControl: FormControl<ScFaqGroup | null> = new FormControl<ScFaqGroup | null>(null);\n\n /**\n * {@link OutputRef} сигнал изменения идентификатора группы.\n */\n public readonly groupIdChange: OutputRef<number> = outputFromObservable(\n this.groupControl.valueChanges.pipe(\n filter(tuiIsPresent),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n map((group) => group.id!)\n )\n );\n\n /**\n * Формат отображения. 'list' - в виде списка, 'select' в виде выпадающего списка.\n */\n public readonly viewMode: InputSignal<'list' | 'select'> = input<'list' | 'select'>('list');\n}\n","@let groups = groups$ | async;\n\n@if (groups && groups.length) {\n @switch (viewMode()) {\n @case ('list') {\n <div class=\"flex flex-col items-center gap-3 rounded-xl p-4 shadow-sc\">\n <div class=\"flex w-full flex-col gap-2\">\n @for (item of groups; track $index) {\n <button\n tuiButton\n size=\"xs\"\n [tuiAppearanceState]=\"groupControl.value === item ? 'hover' : null\"\n [disabled]=\"groupControl.value === item\"\n (click)=\"groupControl.patchValue(item)\"\n appearance=\"flat-grayscale\"\n class=\"!justify-start !text-body-s-bold\"\n >\n {{ item.name }}\n </button>\n }\n </div>\n </div>\n }\n\n @case ('select') {\n <form>\n <tui-select\n [formControl]=\"groupControl\"\n [tuiTextfieldLabelOutside]=\"true\"\n >\n <tui-data-list-wrapper\n *tuiDataList\n [items]=\"groups\"\n />\n </tui-select>\n </form>\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { tuiCreateToken } from '@taiga-ui/cdk';\n\n/**\n * Токен перечисления размеров страниц пагинации.\n */\nexport const SC_PAGE_SIZE_OPTIONS: InjectionToken<number[]> = tuiCreateToken<number[]>([5]);\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, output, OutputEmitterRef } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ScConvertersService, ScFaqItem, ScFrequentlyAskedQuestionsService, ScIFrequentlyAskedQuestionsPaginationParams, ScIPaginate } from '@snabcentr/client-core';\nimport { TUI_WINDOW_SIZE, tuiIsFalsy, tuiIsPresent } from '@taiga-ui/cdk';\nimport { TuiButton } from '@taiga-ui/core';\nimport { TuiPagination } from '@taiga-ui/kit';\nimport { BehaviorSubject, combineLatest, debounceTime, filter, map, Observable, shareReplay, startWith, Subject, switchMap } from 'rxjs';\n\nimport { ScFrequentlyAskedQuestionsComponent, ScFrequentlyAskedQuestionsGroupSelectorComponent } from '..';\nimport { SC_PAGE_SIZE_OPTIONS } from '../frequently-asked-questions/sc-page-size-options';\n\n/**\n * Компонент часто задаваемых вопросов с возможностью выбора группы вопросов.\n */\n@Component({\n standalone: true,\n selector: 'sc-frequently-asked-questions-with-groups',\n templateUrl: './sc-frequently-asked-questions-with-groups.component.html',\n imports: [AsyncPipe, NgIf, ScFrequentlyAskedQuestionsGroupSelectorComponent, TuiButton, ScFrequentlyAskedQuestionsComponent, TuiPagination],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFrequentlyAskedQuestionsWithGroupsComponent {\n /**\n * {@link Observable} изменения Email для связи по вопросам рекламаций.\n */\n protected readonly frequentlyAskedQuestionsService: ScFrequentlyAskedQuestionsService = inject(ScFrequentlyAskedQuestionsService);\n\n /**\n * Сервис конвертации данных.\n */\n private readonly convertersService: ScConvertersService = inject(ScConvertersService);\n\n /**\n * Индекс первой страницы.\n */\n private readonly firstPageIndex: number = 1;\n\n /**\n * Количество записей на странице пагинации.\n */\n private readonly pageSizeOptions: number[] = inject(SC_PAGE_SIZE_OPTIONS);\n\n /**\n * {@link BehaviorSubject} изменения количества записей на странице.\n */\n private readonly perPage$: BehaviorSubject<number> = new BehaviorSubject<number>(this.pageSizeOptions[0]);\n\n /**\n * {@link BehaviorSubject} изменения номера страницы.\n */\n private readonly page$: BehaviorSubject<number> = new BehaviorSubject<number>(this.firstPageIndex);\n\n /**\n * {@link BehaviorSubject} изменения идентификатора группы.\n */\n protected readonly groupId$: Subject<number> = new Subject<number>();\n\n /**\n * Сигнал нажатия на кнопку \"Задать вопрос\".\n */\n public readonly clickSendQuestion: OutputEmitterRef<void> = output();\n\n /**\n * {@link Observable} запроса данных списка заказов.\n */\n private readonly request$: Observable<ScIPaginate<ScFaqItem> | null> = combineLatest({\n page: this.page$,\n perPage: this.perPage$,\n group: this.groupId$,\n }).pipe(\n // Нулевой debounceTime для случая, когда меняются направление и поле сортировки одновременно.\n debounceTime(0),\n switchMap((value: ScIFrequentlyAskedQuestionsPaginationParams) =>\n this.frequentlyAskedQuestionsService\n .getFrequentlyAskedQuestions$(this.convertersService.removeNull<ScIFrequentlyAskedQuestionsPaginationParams>(value))\n .pipe(startWith(null))\n ),\n shareReplay({ refCount: true, bufferSize: 1 })\n );\n\n /**\n * {@link Observable} изменения общего количества страниц пагинации.\n */\n protected readonly pageCount$: Observable<number> = this.request$.pipe(\n filter(tuiIsPresent),\n map(({ meta }) => meta.lastPage)\n );\n\n /**\n * {@link Observable} изменения номера страницы пагинации из данных пагинации запроса.\n */\n protected readonly currentPage$: Observable<number> = this.request$.pipe(\n filter(tuiIsPresent),\n map(({ meta }) => meta.currentPage - 1)\n );\n\n /**\n * {@link Observable} изменения состояния загрузки данных.\n */\n protected readonly isLoading = toSignal(this.request$.pipe(map(tuiIsFalsy)), { initialValue: false });\n\n /**\n * {@link Observable} изменения списка заказов страницы пагинации.\n */\n protected readonly data$: Observable<ScFaqItem[] | null> = this.request$.pipe(\n filter(tuiIsPresent),\n map((data) => data.data),\n startWith(null)\n );\n\n /**\n * {@link Observable} изменения формата отображения фильтра групп.\n */\n protected readonly viewMode$: Observable<'list' | 'select'> = inject(TUI_WINDOW_SIZE).pipe(map((rect) => (rect.width > 768 ? 'list' : 'select')));\n\n /**\n * Устанавливает данные пагинации.\n *\n * @param pageIndex Индекс страницы.\n */\n protected paginationChange(pageIndex: number): void {\n this.page$.next(pageIndex + 1);\n }\n\n /**\n * Устанавливает идентификатор группы.\n *\n * @param id Идентификатор группы.\n */\n protected groupIdChange(id: number): void {\n this.groupId$.next(id);\n this.paginationChange(0);\n }\n}\n","@let items = data$ | async;\n@let pageCount = pageCount$ | async;\n@let viewMode = viewMode$ | async;\n\n<div\n *ngIf=\"viewMode\"\n class=\"flex gap-6\"\n [class.flex-col]=\"viewMode === 'select'\"\n>\n <div class=\"flex flex-col gap-7\">\n <sc-frequently-asked-questions-group-selector\n (groupIdChange)=\"groupIdChange($event)\"\n [viewMode]=\"viewMode\"\n class=\"shrink-0\"\n [class.w-64]=\"viewMode !== 'select'\"\n />\n\n <button\n *ngIf=\"viewMode === 'list'\"\n tuiButton\n size=\"m\"\n type=\"button\"\n iconStart=\"@tui.circle-help\"\n appearance=\"secondary\"\n (click)=\"clickSendQuestion.emit()\"\n class=\"self-center\"\n >\n Задать вопрос\n </button>\n </div>\n\n <div class=\"grow\">\n @if (items && items.length) {\n <sc-frequently-asked-questions\n [items]=\"items\"\n [showLoading]=\"isLoading()\"\n />\n\n <tui-pagination\n *ngIf=\"pageCount && pageCount > 1\"\n [length]=\"pageCount\"\n [index]=\"(currentPage$ | async) ?? 0\"\n (indexChange)=\"paginationChange($event)\"\n class=\"mt-4 !justify-items-center\"\n />\n } @else {\n <p class=\"text-body-s-bold\">Список вопросов пуст</p>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { SC_COMPANY_INFO, SC_URLS, ScICompanyBaseInfo, ScIUrls } from '@snabcentr/client-core';\nimport { TuiLink, TuiScrollbar } from '@taiga-ui/core';\nimport { TuiAppearance, TuiWithAppearance } from '@taiga-ui/core/directives/appearance';\nimport { TuiGroup } from '@taiga-ui/core/directives/group';\nimport { TuiIcons, TuiWithIcons } from '@taiga-ui/core/directives/icons';\nimport { TuiAccordionDirective, TuiAccordionItem, TuiAccordionItemContent } from '@taiga-ui/kit';\n\n/**\n * Компонент политики обработки персональных данных пользователей сайта.\n */\n@Component({\n standalone: true,\n selector: 'sc-personal-data-processing-policy',\n styleUrls: ['./sc-personal-data-processing-policy.component.scss'],\n templateUrl: './sc-personal-data-processing-policy.component.html',\n imports: [TuiGroup, TuiAccordionDirective, TuiAccordionItem, TuiAccordionItemContent, TuiAppearance, TuiWithAppearance, TuiIcons, TuiWithIcons, TuiLink, TuiScrollbar],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPersonalDataProcessingPolicyComponent {\n /**\n * Данные о компании.\n */\n protected readonly companyInfo: Readonly<ScICompanyBaseInfo> = inject(SC_COMPANY_INFO);\n\n /**\n * Список ссылок приложения.\n */\n protected readonly urls: ScIUrls = inject(SC_URLS);\n}\n","<p class=\"headers\">\n Политика {{ companyInfo.name }} в отношении обработки персональных данных пользователей сайта\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }}\n </a>\n .\n</p>\n<tui-accordion class=\"mt-4\">\n <tui-accordion-item borders=\"top-bottom\">\n 1. Общие положения\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 1.1. Политика {{ companyInfo.name }} (Юридический адрес: {{ companyInfo.legalAddress }}, ОГРН: {{ companyInfo.ogrn }}, ИНН: {{ companyInfo.inn }}) (далее по\n тексту также — «Общество») в отношении обработки персональных данных (далее по тексту также — «Политика») определяет позицию и намерения Общества в области\n обработки и защиты персональных данных, с целью соблюдения и защиты прав и свобод каждого человека и, в особенности, права на неприкосновенность частной жизни,\n личную и семейную тайну, защиту своей чести и доброго имени.\n </p>\n <p>1.2. Политика неукоснительно исполняется руководителями и работниками всех структурных подразделений, филиалов и представительств Общества.</p>\n <p>\n 1.3. Действие Политики распространяется на все персональные данные субъектов, обрабатываемые в Обществе с применением средств автоматизации и без применения\n таких средств.\n </p>\n <p>1.4. К настоящей Политике имеет доступ любой субъект персональных данных, в том числе с использованием сети «Интернет».</p>\n <p>\n 1.5. Общество периодически актуализирует настоящую Политику и вправе в одностороннем порядке в любой момент изменять ее условия. Общество рекомендует регулярно\n проверять содержание настоящей Политики на предмет ее возможных изменений. Если иное не предусмотрено Политикой, все вносимые в нее изменения вступают в силу с\n даты, указанной в Политике.\n </p>\n <p class=\"mb-3\">\n 1.6. Во всем ином, что не предусмотрено настоящей Политикой, Общество руководствуется положениями действующего законодательства Российской Федерации.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 2. Термины\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 2.1. Персональные данные — любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу (субъекту персональных данных). К\n такой информации, в частности, можно отнести: ФИО, год, месяц, дата и место рождения, адрес, сведения о семейном, социальном, имущественном положении, сведения\n об образовании, профессии, доходах, а также другую информацию, позволяющую по совокупности определить (идентифицировать) субъекта персональных данных.\n </p>\n <p>\n 2.2. Обработка персональных данных — любое действие (операция) или совокупность действий (операций), совершаемых с использованием средств автоматизации или без\n использования таких средств с персональными данными, включая сбор, запись, систематизацию, накопление, хранение, уточнение (обновление, изменение), извлечение,\n использование, передачу (распространение, предоставление, доступ), обезличивание, блокирование, удаление, уничтожение персональных данных.\n </p>\n <p>2.3. Субъект персональных данных — физическое лицо, чьи персональные данные обрабатываются.</p>\n <p>\n 2.4. Оператор — лицо, самостоятельно или совместно с иными лицами организующее и (или) осуществляющее обработку персональных данных, а также определяющие цели\n обработки персональных данных, состав персональных данных, подлежащих обработке, действия (операции), совершаемые с персональными данными. Для целей настоящей\n Политики Общество, обрабатывая персональные данные, является оператором, если иное прямо не указано в Политике.\n </p>\n <p>\n 2.5. Обработчик — любое лицо, которое на основании договора с оператором осуществляет обработку персональных данных по поручению такого оператора, действуя от\n имени и (или) в интересах последнего при обработке персональных данных. Оператор несет ответственность перед субъектом персональных данных за действия или\n бездействия обработчика. Обработчик несет ответственность перед оператором.\n </p>\n <p>\n 2.6. Cookies — это небольшие текстовые файлы, содержащие некоторую информацию, которые загружаются на пользовательское устройство (ПК, смартфон и т.д.) во время\n просмотра веб-страницы.\n </p>\n <p class=\"mb-3\">\n 2.7. Прочие термины используются в настоящей Политике в соответствии со значениями, определяемыми действующим законодательством Российской Федерации, если иное\n прямо не указано в Политике.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 3. Порядок и условия обработки персональных данных\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 3.1. Под безопасностью персональных данных Общество понимает защищенность персональных данных от неправомерного или случайного доступа к ним, уничтожения,\n изменения, блокирования, копирования, предоставления, распространения персональных данных, а также от иных неправомерных действий в отношении персональных\n данных и принимает необходимые правовые, организационные и технические меры для защиты персональных данных.\n </p>\n <p>\n 3.2. Обработка и обеспечение безопасности персональных данных в Обществе осуществляется в соответствии с требованиями Конституции Российской Федерации,\n Федерального закона № 152-ФЗ «О персональных данных», подзаконных актов, других определяющих случаи и особенности обработки персональных данных законов\n Российской Федерации, а также руководящих и методических документов Правительства Российской Федерации, Минцифры России, Роскомнадзора, ФСТЭК России и ФСБ\n России.\n </p>\n <p>3.3. При обработке персональных данных Общество придерживается следующих принципов:</p>\n <ul class=\"ml-4 list-disc\">\n <li>законности и справедливости;</li>\n <li>ограничения обработки персональных данных достижением конкретных, заранее определенных и законных целей;</li>\n <li>недопущения обработки персональных данных, несовместимой с целями сбора персональных данных;</li>\n <li>недопущения объединения баз данных, содержащих персональные данные, обработка которых осуществляется в целях, несовместимых между собой;</li>\n <li>соответствия содержания и объема обрабатываемых персональных данных заявленным целям обработки;</li>\n <li>недопущения избыточности обрабатываемых персональных данных по отношению к заявленным целям обработки;</li>\n <li>\n обеспечения точности персональных данных, их достаточности, а в необходимых случаях и актуальности по отношению к целям обработки персональных данных, а\n также принятия мер по удалению или уточнению неполных или неточных данных;\n </li>\n <li>\n прозрачности обработки персональных данных: субъекту персональных данных может предоставляться соответствующая информация, касающаяся обработки его\n персональных данных;\n </li>\n <li>\n осуществления хранения персональных данных в форме, позволяющей определить субъекта персональных данных, не дольше, чем этого требуют заявленные цели\n обработки персональных данных.\n </li>\n </ul>\n <p>3.4. Общество обрабатывает персональные данные в следующих случаях:</p>\n <p>• осуществление Обществом деятельности в качестве владельца сайта, предоставляющего информацию о товарах (услугах) «{{ urls.siteUrl }}»;</p>\n <tui-scrollbar class=\"my-4 w-full\">\n <table class=\"w-full min-w-[44rem] table-fixed border border-gray-300\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th class=\"w-1/4 border border-gray-300 px-4 py-2 text-left\">Цель обработки персональных данных</th>\n <th class=\"w-1/5 border border-gray-300 px-4 py-2 text-left\">Категории субъектов персональных данных</th>\n <th class=\"w-6/12 border border-gray-300 px-4 py-2 text-left\">Перечень персональных данных</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td class=\"border border-gray-300 px-4 py-2\">\n Использование, в том числе посещение, сайта Общества в соответствии с предоставляемой функциональностью, включая регистрацию и авторизацию на\n Сайте, сообщения через формы обратной связи\n </td>\n <td class=\"border border-gray-300 px-4 py-2\">Пользователи Сайта</td>\n <td class=\"border border-gray-300 px-4 py-2\">\n <ul class=\"list-disc\">\n <li>ФИО;</li>\n <li>контактная информация (номер телефона, адрес электронной почты, ID в мессенджерах и пр.);</li>\n <li>\n иные персональные данные, самостоятельно предоставленные лицами в адрес Общества (в рамках заполнения сведений на Сайте или в иных\n сервисах Общества);\n </li>\n <li>\n сведения, собираемые посредством метрических программ, в том числе технические сведения о пользовательских устройствах и идентификаторах\n (IP-адрес, cookies, геолокация устройства, метаданные и пр.)\n </li>\n </ul>\n </td>\n </tr>\n <tr>\n <td class=\"border border-gray-300 px-4 py-2\">Оформление заказов (товаров и услуг) на сайте Общества</td>\n <td class=\"border border-gray-300 px-4 py-2\">\n Лица, оформляющие и (или) получающие (возвращающие) заказы в пределах Российской Федерации, а также их представители\n </td>\n <td class=\"border border-gray-300 px-4 py-2\">\n <ul class=\"list-disc\">\n <li>ФИО;</li>\n <li>адрес доставки;</li>\n <li>контактная информация (номер телефона, адрес электронной почты, ID в мессенджерах и пр.);</li>\n <li>должность, реквизиты доверенностей;</li>\n <li>записи звонков (разговоров);</li>\n <li>банковские реквизиты, включая данные платежной карты;</li>\n <li>ОГРНИП и ИНН (если лицо оформляет заказ как Физическое лицо или ИП);</li>\n <li>иные данные, самостоятельно предоставленные лицами в адрес Общества (в рамках оформления и доставки (возврата) заказа);</li>\n <li>\n сведения, собираемые посредством метрических программ, в том числе технические сведения о пользовательских устройствах и идентификаторах\n (IP-адрес, cookies, геолокация устройства, метаданные и пр.)\n </li>\n </ul>\n </td>\n </tr>\n <tr>\n <td class=\"border border-gray-300 px-4 py-2\">Направление рекламы</td>\n <td class=\"border border-gray-300 px-4 py-2\">Получатели рекламы или новостных рассылок, предварительно выразившие на это согласие</td>\n <td class=\"border border-gray-300 px-4 py-2\">\n <ul class=\"list-disc\">\n <li>ФИО;</li>\n <li>контактная информация (номер телефона, адрес электронной почты, ID в мессенджерах и пр.);</li>\n <li>\n иные данные, самостоятельно предоставленные лицами в адрес Общества (в рамках выражения согласия на получения рекламы или новостей);\n </li>\n <li>\n сведения, собираемые посредством метрических программ, в том числе технические сведения о пользовательских устройствах и идентификаторах\n (IP-адрес, cookies, геолокация устройства, метаданные и пр.)\n </li>\n </ul>\n </td>\n </tr>\n <tr>\n <td class=\"border border-gray-300 px-4 py-2\">Контроль качества использования Сайта Общества</td>\n <td class=\"border border-gray-300 px-4 py-2\">Пользователи Сайта Общества (покупатели, продавцы, и пр.)</td>\n <td class=\"border border-gray-300 px-4 py-2\">\n <ul class=\"list-disc\">\n <li>ФИО;</li>\n <li>контактная информация (номер телефона, адрес электронной почты, ID в мессенджерах и пр.);</li>\n <li>\n иные данные, самостоятельно предоставленные лицами в адрес Общества (в рамках использования Сайта Общества) – например, отзывы по\n приобретенным товарам (услугам);\n </li>\n <li>\n сведения, собираемые посредством метрических программ, в том числе технические сведения о пользовательских устройствах и идентификаторах\n (IP-адрес, cookies, геолокация устройства, метаданные и пр.)\n </li>\n </ul>\n </td>\n </tr>\n </tbody>\n </table>\n </tui-scrollbar>\n\n <p>3.5. Общество обрабатывает персональные данные только при наличии хотя бы одного из условий ниже в течение следующих сроков:</p>\n <ol class=\"ml-4 list-decimal\">\n <li>\n С согласия субъекта персональных данных на обработку его персональных данных - в течение срока, на который было дано согласие на обработку персональных\n данных,\n </li>\n <li>\n Для достижения целей, предусмотренных международным договором Российской Федерации или законом, для осуществления и выполнения возложенных законодательством\n Российской Федерации на оператора функций, полномочий и обязанностей - в течение срока, установленного соответствующими международными договорами или\n законами.\n </li>\n <li>\n При необходимости обработки персональных данных, подлежащих опубликованию или обязательному раскрытию в соответствии с федеральным законом - в течение\n срока, установленного соответствующими законами.\n </li>\n <li>\n Для исполнения судебного акта, акта другого органа или должностного лица, подлежащих исполнению в соответствии с законодательством Российской Федерации об\n исполнительном производстве - в течение срока, необходимо для исполнения соответствующего акта.\n </li>\n <li>\n В связи с участием лица в конституционном, гражданском, административном, уголовном судопроизводстве, судопроизводстве в арбитражных судах - в течение срока\n участия в соответствующем судопроизводстве, включая сроки обжалования (оспаривания) судебных актов, кроме случаев, когда более длительный срок обработки\n персональных данных установлен действующим законодательством Российской Федерации,\n </li>\n <li>\n Для исполнения договора, стороной которого либо выгодоприобретателем или поручителем по которому является субъект персональных данных, а также для\n заключения договора по инициативе субъекта персональных данных или договора, по которому субъект персональных данных будет являться выгодоприобретателем или\n поручителем - в течение срока действия такого договора, кроме случаев, когда более длительный срок обработки персональных данных установлен действующим\n законодательством Российской Федерации или договором.\n </li>\n <li>\n Для защиты жизни, здоровья или иных жизненно важных интересов субъекта персональных данных, если получение согласия субъекта персональных данных невозможно\n - до момента, когда получение согласия субъекта персональных данных станет возможным или когда соответствующие основания, угрожающие жизни, здоровью или\n иным жизненно важным интересам, отпадут (в зависимости от того, какое обстоятельство наступит раньше)\n </li>\n <li>\n Для осуществления прав и законных интересов оператора или третьих лиц при условии, что при этом не нарушаются права и свободы субъекта персональных данных -\n в течение срока, необходимого для осуществления прав и обеспечения законных интересов\n </li>\n </ol>\n <p>\n Конкретный срок определяется Обществом с учетом положений настоящей Политики, внутренних документов и локальных нормативных актов Общества, а также принципов\n обработки персональных данных и требований действующего законодательства Российской Федерации, в том числе в части прекращения обработки персональных данных при\n достижении конкретных, заранее определенных и законных целей такой обработки.\n </p>\n <p>\n 3.6. Общество вправе поручить обработку персональных данных Обработчикам на основании заключаемых с ними договоров. Это означает, что Общество делегирует часть\n своих функций определенному им лицу, которое при этом действует от имени или в интересах Общества.\n </p>\n <p>\n Общество привлекает таких лиц, когда не обладает необходимым уровнем знаний или ресурсов для достижения соответствующего результата (например, когда Обществу\n необходимы дополнительные вычислительные мощности для эксплуатации своих веб-сайтов и онлайн-сервисов, он может арендовать выделенные серверы у третьего лица в\n отсутствие собственных серверов) или когда ему более эффективно с точки зрения собственных трудозатрат и качества деятельности передать отдельные функции на\n аутсорсинг (например, если количество пользователей веб-сайтов и онлайн-сервисов Общества резко возрастет, ему может потребоваться обратиться к третьему лицу за\n услугами контактного центра по работе с клиентами).\n </p>\n <p>\n Обработчики обязуются соблюдать принципы и правила обработки персональных данных, предусмотренные Федеральным законом № 152-ФЗ «О персональных данных» (включая\n ст. 18.1 и ч. 5 ст. 18), иными законами и подзаконными актами. Для каждого обработчика в договоре будут определены:\n </p>\n <ul class=\"ml-4 list-disc\">\n <li>перечень обрабатываемых персональных данных;</li>\n <li>цели их обработки;</li>\n <li>перечень действий (операций), которые будут совершаться с персональными данными обработчиком;</li>\n <li>\n обязанности обработчика по соблюдению конфиденциальности и обеспечению безопасности персональных данных при их обработке, а также перечень принимаемых\n обработчиком мер по обеспечению защиты обрабатываемых им персональных данных, включая требование об уведомлении Общества об инцидентах с персональными\n данными;\n </li>\n <li>\n обязанность по запросу Общества в течение срока действия поручения на обработку персональных данных предоставлять Обществу документы и иную информацию,\n подтверждающие принятие мер и соблюдение в целях исполнения поручения Общества требований, установленных Федеральным законом № 152-ФЗ «О персональных\n данных».\n </li>\n </ul>\n <p>\n Обработчик не обязан получать согласие субъекта персональных данных на обработку его персональных данных. Если для обработки персональных данных по поручению\n Общества необходимо получение согласия субъекта персональных данных, такое согласие получает непосредственно Общество.\n </p>\n <p>\n 3.7. При наличии соответствующих правовых оснований, установленных законодательством Российской Федерации, Общество вправе осуществлять передачу персональных\n данных третьим лицам без поручения таким лицам обработки персональных данных.\n </p>\n <p>\n К указанным лицам, например, относятся банки, осуществляющие расчеты с контрагентами Общества, перевозчики и экспедиторы, осуществляющие доставку заказов в\n соответствии со своими правилами, контрагенты Общества, которым Общество передает данные доверенностей своих представителей, государственные органы,\n запрашивающие персональные данные в пределах своей компетенции, и т.д.\n </p>\n <p>\n Такие лица не обрабатывают персональные данные от имени Общества или в его интересах, поскольку имеют собственные цель и правовые основания такой обработки\n (например, банки принимают платежные документы в соответствии с требованиями банковского законодательства, а Общество не вправе вмешиваться в их деятельность).\n </p>\n <p>Общество осуществляет передачу персональных данных:</p>\n <ul class=\"ml-4 list-disc\">\n <li>ООО «ЯНДЕКС» (Россия). 119021, Россия, Москва, ул. Льва Толстого, д. 16. Сбор веб-аналитики (сервис Яндекс.Метрика);</li>\n <li>\n АО «ПРЕДПРОЦЕССИНГОВЫЙ РАСЧЕТНЫЙ ЦЕНТР». 129110, Россия, Москва, Олимпийский проспект, дом 16, строение 5, этаж 4, блок А<br />Телефон: 8 (495) 987-19-60\n </li>\n <li>ООО \"ЕПОЧТА СОФТВАРЕ\". 603005, Россия, Нижегородская обл, г. Нижний Новгород, ул. Нестерова, д. 4А, офис кв. 57</li>\n </ul>\n <p>\n 3.8. В случае, когда конкретное лицо, которому Общество передает персональные данные, в том числе без поручения обработки персональных данных, является\n иностранным и передача осуществляются за пределы Российской Федерации (например, продавцу товара с доставкой из-за пределов Российской Федерации), Общество\n осуществляет трансграничную передачу персональных данных. Такая передача осуществляется Обществом при наличии соответствующего правового основания обработки\n персональных данных, а также при условии уведомления Роскомнадзора в порядке, предусмотренном ст. 22 Федерального закона № 152-ФЗ «О персональных данных».\n </p>\n <p>\n 3.9. Если иное не предусмотрено законодательством Российской Федерации, Общество прекращает обработку персональных данных (в отношении любой из заявленных выше\n целей) и уничтожает их в случаях:\n </p>\n <ul class=\"ml-4 list-disc\">\n <li>ликвидации Общества;</li>\n <li>реорганизации Общества, влекущей прекращение его деятельности;</li>\n <li>отпадения правовых оснований обработки персональных данных и/или достижения целей обработки персональных данных.</li>\n </ul>\n <p>\n Конкретный порядок уничтожения персональных данных на носителях, содержащих персональные данные, в том числе внешних/съемных электронных носителях, бумажных\n носителях и в информационных системах персональных данных, определяются Обществом в своих внутренних документах и локальных нормативных актах.\n </p>\n <p>3.10. Обработка персональных данных Обществом ведется смешанным способом: с использованием средств автоматизации, и без использования средств автоматизации.</p>\n <p>\n В ряде случаев, как это описано ниже, Общество получает и обрабатывает персональные данные автоматически с помощью метрических программ, используемых на\n веб-сайтах и в онлайн-сервисах Общества. Для работы с такими данными Общество использует cookies.\n </p>\n <p>\n Cookies используются сайтами для распознавания пользовательских устройств, определения пользовательских предпочтений (в том числе рекламных), а также для сбора\n статистик взаимодействия пользователя с сайтами, для улучшения опыта использования такого сайта или для устранения различных ошибок, которые могут периодически\n возникать. При этом перечень целей, для достижения которых необходимы cookies, не является исчерпывающим и зависит от конкретного сайта, который пользователь\n посещает или иным образом использует.\n </p>\n <p>\n Пользователи также могут самостоятельно ограничить или полностью отключить установку cookies через настройки своего веб-браузера. Однако без использования\n технических cookies веб-сайты и онлайн-сервисы Общества могут работать некорректно, а часть их функционала может оказаться недоступна.\n </p>\n <p>3.11. Общество при осуществлении обработки персональных данных:</p>\n <ul class=\"ml-4 list-disc\">\n <li>\n принимает меры, необходимые и достаточные для обеспечения выполнения требований законодательства Российской Федерации, внутренних документов и локальных\n нормативных актов Общества в области персональных данных;\n </li>\n <li>\n принимает правовые, организационные и технические меры для защиты персональных данных от неправомерного или случайного доступа к ним, уничтожения,\n изменения, блокирования, копирования, предоставления, распространения персональных данных, а также от иных неправомерных действий в отношении персональных\n данных;\n </li>\n <li>назначает лицо, ответственное за организацию обработки персональных данных в Обществе;</li>\n <li>\n издает внутренние документы, определяющие политику Общества в отношении обработки персональных данных, локальные акты по вопросам обработки персональных\n данных, а также локальные акты, устанавливающие процедуры, направленные на предотвращение и выявление нарушений законодательства Российской Федерации,\n устранение последствий таких нарушений;\n </li>\n <li>\n осуществляет ознакомление работников Общества, его филиалов, представительств и структурных подразделений, непосредственно осуществляющих обработку\n персональных данных, с положениями законодательства Российской Федерации, внутренних документов и локальных нормативных актов Общества в области\n персональных данных, в том числе с требованиями к защите персональных данных, и обучение указанных работников;\n </li>\n <li>проводит регулярные обязательные тренинги для своих работников по вопросам персональных данных;</li>\n <li>\n осуществляет внутренний контроль и (или) аудит соответствия обработки персональных данных требованиям законодательства Российской Федерации и принятым в\n соответствии с ним нормативным правовым актам, иным требованиям к защите персональных данных, настоящей Политике, внутренним документам и локальным\n нормативным актам Общества в области персональных данных;\n </li>\n <li>публикует или иным образом обеспечивает неограниченный доступ к настоящей Политике;</li>\n <li>прекращает обработку персональных данных и уничтожает их в случаях, предусмотренных законодательством Российской Федерации;</li>\n <li>совершает иные действия, предусмотренные законодательством Российской Федерации в области персональных данных.</li>\n </ul>\n <p class=\"mb-3\">\n 3.12. Общество вправе направлять пользователям информационные и рекламные рассылки, связанные с предоставляемыми услугами. Пользователь может в любой момент\n отказаться от рассылки, обратившись в поддержку.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 4. Права субъекта персональных данных\n <ng-template tuiAccordionItemContent>\n <div>\n <p>Лицо, персональные данные которого обрабатываются Обществом, имеет:</p>\n <ul class=\"ml-4 list-disc\">\n <li>право на отзыв ранее данного им согласия на обработку персональных данных;</li>\n <li>право на получение информации, касающейся обработки персональных данных;</li>\n <li>\n право требовать уточнения своих персональных данных, их блокирования или уничтожения, если персональные данные являются неполными, устаревшими,\n недостоверными, незаконно полученными, не являются необходимыми для заявленной цели обработки, а также требовать прекращения обработки персональных данных,\n если цель такой обработки достигнута Обществом.\n </li>\n </ul>\n <p>\n Если иной порядок взаимодействия Общества и субъекта персональных данных не предусмотрен соответствующим документом между ними (например, договором или текстом\n согласия на обработку персональных данных), для реализации указанных прав субъекту персональных данных необходимо направить Обществу заявление: в письменной\n форме и подписанное собственноручной подписью — по адресу {{ companyInfo.legalAddress }}.\n </p>\n <p>Такое заявление должно в обязательном порядке содержать описание требований субъекта персональных данных, а также следующие сведения:</p>\n <ul class=\"ml-4 list-disc\">\n <li>ФИО субъекта персональных данных;</li>\n <li>\n номер основного документа, удостоверяющего личность субъекта персональных данных или его представителя, сведения о дате выдачи указанного документа и\n выдавшем его органе ЛИБО иные данные, позволяющие однозначно идентифицировать субъекта персональных данных;\n </li>\n <li>\n сведения, подтверждающие участие субъекта персональных данных в отношениях с Обществом, ЛИБО сведения, иным способом подтверждающие факт обработки\n персональных данных Обществом;\n </li>\n <li>подпись субъекта персональных данных или его представителя.</li>\n </ul>\n <p class=\"mb-3\">\n Субъект персональных данных также вправе обжаловать действия (бездействия) и решения Общества, нарушающие его права при обработке персональных данных, в\n уполномоченный орган по защите прав субъектов персональных данных (Роскомнадзор) и в суд в порядке, установленном законодательством Российской Федерации.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 5. Сведения о реализуемых требованиях к защите персональных данных\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n Общество при обработке персональных данных принимает необходимые правовые, организационные и технические меры для защиты персональных данных от неправомерного\n или случайного доступа к ним, уничтожения, изменения, блокирования, копирования, предоставления, распространения персональных данных, а также от иных\n неправомерных действий в отношении персональных данных. Общество регулярно пересматривает и актуализирует принимаемые меры для обеспечения наилучшей\n защищенности обрабатываемых персональных данных – такие меры описываются в настоящей Политике, внутренних документах и локальных нормативных актах Общества.\n </p>\n <p>К таким мерам, в частности, относится:</p>\n <ul class=\"ml-4 list-disc\">\n <li>разработка моделей угроз;</li>\n <li>определение угроз безопасности персональных данных при их обработке в информационных системах персональных данных;</li>\n <li>\n применение организационных и технических мер по обеспечению безопасности персональных данных при их обработке в информационных системах персональных данных,\n необходимых для выполнения требований к защите персональных данных, исполнение которых обеспечивает установленные Правительством Российской Федерации уровни\n защищенности персональных данных;\n </li>\n <li>применение прошедших в установленном порядке процедуру оценки соответствия средств защиты информации;</li>\n <li>\n оценка эффективности принимаемых мер по обеспечению безопасности персональных данных до ввода в эксплуатацию информационной системы персональных данных;\n </li>\n <li>обнаружение фактов несанкционированного доступа к персональным данным и принятием мер;</li>\n <li>восстановление персональных данных, модифицированных или уничтоженных вследствие несанкционированного доступа к ним;</li>\n <li>\n установление правил доступа к персональным данным, обрабатываемым в информационной системе персональных данных, а также обеспечением регистрации и учета\n всех действий, совершаемых с персональными данными в информационной системе персональных данных;\n </li>\n <li>контроль за принимаемыми мерами по обеспечению безопасности персональных данных и уровня защищенности информационных систем персональных данных;</li>\n <li>учет машинных носителей персональных данных;</li>\n <li>организация пропускного и внутриобъектового режимов на территории Общества;</li>\n <li>размещение технических средств обработки персональных данных в пределах охраняемой территории;</li>\n <li>поддержание технических средств охраны, сигнализации в постоянной готовности;</li>\n <li>проведение мониторинга действий пользователей, проведение разбирательств по фактам нарушения требований безопасности персональных данных.</li>\n </ul>\n </div>\n </ng-template>\n </tui-accordion-item>\n</tui-accordion>\n","import { ChangeDetectionStrategy, Component, inject, input, InputSignal } from '@angular/core';\nimport { SC_COMPANY_INFO, SC_URLS, ScICompanyBaseInfo, ScIUrls } from '@snabcentr/client-core';\nimport { TuiLink } from '@taiga-ui/core';\nimport { TuiGroup } from '@taiga-ui/core/directives/group';\nimport { TuiAccordionDirective, TuiAccordionItem, TuiAccordionItemContent } from '@taiga-ui/kit';\n\n/**\n * Компонент публичной оферты.\n */\n@Component({\n standalone: true,\n selector: 'sc-public-offer',\n styleUrls: ['./sc-public-offer.component.scss'],\n templateUrl: './sc-public-offer.component.html',\n imports: [TuiGroup, TuiAccordionDirective, TuiAccordionItem, TuiAccordionItemContent, TuiLink],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPublicOfferComponent {\n /**\n * Данные о компании.\n */\n protected readonly companyInfo: Readonly<ScICompanyBaseInfo> = inject(SC_COMPANY_INFO);\n\n /**\n * Список ссылок приложения.\n */\n protected readonly urls: ScIUrls = inject(SC_URLS);\n\n /**\n * Список складов самовывоза компании.\n */\n public readonly warehouses: InputSignal<string[]> = input<string[]>(this.companyInfo.warehouseAddress);\n}\n","<p class=\"headers\">Публичная оферта</p>\n<p>\n Настоящий Договор регулирует взаимоотношения Продавца и Покупателя, по продаже и доставке товаров через Интернет-сервис «<a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }}\n </a>\n » (далее «{{ companyInfo.name }}»).\n</p>\n<p>Продавец сохраняет за собой право изменять условия Договора.</p>\n<p>Настоящий Договор имеет приоритет перед иными документами.</p>\n<tui-accordion class=\"mt-4\">\n <tui-accordion-item borders=\"top-bottom\">\n 1. Определения\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 1.1. Покупатель – гражданин, имеющий намерение заказать или приобрести товары, либо заказывающий, приобретающий или использующий товары исключительно для\n личных, семейных, домашних и иных нужд, не связанных с осуществлением предпринимательской деятельности, оформивший свой Заказ на сайте Продавца самостоятельно,\n или по телефону через менеджера Продавца.\n </p>\n <p>\n 1.2. Зарегистрированный покупатель - Покупатель, предоставивший о себе Продавцу индивидуальную информацию, которая может быть использована для оформления Заказа\n многократно. Данная информация предоставляется при оформлении Заказа.\n </p>\n <p>\n 1.3. Продавец – информация о Продавце размещена на сайте\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }}\n </a>\n в Разделе «Реквизиты».\n </p>\n <p>\n 1.4. Сайт - совокупность информационных ресурсов, размещённых в Интернете по адресу\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }} </a\n >, администратором которого является Продавец.\n </p>\n <p>1.5. Товар - имущество, реализуемое Продавцом.</p>\n <p class=\"mb-3\">\n 1.6. Заказ - позиции Товара, указанные Покупателем из ассортимента Товара, предложенного к продаже, при оформлении заказа на приобретение Товара на сайте.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 2. Общие положения\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 2.1. Настоящий Договор розничной купли-продажи товаров, размещенный на сайте\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }}\n </a>\n (далее - «Договор») определяет порядок продажи товара дистанционным способом, и в соответствии со ст.435 и ч.2 ст.437 ГК РФ. Гражданского Кодекса РФ является\n официальной публичной офертой Продавца, адресованной физическим лицам, далее именуемым «Покупатель», при совместном упоминании Продавец и Покупатель также\n именуются «Стороны», а каждый по отдельности «Сторона».\n </p>\n <p>2.2. Факт оформления Заказа означает принятие Покупателем всех условий настоящего Договора.</p>\n <p>\n 2.3. К отношениям между Покупателем и Продавцом применяются положения Гражданского Кодекса РФ в т.ч. положение о розничной купле-продаже (§ 2, глава 30), Закон\n РФ «О защите прав потребителей» от 07.02.1992 № 2300-1, Правила продажи товаров дистанционным способом, утверждённые Постановлением Правительства РФ № 612 от\n 27.09.2007 года и иные правовые акты, принятые в соответствии с ними.\n </p>\n <p>\n 2.4. Продавец оставляет за собой право в одностороннем порядке вносить изменения в настоящий Договор, в связи с чем обязуется не позднее 7 (семи) рабочих дней\n до даты вступления изменений в силу размещать на сайте информацию об изменении условий настоящего договора.\n </p>\n <p>2.5. Действующая версия Договора размещена на сайте.</p>\n <p>2.6. Срок действия настоящего Договора не ограничен.</p>\n <p class=\"mb-3\">\n 2.7. Продавец до заключения Договора представил Покупателю полную и достоверную информацию об основных потребительских свойствах товара и адресе (месте\n нахождения) Продавца, о месте изготовления товара, полном фирменном наименовании (наименовании) продавца, о цене и об условиях приобретения товара, о его\n доставке, сроке службы, сроке годности и гарантийном сроке, о порядке оплаты товара.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 3. Порядок регистрации на сайте Продавца\n <ng-template tuiAccordionItemContent>\n <div>\n @let signUpUrl = urls.routers?.['sign_up'];\n @if (signUpUrl) {\n <p>\n 3.1. Регистрация Покупателей на сайте\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }}\n </a>\n осуществляется путем заполнения формы регистрации на сайте по адресу:\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl + signUpUrl }}\"\n >\n {{ urls.siteUrl + signUpUrl }}\n </a>\n .\n </p>\n <p>\n 3.2. Логином Покупателя, служит адрес электронной почты (e-mail). Пароль в случайном порядке выбирается системой или выбирается Покупателем при Регистрации.\n Покупателю на адрес электронной почты приходит уведомление об авторизации пользователя на сайте\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }}\n </a>\n с логином и паролем.\n </p>\n <p>Покупатель по желанию может сменить пароль.</p>\n <p>\n 3.3. Продавец не несет ответственности за точность и правильность информации, предоставляемой Покупателем при регистрации. В случае неисполнения Продавцом\n обязательств, по причине сообщения Покупателем недостоверных сведений о себе, Продавец не несет ответственности за подобное неисполнение Заказа. Повторные\n действия по исполнению Заказа производятся только по согласованию сторон с отнесением соответствующих дополнительных расходов на Покупателя.\n </p>\n <p class=\"mb-3\">\n 3.4. Покупатель обязуется не сообщать третьим лицам логин и пароль, указанные при регистрации. В случае возникновения у Покупателя подозрений относительно\n безопасности его логина и пароля или возможности их несанкционированного использования третьими лицами, Покупатель обязуется незамедлительно уведомить об\n этом Продавца.\n </p>\n } @else {\n <p>Регистрация на сайте {{ urls.siteUrl }} в данный момент не доступна.</p>\n }\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 4. Порядок оформления и сроки выполнения заказа\n <ng-template tuiAccordionItemContent>\n <div>\n <p>4.1. Заказ оформляется одним из следующих способов:</p>\n <p>\n 4.1.1. По телефону (номера указаны на сайте\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }} </a\n >). При оформлении Заказа, Покупатель выбирает Товар, определяется с местом, датой и временем доставки товара, после чего, Продавец оформляет Заказ.\n </p>\n @let signInUrl = urls.routers?.['sign_in'];\n @if (signInUrl) {\n <p>\n 4.1.2. Через вход на сайт\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }} </a\n >.\n </p>\n <p>При оформлении Заказа, Покупатель выбирает Товар, входит в Раздел «Прайс-лист» и заполняет электронную форму Заказа.</p>\n <p>\n После обработки Заказа и поступления к Продавцу, последний согласовывает условия Заказа с Покупателем по телефону, в том числе дату и время доставки Товара.\n Дата и время доставки товара зависят от адреса доставки и времени, необходимого на обработку Заказа.\n </p>\n <p>При несогласовании с Покупателем условий Заказа, Заказ аннулируется, если Заказ согласован, то передается в Службу доставки.</p>\n }\n <p>\n 4.2. Все информационные материалы, представленные на сайте, носят справочный характер и не могут в полной мере передавать достоверную информацию о свойствах и\n характеристиках Товара. В случае возникновения у Покупателя вопросов, касающихся свойств и характеристик Товара, перед оформлением Заказа, Покупатель должен\n обратиться к представителю Продавца по телефону (номера указаны на сайте\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }} </a\n >).\n </p>\n <p>4.3. В случае, если телефон Заказчика недоступен и/или его номер неправильно был указан в Заказе, Продавец вправе аннулировать Заказ.</p>\n <p class=\"mb-3\">\n 4.4. Если на складе у Продавца отсутствует необходимое количество заказанного Товара, Продавец информирует об этом Покупателя по телефону. Покупатель вправе\n согласиться принять Товар в количестве, имеющемся в наличии у Продавца, либо аннулировать данную позицию Товара из Заказа.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 5. Доставка Товара\n <ng-template tuiAccordionItemContent>\n <div>\n <p>5.1. Доставка Товара Покупателю осуществляется в соответствии информацией, указанной в Заказе.</p>\n <p>\n 5.2. С информацией по доставке Товара можно ознакомиться на сайте\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }} </a\n >.\n </p>\n <p>5.3. Продавец обязуется соблюдать дату и время доставки, указанные в соответствующем Заказе Покупателя.</p>\n <p>5.4. Доставленный Товар передается Покупателю:</p>\n <ul class=\"dash-list\">\n <li>Покупателю по указанному им адресу;</li>\n <li>При отсутствии Покупателя, любому лицу, предъявившему квитанцию или иной документ подтверждающий заключение договора или оформление доставки товара.</li>\n </ul>\n <p>\n Во избежание случаев мошенничества, а также для выполнения взятых на себя обязательств, при вручении Заказа лицо, осуществляющее доставку Заказа, вправе\n потребовать предъявить документ, удостоверяющий личность Покупателя. Доставка осуществляется только по точным адресам, содержащим данные: город, улица и пр.,\n номера дома, строения. Доставка происходит строго до первой пропускной системы, пункта охраны и иных территорий с ограниченным доступом.\n </p>\n <p>\n 5.5. Риск случайной гибели или случайного повреждения Товара переходит к Покупателю в момент передачи Товара и подписания документа, подтверждающего передачу\n товара.\n </p>\n <p>\n 5.6. При передаче Заказа Продавцом (сотрудником службы доставки), Покупатель должен проверить количество, комплектность, ассортимент Товара. Покупатель\n подтверждает своей подписью в документе, подтверждающем передачу Товара, что не имеет претензий к внешнему виду и комплектности Товара. После приемки Товара\n Покупателем, Продавец не принимает претензий по внешнему виду, комплектности, ассортименту Товара.\n </p>\n <p class=\"mb-3\">\n 5.7. В момент передачи Товара, Продавцом (сотрудником службы доставки) предоставляется Покупателю информация о порядке и сроках возврата или обмена товара в\n письменной форме, что Покупатель подтверждает своей подписью в накладной.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 6. Самовывоз Товара\n <ng-template tuiAccordionItemContent>\n <div>\n <p>6.1. Самовывоз Товара осуществляется из пункта самовывоза товара {{ companyInfo.name }} находящегося по адресу:</p>\n <ul class=\"ml-2 list-disc\">\n @for (warehouse of warehouses(); track $index) {\n <li class=\"list-inside\">\n {{ warehouse }}\n </li>\n }\n </ul>\n <p>\n 6.2. Самовывоз может быть произведен любому лицу, предъявившему квитанцию или иной документ подтверждающий заключение договора. Во избежание случаев\n мошенничества, а также для выполнения взятых на себя обязательств, при вручении Заказа лицо, осуществляющее выдачу Заказа в пункте самовывоза, вправе\n потребовать предъявить документ, удостоверяющий личность Покупателя.\n </p>\n <p>\n 6.3. Риск случайной гибели или случайного повреждения Товара переходит к Покупателю в момент передачи Товара и подписания документа, подтверждающего передачу\n товара.\n </p>\n <p>\n 6.4. При передаче Заказа Продавцом (сотрудником службы самовывоза), Покупатель должен проверить количество, комплектность, ассортимент Товара. Покупатель\n подтверждает своей подписью в документе, подтверждающем передачу Товара, что не имеет претензий к внешнему виду и комплектности Товара. После приемки Товара\n Покупателем, Продавец не принимает претензий по внешнему виду, комплектности, ассортименту Товара.\n </p>\n <p class=\"mb-3\">\n 6.5. В момент передачи Товара, Продавцом (сотрудником службы самовывоза) предоставляется Покупателю информация о порядке и сроках возврата или обмена товара в\n письменной форме, что Покупатель подтверждает своей подписью в накладной.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 7. Цена и порядок оплаты Товара\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 7.1. Цена Товара указывается на сайте. В случае неверного указания цены заказанного Покупателем Товара, Продавец при первой возможности информирует об этом\n Покупателя для подтверждения Заказа по исправленной цене, либо аннулирования Заказа. Если Заказ был оплачен, Продавец возвращает Покупателю оплаченную за Заказ\n сумму.\n </p>\n <p>7.2. Цена Товара на сайте может быть изменена Продавцом в одностороннем порядке. При этом цена на заказанный Покупателем Товар изменению не подлежит.</p>\n <p class=\"mb-3\">\n 7.3. Покупатель может выбрать способ оплаты за Товар, установленный на сайте\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }}\n </a>\n в Разделе «Оплата».\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 8. Возврат и обмен Товара\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 8.1. Возврат или обмен товара осуществляется в соответствии с Правилами «о возврате или обмене товара с физическими лицами» размещенного на сайте\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }}\n </a>\n в Разделе «Рекламации» в личном кабинете Клиента.\n </p>\n <p>\n 8.2. В случае, если при обмене Товара, аналогичный Товар отсутствует в продаже на день обращения Покупателя к Продавцу, Покупатель вправе отказаться от\n исполнения договора и потребовать возврата уплаченной за указанный Товар денежной суммы. Требование Покупателя о возврате уплаченной за указанный Товар денежной\n суммы подлежит удовлетворению в течение трех дней со дня возврата Товара.\n </p>\n <p>\n 8.3. В случае, если информация о порядке и сроках возврата товара надлежащего качества не была предоставлена в письменной форме в момент доставки товара,\n Покупатель вправе отказаться от товара в течение трех месяцев с момента передачи товара.\n </p>\n <p>\n 8.4. При отказе Покупателя от товара Продавец возвращает Покупателю денежную сумму, уплаченную последним, за исключением расходов Продавца на доставку от\n Покупателя возвращенного товара, не позднее чем через десять дней со дня предъявления Покупателем соответствующего требования.\n </p>\n <p>8.5. Расходы на осуществление возврата суммы, уплаченной Покупателем в соответствии с договором, несет Продавец.</p>\n <p class=\"mb-3\">8.6. Возврат или обмен Товара производятся в офисе по адресу: ул. Калашникова, д. 28Д, лит. А16 А17, помещ. 1005, г. Иваново</p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 9. Гарантии\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 9.1. Гарантия на товары определяется заводом изготовителем, если иное не предусмотрено гарантийными обязательствами, размещенными на сайте Продавца, при условии\n соблюдения Покупателем правил эксплуатации, установленных заводом изготовителем. Гарантийный срок исчисляется с момента передачи товара Покупателю.\n </p>\n <p>\n 9.2. При обнаружении нарушений условий договора о качестве товара в течение гарантийного срока товар может быть возвращен Продавцу, который обязан его принять и\n в случае необходимости провести проверку его качества.\n </p>\n <p>9.3. Покупатель, которому продан товар ненадлежащего качества, если недостатки товара не были оговорены продавцом, вправе по своему выбору потребовать:</p>\n <ul class=\"dash-list\">\n <li>безвозмездного устранения недостатков товара или возмещения расходов на их исправление покупателем или третьим лицом;</li>\n <li>соразмерного уменьшения покупной цены;</li>\n <li>\n замены на товар надлежащего качества аналогичной марки (модели, артикула) или на такой же товар другой марки (модели, артикула) с соответствующим\n перерасчетом покупной цены. В отношении технически сложного и дорогостоящего товара эти требования покупателя подлежат удовлетворению в случае обнаружения\n существенных недостатков.\n </li>\n </ul>\n <p>\n 9.4. Покупатель вместо предъявления требований, указанных в п. 9.3. настоящего договора, вправе отказаться от исполнения договора и потребовать возврата\n уплаченной за товар суммы. По требованию Продавца и за его счет Покупатель должен возвратить товар с недостатками. Покупатель вправе также потребовать полного\n возмещения убытков, причиненных ему вследствие продажи товара ненадлежащего качества. Убытки возмещаются в сроки, установленные Законом Российской Федерации \"О\n защите прав потребителей\" для удовлетворения соответствующих требований Покупателя.\n </p>\n <p>9.5. При отказе Продавца передать товар Покупатель вправе отказаться от исполнения договора и потребовать возмещения причиненных убытков.</p>\n <p class=\"mb-3\">\n 9.6. При возврате товара ненадлежащего качества отсутствие у Покупателя документа, подтверждающего факт и условия покупки товара, не лишает его возможности\n ссылаться на другие доказательства приобретения товара у продавца.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 10. Ответственность\n <ng-template tuiAccordionItemContent>\n <div>\n <p>10.1. Продавец не несет ответственности за ущерб, причиненный Покупателю вследствие ненадлежащего использования Товаров, приобретённых на сайте.</p>\n <p>10.2. Продавец не отвечает за убытки Покупателя, возникшие в результате:</p>\n <ul class=\"dash-list\">\n <li>неправильного или недостоверного заполнения заказа, в т.ч. неправильного указания персональных данных;</li>\n <li>неправомерных действий третьих лиц.</li>\n </ul>\n <p>10.3. Покупатель несёт всю ответственность за достоверность сведений, указанных им при регистрации на сайте.</p>\n <p>\n 10.4. Стороны освобождаются от ответственности за полное или частичное неисполнение своих обязательств, если такое неисполнение явилось следствием действия\n обстоятельств непреодолимой силы, возникших после вступления в силу Договора, в результате событий чрезвычайного характера, которые Стороны не могли предвидеть\n и предотвратить разумными мерами.\n </p>\n <p class=\"mb-3\">\n 10.5. В иных случаях неисполнения или ненадлежащего исполнения своих обязательств Стороны несут ответственность в соответствии с действующим законодательством\n Российской Федерации.\n </p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 11. Конфиденциальность и защита персональной информации\n <ng-template tuiAccordionItemContent>\n <div>\n <p>\n 11.1. Обработка персональных данных Покупателей осуществляется в соответствии с Разделом «Политика в отношении обработки персональных данных», размещенным на\n сайте\n <a\n tuiLink\n [pseudo]=\"true\"\n href=\"{{ urls.siteUrl }}\"\n >\n {{ urls.siteUrl }} </a\n >.\n </p>\n <p>\n 11.2. При оформлении Заказа Покупатель предоставляет Продавцу о себе полностью или частично следующие персональные данные: Фамилия, Имя, Отчество, паспортные\n данные, адрес электронной почты, адрес доставки, номер телефона.\n </p>\n <p>\n 11.3. Принимая условия настоящего Договора, Покупатель соглашается с условиями Политики в отношении обработки его персональных данных и дает Продавцу свое\n согласие:\n </p>\n <p>\n 11.3.1. на обработку своих персональных данных (любое действие (операция) или совокупность действий (операций), совершаемых с использованием средств\n автоматизации или без использования таких средств с персональными данными, включая сбор, запись, систематизацию, накопление, хранение, уточнение (обновление,\n изменение), извлечение, использование, обезличивание, блокирование, удаление, уничтожение персональных данных).\n </p>\n <p>\n 11.3.2. на передачу своих персональных данных третьим лицам, в целях исполнения Продавцом своих обязательств по доставке товара в указанное Покупателем место\n (адрес доставки товара), указанное при оформлении Заказа.\n </p>\n <p>11.4. Продавец использует полученные от Покупателя персональные данные для:</p>\n <ul class=\"dash-list\">\n <li>регистрации Покупателя на сайте;</li>\n <li>выполнения перед Покупателем своих обязательств по Договору;</li>\n <li>оценки и анализа работы сайта;</li>\n <li>определения победителя в акциях, проводимых Продавцом;</li>\n <li>направления последнему электронных кассовых чеков;</li>\n <li>информирования Покупателя о товарах и иных специальных предложениях.</li>\n </ul>\n <p>\n 11.5. Продавец вправе направлять Покупателю сообщения рекламно-информационного характера. Если Покупатель не желает получать рассылки от Продавца, он может\n отказаться от получения такой рассылки в конце любого полученного письма.\n </p>\n <p>11.6. Продавец обязуется не разглашать полученную от Покупателя информацию. Не считается нарушением:</p>\n <ul class=\"dash-list\">\n <li>\n предоставление Продавцом информации агентам и третьим лицам, действующим на основании договора с Продавцом, для исполнения обязательств перед Покупателем;\n </li>\n <li>разглашение информации в соответствии с обоснованными и применимыми требованиями закона.</li>\n </ul>\n <p class=\"mb-3\">11.7. Продавец не несет ответственности за сведения, предоставленные Покупателем на сайте в общедоступной форме.</p>\n </div>\n </ng-template>\n </tui-accordion-item>\n\n <tui-accordion-item borders=\"top-bottom\">\n 12. Иные условия\n <ng-template tuiAccordionItemContent>\n <div>\n <p>12.1. Все споры и разногласия стороны будут пытаться решить мирным путем, а в случае невозможности по выбору истца в суде по месту:</p>\n <ul class=\"dash-list\">\n <li>нахождения организации, а если ответчиком является индивидуальный предприниматель, по месту его жительства;</li>\n <li>жительства или пребывания истца;</li>\n <li>заключения или исполнения договора.</li>\n </ul>\n <p class=\"mb-3\">12.2. Недействительность какого-либо из условий настоящего Договора не влечет за собой недействительность остальных условий.</p>\n </div>\n </ng-template>\n </tui-accordion-item>\n</tui-accordion>\n","import { ChangeDetectionStrategy, Component, inject, input, InputSignal, model, ModelSignal } from '@angular/core';\nimport { TUI_IS_MOBILE } from '@taiga-ui/cdk';\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 host: { ngSkipHydration: 'true' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPreviewSampleComponent {\n /**\n * Индекс элемента в галерее.\n */\n public readonly index: ModelSignal<number> = model<number>(0);\n\n /**\n * Длительность переключения карусели.\n */\n public duration: InputSignal<number> = input<number>(5000);\n\n /**\n * Объект данных товара.\n */\n public sample: InputSignal<ScIPreviewSample> = input.required<ScIPreviewSample>();\n\n /**\n * Признак, что необходимо отображать переключатели на карусели.\n */\n public isShowCarouselSwitches: InputSignal<boolean> = input(!inject(TUI_IS_MOBILE));\n\n /**\n * Признак, что при горизонтальном отображении компонент должен быть развёрнут.\n */\n public isReverse: InputSignal<boolean> = input(false);\n}\n","<div\n *ngIf=\"sample() as sample\"\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 @let isShownSwitches = sample.items && sample.items.length > 1;\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 [round]=\"false\"\n *ngFor=\"let item of sample.items; let itemIndex = index\"\n (tuiHoveredChange)=\"index.set(itemIndex)\"\n [class.active]=\"index() === itemIndex\"\n >\n <picture>\n <source\n type=\"image/webp\"\n [srcset]=\"item.buttonImageUrl.webp\"\n />\n <img\n [src]=\"item.buttonImageUrl.defaultFormat\"\n [alt]=\"item.buttonImageUrl.alt ?? 'Кнопка переключателя цвета ' + item.color\"\n />\n </picture>\n </tui-avatar>\n </div>\n <div\n *ngIf=\"sample.items as items\"\n class=\"text-body-m-bold\"\n >\n {{ 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 <a\n *ngFor=\"let action of sample.items[index()].actions\"\n tuiButton\n [attr.href]=\"action.href\"\n (click)=\"action.handler ? $event.preventDefault() : {}; action.handler?.()\"\n [iconStart]=\"action.icon\"\n appearance=\"secondary\"\n >\n {{ action.label }}\n </a>\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)=\"carousel.prev()\"\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 #carousel\n [(index)]=\"index\"\n [duration]=\"duration()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n <ng-container *ngFor=\"let item of sample.items; let itemIndex = index\">\n <picture *tuiItem>\n <source\n type=\"image/webp\"\n [srcset]=\"item.carouselItemImage.webp\"\n />\n <img\n [src]=\"item.carouselItemImage.defaultFormat\"\n [alt]=\"item.carouselItemImage.alt ?? 'Образец товара ' + sample.title + ' в цвете ' + item.color + itemIndex\"\n class=\"h-[19em] w-full object-cover object-right md:h-96 lg:h-[28rem]\"\n />\n </picture>\n </ng-container>\n </tui-carousel>\n <button\n *ngIf=\"isShownSwitches && isShowCarouselSwitches()\"\n tuiIconButton\n (click)=\"carousel.next()\"\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 { NgFor } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, InputSignal, output, OutputEmitterRef, Signal, signal, WritableSignal } from '@angular/core';\nimport { TUI_IS_MOBILE, TuiHovered } from '@taiga-ui/cdk';\nimport { TuiAppearance, TuiButton, TuiIcon, TuiSurface } from '@taiga-ui/core';\nimport { TuiBadge, TuiCarousel, TuiChip } from '@taiga-ui/kit';\nimport { TuiCardLarge, TuiHeader } from '@taiga-ui/layout';\n\nimport { ScPreviewMosquitoConfig } from '../interfaces';\n\n/**\n * Компонент представления москитной сетки.\n */\n@Component({\n standalone: true,\n selector: 'sc-preview-samples-mosquito',\n templateUrl: './sc-preview-samples-mosquito.component.html',\n styleUrl: './sc-preview-samples-mosquito.component.scss',\n imports: [TuiCarousel, TuiButton, TuiIcon, TuiChip, TuiBadge, NgFor, TuiAppearance, TuiHovered, TuiCardLarge, TuiHeader, TuiIcon, TuiSurface],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScPreviewSamplesMosquitoComponent {\n /**\n * Выбранный индекс цвета профиля.\n */\n public readonly colorIndex: WritableSignal<number> = signal<number>(0);\n\n /**\n * Выбранный индекс типа сетки.\n */\n public readonly netTypeIndex: WritableSignal<number> = signal<number>(0);\n\n /**\n * Выбранный тип сетки.\n */\n public readonly netTypeIndexSelected: Signal<string> = computed(() => this.config().netType[this.netTypeIndex()]);\n\n /**\n * Выбранный цвет профиля.\n */\n public readonly colorIndexSelected: Signal<string> = computed(() => this.config().color[this.colorIndex()]);\n\n /**\n * Конфигурация для отображения образца москитной сетки.\n */\n public readonly config: InputSignal<ScPreviewMosquitoConfig> = input.required<ScPreviewMosquitoConfig>();\n\n /**\n * Событие, которое происходит при нажатии на кнопку \"Назад в Конфигуратор\".\n */\n public readonly openConfiguratorClick: OutputEmitterRef<void> = output();\n\n /**\n * Ссылка на страницу конфигуратора.\n */\n public readonly configuratorPageUrl: InputSignal<string | undefined> = input<string | undefined>();\n\n /**\n * Событие, которое происходит при нажатии на кнопку \"Консультация\".\n */\n public readonly openConsultationClick: OutputEmitterRef<void> = output();\n\n /**\n * Интервал автоматического прочитывания списка товаров в миллисекундах.\n */\n public readonly autoSlideIntervale: InputSignal<number> = input<number>(0);\n\n /**\n * Признак, что необходимо отображать переключатели на карусели.\n */\n protected readonly isShowCarouselSwitches: InputSignal<boolean> = input(!inject(TUI_IS_MOBILE));\n}\n","@let descriptions = config().descriptions;\n@let colors = config().color;\n@let netTypes = config().netType;\n\n<!-- Основной контейнер с сеткой. -->\n<div class=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <!-- Левая колонка с информацией. -->\n <div class=\"flex flex-col gap-4\">\n <!-- Кнопки выбора типа сетки. -->\n <div class=\"flex flex-wrap gap-4\">\n <button\n *ngFor=\"let item of netTypes; let itemIndex = index\"\n tuiCardLarge\n tuiHeader\n tuiSurface=\"floating\"\n type=\"button\"\n (click)=\"netTypeIndex.set(itemIndex)\"\n [class.active]=\"netTypeIndex() === itemIndex\"\n class=\"h-12 !items-center gap-2 !rounded-xl !px-4 !py-0\"\n >\n <img\n [src]=\"config().icons[item]\"\n [alt]=\"'Кнопка переключателя типа сетки ' + descriptions['netType'][item]\"\n class=\"size-8\"\n />\n <div>{{ descriptions['netType'][item] }}</div>\n </button>\n </div>\n\n <!-- Описание выбранного типа сетки. -->\n <div class=\"text-body-l-bold\">Сетка {{ descriptions['netType'][netTypeIndexSelected()] }}</div>\n {{ config().subtitles[netTypeIndexSelected()] }}\n\n <!-- Информационные бейджи. -->\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ colors.length }}\n </tui-badge>\n - колличество цветов профиля\n </div>\n <div class=\"flex flex-wrap items-center gap-1 text-body-m\">\n <tui-badge\n appearance=\"custom\"\n class=\"rounded-full border-2 border-solid border-tui-text-primary bg-white !p-[0.4rem] font-bold text-tui-text-primary\"\n >\n {{ netTypes.length }}\n </tui-badge>\n - колличество типов сеток\n </div>\n\n <!-- Размеры сеток. -->\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-height-arrow\" />\n Высота сеток от {{ config().minHeight }} до {{ config().maxHeights[netTypeIndexSelected()] }} мм\n </div>\n <div class=\"text-body-m\">\n <tui-icon icon=\"@tui.sc.grid-width-arrow\" />\n Ширина сеток от {{ config().minWidth }} до {{ config().maxWidths[netTypeIndexSelected()] }} мм\n </div>\n\n <!-- Теги характеристик. -->\n <div class=\"flex flex-wrap gap-2\">\n <button\n *ngFor=\"let tag of config().tags[netTypeIndexSelected()]\"\n tuiChip\n appearance=\"neutral\"\n >\n {{ tag }}\n </button>\n </div>\n\n <!-- Выбор цвета профиля. -->\n <div class=\"flex gap-4\">\n <picture\n *ngFor=\"let image of config().color; let itemIndex = index\"\n class=\"size-11 rounded-xl\"\n (tuiHoveredChange)=\"colorIndex.set(itemIndex)\"\n >\n @let color = config().color[colorIndex()];\n <source\n type=\"image/webp\"\n [srcset]=\"config().colorsIcons[image].webp\"\n />\n <img\n [class.active]=\"colorIndex() === itemIndex\"\n [src]=\"config().colorsIcons[image].defaultFormat\"\n [alt]=\"config().colorsIcons[image].alt ?? 'Кнопка переключателя цвета ' + descriptions['color'][color]\"\n class=\"size-11 rounded-xl\"\n />\n </picture>\n </div>\n\n <!-- Кнопки действий. -->\n <div class=\"flex gap-2\">\n <a\n tuiButton\n [attr.href]=\"configuratorPageUrl()\"\n (click)=\"$event.preventDefault(); openConfiguratorClick.emit()\"\n iconStart=\"@tui.sliders-horizontal\"\n >\n Сделать расчет\n </a>\n\n <button\n tuiButton\n (click)=\"openConsultationClick.emit()\"\n iconStart=\"@tui.messages-square\"\n >\n Консультация\n </button>\n </div>\n </div>\n\n <!-- Правая колонка с каруселью изображений. -->\n <div class=\"relative -order-1 h-[19em] flex-1 overflow-hidden rounded-xl shadow-tui-shadow md:h-96 lg:order-2 lg:h-[28rem]\">\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n (click)=\"carousel.prev()\"\n appearance=\"icon\"\n class=\"!absolute left-0 top-1/2 z-10 ml-2 -translate-y-1/2\"\n ></button>\n\n @let imagePreviews = config().imagePreviewsByColor[colorIndexSelected()];\n\n <tui-carousel\n #carousel\n [duration]=\"autoSlideIntervale()\"\n class=\"h-[19em] w-full md:h-96 lg:h-[28rem]\"\n >\n @for (item of imagePreviews; track $index) {\n <picture *tuiItem>\n <source\n type=\"image/webp\"\n [srcset]=\"item.webp\"\n />\n <img\n [alt]=\"item.alt ?? 'Москитная сетка в цвете ' + descriptions['color'][colorIndexSelected()] + $index\"\n [src]=\"item.defaultFormat\"\n class=\"h-[19em] w-full object-cover object-center md:h-96 lg:h-[28rem]\"\n />\n </picture>\n }\n </tui-carousel>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n (click)=\"carousel.next()\"\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 class-methods-use-this,@typescript-eslint/unbound-method */\n\nimport { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, InputSignal, output, OutputEmitterRef, Signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport {\n ScConvertersService,\n ScFeedbackForms,\n ScFeedbackService,\n ScIFeedbackMessage,\n ScISuggestionType,\n ScPhoneService,\n ScUploadedFile,\n ScUser,\n ScUserService,\n} from '@snabcentr/client-core';\nimport { TuiLooseUnion, tuiPure, TuiValidationError } from '@taiga-ui/cdk';\nimport { TuiButton, TuiDialogContext, TuiError, TuiLabel, TuiLink, TuiTextfield, TuiTitle } from '@taiga-ui/core';\nimport { TuiInputPhoneInternational } from '@taiga-ui/experimental';\nimport { TuiCountryIsoCode } from '@taiga-ui/i18n';\nimport { TuiButtonLoading, TuiCheckbox, TuiFieldErrorPipe, TuiFileLike, TuiFiles, tuiFilesAccepted, TuiSortCountriesPipe } from '@taiga-ui/kit';\nimport { TuiInputModule, TuiInputPhoneModule, TuiTextareaModule } from '@taiga-ui/legacy';\nimport { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';\nimport { getCountries } from 'libphonenumber-js';\nimport { RecaptchaComponent, 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';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\nimport { ScFeedbackFormConfig, ScFeedbackFormFieldType } from '../interfaces';\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 TuiCheckbox,\n TuiTitle,\n TuiFiles,\n TuiInputPhoneInternational,\n ...TuiTextfield,\n TuiSortCountriesPipe,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScFeedbackFormComponent {\n /**\n * Контекст диалогового окна, в котором открыт компонент.\n */\n protected readonly context: TuiDialogContext<void, { onClickOfferHandler: () => void } & ScFeedbackFormConfig> | null = inject<\n TuiDialogContext<void, { onClickOfferHandler: () => void } & ScFeedbackFormConfig>\n >(POLYMORPHEUS_CONTEXT, { optional: true });\n\n /**\n * Символьное обозначение (slug) формы.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n public readonly slugInput: InputSignal<TuiLooseUnion<ScFeedbackForms>> = input<TuiLooseUnion<ScFeedbackForms>>('common', { alias: 'slug' });\n\n /**\n * Список полей, доступных в данной форме.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n public readonly fieldsInput: InputSignal<ScFeedbackFormFieldType[]> = input<ScFeedbackFormFieldType[]>(['name', 'email', 'phone', 'message', 'files'], { alias: 'fields' });\n\n /**\n * Символьное обозначение (slug) формы.\n */\n protected readonly slug: Signal<TuiLooseUnion<ScFeedbackForms>> = computed(() => this.context?.data.slug ?? this.slugInput());\n\n /**\n * Список полей, доступных в данной форме.\n */\n protected readonly fields: Signal<ScFeedbackFormFieldType[]> = computed(() => this.context?.data.fields ?? this.fieldsInput());\n\n /**\n * Событие нажатия на кнопку договора оферты.\n */\n public readonly clickOffer: OutputEmitterRef<void> = output();\n\n /**\n * Событие успешной отправки формы.\n */\n public readonly sendSuccess: 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\n const fields = this.fields();\n this.form.patchValue({\n name: fields.includes('name') ? user.name : null,\n phone: fields.includes('phone') ? user.contacts.phone.value : null,\n email: fields.includes('email') ? user.contacts.email.value : null,\n });\n }\n })\n );\n\n /**\n * Поле ввода для recaptcha.\n */\n protected readonly recaptchaControl: FormControl<string | null> = new FormControl<string | null>(null, Validators.required);\n\n /**\n * Группа полей ввода для формы «Пожелания и предложения по улучшению сайта».\n */\n protected readonly form = new FormGroup({\n name: new FormControl<string | null>(null),\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>([]),\n isShouldUseMessenger: new FormControl<boolean | null>(false),\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 tap((value: ScIFeedbackMessage) => {\n if (value.phone && !ScPhoneService.isValidPhoneNumberForMessenger(value.phone)) {\n // eslint-disable-next-line no-param-reassign\n delete value.isShouldUseMessenger;\n }\n }),\n switchMap((value) =>\n this.feedbackService.sendFeedback(this.slug() as ScFeedbackForms, this.convertersService.removeNullRecursive(value)).pipe(\n tap(() => {\n if (this.context) {\n this.context.completeWith();\n } else {\n this.resetForm();\n this.onRemoveAll();\n this.sendSuccess.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 * Список стран.\n */\n protected readonly countries: readonly TuiCountryIsoCode[] = getCountries();\n\n /**\n * Инициализирует экземпляр класса {@link ScFeedbackFormComponent}.\n */\n public constructor() {\n /**\n * Это решение ошибки #4940, было @see [предложено](https://github.com/DethAriel/ng-recaptcha/issues/123#issuecomment-426112101) автором {@link RecaptchaComponent}.\n */\n RecaptchaComponent.prototype.ngOnDestroy = function (): void {\n // eslint-disable-next-line @typescript-eslint/dot-notation\n if (this['subscription']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/dot-notation\n this['subscription'].unsubscribe();\n }\n };\n\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 this.clearAllValidators();\n this.setAllValidators(this.fields());\n });\n }\n\n /**\n * Удаляет валидацию со всех полей ввода.\n */\n private clearAllValidators(): void {\n Object.keys(this.form.controls).forEach((key) => {\n const control = this.form.get(key);\n\n if (control && control !== this.recaptchaControl) {\n control.clearValidators();\n control.updateValueAndValidity();\n }\n });\n }\n\n /**\n * Устанавливает валидацию со для указанных полей ввода.\n *\n * @param fields Поля, для которых нужно установить валидацию.\n */\n private setAllValidators(fields: ScFeedbackFormFieldType[]): void {\n fields.forEach((filed: ScFeedbackFormFieldType) => {\n // eslint-disable-next-line default-case\n switch (filed) {\n case 'name':\n this.form.get('name')?.setValidators([Validators.required, Validators.minLength(3)]);\n break;\n case 'phone':\n this.form.get('phone')?.setValidators([Validators.required, phoneValidator()]);\n break;\n case 'email':\n this.form.get('email')?.setValidators([Validators.required, Validators.email]);\n break;\n case 'message':\n this.form.get('message')?.setValidators([Validators.required]);\n break;\n case 'files':\n this.form.get('files')?.setValidators([Validators.required, this.maxFilesLength(5)]);\n break;\n }\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 protected onRemoveAll(): void {\n this.rejected = [];\n this.loadedFile.setValue([]);\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 isShouldUseMessenger: false,\n });\n }\n\n /**\n * Проверяет, что номер телефона подходит для использования в мессенджерах.\n *\n * @param value Номер телефона, который необходимо проверить.\n * @returns Признак того, что номер телефона подходит для мессенджеров.\n */\n @tuiPure\n protected isValidPhoneNumberForMessenger(value: string): boolean {\n return ScPhoneService.isValidPhoneNumberForMessenger(value);\n }\n}\n","@let fieldsList = fields();\n<form\n *ngIf=\"fieldsList.length > 0\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <!-- ФИО -->\n <label\n *ngIf=\"fieldsList.includes('name')\"\n tuiLabel\n >\n ФИО\n <tui-input formControlName=\"name\"> Укажите Ваши Ф.И.О. </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- Телефон -->\n @if (fieldsList.includes('phone')) {\n <label tuiLabel>\n Телефон\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <label\n *ngIf=\"fieldsList.includes('isShouldUseMessenger') && form.controls.phone.value && isValidPhoneNumberForMessenger(form.controls.phone.value)\"\n tuiLabel\n >\n <input\n formControlName=\"isShouldUseMessenger\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span tuiTitle> Написать в мессенджерах, а не звонить </span>\n </label>\n }\n <!-- Адрес электронной почты -->\n <label\n *ngIf=\"fieldsList.includes('email')\"\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=\"fieldsList.includes('message')\"\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=\"fieldsList.includes('files')\"\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 flex-wrap items-center 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=\"grow basis-60 text-body-s\">\n Нажимая на кнопку, вы соглашаетесь с\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); clickOffer.emit()\"\n >\n Политикой конфиденциальности\n </button>\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=\"!size-20 !text-5xl text-tui-success-fill\"\n />\n <p class=\"text-h5\">Спасибо!</p>\n <p\n [innerHTML]=\"context?.data?.subTitle ?? 'Ваши данные успешно отправлены. Мы свяжемся с вами в ближайшее время.'\"\n class=\"mx-2 text-body-m\"\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 [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 { takeUntilDestroyed } from '@angular/core/rxjs-interop';\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 } from '../../providers';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\n\n/**\n * Диалоговое окно изменения данных пользователя.\n */\n@Component({\n selector: 'sc-update-user-info-dialog',\n templateUrl: './sc-update-user-info-dialog.component.html',\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, phoneValidator()]),\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$\n .pipe(\n filter((user) => !user.isGuest),\n takeUntilDestroyed()\n )\n .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 } from '../../providers/sc-user-providers';\nimport { phoneValidator } from '../../validators/sc-phone-validator';\n\n/**\n * Диалоговое окно подтверждения номера телефона.\n */\n@Component({\n selector: 'sc-user-phone-approve-dialog',\n templateUrl: './sc-user-phone-approve-dialog.component.html',\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, phoneValidator()]),\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$\n .pipe(\n filter((user) => !user.isGuest),\n takeUntilDestroyed()\n )\n .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 [shouldBeBusy]=\"true\"\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 {\n ScContactsService,\n ScContragent,\n ScIBankAccount,\n ScICityWithRegionAndCountry,\n ScIContact,\n ScIDeliveryAddress,\n ScUser,\n ScUserService,\n ScVerificationService,\n} from '@snabcentr/client-core';\nimport { TUI_TRUE_HANDLER, tuiIsFalsy, tuiIsPresent } 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_CITY_INFO, SC_USER_INFO } from '../../providers';\n\n/**\n * Компонент контента профиля пользователя в виде раскрывающихся смысловых блоков.\n */\n@Component({\n selector: 'sc-profile-accordions-content',\n templateUrl: './sc-profile-accordions-content.component.html',\n animations: [tuiFadeIn],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScProfileAccordionsContentComponent {\n /**\n * Сервис данных о пользователе.\n */\n private readonly userService = inject(ScUserService);\n\n /**\n * Сервис для работы с контактными лицами..\n */\n private readonly contactsService = inject(ScContactsService);\n\n /**\n * Сервис верификации.\n */\n private readonly verificationService = inject(ScVerificationService);\n\n /**\n * Поток данных о текущем пользователе.\n */\n protected readonly user$ = inject<Observable<ScUser>>(SC_USER_INFO);\n\n /**\n * Поток данных о текущем городе пользователя.\n */\n protected readonly userCity$ = inject<Observable<ScICityWithRegionAndCountry>>(SC_USER_CITY_INFO);\n\n /**\n * {@link FormControl} переключателя 'Я хочу получать рассылку'.\n */\n protected 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 protected readonly getNewsLoading$: Observable<boolean> = this.getNewsRequest$.pipe(map(tuiIsFalsy));\n\n /**\n * {@link Subject} события отправки сообщения для подтверждения адреса электронной почты.\n */\n protected 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 protected readonly approveEmailLoading$: Observable<boolean> = this.sendApproveEmailRequest$.pipe(map(tuiIsFalsy));\n\n /**\n * {@link Observable} изменения состояния признака, отправлено ли сообщение для подтверждения адреса электронной почты.\n */\n protected readonly isSendApproveEmail$: Observable<boolean> = this.sendApproveEmailRequest$.pipe(filter(tuiIsPresent));\n\n /**\n * {@link Observable} изменения списка контактных лиц пользователя.\n */\n protected readonly userContacts$ = this.contactsService.userContacts.item$;\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","<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 && (userCity$ | 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 './models';\nexport * from './services';\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":["AngularxQRCodeModule","i1","i2","i3","i4","i5","i6","i9","i10.ScManagerCardComponent","i5.ScVerificationPhoneCheckFormComponent","i6.ScSuggestionFieldComponent","i7","i8","i6.ScVerificationPhoneCheckFormComponent","i4.ScSignInFormByPhoneComponent","i5.ScSignInFormByEmailComponent","i9.ScSuggestionFieldComponent","i10","i10.ScSuggestionFieldComponent","i2.ScSuggestionFieldComponent","i8.ScVerificationPhoneCheckFormComponent","i9.ScAddressesSelectionFieldComponent","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","SC_PAGE_SIZE_OPTIONS","i2.ScNextInputFocusDirective","TuiAppearance","TuiWithAppearance","TuiIcons","TuiWithIcons","i5.ScFavoriteButtonComponent","i1.ScVerificationPhoneCheckFormComponent","i4.ScSuggestionFieldComponent","i5.ScHoverImageCarouselComponent","i6.CostWithDiscountComponent","i7.ScPriceWarehouseStockComponent","i8.ScFavoriteButtonComponent","i9.ScInputQuantityComponent","i8.ScSuggestionFieldComponent","i11.ScManagerCardComponent","i5.ScContactsAccordionComponent","i8.ScManagerCardComponent","i9.ScDeliveryAddressAccordionItemComponent","i2.TreeIconService","i1.TreeIconService","i6.TreeDirective","i7.TreeTopDirective","i8.ScFormatDatePipe","i2.ScFormatDatePipe","i5.ScPriceWarehouseStockComponent","i7.ScAddressesSelectionFieldComponent","i4.ScTerminalLinkDirective","i5.ScTelLinkDirective","i6.ScEmailLinkDirective","i7.ScPhoneFormatPipe","i2.ScTelLinkDirective","i3.ScEmailLinkDirective","i4.ScPhoneFormatPipe","i2.ScResetUserPasswordComponent","i5.ScContragentsAccordionComponent","i6.ScDeliveryAddressAccordionComponent","i10.ScContactsAccordionComponent","i11.ScTerminalLinkDirective","i12.ScTelLinkDirective","i13.ScEmailLinkDirective","i14","i15.ScPhoneFormatPipe","i1.ScTelLinkDirective","i2.ScEmailLinkDirective","i3.ScPhoneFormatPipe"],"mappings":"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"}
|