@snabcentr/client-ui 5.15.0 → 5.16.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.
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injectable, NgZone, RendererFactory2, EventEmitter, Output, Input, ChangeDetectionStrategy, Component, signal, ChangeDetectorRef, Directive, Pipe, ElementRef, Renderer2, HostListener, input, computed, model, output, DestroyRef, effect, ViewChild, ContentChild, viewChild, HostBinding, ContentChildren, forwardRef, contentChild, TemplateRef, RESPONSE_INIT, ViewEncapsulation, Injector, viewChildren, afterNextRender } from '@angular/core';
3
- import { ScContactsService, ScUserService, ScLocationsService, IS_BROWSER, ScSuggestionService, ScISuggestionType, SC_MIN_LENGTH_SEARCH_TERM, ScAuthService, SEARCH_TERM, ScUnitsHelper, ScImageHelper, SC_PATH_IMAGE_NOT_FOUND, ScImage, ScPhoneService, ScUserMetrikaService, ScUserMetrikaGoalsEnum, ScVCardService, IS_RUNNING_ON_TERMINAL, ScVerificationService, ScConvertersService, ScReferencesService, ScOpfList, ScNumberHelper, ScBannerService, ScMediaImageTransformerPipe, ScCartService, ScUploadedFile, loadingPlaceholder, SC_ORDER_LOADER, ScMimeTypes, ScCatalogService, ScWarehouseService, SEARCH_TERM_PROVIDERS, ScPaginationService, SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_OPTIONS, ScCatalogFilterService, ScIdOrSlugPipe, SC_CATEGORY_INFO, ScConfiguratorService, ScContragentService, ScDeliveryAddressService, SC_URLS, IS_SERVER, ScIconTypesEnum, ScDocumentInfoTypesEnum, ScFilesService, ScOrdersService, ScUIService, SC_USER_INFO as SC_USER_INFO$1, ScPaymentType, ScDeliveryType, TERMINAL_PROVIDERS, ScOrderDraftsService, ScRouteKeys, ScSeoService, scOrderIsLoaded, SC_PAGE_QUERY_PARAM, ScFrequentlyAskedQuestionsService, SchemaOrgFactory, scGetPageQueryParamChanges, ScNewsService, SC_COMPANY_INFO, ScFeedbackService } from '@snabcentr/client-core';
2
+ import { InjectionToken, inject, Injectable, NgZone, RendererFactory2, untracked, signal, EventEmitter, Output, Input, ChangeDetectionStrategy, Component, ChangeDetectorRef, Directive, Pipe, ElementRef, Renderer2, HostListener, input, computed, model, output, DestroyRef, effect, ViewChild, ContentChild, viewChild, HostBinding, ContentChildren, forwardRef, contentChild, TemplateRef, RESPONSE_INIT, ViewEncapsulation, Injector, viewChildren, afterNextRender } from '@angular/core';
3
+ import { ScContactsService, ScUserService, ScLocationsService, IS_BROWSER, ScSuggestionAddressQuality, ScSuggestionService, ScISuggestionType, SC_MIN_LENGTH_SEARCH_TERM, ScAuthService, SEARCH_TERM, ScUnitsHelper, ScImageHelper, SC_PATH_IMAGE_NOT_FOUND, ScImage, ScPhoneService, ScUserMetrikaService, ScUserMetrikaGoalsEnum, ScVCardService, IS_RUNNING_ON_TERMINAL, ScVerificationService, ScConvertersService, ScReferencesService, ScOpfList, ScNumberHelper, ScBannerService, ScMediaImageTransformerPipe, ScCartService, ScUploadedFile, loadingPlaceholder, SC_ORDER_LOADER, ScMimeTypes, ScCatalogService, ScWarehouseService, SEARCH_TERM_PROVIDERS, ScPaginationService, SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_OPTIONS, ScCatalogFilterService, ScIdOrSlugPipe, SC_CATEGORY_INFO, ScConfiguratorService, ScContragentService, ScDeliveryAddressService, SC_URLS, IS_SERVER, ScIconTypesEnum, ScDocumentInfoTypesEnum, ScFilesService, ScOrdersService, ScUIService, SC_USER_INFO as SC_USER_INFO$1, ScPaymentType, ScDeliveryType, TERMINAL_PROVIDERS, ScOrderDraftsService, ScRouteKeys, ScSeoService, scOrderIsLoaded, SC_PAGE_QUERY_PARAM, ScFrequentlyAskedQuestionsService, SchemaOrgFactory, scGetPageQueryParamChanges, ScNewsService, SC_COMPANY_INFO, ScFeedbackService } from '@snabcentr/client-core';
4
4
  import { EMPTY, BehaviorSubject, switchMap, of, shareReplay, filter, map, Observable, debounceTime, startWith, catchError, throwError, share, Subject, tap, finalize, timer, scan, takeWhile, endWith, distinctUntilChanged, combineLatest, pairwise, Subscription, merge, skip, from, concatMap, noop as noop$1, first, retry, fromEvent, animationFrames, take, takeUntil, defer, timeout, ignoreElements } from 'rxjs';
5
5
  import { WA_WINDOW, WA_NAVIGATOR } from '@ng-web-apis/common';
6
6
  import { takeUntilDestroyed, toSignal, outputFromObservable, toObservable } from '@angular/core/rxjs-interop';
7
- import { tuiIsPresent, TuiDay, TuiTime, TuiValueTransformer, tuiControlValue, tuiMarkControlAsTouchedAndValidate, TuiAutoFocus, TuiHovered, TuiDayRange, TuiMonth, tuiProvide, TuiValidationError, TUI_WINDOW_SIZE, tuiClamp, tuiZonefree, TUI_TRUE_HANDLER } from '@taiga-ui/cdk';
7
+ import { tuiIsPresent, TuiDay, TuiTime, TuiValueTransformer, TuiValidationError, tuiControlValue, tuiMarkControlAsTouchedAndValidate, TuiAutoFocus, TuiHovered, TuiDayRange, TuiMonth, tuiProvide, TUI_WINDOW_SIZE, tuiClamp, tuiZonefree, TUI_TRUE_HANDLER } from '@taiga-ui/cdk';
8
8
  import * as i1$1 from '@taiga-ui/kit';
9
9
  import { tuiInputDateOptionsProvider, TuiAvatar, TuiInitialsPipe, TuiButtonLoading, TuiSortCountriesPipe, TuiPush, TuiInputPhoneInternational, TuiPassword, TuiChevron, TuiSelect, TuiDataListWrapperComponent, TuiStringifyContentPipe, TuiComboBox, TuiStepper, TuiAccordionDirective, TuiAccordion, TuiFiles, TuiChip, TuiInputNumber, TuiLineClamp, TuiBadge, TuiInputNumberDirective, TuiTooltip, TuiHighlight, TuiFade, TuiRange, tuiInputNumberOptionsProvider, TuiInputSlider, TuiPushComponent, TuiTreeService, TuiTreeItemContent, TUI_TREE_START, TUI_TREE_CONTENT, TUI_TREE_LOADING, TuiTreeComponent, TuiTreeChildren, TuiTreeControllerDirective, TUI_TREE_LOADER, TuiPreviewDialogService, TuiPreview, tuiFilesAccepted, TuiInputDate, TuiTextarea, TUI_CONFIRM, TuiDataListWrapper, TUI_PAGINATION_TEXTS, TuiInputPhone } from '@taiga-ui/kit';
10
10
  import * as i1$2 from '@angular/common';
@@ -14,10 +14,10 @@ import * as i1 from '@angular/forms';
14
14
  import { NgControl, FormControl, FormGroupDirective, ReactiveFormsModule, FormGroup, Validators, FormsModule, FormArray, NG_VALUE_ACCESSOR } from '@angular/forms';
15
15
  import * as i2 from '@taiga-ui/core';
16
16
  import { TUI_DATA_LIST_HOST, TuiLoader, TuiDataList, TuiDialogService, TuiLink, TuiButton, TuiIcon, TuiAppearance, TuiWithAppearance, TuiIcons, TuiWithIcons, TuiLabel, TuiTextfield, TuiInput, TuiError, TuiCheckbox, tuiDropdownOptionsProvider, TuiOption, TuiFilterByInputPipe, TuiCarouselComponent, TuiCarousel, TuiNumberFormat, TuiFormatNumberPipe, TuiHint, TuiHintDirective, TuiHintDriver, TuiHintHover, TuiHintPosition, TUI_MONTHS, TuiScrollbar, tuiNumberFormatProvider, tuiItemsHandlersProvider, TuiNotification, TuiTitle, tuiTextfieldOptionsProvider, tuiHintOptionsProvider, TuiNotificationService, TuiIconPipe, TUI_BUTTON_DEFAULT_OPTIONS, TUI_BUTTON_OPTIONS, TUI_COMMON_ICONS } from '@taiga-ui/core';
17
+ import { isNil, isString, isUndefined, isObject, noop, isBoolean, isArray } from 'lodash-es';
17
18
  import { isValidPhoneNumber } from 'libphonenumber-js/max';
18
19
  import { MaskitoDirective } from '@maskito/angular';
19
20
  import { getCountries } from 'libphonenumber-js';
20
- import { isNil, isUndefined, isObject, noop, isBoolean, isString, isArray } from 'lodash-es';
21
21
  import { POLYMORPHEUS_CONTEXT, PolymorpheusComponent, PolymorpheusTemplate, PolymorpheusOutlet, injectContext } from '@taiga-ui/polymorpheus';
22
22
  import { QRCodeComponent } from 'angularx-qrcode';
23
23
  import * as i3 from '@taiga-ui/core/portals/dropdown';
@@ -173,6 +173,13 @@ const SC_ALLOW_SELECT_TERMINATED = new InjectionToken(ngDevMode ? 'SC_ALLOW_SELE
173
173
  factory: () => false,
174
174
  });
175
175
 
176
+ /**
177
+ * Токен признака, что отправка форм с неполным (по данным подсказок) адресом заблокирована.
178
+ */
179
+ const SC_BLOCK_INCOMPLETE_ADDRESS = new InjectionToken('SC_BLOCK_INCOMPLETE_ADDRESS', {
180
+ factory: () => true,
181
+ });
182
+
176
183
  /**
177
184
  * Токен максимального количества файлов, отправляемых в форме в байтах.
178
185
  */
@@ -478,6 +485,214 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
478
485
  }]
479
486
  }] });
480
487
 
488
+ /**
489
+ * Сервис-реестр качества адресов, выбранных из подсказок.
490
+ *
491
+ * Хранит качество последнего выбранного адреса для каждого контрола. Качество полного адреса
492
+ * действует, пока значение контрола не изменилось после выбора: ручная правка возвращает адрес
493
+ * в разряд непроверяемых. Качество неполного адреса и адреса с неопределённой полнотой сохраняется
494
+ * и при ручной правке текста: его заменяет только выбор другой подсказки по этому полю.
495
+ * Полная очистка поля сбрасывает качество: адрес, введённый после неё, считается ручным.
496
+ */
497
+ class ScAddressQualityService {
498
+ constructor() {
499
+ /**
500
+ * Валидатор, запрещающий отправку формы с неполным адресом, пока блокировка включена токеном {@link SC_BLOCK_INCOMPLETE_ADDRESS}.
501
+ * Подключается к контролу адреса при его создании; директива качества адреса только показывает предупреждение.
502
+ *
503
+ * @param control Контрол адреса.
504
+ */
505
+ this.validator = (control) => this.validate(control);
506
+ /**
507
+ * Признак, что отправка форм с неполным адресом заблокирована.
508
+ */
509
+ this.blockIncompleteAddress = inject(SC_BLOCK_INCOMPLETE_ADDRESS);
510
+ /**
511
+ * Ошибка валидации неполного адреса.
512
+ */
513
+ this.incompleteAddressError = new TuiValidationError('Адрес неполный, выберите более точный вариант из подсказок');
514
+ /**
515
+ * Реестр состояний качества по контролам адресов.
516
+ */
517
+ this.states = new WeakMap();
518
+ /**
519
+ * Реестр признаков включённого контроля качества по контролам адресов.
520
+ */
521
+ this.checkEnabledStates = new WeakMap();
522
+ }
523
+ /**
524
+ * Возвращает признак, что значение поля адреса пустое без учёта пробелов.
525
+ *
526
+ * @param value Значение поля адреса.
527
+ */
528
+ static isEmptyAddress(value) {
529
+ return isNil(value) || (isString(value) && !value.trim());
530
+ }
531
+ /**
532
+ * Задаёт качество адреса, выбранного в контроле, и пересчитывает валидность контрола
533
+ * без рассылки событий, чтобы не нарушать подавление valueChanges при выборе подсказки.
534
+ * Контрол адреса, требующего внимания пользователя, помечается затронутым, чтобы сообщения показались сразу.
535
+ *
536
+ * @param control Контрол адреса.
537
+ * @param quality Качество (полнота) адреса или null, если качество неизвестно.
538
+ */
539
+ setQuality(control, quality) {
540
+ this.stateOf(control).set(quality === null ? null : { quality, value: control.value });
541
+ if (quality === ScSuggestionAddressQuality.incomplete || quality === ScSuggestionAddressQuality.undetermined) {
542
+ control.markAsTouched();
543
+ }
544
+ control.updateValueAndValidity({ emitEvent: false });
545
+ }
546
+ /**
547
+ * Возвращает качество адреса, выбранного в контроле, либо null, если адрес из подсказок
548
+ * не выбирался или поле пустое. Качество полного адреса действует, только пока значение контрола не изменилось
549
+ * после выбора; качество неполного адреса и адреса с неопределённой полнотой действует
550
+ * до выбора другой подсказки или полной очистки поля, в том числе после ручной правки текста.
551
+ *
552
+ * @param control Контрол адреса.
553
+ */
554
+ getQuality(control) {
555
+ const state = this.stateOf(control)();
556
+ if (!state || ScAddressQualityService.isEmptyAddress(control.value)) {
557
+ return null;
558
+ }
559
+ if (state.quality === ScSuggestionAddressQuality.complete) {
560
+ return state.value === control.value ? ScSuggestionAddressQuality.complete : null;
561
+ }
562
+ return state.quality;
563
+ }
564
+ /**
565
+ * Задаёт качество адресов организации контролам группы на основе выбранной подсказки.
566
+ * Качество применяется только к заполненным адресам подсказки: для пустого адреса
567
+ * оно сбрасывается, даже если сервис подсказок прислал для него значение.
568
+ *
569
+ * @param group Группа с контролами адресов организации.
570
+ * @param suggestion Объект подсказки по организации.
571
+ */
572
+ setOrganizationAddressQualities(group, suggestion) {
573
+ const qualities = [
574
+ ['legalAddress', suggestion.legalAddress, suggestion.legalAddressQuality],
575
+ ['postalAddress', suggestion.postalAddress, suggestion.postalAddressQuality],
576
+ ['actualAddress', suggestion.actualAddress, suggestion.actualAddressQuality],
577
+ ];
578
+ qualities.forEach(([controlName, address, quality]) => {
579
+ const control = group.get(controlName);
580
+ if (control) {
581
+ this.setQuality(control, address ? (quality ?? null) : null);
582
+ }
583
+ });
584
+ }
585
+ /**
586
+ * Включает или отключает контроль качества адреса для контрола и пересчитывает его валидность без рассылки событий.
587
+ * Сохранённое качество при отключении не теряется и снова учитывается после включения.
588
+ * Вызывать при смене значения формы, а не из хуков проверки изменений (ngOnChanges и т.п.),
589
+ * чтобы родительские шаблоны сразу видели актуальную валидность.
590
+ *
591
+ * @param control Контрол адреса.
592
+ * @param enabled Признак, что контроль качества адреса включён.
593
+ */
594
+ setQualityCheckEnabled(control, enabled) {
595
+ const checkEnabled = this.checkEnabledOf(control);
596
+ if (untracked(checkEnabled) === enabled) {
597
+ return;
598
+ }
599
+ // Вызов возможен во время отрисовки шаблона (первая подписка async pipe), где запись сигналов запрещена.
600
+ untracked(() => {
601
+ checkEnabled.set(enabled);
602
+ });
603
+ control.updateValueAndValidity({ emitEvent: false });
604
+ }
605
+ /**
606
+ * Возвращает признак, что контроль качества адреса для контрола включён.
607
+ *
608
+ * @param control Контрол адреса.
609
+ */
610
+ isQualityCheckEnabled(control) {
611
+ return this.checkEnabledOf(control)();
612
+ }
613
+ /**
614
+ * Возвращает ошибку неполного адреса либо null, если контрол можно отправлять: контроль качества отключён,
615
+ * блокировка выключена токеном {@link SC_BLOCK_INCOMPLETE_ADDRESS} или адрес не неполный.
616
+ * Для очищенного поля сбрасывает сохранённое качество адреса.
617
+ *
618
+ * @param control Контрол адреса.
619
+ */
620
+ validate(control) {
621
+ this.resetQualityOfEmptyAddress(control);
622
+ return this.blockIncompleteAddress && this.isQualityCheckEnabled(control) && this.getQuality(control) === ScSuggestionAddressQuality.incomplete
623
+ ? { incompleteAddress: this.incompleteAddressError }
624
+ : null;
625
+ }
626
+ /**
627
+ * Возвращает текст предупреждения о необходимости проверить выбранный адрес либо null, когда предупреждение не требуется,
628
+ * в том числе для пустого поля. Для неполного адреса при включённой блокировке отправки вместо предупреждения
629
+ * показывается ошибка валидатора {@link validator}, если он подключён к контролу.
630
+ *
631
+ * @param control Контрол адреса.
632
+ */
633
+ getWarningMessage(control) {
634
+ if (!this.isQualityCheckEnabled(control)) {
635
+ return null;
636
+ }
637
+ switch (this.getQuality(control)) {
638
+ case ScSuggestionAddressQuality.undetermined:
639
+ return 'Не удалось определить полноту адреса, проверьте его';
640
+ case ScSuggestionAddressQuality.incomplete:
641
+ return this.blockIncompleteAddress && control.hasValidator(this.validator) ? null : 'Адрес неполный, проверьте его';
642
+ default:
643
+ return null;
644
+ }
645
+ }
646
+ /**
647
+ * Возвращает сигнал состояния качества для контрола, создавая его при первом обращении.
648
+ *
649
+ * @param control Контрол адреса.
650
+ */
651
+ stateOf(control) {
652
+ let state = this.states.get(control);
653
+ if (!state) {
654
+ state = signal(null);
655
+ this.states.set(control, state);
656
+ }
657
+ return state;
658
+ }
659
+ /**
660
+ * Возвращает сигнал признака включённого контроля качества для контрола, создавая его при первом обращении.
661
+ *
662
+ * @param control Контрол адреса.
663
+ */
664
+ checkEnabledOf(control) {
665
+ let checkEnabled = this.checkEnabledStates.get(control);
666
+ if (!checkEnabled) {
667
+ checkEnabled = signal(true);
668
+ this.checkEnabledStates.set(control, checkEnabled);
669
+ }
670
+ return checkEnabled;
671
+ }
672
+ /**
673
+ * Сбрасывает сохранённое качество адреса, если поле очищено.
674
+ *
675
+ * @param control Контрол адреса.
676
+ */
677
+ resetQualityOfEmptyAddress(control) {
678
+ const state = this.states.get(control);
679
+ if (state && untracked(state) && ScAddressQualityService.isEmptyAddress(control.value)) {
680
+ // Проверка возможна во время отрисовки шаблона, где запись сигналов запрещена.
681
+ untracked(() => {
682
+ state.set(null);
683
+ });
684
+ }
685
+ }
686
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScAddressQualityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
687
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScAddressQualityService, providedIn: 'root' }); }
688
+ }
689
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScAddressQualityService, decorators: [{
690
+ type: Injectable,
691
+ args: [{
692
+ providedIn: 'root',
693
+ }]
694
+ }] });
695
+
481
696
  /* eslint-disable class-methods-use-this */
482
697
  /**
483
698
  * Компонент подсказок для поля ввода.
@@ -490,6 +705,11 @@ class ScSuggestionFieldComponent {
490
705
  * Тип подсказок.
491
706
  */
492
707
  this.type = ScISuggestionType.fio;
708
+ /**
709
+ * Признак, что элементы подсказок показывают пометку о полноте адреса.
710
+ * Отключается там, где адреса из подсказки по организации не применяются.
711
+ */
712
+ this.showAddressQuality = true;
493
713
  /**
494
714
  * Событие выбора результата подсказки.
495
715
  */
@@ -512,6 +732,10 @@ class ScSuggestionFieldComponent {
512
732
  * Признак, что разрешено выбирать записи ликвидированных организаций.
513
733
  */
514
734
  this.allowSelectTerminated = inject(SC_ALLOW_SELECT_TERMINATED);
735
+ /**
736
+ * Сервис-реестр качества адресов, выбранных из подсказок.
737
+ */
738
+ this.addressQualityService = inject(ScAddressQualityService);
515
739
  }
516
740
  /** @inheritDoc */
517
741
  ngOnInit() {
@@ -544,7 +768,7 @@ class ScSuggestionFieldComponent {
544
768
  break;
545
769
  case ScISuggestionType.address:
546
770
  if ('addressString' in suggestion) {
547
- this.control.control?.patchValue(suggestion.addressString, { emitEvent: false });
771
+ this.applyAddressSuggestion(suggestion);
548
772
  }
549
773
  break;
550
774
  case ScISuggestionType.bank:
@@ -558,17 +782,7 @@ class ScSuggestionFieldComponent {
558
782
  break;
559
783
  case ScISuggestionType.organization:
560
784
  if ('inn' in suggestion && !('bic' in suggestion)) {
561
- (this.control.control?.parent).patchValue({
562
- name: suggestion.name,
563
- inn: suggestion.inn,
564
- kpp: suggestion.kpp,
565
- okpo: suggestion.okpo,
566
- directorName: suggestion.directorName,
567
- directorPosition: suggestion.directorPosition,
568
- legalAddress: suggestion.legalAddress,
569
- postalAddress: suggestion.postalAddress,
570
- actualAddress: suggestion.actualAddress,
571
- }, { emitEvent: false });
785
+ this.applyOrganizationSuggestion(suggestion);
572
786
  }
573
787
  break;
574
788
  case ScISuggestionType.email:
@@ -607,6 +821,33 @@ class ScSuggestionFieldComponent {
607
821
  }
608
822
  return false;
609
823
  }
824
+ /**
825
+ * Возвращает текст пометки о качестве адреса для элемента выпадающего списка подсказок либо null, когда пометка не требуется.
826
+ *
827
+ * @param quality Качество (полнота) адреса.
828
+ */
829
+ getAddressQualityWarning(quality) {
830
+ if (!this.showAddressQuality) {
831
+ return null;
832
+ }
833
+ switch (quality) {
834
+ case ScSuggestionAddressQuality.undetermined:
835
+ return 'Полнота адреса не определена';
836
+ case ScSuggestionAddressQuality.incomplete:
837
+ return 'Неполный адрес';
838
+ default:
839
+ return null;
840
+ }
841
+ }
842
+ /**
843
+ * Возвращает текст пометки о качестве юридического адреса для подсказки по организации либо null,
844
+ * когда пометка не требуется, в том числе когда у организации нет юридического адреса.
845
+ *
846
+ * @param suggestion Объект подсказки по организации.
847
+ */
848
+ getOrganizationAddressQualityWarning(suggestion) {
849
+ return suggestion.legalAddress ? this.getAddressQualityWarning(suggestion.legalAddressQuality) : null;
850
+ }
610
851
  /**
611
852
  * Проверяет прекращена ли деятельность указанной организации.
612
853
  *
@@ -616,14 +857,47 @@ class ScSuggestionFieldComponent {
616
857
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
617
858
  return suggestion.rawData?.['state']?.status === 'LIQUIDATED';
618
859
  }
860
+ /**
861
+ * Заполняет контрол строкой выбранного адреса и регистрирует качество адреса.
862
+ *
863
+ * @param suggestion Объект подсказки по адресу.
864
+ */
865
+ applyAddressSuggestion(suggestion) {
866
+ this.control.control?.patchValue(suggestion.addressString, { emitEvent: false });
867
+ if (this.control.control) {
868
+ this.addressQualityService.setQuality(this.control.control, suggestion.quality ?? null);
869
+ }
870
+ }
871
+ /**
872
+ * Заполняет поля родительской группы данными выбранной организации и регистрирует качество её адресов.
873
+ *
874
+ * @param suggestion Объект подсказки по организации.
875
+ */
876
+ applyOrganizationSuggestion(suggestion) {
877
+ const parentGroup = this.control.control?.parent;
878
+ parentGroup.patchValue({
879
+ name: suggestion.name,
880
+ inn: suggestion.inn,
881
+ kpp: suggestion.kpp,
882
+ okpo: suggestion.okpo,
883
+ directorName: suggestion.directorName,
884
+ directorPosition: suggestion.directorPosition,
885
+ legalAddress: suggestion.legalAddress,
886
+ postalAddress: suggestion.postalAddress,
887
+ actualAddress: suggestion.actualAddress,
888
+ }, { emitEvent: false });
889
+ this.addressQualityService.setOrganizationAddressQualities(parentGroup, suggestion);
890
+ }
619
891
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScSuggestionFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
620
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScSuggestionFieldComponent, isStandalone: true, selector: "sc-suggestion-field", inputs: { type: "type" }, outputs: { selectedClick: "selectedClick" }, ngImport: i0, template: "<tui-loader\n size=\"m\"\n [overlay]=\"true\"\n [loading]=\"!!(loading$ | async)\"\n>\n @let options = suggestions$ | async;\n <tui-data-list>\n @for (option of options; track option) {\n <button\n tuiOption\n (click)=\"onSelected(option)\"\n [disabled]=\"isDisabledSuggestion(option)\"\n class=\"flex-col !items-start\"\n >\n @let optionValue = $any(option);\n @switch (type) {\n @case (suggestionType.fio) {\n <span class=\"text-tui-link\">{{ optionValue.fio }}</span>\n }\n @case (suggestionType.organization) {\n <span class=\"text-tui-link\">\n {{ optionValue.name }}\n <span class=\"ml-1 text-tui-text-02\">\u0438\u043D\u043D: {{ optionValue.inn }}</span>\n @if (isOrgTerminated(optionValue)) {\n <span class=\"text-tui-negative\"> \u041B\u0438\u043A\u0432\u0438\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u043E </span>\n }\n </span>\n <span class=\"text-tui-text-02\">{{ optionValue?.legalAddress }}</span>\n }\n @case (suggestionType.bank) {\n <span class=\"text-tui-link\">{{ optionValue.name }}</span>\n <span class=\"text-tui-text-02\">{{ optionValue.bic }}</span>\n }\n @case (suggestionType.email) {\n <span class=\"text-tui-link\">{{ optionValue.email }}</span>\n }\n @case (suggestionType.address) {\n <span class=\"text-tui-link\">{{ optionValue.addressString }}</span>\n }\n }\n </button>\n }\n </tui-data-list>\n</tui-loader>\n", dependencies: [{ kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "loading"] }, { kind: "component", type: i2.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i2.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
892
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScSuggestionFieldComponent, isStandalone: true, selector: "sc-suggestion-field", inputs: { type: "type", showAddressQuality: "showAddressQuality" }, outputs: { selectedClick: "selectedClick" }, ngImport: i0, template: "<tui-loader\n size=\"m\"\n [overlay]=\"true\"\n [loading]=\"!!(loading$ | async)\"\n>\n @let options = suggestions$ | async;\n <tui-data-list>\n @for (option of options; track option) {\n <button\n tuiOption\n (click)=\"onSelected(option)\"\n [disabled]=\"isDisabledSuggestion(option)\"\n class=\"flex-col !items-start\"\n >\n @let optionValue = $any(option);\n @switch (type) {\n @case (suggestionType.fio) {\n <span class=\"text-tui-link\">{{ optionValue.fio }}</span>\n }\n @case (suggestionType.organization) {\n <span class=\"text-tui-link\">\n {{ optionValue.name }}\n <span class=\"ml-1 text-tui-text-02\">\u0438\u043D\u043D: {{ optionValue.inn }}</span>\n @if (isOrgTerminated(optionValue)) {\n <span class=\"text-tui-negative\"> \u041B\u0438\u043A\u0432\u0438\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u043E </span>\n }\n </span>\n <span class=\"text-tui-text-02\">{{ optionValue?.legalAddress }}</span>\n @if (getOrganizationAddressQualityWarning(optionValue); as addressQualityWarning) {\n <span class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</span>\n }\n }\n @case (suggestionType.bank) {\n <span class=\"text-tui-link\">{{ optionValue.name }}</span>\n <span class=\"text-tui-text-02\">{{ optionValue.bic }}</span>\n }\n @case (suggestionType.email) {\n <span class=\"text-tui-link\">{{ optionValue.email }}</span>\n }\n @case (suggestionType.address) {\n <span class=\"text-tui-link\">{{ optionValue.addressString }}</span>\n @if (getAddressQualityWarning(optionValue.quality); as addressQualityWarning) {\n <span class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</span>\n }\n }\n }\n </button>\n }\n </tui-data-list>\n</tui-loader>\n", dependencies: [{ kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "loading"] }, { kind: "component", type: i2.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i2.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
621
893
  }
622
894
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScSuggestionFieldComponent, decorators: [{
623
895
  type: Component,
624
- args: [{ selector: 'sc-suggestion-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [TuiLoader, ...TuiDataList, AsyncPipe], template: "<tui-loader\n size=\"m\"\n [overlay]=\"true\"\n [loading]=\"!!(loading$ | async)\"\n>\n @let options = suggestions$ | async;\n <tui-data-list>\n @for (option of options; track option) {\n <button\n tuiOption\n (click)=\"onSelected(option)\"\n [disabled]=\"isDisabledSuggestion(option)\"\n class=\"flex-col !items-start\"\n >\n @let optionValue = $any(option);\n @switch (type) {\n @case (suggestionType.fio) {\n <span class=\"text-tui-link\">{{ optionValue.fio }}</span>\n }\n @case (suggestionType.organization) {\n <span class=\"text-tui-link\">\n {{ optionValue.name }}\n <span class=\"ml-1 text-tui-text-02\">\u0438\u043D\u043D: {{ optionValue.inn }}</span>\n @if (isOrgTerminated(optionValue)) {\n <span class=\"text-tui-negative\"> \u041B\u0438\u043A\u0432\u0438\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u043E </span>\n }\n </span>\n <span class=\"text-tui-text-02\">{{ optionValue?.legalAddress }}</span>\n }\n @case (suggestionType.bank) {\n <span class=\"text-tui-link\">{{ optionValue.name }}</span>\n <span class=\"text-tui-text-02\">{{ optionValue.bic }}</span>\n }\n @case (suggestionType.email) {\n <span class=\"text-tui-link\">{{ optionValue.email }}</span>\n }\n @case (suggestionType.address) {\n <span class=\"text-tui-link\">{{ optionValue.addressString }}</span>\n }\n }\n </button>\n }\n </tui-data-list>\n</tui-loader>\n" }]
896
+ args: [{ selector: 'sc-suggestion-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [TuiLoader, ...TuiDataList, AsyncPipe], template: "<tui-loader\n size=\"m\"\n [overlay]=\"true\"\n [loading]=\"!!(loading$ | async)\"\n>\n @let options = suggestions$ | async;\n <tui-data-list>\n @for (option of options; track option) {\n <button\n tuiOption\n (click)=\"onSelected(option)\"\n [disabled]=\"isDisabledSuggestion(option)\"\n class=\"flex-col !items-start\"\n >\n @let optionValue = $any(option);\n @switch (type) {\n @case (suggestionType.fio) {\n <span class=\"text-tui-link\">{{ optionValue.fio }}</span>\n }\n @case (suggestionType.organization) {\n <span class=\"text-tui-link\">\n {{ optionValue.name }}\n <span class=\"ml-1 text-tui-text-02\">\u0438\u043D\u043D: {{ optionValue.inn }}</span>\n @if (isOrgTerminated(optionValue)) {\n <span class=\"text-tui-negative\"> \u041B\u0438\u043A\u0432\u0438\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u043E </span>\n }\n </span>\n <span class=\"text-tui-text-02\">{{ optionValue?.legalAddress }}</span>\n @if (getOrganizationAddressQualityWarning(optionValue); as addressQualityWarning) {\n <span class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</span>\n }\n }\n @case (suggestionType.bank) {\n <span class=\"text-tui-link\">{{ optionValue.name }}</span>\n <span class=\"text-tui-text-02\">{{ optionValue.bic }}</span>\n }\n @case (suggestionType.email) {\n <span class=\"text-tui-link\">{{ optionValue.email }}</span>\n }\n @case (suggestionType.address) {\n <span class=\"text-tui-link\">{{ optionValue.addressString }}</span>\n @if (getAddressQualityWarning(optionValue.quality); as addressQualityWarning) {\n <span class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</span>\n }\n }\n }\n </button>\n }\n </tui-data-list>\n</tui-loader>\n" }]
625
897
  }], propDecorators: { type: [{
626
898
  type: Input
899
+ }], showAddressQuality: [{
900
+ type: Input
627
901
  }], selectedClick: [{
628
902
  type: Output
629
903
  }] } });
@@ -807,6 +1081,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
807
1081
  type: Output
808
1082
  }] } });
809
1083
 
1084
+ /**
1085
+ * Директива предупреждения о качестве (полноте) адреса, выбранного из подсказок, для поля с контролом формы.
1086
+ *
1087
+ * Блокировку отправки формы с неполным адресом обеспечивает валидатор {@link ScAddressQualityService.validator},
1088
+ * подключённый к контролу адреса при его создании.
1089
+ */
1090
+ class ScAddressQualityDirective {
1091
+ constructor() {
1092
+ /**
1093
+ * Контрол поля адреса.
1094
+ */
1095
+ this.ngControl = inject(NgControl, { self: true });
1096
+ /**
1097
+ * Сервис-реестр качества адресов, выбранных из подсказок.
1098
+ */
1099
+ this.addressQualityService = inject(ScAddressQualityService);
1100
+ }
1101
+ /**
1102
+ * Возвращает текст предупреждения о необходимости проверить выбранный адрес либо null, когда предупреждение не требуется.
1103
+ */
1104
+ getWarningMessage() {
1105
+ const { control } = this.ngControl;
1106
+ return control ? this.addressQualityService.getWarningMessage(control) : null;
1107
+ }
1108
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScAddressQualityDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1109
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: ScAddressQualityDirective, isStandalone: true, selector: "[scAddressQuality]", exportAs: ["scAddressQuality"], ngImport: i0 }); }
1110
+ }
1111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScAddressQualityDirective, decorators: [{
1112
+ type: Directive,
1113
+ args: [{
1114
+ standalone: true,
1115
+ selector: '[scAddressQuality]',
1116
+ exportAs: 'scAddressQuality',
1117
+ }]
1118
+ }] });
1119
+
810
1120
  /**
811
1121
  * Пайп для форматирования даты и времени.
812
1122
  */
@@ -1883,7 +2193,7 @@ class ScSimpleSignUpFormComponent {
1883
2193
  this.helpNotificationService.closeAllHelpNotification();
1884
2194
  }
1885
2195
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScSimpleSignUpFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1886
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScSimpleSignUpFormComponent, isStandalone: true, selector: "sc-simple-sign-up-form", outputs: { successAuth: "successAuth", clickOffer: "clickOffer" }, providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })], ngImport: i0, template: "<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 \u0424.\u0418.\u041E.\n <tui-textfield>\n <input\n tuiInput\n autocomplete=\"name\"\n formControlName=\"name\"\n placeholder=\"\u0424.\u0418.\u041E.\"\n />\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n />\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </label>\n\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n required=\"true\"\n formControlName=\"acceptRules\"\n />\n <div>\n <span>\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n <a\n tuiLink\n [style.text-decoration-line]=\"'underline'\"\n (click)=\"$event.preventDefault(); clickOffer.emit()\"\n >\n \u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B\n </a>\n .\n </span>\n <span class=\"text-tui-negative\">*</span>\n <tui-error formControlName=\"acceptRules\" />\n </div>\n </label>\n }\n }\n\n <tui-error\n class=\"self-center\"\n [formGroup]=\"form\"\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() ? '\u0412\u043E\u0439\u0442\u0438' : '\u041A\u0443\u043F\u0438\u0442\u044C' }}\n </button>\n</form>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]" }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]" }, { kind: "component", type: ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "pseudoInvalid", "required", "subtitle", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange", "isBusyChange", "isConfirmedChange"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2196
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScSimpleSignUpFormComponent, isStandalone: true, selector: "sc-simple-sign-up-form", outputs: { successAuth: "successAuth", clickOffer: "clickOffer" }, providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })], ngImport: i0, template: "<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 \u0424.\u0418.\u041E.\n <tui-textfield>\n <input\n tuiInput\n autocomplete=\"name\"\n formControlName=\"name\"\n placeholder=\"\u0424.\u0418.\u041E.\"\n />\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n />\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </label>\n\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n required=\"true\"\n formControlName=\"acceptRules\"\n />\n <div>\n <span>\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n <a\n tuiLink\n [style.text-decoration-line]=\"'underline'\"\n (click)=\"$event.preventDefault(); clickOffer.emit()\"\n >\n \u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B\n </a>\n .\n </span>\n <span class=\"text-tui-negative\">*</span>\n <tui-error formControlName=\"acceptRules\" />\n </div>\n </label>\n }\n }\n\n <tui-error\n class=\"self-center\"\n [formGroup]=\"form\"\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() ? '\u0412\u043E\u0439\u0442\u0438' : '\u041A\u0443\u043F\u0438\u0442\u044C' }}\n </button>\n</form>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]" }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]" }, { kind: "component", type: ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "pseudoInvalid", "required", "subtitle", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange", "isBusyChange", "isConfirmedChange"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type", "showAddressQuality"], outputs: ["selectedClick"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1887
2197
  }
1888
2198
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScSimpleSignUpFormComponent, decorators: [{
1889
2199
  type: Component,
@@ -2177,7 +2487,7 @@ class ScNewContactFormComponent {
2177
2487
  this.countries = getCountries();
2178
2488
  }
2179
2489
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScNewContactFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2180
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.16", type: ScNewContactFormComponent, isStandalone: true, selector: "sc-new-contact-form", inputs: { form: "form" }, ngImport: i0, template: "<div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel>\n \u0424.\u0418.\u041E.\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n placeholder=\"\u0424.\u0418.\u041E.\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries) || []\"\n autocomplete=\"phone\"\n placeholder=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\"\n />\n </tui-textfield>\n <tui-error formControlName=\"phone\" />\n </label>\n\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n\n <label tuiLabel>\n \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"position\"\n placeholder=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"position\" />\n </label>\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "component", type: i1$1.TuiInputPhoneInternationalComponent, selector: "input[tuiInputPhoneInternational]", inputs: ["countrySearch", "countryIsoCode", "countries"], outputs: ["countryIsoCodeChange"] }, { kind: "pipe", type: TuiSortCountriesPipe, name: "tuiSortCountries" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2490
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.16", type: ScNewContactFormComponent, isStandalone: true, selector: "sc-new-contact-form", inputs: { form: "form" }, ngImport: i0, template: "<div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel>\n \u0424.\u0418.\u041E.\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n placeholder=\"\u0424.\u0418.\u041E.\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries) || []\"\n autocomplete=\"phone\"\n placeholder=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\"\n />\n </tui-textfield>\n <tui-error formControlName=\"phone\" />\n </label>\n\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n\n <label tuiLabel>\n \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"position\"\n placeholder=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"position\" />\n </label>\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type", "showAddressQuality"], outputs: ["selectedClick"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "component", type: i1$1.TuiInputPhoneInternationalComponent, selector: "input[tuiInputPhoneInternational]", inputs: ["countrySearch", "countryIsoCode", "countries"], outputs: ["countryIsoCodeChange"] }, { kind: "pipe", type: TuiSortCountriesPipe, name: "tuiSortCountries" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2181
2491
  }
2182
2492
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScNewContactFormComponent, decorators: [{
2183
2493
  type: Component,
@@ -2255,7 +2565,7 @@ class ScNewContragentBankAccountsFormComponent {
2255
2565
  return this.referencesService.getCurrencyById$(currencyId);
2256
2566
  }
2257
2567
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScNewContragentBankAccountsFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2258
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScNewContragentBankAccountsFormComponent, isStandalone: true, selector: "sc-new-contragent-bank-account-form", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: false, isRequired: false, transformFunction: null }, opf: { classPropertyName: "opf", publicName: "opf", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel>\n \u041D\u0430\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u0431\u0430\u043D\u043A\u0430\n <tui-textfield>\n @if (opfListEnum[opf()] !== opfListEnum.non_resident_legal) {\n <input\n tuiInput\n formControlName=\"bankName\"\n placeholder=\"\u041D\u0430\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u0431\u0430\u043D\u043A\u0430\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.bank\"\n />\n } @else {\n <input\n tuiInput\n formControlName=\"bankName\"\n placeholder=\"\u041D\u0430\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u0431\u0430\u043D\u043A\u0430\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"bankName\" />\n </label>\n <label tuiLabel>\n \u0411\u0418\u041A\n <tui-textfield>\n @if (opfListEnum[opf()] !== opfListEnum.non_resident_legal) {\n <input\n tuiInput\n [maskito]=\"bicMask\"\n autocomplete=\"bic\"\n formControlName=\"bic\"\n placeholder=\"\u0411\u0418\u041A\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.bank\"\n />\n } @else {\n <input\n tuiInput\n [maskito]=\"bicMask\"\n autocomplete=\"bic\"\n formControlName=\"bic\"\n placeholder=\"\u0411\u0418\u041A\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"bic\" />\n </label>\n <label tuiLabel>\n \u041D\u043E\u043C\u0435\u0440 \u0441\u0447\u0435\u0442\u0430\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"accountNumberMask\"\n autocomplete=\"accountNumber\"\n formControlName=\"accountNumber\"\n placeholder=\"\u041D\u043E\u043C\u0435\u0440 \u0441\u0447\u0435\u0442\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"accountNumber\" />\n </label>\n <label tuiLabel>\n \u041A\u043E\u0440\u0440\u0435\u0441\u043F\u043E\u043D\u0434\u0435\u043D\u0442\u0441\u043A\u0438\u0439 \u0441\u0447\u0435\u0442\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"correspondentAccount\"\n autocomplete=\"correspondentAccount\"\n formControlName=\"correspondentAccount\"\n placeholder=\"\u041A\u043E\u0440\u0440\u0435\u0441\u043F\u043E\u043D\u0434\u0435\u043D\u0442\u0441\u043A\u0438\u0439 \u0441\u0447\u0435\u0442\"\n />\n </tui-textfield>\n <tui-error formControlName=\"correspondentAccount\" />\n </label>\n <label tuiLabel>\n \u0412\u0430\u043B\u044E\u0442\u0430 \u0440\u0430\u0441\u0447\u0451\u0442\u043E\u0432\n <tui-textfield\n tuiChevron\n [content]=\"currencyContent\"\n >\n <input\n tuiSelect\n formControlName=\"currencyId\"\n placeholder=\"\u0412\u0430\u043B\u044E\u0442\u0430 \u0440\u0430\u0441\u0447\u0451\u0442\u043E\u0432\"\n />\n <tui-data-list *tuiDropdown>\n @for (item of currencies$ | async; track item; let index = $index) {\n <button\n tuiOption\n [value]=\"item.id\"\n >\n {{ item.name }} ({{ item.symbol }})\n </button>\n }\n </tui-data-list>\n </tui-textfield>\n <ng-template\n #currencyContent\n let-data\n >\n <div>{{ (getCurrencyById$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error formControlName=\"currencyId\" />\n </label>\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"], outputs: ["maskitoChange", "maskitoElementChange"] }, { kind: "directive", type: i1$1.TuiSelectDirective, selector: "input[tuiSelect]" }, { kind: "component", type: i2.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i2.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "directive", type: i2.TuiOptionWithValue, selector: "button[tuiOption][value], a[tuiOption][value], label[tuiOption][value]", inputs: ["disabled", "value"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2568
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScNewContragentBankAccountsFormComponent, isStandalone: true, selector: "sc-new-contragent-bank-account-form", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: false, isRequired: false, transformFunction: null }, opf: { classPropertyName: "opf", publicName: "opf", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3\"\n>\n <label tuiLabel>\n \u041D\u0430\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u0431\u0430\u043D\u043A\u0430\n <tui-textfield>\n @if (opfListEnum[opf()] !== opfListEnum.non_resident_legal) {\n <input\n tuiInput\n formControlName=\"bankName\"\n placeholder=\"\u041D\u0430\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u0431\u0430\u043D\u043A\u0430\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.bank\"\n />\n } @else {\n <input\n tuiInput\n formControlName=\"bankName\"\n placeholder=\"\u041D\u0430\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u0431\u0430\u043D\u043A\u0430\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"bankName\" />\n </label>\n <label tuiLabel>\n \u0411\u0418\u041A\n <tui-textfield>\n @if (opfListEnum[opf()] !== opfListEnum.non_resident_legal) {\n <input\n tuiInput\n [maskito]=\"bicMask\"\n autocomplete=\"bic\"\n formControlName=\"bic\"\n placeholder=\"\u0411\u0418\u041A\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.bank\"\n />\n } @else {\n <input\n tuiInput\n [maskito]=\"bicMask\"\n autocomplete=\"bic\"\n formControlName=\"bic\"\n placeholder=\"\u0411\u0418\u041A\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"bic\" />\n </label>\n <label tuiLabel>\n \u041D\u043E\u043C\u0435\u0440 \u0441\u0447\u0435\u0442\u0430\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"accountNumberMask\"\n autocomplete=\"accountNumber\"\n formControlName=\"accountNumber\"\n placeholder=\"\u041D\u043E\u043C\u0435\u0440 \u0441\u0447\u0435\u0442\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"accountNumber\" />\n </label>\n <label tuiLabel>\n \u041A\u043E\u0440\u0440\u0435\u0441\u043F\u043E\u043D\u0434\u0435\u043D\u0442\u0441\u043A\u0438\u0439 \u0441\u0447\u0435\u0442\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"correspondentAccount\"\n autocomplete=\"correspondentAccount\"\n formControlName=\"correspondentAccount\"\n placeholder=\"\u041A\u043E\u0440\u0440\u0435\u0441\u043F\u043E\u043D\u0434\u0435\u043D\u0442\u0441\u043A\u0438\u0439 \u0441\u0447\u0435\u0442\"\n />\n </tui-textfield>\n <tui-error formControlName=\"correspondentAccount\" />\n </label>\n <label tuiLabel>\n \u0412\u0430\u043B\u044E\u0442\u0430 \u0440\u0430\u0441\u0447\u0451\u0442\u043E\u0432\n <tui-textfield\n tuiChevron\n [content]=\"currencyContent\"\n >\n <input\n tuiSelect\n formControlName=\"currencyId\"\n placeholder=\"\u0412\u0430\u043B\u044E\u0442\u0430 \u0440\u0430\u0441\u0447\u0451\u0442\u043E\u0432\"\n />\n <tui-data-list *tuiDropdown>\n @for (item of currencies$ | async; track item; let index = $index) {\n <button\n tuiOption\n [value]=\"item.id\"\n >\n {{ item.name }} ({{ item.symbol }})\n </button>\n }\n </tui-data-list>\n </tui-textfield>\n <ng-template\n #currencyContent\n let-data\n >\n <div>{{ (getCurrencyById$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error formControlName=\"currencyId\" />\n </label>\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type", "showAddressQuality"], outputs: ["selectedClick"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"], outputs: ["maskitoChange", "maskitoElementChange"] }, { kind: "directive", type: i1$1.TuiSelectDirective, selector: "input[tuiSelect]" }, { kind: "component", type: i2.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i2.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "directive", type: i2.TuiOptionWithValue, selector: "button[tuiOption][value], a[tuiOption][value], label[tuiOption][value]", inputs: ["disabled", "value"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2259
2569
  }
2260
2570
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScNewContragentBankAccountsFormComponent, decorators: [{
2261
2571
  type: Component,
@@ -2357,7 +2667,7 @@ function scAtLeastOneRequiredValidator(fields, blockName) {
2357
2667
  };
2358
2668
  }
2359
2669
 
2360
- /* eslint-disable class-methods-use-this,@typescript-eslint/unbound-method */
2670
+ /* eslint-disable class-methods-use-this,@typescript-eslint/unbound-method,security/detect-object-injection */
2361
2671
  /**
2362
2672
  * Форма создания нового контрагента.
2363
2673
  */
@@ -2371,6 +2681,10 @@ class ScNewContragentFormComponent {
2371
2681
  * Сервис для получения списков стран, регионов, городов.
2372
2682
  */
2373
2683
  this.locationsService = inject(ScLocationsService);
2684
+ /**
2685
+ * Сервис-реестр качества адресов, выбранных из подсказок.
2686
+ */
2687
+ this.addressQualityService = inject(ScAddressQualityService);
2374
2688
  /**
2375
2689
  * Директива c `FormGroup` из DOM.
2376
2690
  */
@@ -2384,9 +2698,9 @@ class ScNewContragentFormComponent {
2384
2698
  directorName: new FormControl(null, Validators.required),
2385
2699
  directorPosition: new FormControl(null, Validators.required),
2386
2700
  directorActsOn: new FormControl(null, Validators.required),
2387
- legalAddress: new FormControl(null, Validators.required),
2388
- postalAddress: new FormControl(null, Validators.required),
2389
- actualAddress: new FormControl(null, Validators.required),
2701
+ legalAddress: new FormControl(null, [Validators.required, this.addressQualityService.validator]),
2702
+ postalAddress: new FormControl(null, [Validators.required, this.addressQualityService.validator]),
2703
+ actualAddress: new FormControl(null, [Validators.required, this.addressQualityService.validator]),
2390
2704
  bankAccounts: new FormArray([
2391
2705
  new FormGroup({
2392
2706
  bankName: new FormControl(null, Validators.required),
@@ -2434,6 +2748,15 @@ class ScNewContragentFormComponent {
2434
2748
  * {@link Observable} выбора ОПФ.
2435
2749
  */
2436
2750
  this.selectOpf$ = tuiControlValue(this.form.controls.opf).pipe(distinctUntilChanged(), tap((opf) => {
2751
+ const opfOrder = ScOpfList[opf];
2752
+ const innLength = opfOrder > ScOpfList.entrepreneur ? 10 : 12;
2753
+ const okpoLength = opfOrder > ScOpfList.entrepreneur ? 8 : 10;
2754
+ // Правила задаются до включения контролов: enable и setControl проверяют сразу.
2755
+ this.entrepreneurGroup.controls.inn.setValidators([Validators.required, Validators.minLength(innLength), Validators.maxLength(innLength)]);
2756
+ this.entrepreneurGroup.controls.okpo.setValidators([Validators.required, Validators.minLength(okpoLength), Validators.maxLength(okpoLength)]);
2757
+ [this.entrepreneurGroup.controls.legalAddress, this.entrepreneurGroup.controls.postalAddress, this.entrepreneurGroup.controls.actualAddress].forEach((addressControl) => {
2758
+ this.addressQualityService.setQualityCheckEnabled(addressControl, opfOrder !== ScOpfList.non_resident_legal);
2759
+ });
2437
2760
  Object.keys({ ...this.entrepreneurGroup.controls, ...this.legalGroup.controls, ...this.nonResidentLegalGroup.controls }).forEach((key) => {
2438
2761
  this.form.get(key)?.disable();
2439
2762
  });
@@ -2443,20 +2766,13 @@ class ScNewContragentFormComponent {
2443
2766
  this.form.setControl(key, formGroup.get(key));
2444
2767
  });
2445
2768
  };
2446
- // eslint-disable-next-line security/detect-object-injection
2447
- if (ScOpfList[opf] > ScOpfList.individual) {
2769
+ if (opfOrder > ScOpfList.individual) {
2448
2770
  addControls(this.entrepreneurGroup);
2449
- this.entrepreneurGroup.controls.inn.setValidators([Validators.required, Validators.minLength(12)]);
2450
- this.entrepreneurGroup.controls.okpo.setValidators([Validators.required, Validators.minLength(10)]);
2451
2771
  }
2452
- // eslint-disable-next-line security/detect-object-injection
2453
- if (ScOpfList[opf] > ScOpfList.entrepreneur) {
2772
+ if (opfOrder > ScOpfList.entrepreneur) {
2454
2773
  addControls(this.legalGroup);
2455
- this.entrepreneurGroup.controls.inn.setValidators([Validators.required, Validators.minLength(10)]);
2456
- this.entrepreneurGroup.controls.okpo.setValidators([Validators.required, Validators.minLength(8)]);
2457
2774
  }
2458
- // eslint-disable-next-line security/detect-object-injection
2459
- if (ScOpfList[opf] > ScOpfList.legal) {
2775
+ if (opfOrder > ScOpfList.legal) {
2460
2776
  addControls(this.nonResidentLegalGroup);
2461
2777
  this.legalGroup.controls.kpp.disable();
2462
2778
  this.entrepreneurGroup.controls.inn.disable();
@@ -2488,14 +2804,12 @@ class ScNewContragentFormComponent {
2488
2804
  *
2489
2805
  * @param opf Организационно-правовая форма.
2490
2806
  */
2491
- // eslint-disable-next-line security/detect-object-injection
2492
2807
  this.innMask = (opf) => (ScOpfList[opf] > ScOpfList.entrepreneur ? scLegalInnMask : scEntrepreneurInnMask);
2493
2808
  /**
2494
2809
  * Маска поля ввода ОКПО.
2495
2810
  *
2496
2811
  * @param opf Организационно-правовая форма.
2497
2812
  */
2498
- // eslint-disable-next-line security/detect-object-injection
2499
2813
  this.okpoMask = (opf) => (ScOpfList[opf] > ScOpfList.entrepreneur ? scLegalOkpoMask : scEntrepreneurOkpoMask);
2500
2814
  /**
2501
2815
  * Функция преобразования объекта сортировки в значение, отображаемое в поле ввода.
@@ -2553,7 +2867,7 @@ class ScNewContragentFormComponent {
2553
2867
  return this.locationsService.getCountries$().pipe(map((countries) => countries?.find((country) => country.id === countryId)?.name ?? ''));
2554
2868
  }
2555
2869
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScNewContragentFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2556
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScNewContragentFormComponent, isStandalone: true, selector: "sc-new-contragent-form", inputs: { opfControl: "opfControl" }, ngImport: i0, template: "@if (selectOpf$ | async; as selectOpf) {\n <div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u041E\u0431\u0449\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430</p>\n <label tuiLabel>\n \u0422\u0438\u043F \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 (\u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043F\u0440\u0430\u0432\u043E\u0432\u0430\u044F \u0444\u043E\u0440\u043C\u0430)\n <tui-textfield\n tuiChevron\n [content]=\"opfContent\"\n >\n <input\n tuiSelect\n formControlName=\"opf\"\n [readOnly]=\"!!opfControl\"\n placeholder=\"\u0422\u0438\u043F \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 (\u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043F\u0440\u0430\u0432\u043E\u0432\u0430\u044F \u0444\u043E\u0440\u043C\u0430)\"\n />\n <tui-data-list *tuiDropdown>\n @for (item of getOpf$() | async; track item; let index = $index) {\n <button\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n }\n </tui-data-list>\n </tui-textfield>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error formControlName=\"opf\" />\n </label>\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n [placeholder]=\"nameLabel\"\n />\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n } @else if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n @if (opfListEnum[selectOpf] > opfListEnum.individual) {\n <label tuiLabel>\n \u0418\u041D\u041D \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"innMask(selectOpf)\"\n autocomplete=\"inn\"\n formControlName=\"inn\"\n placeholder=\"\u0418\u041D\u041D \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n />\n </tui-textfield>\n <tui-error formControlName=\"inn\" />\n </label>\n @if (opfListEnum[selectOpf] === opfListEnum.legal) {\n <label tuiLabel>\n \u041A\u043E\u0434 \u041E\u041A\u041F\u041E\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"okpoMask(selectOpf)\"\n autocomplete=\"okpo\"\n formControlName=\"okpo\"\n placeholder=\"\u041A\u043E\u0434 \u041E\u041A\u041F\u041E\"\n />\n </tui-textfield>\n <tui-error formControlName=\"okpo\" />\n </label>\n }\n <label tuiLabel>\n \u0424.\u0418.\u041E. \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorName\"\n placeholder=\"\u0424.\u0418.\u041E. \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorName\" />\n </label>\n <label tuiLabel>\n \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorPosition\"\n placeholder=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorPosition\" />\n </label>\n <label tuiLabel>\n \u041E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u043B\u043D\u043E\u043C\u043E\u0447\u0438\u0439 \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorActsOn\"\n placeholder=\"\u041E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u043B\u043D\u043E\u043C\u043E\u0447\u0438\u0439 \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorActsOn\" />\n </label>\n <label tuiLabel>\n \u042E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"legalAddress\"\n placeholder=\"\u042E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"legalAddress\" />\n </label>\n <label tuiLabel>\n \u041F\u043E\u0447\u0442\u043E\u0432\u044B\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"postalAddress\"\n placeholder=\"\u041F\u043E\u0447\u0442\u043E\u0432\u044B\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"postalAddress\" />\n </label>\n <label tuiLabel>\n \u0424\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"actualAddress\"\n placeholder=\"\u0424\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"actualAddress\" />\n </label>\n @if (opfListEnum[selectOpf] === opfListEnum.legal) {\n <label tuiLabel>\n \u041A\u041F\u041F \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"kppMask\"\n autocomplete=\"kpp\"\n formControlName=\"kpp\"\n placeholder=\"\u041A\u041F\u041F \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\"\n />\n </tui-textfield>\n <tui-error formControlName=\"kpp\" />\n </label>\n }\n }\n @if (opfListEnum[selectOpf] === opfListEnum.non_resident_legal) {\n @let countries = countries$ | async;\n @let countriesId = countriesId$ | async;\n @if (countries) {\n <label tuiLabel>\n \u0421\u0442\u0440\u0430\u043D\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield [stringify]=\"stringify(countries ?? [])\">\n <input\n tuiComboBox\n formControlName=\"registrationCountryId\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n placeholder=\"\u0421\u0442\u0440\u0430\u043D\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n <tui-data-list-wrapper\n *tuiDropdown\n [itemContent]=\"stringify(countries ?? []) | tuiStringifyContent\"\n [items]=\"countriesId | tuiFilterByInput\"\n />\n </tui-textfield>\n <ng-template\n #CountryContent\n let-data\n >\n <div>{{ (getCountryNameById$(data) | async) ?? '' }}</div>\n </ng-template>\n <tui-error formControlName=\"registrationCountryId\" />\n </label>\n }\n <ng-template #selectLoading> <tui-loader /> </ng-template>\n <label tuiLabel>\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"registrationNumber\"\n placeholder=\"\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"registrationNumber\" />\n </label>\n <label tuiLabel>\n \u041D\u0430\u043B\u043E\u0433\u043E\u0432\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"taxNumber\"\n placeholder=\"\u041D\u0430\u043B\u043E\u0433\u043E\u0432\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"taxNumber\" />\n </label>\n }\n </div>\n}\n", styles: ["tui-carousel{--tui-carousel-padding: .5rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i1$1.TuiSelectDirective, selector: "input[tuiSelect]" }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "component", type: i2.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i2.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "directive", type: i2.TuiOptionWithValue, selector: "button[tuiOption][value], a[tuiOption][value], label[tuiOption][value]", inputs: ["disabled", "value"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "directive", type: MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"], outputs: ["maskitoChange", "maskitoElementChange"] }, { kind: "directive", type: i1$1.TuiComboBoxDirective, selector: "input[tuiComboBox]", inputs: ["strict", "matcher"] }, { kind: "component", type: TuiDataListWrapperComponent, selector: "tui-data-list-wrapper:not([labels])", inputs: ["items", "emptyContent", "size", "itemContent"], outputs: ["itemClick"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "loading"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiStringifyContentPipe, name: "tuiStringifyContent" }, { kind: "pipe", type: TuiFilterByInputPipe, name: "tuiFilterByInput" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2870
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScNewContragentFormComponent, isStandalone: true, selector: "sc-new-contragent-form", inputs: { opfControl: "opfControl" }, ngImport: i0, template: "@if (selectOpf$ | async; as selectOpf) {\n <div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u041E\u0431\u0449\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430</p>\n <label tuiLabel>\n \u0422\u0438\u043F \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 (\u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043F\u0440\u0430\u0432\u043E\u0432\u0430\u044F \u0444\u043E\u0440\u043C\u0430)\n <tui-textfield\n tuiChevron\n [content]=\"opfContent\"\n >\n <input\n tuiSelect\n formControlName=\"opf\"\n [readOnly]=\"!!opfControl\"\n placeholder=\"\u0422\u0438\u043F \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 (\u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043F\u0440\u0430\u0432\u043E\u0432\u0430\u044F \u0444\u043E\u0440\u043C\u0430)\"\n />\n <tui-data-list *tuiDropdown>\n @for (item of getOpf$() | async; track item; let index = $index) {\n <button\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n }\n </tui-data-list>\n </tui-textfield>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error formControlName=\"opf\" />\n </label>\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n [placeholder]=\"nameLabel\"\n />\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n } @else if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n @if (opfListEnum[selectOpf] > opfListEnum.individual) {\n <label tuiLabel>\n \u0418\u041D\u041D \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"innMask(selectOpf)\"\n autocomplete=\"inn\"\n formControlName=\"inn\"\n placeholder=\"\u0418\u041D\u041D \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n />\n </tui-textfield>\n <tui-error formControlName=\"inn\" />\n </label>\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <label tuiLabel>\n \u041A\u043E\u0434 \u041E\u041A\u041F\u041E\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"okpoMask(selectOpf)\"\n autocomplete=\"okpo\"\n formControlName=\"okpo\"\n placeholder=\"\u041A\u043E\u0434 \u041E\u041A\u041F\u041E\"\n />\n </tui-textfield>\n <tui-error formControlName=\"okpo\" />\n </label>\n }\n <label tuiLabel>\n \u0424.\u0418.\u041E. \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorName\"\n placeholder=\"\u0424.\u0418.\u041E. \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorName\" />\n </label>\n <label tuiLabel>\n \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorPosition\"\n placeholder=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorPosition\" />\n </label>\n <label tuiLabel>\n \u041E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u043B\u043D\u043E\u043C\u043E\u0447\u0438\u0439 \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorActsOn\"\n placeholder=\"\u041E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u043B\u043D\u043E\u043C\u043E\u0447\u0438\u0439 \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorActsOn\" />\n </label>\n <label tuiLabel>\n \u042E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n scAddressQuality\n #legalAddressQuality=\"scAddressQuality\"\n formControlName=\"legalAddress\"\n placeholder=\"\u042E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"legalAddress\" />\n @if (legalAddressQuality.getWarningMessage(); as addressQualityWarning) {\n <p class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</p>\n }\n </label>\n <label tuiLabel>\n \u041F\u043E\u0447\u0442\u043E\u0432\u044B\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n scAddressQuality\n #postalAddressQuality=\"scAddressQuality\"\n formControlName=\"postalAddress\"\n placeholder=\"\u041F\u043E\u0447\u0442\u043E\u0432\u044B\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"postalAddress\" />\n @if (postalAddressQuality.getWarningMessage(); as addressQualityWarning) {\n <p class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</p>\n }\n </label>\n <label tuiLabel>\n \u0424\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n scAddressQuality\n #actualAddressQuality=\"scAddressQuality\"\n formControlName=\"actualAddress\"\n placeholder=\"\u0424\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"actualAddress\" />\n @if (actualAddressQuality.getWarningMessage(); as addressQualityWarning) {\n <p class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</p>\n }\n </label>\n @if (opfListEnum[selectOpf] === opfListEnum.legal) {\n <label tuiLabel>\n \u041A\u041F\u041F \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"kppMask\"\n autocomplete=\"kpp\"\n formControlName=\"kpp\"\n placeholder=\"\u041A\u041F\u041F \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\"\n />\n </tui-textfield>\n <tui-error formControlName=\"kpp\" />\n </label>\n }\n }\n @if (opfListEnum[selectOpf] === opfListEnum.non_resident_legal) {\n @let countries = countries$ | async;\n @let countriesId = countriesId$ | async;\n @if (countries) {\n <label tuiLabel>\n \u0421\u0442\u0440\u0430\u043D\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield [stringify]=\"stringify(countries ?? [])\">\n <input\n tuiComboBox\n formControlName=\"registrationCountryId\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n placeholder=\"\u0421\u0442\u0440\u0430\u043D\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n <tui-data-list-wrapper\n *tuiDropdown\n [itemContent]=\"stringify(countries ?? []) | tuiStringifyContent\"\n [items]=\"countriesId | tuiFilterByInput\"\n />\n </tui-textfield>\n <ng-template\n #CountryContent\n let-data\n >\n <div>{{ (getCountryNameById$(data) | async) ?? '' }}</div>\n </ng-template>\n <tui-error formControlName=\"registrationCountryId\" />\n </label>\n }\n <ng-template #selectLoading> <tui-loader /> </ng-template>\n <label tuiLabel>\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"registrationNumber\"\n placeholder=\"\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"registrationNumber\" />\n </label>\n <label tuiLabel>\n \u041D\u0430\u043B\u043E\u0433\u043E\u0432\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"taxNumber\"\n placeholder=\"\u041D\u0430\u043B\u043E\u0433\u043E\u0432\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"taxNumber\" />\n </label>\n }\n </div>\n}\n", styles: ["tui-carousel{--tui-carousel-padding: .5rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i1$1.TuiSelectDirective, selector: "input[tuiSelect]" }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "component", type: i2.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i2.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "directive", type: i2.TuiOptionWithValue, selector: "button[tuiOption][value], a[tuiOption][value], label[tuiOption][value]", inputs: ["disabled", "value"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type", "showAddressQuality"], outputs: ["selectedClick"] }, { kind: "directive", type: ScAddressQualityDirective, selector: "[scAddressQuality]", exportAs: ["scAddressQuality"] }, { kind: "directive", type: MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"], outputs: ["maskitoChange", "maskitoElementChange"] }, { kind: "directive", type: i1$1.TuiComboBoxDirective, selector: "input[tuiComboBox]", inputs: ["strict", "matcher"] }, { kind: "component", type: TuiDataListWrapperComponent, selector: "tui-data-list-wrapper:not([labels])", inputs: ["items", "emptyContent", "size", "itemContent"], outputs: ["itemClick"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "loading"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiStringifyContentPipe, name: "tuiStringifyContent" }, { kind: "pipe", type: TuiFilterByInputPipe, name: "tuiFilterByInput" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2557
2871
  }
2558
2872
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScNewContragentFormComponent, decorators: [{
2559
2873
  type: Component,
@@ -2569,6 +2883,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
2569
2883
  TuiError,
2570
2884
  TuiInput,
2571
2885
  ScSuggestionFieldComponent,
2886
+ ScAddressQualityDirective,
2572
2887
  MaskitoDirective,
2573
2888
  TuiComboBox,
2574
2889
  TuiDataListWrapperComponent,
@@ -2576,7 +2891,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
2576
2891
  AsyncPipe,
2577
2892
  TuiStringifyContentPipe,
2578
2893
  TuiFilterByInputPipe,
2579
- ], template: "@if (selectOpf$ | async; as selectOpf) {\n <div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u041E\u0431\u0449\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430</p>\n <label tuiLabel>\n \u0422\u0438\u043F \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 (\u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043F\u0440\u0430\u0432\u043E\u0432\u0430\u044F \u0444\u043E\u0440\u043C\u0430)\n <tui-textfield\n tuiChevron\n [content]=\"opfContent\"\n >\n <input\n tuiSelect\n formControlName=\"opf\"\n [readOnly]=\"!!opfControl\"\n placeholder=\"\u0422\u0438\u043F \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 (\u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043F\u0440\u0430\u0432\u043E\u0432\u0430\u044F \u0444\u043E\u0440\u043C\u0430)\"\n />\n <tui-data-list *tuiDropdown>\n @for (item of getOpf$() | async; track item; let index = $index) {\n <button\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n }\n </tui-data-list>\n </tui-textfield>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error formControlName=\"opf\" />\n </label>\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n [placeholder]=\"nameLabel\"\n />\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n } @else if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n @if (opfListEnum[selectOpf] > opfListEnum.individual) {\n <label tuiLabel>\n \u0418\u041D\u041D \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"innMask(selectOpf)\"\n autocomplete=\"inn\"\n formControlName=\"inn\"\n placeholder=\"\u0418\u041D\u041D \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n />\n </tui-textfield>\n <tui-error formControlName=\"inn\" />\n </label>\n @if (opfListEnum[selectOpf] === opfListEnum.legal) {\n <label tuiLabel>\n \u041A\u043E\u0434 \u041E\u041A\u041F\u041E\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"okpoMask(selectOpf)\"\n autocomplete=\"okpo\"\n formControlName=\"okpo\"\n placeholder=\"\u041A\u043E\u0434 \u041E\u041A\u041F\u041E\"\n />\n </tui-textfield>\n <tui-error formControlName=\"okpo\" />\n </label>\n }\n <label tuiLabel>\n \u0424.\u0418.\u041E. \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorName\"\n placeholder=\"\u0424.\u0418.\u041E. \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorName\" />\n </label>\n <label tuiLabel>\n \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorPosition\"\n placeholder=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorPosition\" />\n </label>\n <label tuiLabel>\n \u041E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u043B\u043D\u043E\u043C\u043E\u0447\u0438\u0439 \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorActsOn\"\n placeholder=\"\u041E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u043B\u043D\u043E\u043C\u043E\u0447\u0438\u0439 \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorActsOn\" />\n </label>\n <label tuiLabel>\n \u042E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"legalAddress\"\n placeholder=\"\u042E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"legalAddress\" />\n </label>\n <label tuiLabel>\n \u041F\u043E\u0447\u0442\u043E\u0432\u044B\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"postalAddress\"\n placeholder=\"\u041F\u043E\u0447\u0442\u043E\u0432\u044B\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"postalAddress\" />\n </label>\n <label tuiLabel>\n \u0424\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"actualAddress\"\n placeholder=\"\u0424\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"actualAddress\" />\n </label>\n @if (opfListEnum[selectOpf] === opfListEnum.legal) {\n <label tuiLabel>\n \u041A\u041F\u041F \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"kppMask\"\n autocomplete=\"kpp\"\n formControlName=\"kpp\"\n placeholder=\"\u041A\u041F\u041F \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\"\n />\n </tui-textfield>\n <tui-error formControlName=\"kpp\" />\n </label>\n }\n }\n @if (opfListEnum[selectOpf] === opfListEnum.non_resident_legal) {\n @let countries = countries$ | async;\n @let countriesId = countriesId$ | async;\n @if (countries) {\n <label tuiLabel>\n \u0421\u0442\u0440\u0430\u043D\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield [stringify]=\"stringify(countries ?? [])\">\n <input\n tuiComboBox\n formControlName=\"registrationCountryId\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n placeholder=\"\u0421\u0442\u0440\u0430\u043D\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n <tui-data-list-wrapper\n *tuiDropdown\n [itemContent]=\"stringify(countries ?? []) | tuiStringifyContent\"\n [items]=\"countriesId | tuiFilterByInput\"\n />\n </tui-textfield>\n <ng-template\n #CountryContent\n let-data\n >\n <div>{{ (getCountryNameById$(data) | async) ?? '' }}</div>\n </ng-template>\n <tui-error formControlName=\"registrationCountryId\" />\n </label>\n }\n <ng-template #selectLoading> <tui-loader /> </ng-template>\n <label tuiLabel>\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"registrationNumber\"\n placeholder=\"\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"registrationNumber\" />\n </label>\n <label tuiLabel>\n \u041D\u0430\u043B\u043E\u0433\u043E\u0432\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"taxNumber\"\n placeholder=\"\u041D\u0430\u043B\u043E\u0433\u043E\u0432\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"taxNumber\" />\n </label>\n }\n </div>\n}\n", styles: ["tui-carousel{--tui-carousel-padding: .5rem}\n"] }]
2894
+ ], template: "@if (selectOpf$ | async; as selectOpf) {\n <div\n [formGroup]=\"form\"\n class=\"flex flex-col gap-3 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u041E\u0431\u0449\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430</p>\n <label tuiLabel>\n \u0422\u0438\u043F \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 (\u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043F\u0440\u0430\u0432\u043E\u0432\u0430\u044F \u0444\u043E\u0440\u043C\u0430)\n <tui-textfield\n tuiChevron\n [content]=\"opfContent\"\n >\n <input\n tuiSelect\n formControlName=\"opf\"\n [readOnly]=\"!!opfControl\"\n placeholder=\"\u0422\u0438\u043F \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 (\u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043F\u0440\u0430\u0432\u043E\u0432\u0430\u044F \u0444\u043E\u0440\u043C\u0430)\"\n />\n <tui-data-list *tuiDropdown>\n @for (item of getOpf$() | async; track item; let index = $index) {\n <button\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n }\n </tui-data-list>\n </tui-textfield>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n <tui-error formControlName=\"opf\" />\n </label>\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n [placeholder]=\"nameLabel\"\n />\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n } @else if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n @if (opfListEnum[selectOpf] > opfListEnum.individual) {\n <label tuiLabel>\n \u0418\u041D\u041D \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"innMask(selectOpf)\"\n autocomplete=\"inn\"\n formControlName=\"inn\"\n placeholder=\"\u0418\u041D\u041D \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n />\n </tui-textfield>\n <tui-error formControlName=\"inn\" />\n </label>\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <label tuiLabel>\n \u041A\u043E\u0434 \u041E\u041A\u041F\u041E\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"okpoMask(selectOpf)\"\n autocomplete=\"okpo\"\n formControlName=\"okpo\"\n placeholder=\"\u041A\u043E\u0434 \u041E\u041A\u041F\u041E\"\n />\n </tui-textfield>\n <tui-error formControlName=\"okpo\" />\n </label>\n }\n <label tuiLabel>\n \u0424.\u0418.\u041E. \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorName\"\n placeholder=\"\u0424.\u0418.\u041E. \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorName\" />\n </label>\n <label tuiLabel>\n \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorPosition\"\n placeholder=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorPosition\" />\n </label>\n <label tuiLabel>\n \u041E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u043B\u043D\u043E\u043C\u043E\u0447\u0438\u0439 \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"directorActsOn\"\n placeholder=\"\u041E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u043B\u043D\u043E\u043C\u043E\u0447\u0438\u0439 \u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044F\"\n />\n </tui-textfield>\n <tui-error formControlName=\"directorActsOn\" />\n </label>\n <label tuiLabel>\n \u042E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n scAddressQuality\n #legalAddressQuality=\"scAddressQuality\"\n formControlName=\"legalAddress\"\n placeholder=\"\u042E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"legalAddress\" />\n @if (legalAddressQuality.getWarningMessage(); as addressQualityWarning) {\n <p class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</p>\n }\n </label>\n <label tuiLabel>\n \u041F\u043E\u0447\u0442\u043E\u0432\u044B\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n scAddressQuality\n #postalAddressQuality=\"scAddressQuality\"\n formControlName=\"postalAddress\"\n placeholder=\"\u041F\u043E\u0447\u0442\u043E\u0432\u044B\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"postalAddress\" />\n @if (postalAddressQuality.getWarningMessage(); as addressQualityWarning) {\n <p class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</p>\n }\n </label>\n <label tuiLabel>\n \u0424\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\n <tui-textfield>\n <input\n tuiInput\n scAddressQuality\n #actualAddressQuality=\"scAddressQuality\"\n formControlName=\"actualAddress\"\n placeholder=\"\u0424\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\"\n />\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"actualAddress\" />\n @if (actualAddressQuality.getWarningMessage(); as addressQualityWarning) {\n <p class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</p>\n }\n </label>\n @if (opfListEnum[selectOpf] === opfListEnum.legal) {\n <label tuiLabel>\n \u041A\u041F\u041F \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\n <tui-textfield>\n <input\n tuiInput\n [maskito]=\"kppMask\"\n autocomplete=\"kpp\"\n formControlName=\"kpp\"\n placeholder=\"\u041A\u041F\u041F \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\"\n />\n </tui-textfield>\n <tui-error formControlName=\"kpp\" />\n </label>\n }\n }\n @if (opfListEnum[selectOpf] === opfListEnum.non_resident_legal) {\n @let countries = countries$ | async;\n @let countriesId = countriesId$ | async;\n @if (countries) {\n <label tuiLabel>\n \u0421\u0442\u0440\u0430\u043D\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield [stringify]=\"stringify(countries ?? [])\">\n <input\n tuiComboBox\n formControlName=\"registrationCountryId\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n placeholder=\"\u0421\u0442\u0440\u0430\u043D\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n <tui-data-list-wrapper\n *tuiDropdown\n [itemContent]=\"stringify(countries ?? []) | tuiStringifyContent\"\n [items]=\"countriesId | tuiFilterByInput\"\n />\n </tui-textfield>\n <ng-template\n #CountryContent\n let-data\n >\n <div>{{ (getCountryNameById$(data) | async) ?? '' }}</div>\n </ng-template>\n <tui-error formControlName=\"registrationCountryId\" />\n </label>\n }\n <ng-template #selectLoading> <tui-loader /> </ng-template>\n <label tuiLabel>\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"registrationNumber\"\n placeholder=\"\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"registrationNumber\" />\n </label>\n <label tuiLabel>\n \u041D\u0430\u043B\u043E\u0433\u043E\u0432\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"taxNumber\"\n placeholder=\"\u041D\u0430\u043B\u043E\u0433\u043E\u0432\u044B\u0439 \u043D\u043E\u043C\u0435\u0440 \u044E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043B\u0438\u0446\u0430\"\n />\n </tui-textfield>\n <tui-error formControlName=\"taxNumber\" />\n </label>\n }\n </div>\n}\n", styles: ["tui-carousel{--tui-carousel-padding: .5rem}\n"] }]
2580
2895
  }], propDecorators: { opfControl: [{
2581
2896
  type: Input
2582
2897
  }] } });
@@ -2588,6 +2903,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
2588
2903
  class ScAddressesSelectionFieldComponent {
2589
2904
  /**
2590
2905
  * Инициализирует экземпляр класса {@link ScAddressesSelectionFieldComponent}.
2906
+ * Включение выбора страны сохраняет выбранные страну, регион и город. При выключении выбора страна
2907
+ * фиксируется на текущей стране системы, поэтому регион и город сбрасываются, только если была выбрана другая страна.
2591
2908
  */
2592
2909
  constructor() {
2593
2910
  /**
@@ -2645,10 +2962,7 @@ class ScAddressesSelectionFieldComponent {
2645
2962
  */
2646
2963
  this.stringify = (item) => item.name;
2647
2964
  effect(() => {
2648
- if (this.canSelectCountry()) {
2649
- this.countryControl.setValue(null);
2650
- }
2651
- else {
2965
+ if (!this.canSelectCountry() && this.countryControl.value?.id !== this.russiaCountryId) {
2652
2966
  this.countryControl.setValue({
2653
2967
  id: this.russiaCountryId,
2654
2968
  name: 'Россия',
@@ -2749,6 +3063,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
2749
3063
  class ScSignUpFormComponent {
2750
3064
  /**
2751
3065
  * Инициализирует экземпляр класса {@link ScSignUpFormComponent}.
3066
+ * Название сбрасывается только при переходе между физическим лицом и организацией: у физического лица в поле Ф.И.О.,
3067
+ * у остальных форм название организации, поэтому прежнее значение по смыслу не подходит.
2752
3068
  */
2753
3069
  constructor() {
2754
3070
  /**
@@ -2767,6 +3083,10 @@ class ScSignUpFormComponent {
2767
3083
  * Сервис для сбора метрик о действиях пользователей.
2768
3084
  */
2769
3085
  this.userMetrikaService = inject(ScUserMetrikaService);
3086
+ /**
3087
+ * Сервис-реестр качества адресов, выбранных из подсказок.
3088
+ */
3089
+ this.addressQualityService = inject(ScAddressQualityService);
2770
3090
  /**
2771
3091
  * Поле ввода организационно-правовых форм.
2772
3092
  */
@@ -2841,7 +3161,9 @@ class ScSignUpFormComponent {
2841
3161
  * Список этапов регистрации.
2842
3162
  */
2843
3163
  this.steps = ['Данные о клиенте', 'Общие данные контрагента', 'Контакты пользователя', 'Банковские реквизиты пользователя'];
2844
- this.opfControl.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed()).subscribe(() => {
3164
+ this.opfControl.valueChanges
3165
+ .pipe(startWith(this.opfControl.value), pairwise(), filter(([previousOpf, opf]) => (previousOpf === 'individual') !== (opf === 'individual')), takeUntilDestroyed())
3166
+ .subscribe(() => {
2845
3167
  this.form.patchValue({ name: null });
2846
3168
  });
2847
3169
  }
@@ -3021,6 +3343,7 @@ class ScSignUpFormComponent {
3021
3343
  this.form.controls.contragent.markAllAsTouched();
3022
3344
  this.form.get(['contragent', 'contacts'])?.markAsUntouched();
3023
3345
  this.form.get(['contragent', 'bankAccounts'])?.markAsUntouched();
3346
+ this.addressQualityService.setOrganizationAddressQualities(this.form.controls.contragent, suggestion);
3024
3347
  }
3025
3348
  }
3026
3349
  /**
@@ -3044,7 +3367,7 @@ class ScSignUpFormComponent {
3044
3367
  this.clickOfferEvent.emit();
3045
3368
  }
3046
3369
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScSignUpFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3047
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScSignUpFormComponent, isStandalone: true, selector: "sc-sign-up-form", outputs: { successAuth: "successAuth", clickOfferEvent: "clickOfferEvent" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })], ngImport: i0, template: "@if (opfControl.value; as selectOpf) {\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n >\n @let isIndividual = opfListEnum[selectOpf] === opfListEnum.individual;\n @if (!isIndividual && form.controls.contragent) {\n <tui-stepper [(activeItemIndex)]=\"stepIndex\">\n @for (_ of steps; track $index) {\n <button\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 }\n </tui-stepper>\n }\n <div\n [class.!hidden]=\"stepIndex !== 0\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel>\n \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n <tui-textfield\n tuiChevron\n [content]=\"opfContent\"\n >\n <input\n tuiSelect\n [formControl]=\"opfControl\"\n placeholder=\"\u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\"\n />\n <tui-data-list *tuiDropdown>\n @for (item of getOpf$() | async; track item; let index = $index) {\n <button\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n }\n </tui-data-list>\n </tui-textfield>\n </label>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n [placeholder]=\"nameLabel\"\n />\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n } @else if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n (selectedClick)=\"onSelectedOrganization($event)\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <sc-verification-phone-check-form [shouldBeBusy]=\"false\" />\n <div>\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n </div>\n </div>\n <sc-addresses-selection-field [canSelectCountry]=\"opfListEnum[selectOpf] === opfListEnum.non_resident_legal\" />\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <div>\n <label tuiLabel>\n \u041F\u0430\u0440\u043E\u043B\u044C\n <tui-textfield>\n <input\n tuiInput\n type=\"password\"\n formControlName=\"password\"\n autocomplete=\"new-password\"\n placeholder=\"\u041F\u0430\u0440\u043E\u043B\u044C\"\n />\n <tui-icon tuiPassword />\n </tui-textfield>\n <tui-error formControlName=\"password\" />\n </label>\n </div>\n <div>\n <label tuiLabel>\n \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n type=\"password\"\n formControlName=\"passwordConfirm\"\n autocomplete=\"new-password\"\n placeholder=\"\u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\"\n />\n <tui-icon tuiPassword />\n </tui-textfield>\n <tui-error formControlName=\"passwordConfirm\" />\n </label>\n </div>\n </div>\n <tui-error\n class=\"self-center\"\n [formGroup]=\"form\"\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 \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </label>\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n required=\"true\"\n formControlName=\"acceptRules\"\n />\n <div>\n <span>\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n <a\n tuiLink\n [style.text-decoration-line]=\"'underline'\"\n (click)=\"$event.preventDefault(); onClickOffer()\"\n >\n \u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B\n </a>\n .\n </span>\n <span class=\"text-tui-negative\">*</span>\n <tui-error formControlName=\"acceptRules\" />\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 <div [class.!hidden]=\"stepIndex !== 2\">\n @if (contacts) {\n <div class=\"flex flex-col gap-5 pb-1\">\n <p class=\"text-lg font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B</p>\n @for (contact of contacts.controls; track contact; let index = $index; let count = $count; let last = $last) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E \u2116{{ index + 1 }}:</p>\n @if (count - 1) {\n <button\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n >\n <tui-icon icon=\"@tui.trash-2\" />\n </button>\n }\n </div>\n <sc-new-contact-form [form]=\"contact\" />\n @if (!last) {\n <hr class=\"h-px w-full bg-tui-base-04\" />\n }\n </div>\n }\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\n </button>\n </div>\n }\n </div>\n <div [class.!hidden]=\"stepIndex !== 3\">\n @if (bankAccounts) {\n <div class=\"flex flex-col gap-5 pb-1\">\n <p class=\"text-lg font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B</p>\n @for (bankAccount of bankAccounts.controls; track bankAccount; let index = $index; let count = $count; let last = $last) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B \u2116{{ index + 1 }}:</p>\n @if (count - 1) {\n <button\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n >\n <tui-icon icon=\"@tui.trash-2\" />\n </button>\n }\n </div>\n @if (opfControl.value; as selectOpf) {\n <sc-new-contragent-bank-account-form\n [opf]=\"selectOpf\"\n [form]=\"bankAccount\"\n />\n }\n @if (!last) {\n <hr class=\"h-px w-full bg-tui-base-04\" />\n }\n </div>\n }\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n </button>\n </div>\n }\n </div>\n }\n <div class=\"flex justify-center gap-2\">\n @if (stepIndex > 0) {\n <button\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"navigate(-1)\"\n >\n \u041D\u0430\u0437\u0430\u0434\n </button>\n }\n @if (isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3) {\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n class=\"self-center\"\n >\n \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n </button>\n } @else {\n <button\n tuiButton\n type=\"button\"\n [disabled]=\"!canNextStep(stepIndex)\"\n (click)=\"navigate(1)\"\n >\n \u0414\u0430\u043B\u0435\u0435\n </button>\n }\n </div>\n </form>\n}\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: TuiIcon, selector: "tui-icon:not([tuiBadge])", inputs: ["background"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]" }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "directive", type: TuiPassword, selector: "tui-icon[tuiPassword]" }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]" }, { kind: "component", type: i2.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i2.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "directive", type: i2.TuiOptionWithValue, selector: "button[tuiOption][value], a[tuiOption][value], label[tuiOption][value]", inputs: ["disabled", "value"] }, { kind: "directive", type: i1$1.TuiSelectDirective, selector: "input[tuiSelect]" }, { kind: "component", type: i1$1.TuiStepperComponent, selector: "tui-stepper", inputs: ["orientation", "activeItemIndex"], outputs: ["activeItemIndexChange"] }, { kind: "component", type: i1$1.TuiStep, selector: "button[tuiStep], a[tuiStep]:not([routerLink]), a[tuiStep][routerLink][routerLinkActive]", inputs: ["stepState", "icon"] }, { kind: "component", type: ScAddressesSelectionFieldComponent, selector: "sc-addresses-selection-field", inputs: ["canSelectCountry"], outputs: ["canSelectCountryChange"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "pseudoInvalid", "required", "subtitle", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange", "isBusyChange", "isConfirmedChange"] }, { kind: "component", type: ScNewContragentFormComponent, selector: "sc-new-contragent-form", inputs: ["opfControl"] }, { kind: "component", type: ScNewContragentBankAccountsFormComponent, selector: "sc-new-contragent-bank-account-form", inputs: ["form", "opf"] }, { kind: "component", type: ScNewContactFormComponent, selector: "sc-new-contact-form", inputs: ["form"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3370
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScSignUpFormComponent, isStandalone: true, selector: "sc-sign-up-form", outputs: { successAuth: "successAuth", clickOfferEvent: "clickOfferEvent" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })], ngImport: i0, template: "@if (opfControl.value; as selectOpf) {\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n >\n @let isIndividual = opfListEnum[selectOpf] === opfListEnum.individual;\n @if (!isIndividual && form.controls.contragent) {\n <tui-stepper [(activeItemIndex)]=\"stepIndex\">\n @for (_ of steps; track $index) {\n <button\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 }\n </tui-stepper>\n }\n <div\n [class.!hidden]=\"stepIndex !== 0\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel>\n \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n <tui-textfield\n tuiChevron\n [content]=\"opfContent\"\n >\n <input\n tuiSelect\n [formControl]=\"opfControl\"\n placeholder=\"\u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\"\n />\n <tui-data-list *tuiDropdown>\n @for (item of getOpf$() | async; track item; let index = $index) {\n <button\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n }\n </tui-data-list>\n </tui-textfield>\n </label>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n [placeholder]=\"nameLabel\"\n />\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n } @else if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n (selectedClick)=\"onSelectedOrganization($event)\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <sc-verification-phone-check-form [shouldBeBusy]=\"false\" />\n <div>\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n </div>\n </div>\n <sc-addresses-selection-field [canSelectCountry]=\"opfListEnum[selectOpf] === opfListEnum.non_resident_legal\" />\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <div>\n <label tuiLabel>\n \u041F\u0430\u0440\u043E\u043B\u044C\n <tui-textfield>\n <input\n tuiInput\n type=\"password\"\n formControlName=\"password\"\n autocomplete=\"new-password\"\n placeholder=\"\u041F\u0430\u0440\u043E\u043B\u044C\"\n />\n <tui-icon tuiPassword />\n </tui-textfield>\n <tui-error formControlName=\"password\" />\n </label>\n </div>\n <div>\n <label tuiLabel>\n \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n <tui-textfield>\n <input\n tuiInput\n type=\"password\"\n formControlName=\"passwordConfirm\"\n autocomplete=\"new-password\"\n placeholder=\"\u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\"\n />\n <tui-icon tuiPassword />\n </tui-textfield>\n <tui-error formControlName=\"passwordConfirm\" />\n </label>\n </div>\n </div>\n <tui-error\n class=\"self-center\"\n [formGroup]=\"form\"\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 \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </label>\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n required=\"true\"\n formControlName=\"acceptRules\"\n />\n <div>\n <span>\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n <a\n tuiLink\n [style.text-decoration-line]=\"'underline'\"\n (click)=\"$event.preventDefault(); onClickOffer()\"\n >\n \u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B\n </a>\n .\n </span>\n <span class=\"text-tui-negative\">*</span>\n <tui-error formControlName=\"acceptRules\" />\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 <div [class.!hidden]=\"stepIndex !== 2\">\n @if (contacts) {\n <div class=\"flex flex-col gap-5 pb-1\">\n <p class=\"text-lg font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B</p>\n @for (contact of contacts.controls; track contact; let index = $index; let count = $count; let last = $last) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E \u2116{{ index + 1 }}:</p>\n @if (count - 1) {\n <button\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n >\n <tui-icon icon=\"@tui.trash-2\" />\n </button>\n }\n </div>\n <sc-new-contact-form [form]=\"contact\" />\n @if (!last) {\n <hr class=\"h-px w-full bg-tui-base-04\" />\n }\n </div>\n }\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\n </button>\n </div>\n }\n </div>\n <div [class.!hidden]=\"stepIndex !== 3\">\n @if (bankAccounts) {\n <div class=\"flex flex-col gap-5 pb-1\">\n <p class=\"text-lg font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B</p>\n @for (bankAccount of bankAccounts.controls; track bankAccount; let index = $index; let count = $count; let last = $last) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B \u2116{{ index + 1 }}:</p>\n @if (count - 1) {\n <button\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n >\n <tui-icon icon=\"@tui.trash-2\" />\n </button>\n }\n </div>\n @if (opfControl.value; as selectOpf) {\n <sc-new-contragent-bank-account-form\n [opf]=\"selectOpf\"\n [form]=\"bankAccount\"\n />\n }\n @if (!last) {\n <hr class=\"h-px w-full bg-tui-base-04\" />\n }\n </div>\n }\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n </button>\n </div>\n }\n </div>\n }\n <div class=\"flex justify-center gap-2\">\n @if (stepIndex > 0) {\n <button\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"navigate(-1)\"\n >\n \u041D\u0430\u0437\u0430\u0434\n </button>\n }\n @if (isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3) {\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n class=\"self-center\"\n >\n \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n </button>\n } @else {\n <button\n tuiButton\n type=\"button\"\n [disabled]=\"!canNextStep(stepIndex)\"\n (click)=\"navigate(1)\"\n >\n \u0414\u0430\u043B\u0435\u0435\n </button>\n }\n </div>\n </form>\n}\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: TuiIcon, selector: "tui-icon:not([tuiBadge])", inputs: ["background"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]" }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "directive", type: TuiPassword, selector: "tui-icon[tuiPassword]" }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]" }, { kind: "component", type: i2.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i2.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "directive", type: i2.TuiOptionWithValue, selector: "button[tuiOption][value], a[tuiOption][value], label[tuiOption][value]", inputs: ["disabled", "value"] }, { kind: "directive", type: i1$1.TuiSelectDirective, selector: "input[tuiSelect]" }, { kind: "component", type: i1$1.TuiStepperComponent, selector: "tui-stepper", inputs: ["orientation", "activeItemIndex"], outputs: ["activeItemIndexChange"] }, { kind: "component", type: i1$1.TuiStep, selector: "button[tuiStep], a[tuiStep]:not([routerLink]), a[tuiStep][routerLink][routerLinkActive]", inputs: ["stepState", "icon"] }, { kind: "component", type: ScAddressesSelectionFieldComponent, selector: "sc-addresses-selection-field", inputs: ["canSelectCountry"], outputs: ["canSelectCountryChange"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type", "showAddressQuality"], outputs: ["selectedClick"] }, { kind: "component", type: ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "pseudoInvalid", "required", "subtitle", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange", "isBusyChange", "isConfirmedChange"] }, { kind: "component", type: ScNewContragentFormComponent, selector: "sc-new-contragent-form", inputs: ["opfControl"] }, { kind: "component", type: ScNewContragentBankAccountsFormComponent, selector: "sc-new-contragent-bank-account-form", inputs: ["form", "opf"] }, { kind: "component", type: ScNewContactFormComponent, selector: "sc-new-contact-form", inputs: ["form"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3048
3371
  }
3049
3372
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScSignUpFormComponent, decorators: [{
3050
3373
  type: Component,
@@ -4263,7 +4586,7 @@ class ScNotifyWhenInStockDialogComponent {
4263
4586
  return ({ $implicit }) => itemsMap.get($implicit) ?? '';
4264
4587
  }
4265
4588
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScNotifyWhenInStockDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4266
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScNotifyWhenInStockDialogComponent, isStandalone: true, selector: "sc-notify-when-in-stock-dialog", ngImport: i0, template: "<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 @if (user) {\n <div class=\"flex flex-col gap-3\">\n <label tuiLabel>\n <div\n [appearance]=\"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 @if (isPhoneVisible) {\n <sc-verification-phone-check-form\n [required]=\"!form.controls.email.value\"\n [showCodeFields]=\"isShowCodeFields\"\n [pseudoInvalid]=\"isShowError\"\n />\n }\n @if (isPhoneVisible && isEmailVisible) {\n <div\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 \u0418\u043B\u0438(\u0438)\n <tui-icon\n [appearance]=\"isShowError ? 'negative' : 'grayscale'\"\n tuiHintDirection=\"end\"\n tuiHintAppearance=\"dark\"\n tuiTooltip=\"\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u043D\u043E\u043C\u0435\u0440 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430 \u0438\u043B\u0438(\u0438) \u0430\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\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 }\n @if (isEmailVisible) {\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n [invalid]=\"!!isShowError\"\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n }\n </div>\n @if (isShowError) {\n <tui-error error=\"\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u043D\u043E\u043C\u0435\u0440 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430 \u0438(\u0438\u043B\u0438) \u0430\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B \u0434\u043B\u044F \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u043E \u043F\u043E\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u0438 \u0442\u043E\u0432\u0430\u0440\u0430\" />\n }\n </label>\n <label tuiLabel>\n \u0421\u043A\u043B\u0430\u0434\n <tui-textfield\n tuiChevron\n [content]=\"warehouses() ? stringify(warehouses()!) : selectLoading\"\n >\n <input\n tuiSelect\n formControlName=\"warehouseId\"\n placeholder=\"\u0421\u043A\u043B\u0430\u0434\"\n />\n <tui-data-list *tuiDropdown>\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-textfield>\n <tui-error formControlName=\"warehouseId\" />\n @if (isStock()) {\n <span [style.color]=\"'var(--tui-text-positive)'\"> \u0422\u043E\u0432\u0430\u0440 \u0438\u043C\u0435\u0435\u0442\u0441\u044F \u0432 \u043D\u0430\u043B\u0438\u0447\u0438\u0438 \u043D\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u043C \u0441\u043A\u043B\u0430\u0434\u0435 </span>\n }\n </label>\n <ng-template #selectLoading> <tui-loader /> </ng-template>\n </div>\n }\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 \u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\n </button>\n <div class=\"grow basis-60 text-body-s\">\n \u041D\u0430\u0436\u0438\u043C\u0430\u044F \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0443, \u0432\u044B \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u0435\u0442\u0435\u0441\u044C \u0441\n <button\n tuiLink\n [style.text-decoration-line]=\"'underline'\"\n type=\"button\"\n (click)=\"context.data.onClickOfferHandler()\"\n >\n \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438\n </button>\n </div>\n </div>\n\n <tui-error [formGroup]=\"form\" />\n</form>\n", dependencies: [{ kind: "component", type: ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "pseudoInvalid", "required", "subtitle", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange", "isBusyChange", "isConfirmedChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2$3.TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i3$1.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]" }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: i2.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i2.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "directive", type: i2.TuiOptionWithValue, selector: "button[tuiOption][value], a[tuiOption][value], label[tuiOption][value]", inputs: ["disabled", "value"] }, { kind: "directive", type: i1$1.TuiSelectDirective, selector: "input[tuiSelect]" }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "loading"] }, { kind: "directive", type: TuiCardLarge, selector: "[tuiCardLarge]", inputs: ["tuiCardLarge"] }, { kind: "component", type: TuiIcon, selector: "tui-icon:not([tuiBadge])", inputs: ["background"] }, { kind: "directive", type: TuiTooltip, selector: "tui-icon[tuiTooltip]", inputs: ["size"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4589
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScNotifyWhenInStockDialogComponent, isStandalone: true, selector: "sc-notify-when-in-stock-dialog", ngImport: i0, template: "<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 @if (user) {\n <div class=\"flex flex-col gap-3\">\n <label tuiLabel>\n <div\n [appearance]=\"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 @if (isPhoneVisible) {\n <sc-verification-phone-check-form\n [required]=\"!form.controls.email.value\"\n [showCodeFields]=\"isShowCodeFields\"\n [pseudoInvalid]=\"isShowError\"\n />\n }\n @if (isPhoneVisible && isEmailVisible) {\n <div\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 \u0418\u043B\u0438(\u0438)\n <tui-icon\n [appearance]=\"isShowError ? 'negative' : 'grayscale'\"\n tuiHintDirection=\"end\"\n tuiHintAppearance=\"dark\"\n tuiTooltip=\"\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u043D\u043E\u043C\u0435\u0440 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430 \u0438\u043B\u0438(\u0438) \u0430\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\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 }\n @if (isEmailVisible) {\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n [invalid]=\"!!isShowError\"\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n }\n </div>\n @if (isShowError) {\n <tui-error error=\"\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u043D\u043E\u043C\u0435\u0440 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430 \u0438(\u0438\u043B\u0438) \u0430\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B \u0434\u043B\u044F \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u043E \u043F\u043E\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u0438 \u0442\u043E\u0432\u0430\u0440\u0430\" />\n }\n </label>\n <label tuiLabel>\n \u0421\u043A\u043B\u0430\u0434\n <tui-textfield\n tuiChevron\n [content]=\"warehouses() ? stringify(warehouses()!) : selectLoading\"\n >\n <input\n tuiSelect\n formControlName=\"warehouseId\"\n placeholder=\"\u0421\u043A\u043B\u0430\u0434\"\n />\n <tui-data-list *tuiDropdown>\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-textfield>\n <tui-error formControlName=\"warehouseId\" />\n @if (isStock()) {\n <span [style.color]=\"'var(--tui-text-positive)'\"> \u0422\u043E\u0432\u0430\u0440 \u0438\u043C\u0435\u0435\u0442\u0441\u044F \u0432 \u043D\u0430\u043B\u0438\u0447\u0438\u0438 \u043D\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u043C \u0441\u043A\u043B\u0430\u0434\u0435 </span>\n }\n </label>\n <ng-template #selectLoading> <tui-loader /> </ng-template>\n </div>\n }\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 \u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\n </button>\n <div class=\"grow basis-60 text-body-s\">\n \u041D\u0430\u0436\u0438\u043C\u0430\u044F \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0443, \u0432\u044B \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u0435\u0442\u0435\u0441\u044C \u0441\n <button\n tuiLink\n [style.text-decoration-line]=\"'underline'\"\n type=\"button\"\n (click)=\"context.data.onClickOfferHandler()\"\n >\n \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438\n </button>\n </div>\n </div>\n\n <tui-error [formGroup]=\"form\" />\n</form>\n", dependencies: [{ kind: "component", type: ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "pseudoInvalid", "required", "subtitle", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange", "isBusyChange", "isConfirmedChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2$3.TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i3$1.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]" }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type", "showAddressQuality"], outputs: ["selectedClick"] }, { kind: "component", type: i2.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i2.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "directive", type: i2.TuiOptionWithValue, selector: "button[tuiOption][value], a[tuiOption][value], label[tuiOption][value]", inputs: ["disabled", "value"] }, { kind: "directive", type: i1$1.TuiSelectDirective, selector: "input[tuiSelect]" }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "loading"] }, { kind: "directive", type: TuiCardLarge, selector: "[tuiCardLarge]", inputs: ["tuiCardLarge"] }, { kind: "component", type: TuiIcon, selector: "tui-icon:not([tuiBadge])", inputs: ["background"] }, { kind: "directive", type: TuiTooltip, selector: "tui-icon[tuiTooltip]", inputs: ["size"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4267
4590
  }
4268
4591
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScNotifyWhenInStockDialogComponent, decorators: [{
4269
4592
  type: Component,
@@ -6794,6 +7117,10 @@ class ScAddDeliveryAddressDialogComponent {
6794
7117
  * Список стран.
6795
7118
  */
6796
7119
  this.countries = getCountries();
7120
+ /**
7121
+ * Сервис-реестр качества адресов, выбранных из подсказок.
7122
+ */
7123
+ this.addressQualityService = inject(ScAddressQualityService);
6797
7124
  /**
6798
7125
  * {@link Observable} запроса данных добавления адрес доставки.
6799
7126
  */
@@ -6821,7 +7148,10 @@ class ScAddDeliveryAddressDialogComponent {
6821
7148
  /**
6822
7149
  * Группа с полями адресов.
6823
7150
  */
6824
- this.addressControl = new FormControl(null, Validators.required);
7151
+ this.addressControl = new FormControl(null, [
7152
+ Validators.required,
7153
+ this.addressQualityService.validator,
7154
+ ]);
6825
7155
  /**
6826
7156
  * Настройки карты.
6827
7157
  */
@@ -6892,6 +7222,19 @@ class ScAddDeliveryAddressDialogComponent {
6892
7222
  }
6893
7223
  }
6894
7224
  }
7225
+ /**
7226
+ * Возвращает признак, что адрес введён, но вариант с координатами не выбран: под полем показывается ошибка «Выберите вариант из списка».
7227
+ */
7228
+ isAddressWithoutCoordinates() {
7229
+ return this.addressControl.valid && this.form.controls.coordinates.invalid;
7230
+ }
7231
+ /**
7232
+ * Возвращает текст предупреждения о полноте выбранного адреса доставки либо null, когда предупреждение не требуется
7233
+ * или вместо него показана ошибка «Выберите вариант из списка».
7234
+ */
7235
+ getAddressQualityWarning() {
7236
+ return this.isAddressWithoutCoordinates() ? null : this.addressQualityService.getWarningMessage(this.addressControl);
7237
+ }
6895
7238
  /**
6896
7239
  * Устанавливает {@link addressPlacemark} точку на определённые координаты.
6897
7240
  *
@@ -6945,7 +7288,7 @@ class ScAddDeliveryAddressDialogComponent {
6945
7288
  return placemark;
6946
7289
  }
6947
7290
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScAddDeliveryAddressDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6948
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScAddDeliveryAddressDialogComponent, isStandalone: true, selector: "sc-add-delivery-address-dialog", ngImport: i0, template: "@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 \u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"address\"\n [invalid]=\"(addressControl.valid && form.controls.coordinates.invalid) || null\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n (selectedClick)=\"onSelectedAddress($event)\"\n />\n </tui-textfield>\n <tui-error formControlName=\"address\" />\n @if (addressControl.valid && form.controls.coordinates.invalid) {\n <tui-error [error]=\"'\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u0438\u0437 \u0441\u043F\u0438\u0441\u043A\u0430'\" />\n }\n </label>\n <div\n formGroupName=\"contact\"\n class=\"flex grow flex-col gap-2\"\n >\n <p class=\"w-full font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E:</p>\n <label tuiLabel>\n \u0424.\u0418.\u041E.\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n placeholder=\"\u0424.\u0418.\u041E.\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries) || []\"\n autocomplete=\"phone\"\n placeholder=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\"\n />\n </tui-textfield>\n <tui-error formControlName=\"phone\" />\n </label>\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n type=\"email\"\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n <label tuiLabel>\n \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"position\"\n placeholder=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\"\n />\n </tui-textfield>\n <tui-error formControlName=\"position\" />\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=\"@tui.x\"\n appearance=\"secondary\"\n >\n \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n <button\n tuiButton\n iconStart=\"@tui.save\"\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C\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=\"\u0427\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0430\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438, \u0441\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C \u0441 \u043D\u0430\u043C\u0438\"\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", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "component", type: TuiIcon, selector: "tui-icon:not([tuiBadge])", inputs: ["background"] }, { kind: "component", type: i1$1.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "lines", "timestamp"], outputs: ["close"] }, { kind: "component", type: i1$1.TuiInputPhoneInternationalComponent, selector: "input[tuiInputPhoneInternational]", inputs: ["countrySearch", "countryIsoCode", "countries"], outputs: ["countryIsoCodeChange"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: ScManagerCardComponent, selector: "sc-manager-card", inputs: ["manager"] }, { kind: "component", type: YaMapComponent, selector: "ya-map", inputs: ["center", "zoom", "state", "options"], outputs: ["ready", "actionbegin", "actionbreak", "actionend", "actiontick", "actiontickcomplete", "balloonclose", "balloonopen", "boundschange", "yaclick", "yacontextmenu", "yadblclick", "destroy", "hintclose", "hintopen", "marginchange", "yamousedown", "yamouseenter", "yamouseleave", "yamousemove", "yamouseup", "multitouchend", "multitouchmove", "multitouchstart", "optionschange", "sizechange", "typechange", "yawheel"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiSortCountriesPipe, name: "tuiSortCountries" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7291
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScAddDeliveryAddressDialogComponent, isStandalone: true, selector: "sc-add-delivery-address-dialog", ngImport: i0, template: "@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 \u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"address\"\n [invalid]=\"isAddressWithoutCoordinates() || null\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n (selectedClick)=\"onSelectedAddress($event)\"\n />\n </tui-textfield>\n <tui-error formControlName=\"address\" />\n @if (isAddressWithoutCoordinates()) {\n <tui-error [error]=\"'\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u0438\u0437 \u0441\u043F\u0438\u0441\u043A\u0430'\" />\n }\n @if (getAddressQualityWarning(); as addressQualityWarning) {\n <p class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</p>\n }\n </label>\n <div\n formGroupName=\"contact\"\n class=\"flex grow flex-col gap-2\"\n >\n <p class=\"w-full font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E:</p>\n <label tuiLabel>\n \u0424.\u0418.\u041E.\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n placeholder=\"\u0424.\u0418.\u041E.\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries) || []\"\n autocomplete=\"phone\"\n placeholder=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\"\n />\n </tui-textfield>\n <tui-error formControlName=\"phone\" />\n </label>\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n type=\"email\"\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n <label tuiLabel>\n \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"position\"\n placeholder=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\"\n />\n </tui-textfield>\n <tui-error formControlName=\"position\" />\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=\"@tui.x\"\n appearance=\"secondary\"\n >\n \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n <button\n tuiButton\n iconStart=\"@tui.save\"\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C\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=\"\u0427\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0430\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438, \u0441\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C \u0441 \u043D\u0430\u043C\u0438\"\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", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "component", type: TuiIcon, selector: "tui-icon:not([tuiBadge])", inputs: ["background"] }, { kind: "component", type: i1$1.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "lines", "timestamp"], outputs: ["close"] }, { kind: "component", type: i1$1.TuiInputPhoneInternationalComponent, selector: "input[tuiInputPhoneInternational]", inputs: ["countrySearch", "countryIsoCode", "countries"], outputs: ["countryIsoCodeChange"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type", "showAddressQuality"], outputs: ["selectedClick"] }, { kind: "component", type: ScManagerCardComponent, selector: "sc-manager-card", inputs: ["manager"] }, { kind: "component", type: YaMapComponent, selector: "ya-map", inputs: ["center", "zoom", "state", "options"], outputs: ["ready", "actionbegin", "actionbreak", "actionend", "actiontick", "actiontickcomplete", "balloonclose", "balloonopen", "boundschange", "yaclick", "yacontextmenu", "yadblclick", "destroy", "hintclose", "hintopen", "marginchange", "yamousedown", "yamouseenter", "yamouseleave", "yamousemove", "yamouseup", "multitouchend", "multitouchmove", "multitouchstart", "optionschange", "sizechange", "typechange", "yawheel"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiSortCountriesPipe, name: "tuiSortCountries" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6949
7292
  }
6950
7293
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScAddDeliveryAddressDialogComponent, decorators: [{
6951
7294
  type: Component,
@@ -6966,7 +7309,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
6966
7309
  ScSuggestionFieldComponent,
6967
7310
  ScManagerCardComponent,
6968
7311
  YaMapComponent,
6969
- ], template: "@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 \u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"address\"\n [invalid]=\"(addressControl.valid && form.controls.coordinates.invalid) || null\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n (selectedClick)=\"onSelectedAddress($event)\"\n />\n </tui-textfield>\n <tui-error formControlName=\"address\" />\n @if (addressControl.valid && form.controls.coordinates.invalid) {\n <tui-error [error]=\"'\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u0438\u0437 \u0441\u043F\u0438\u0441\u043A\u0430'\" />\n }\n </label>\n <div\n formGroupName=\"contact\"\n class=\"flex grow flex-col gap-2\"\n >\n <p class=\"w-full font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E:</p>\n <label tuiLabel>\n \u0424.\u0418.\u041E.\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n placeholder=\"\u0424.\u0418.\u041E.\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries) || []\"\n autocomplete=\"phone\"\n placeholder=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\"\n />\n </tui-textfield>\n <tui-error formControlName=\"phone\" />\n </label>\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n type=\"email\"\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n <label tuiLabel>\n \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"position\"\n placeholder=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\"\n />\n </tui-textfield>\n <tui-error formControlName=\"position\" />\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=\"@tui.x\"\n appearance=\"secondary\"\n >\n \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n <button\n tuiButton\n iconStart=\"@tui.save\"\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C\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=\"\u0427\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0430\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438, \u0441\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C \u0441 \u043D\u0430\u043C\u0438\"\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" }]
7312
+ ], template: "@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 \u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"address\"\n [invalid]=\"isAddressWithoutCoordinates() || null\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.address\"\n (selectedClick)=\"onSelectedAddress($event)\"\n />\n </tui-textfield>\n <tui-error formControlName=\"address\" />\n @if (isAddressWithoutCoordinates()) {\n <tui-error [error]=\"'\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u0438\u0437 \u0441\u043F\u0438\u0441\u043A\u0430'\" />\n }\n @if (getAddressQualityWarning(); as addressQualityWarning) {\n <p class=\"text-xs text-tui-status-warning\">{{ addressQualityWarning }}</p>\n }\n </label>\n <div\n formGroupName=\"contact\"\n class=\"flex grow flex-col gap-2\"\n >\n <p class=\"w-full font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E:</p>\n <label tuiLabel>\n \u0424.\u0418.\u041E.\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n placeholder=\"\u0424.\u0418.\u041E.\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.fio\"\n />\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries) || []\"\n autocomplete=\"phone\"\n placeholder=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\"\n />\n </tui-textfield>\n <tui-error formControlName=\"phone\" />\n </label>\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n type=\"email\"\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n <label tuiLabel>\n \u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"position\"\n placeholder=\"\u0414\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C\"\n />\n </tui-textfield>\n <tui-error formControlName=\"position\" />\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=\"@tui.x\"\n appearance=\"secondary\"\n >\n \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n <button\n tuiButton\n iconStart=\"@tui.save\"\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C\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=\"\u0427\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0430\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438, \u0441\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C \u0441 \u043D\u0430\u043C\u0438\"\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" }]
6970
7313
  }] });
6971
7314
 
6972
7315
  /**
@@ -10592,7 +10935,7 @@ class ScFeedbackFormComponent {
10592
10935
  return ScPhoneService.isValidPhoneNumberForMessenger(value);
10593
10936
  }
10594
10937
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScFeedbackFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10595
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScFeedbackFormComponent, isStandalone: true, selector: "sc-feedback-form", inputs: { slugInput: { classPropertyName: "slugInput", publicName: "slug", isSignal: true, isRequired: false, transformFunction: null }, fieldsInput: { classPropertyName: "fieldsInput", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickOffer: "clickOffer", sendSuccess: "sendSuccess" }, ngImport: i0, template: "@let fieldsList = fields();\n@if (fieldsList.length > 0) {\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n >\n <!-- \u0424\u0418\u041E -->\n @if (fieldsList.includes('name')) {\n <label tuiLabel>\n \u0424\u0418\u041E\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n placeholder=\"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0424.\u0418.\u041E.\"\n />\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n }\n <!-- \u0422\u0435\u043B\u0435\u0444\u043E\u043D -->\n @if (fieldsList.includes('phone')) {\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries) || []\"\n autocomplete=\"phone\"\n placeholder=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\"\n />\n </tui-textfield>\n <tui-error formControlName=\"phone\" />\n </label>\n @if (fieldsList.includes('isShouldUseMessenger') && form.controls.phone.value && isValidPhoneNumberForMessenger(form.controls.phone.value)) {\n <label tuiLabel>\n <input\n formControlName=\"isShouldUseMessenger\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span tuiTitle> \u041D\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0432 \u043C\u0435\u0441\u0441\u0435\u043D\u0434\u0436\u0435\u0440\u0430\u0445, \u0430 \u043D\u0435 \u0437\u0432\u043E\u043D\u0438\u0442\u044C </span>\n </label>\n }\n }\n <!-- \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B -->\n @if (fieldsList.includes('email')) {\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n }\n <!-- \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 -->\n @if (fieldsList.includes('message')) {\n <label tuiLabel>\n \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\n <tui-textfield>\n <textarea\n tuiTextarea\n formControlName=\"message\"\n [min]=\"3\"\n [max]=\"6\"\n placeholder=\"\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\"\n ></textarea>\n </tui-textfield>\n <tui-error formControlName=\"message\" />\n </label>\n }\n <!-- \u0424\u0430\u0439\u043B\u044B -->\n @if (fieldsList.includes('files')) {\n <div class=\"flex flex-col gap-1\">\n <label\n tuiInputFiles\n class=\"self-start !min-h-0 !p-0\"\n >\n <input\n #validator=\"tuiInputFilesValidator\"\n accept=\".doc,.docx,.pdf,image/*\"\n tuiInputFiles\n [formControl]=\"loadedFile\"\n [multiple]=\"true\"\n (reject)=\"onReject($event)\"\n class=\"opacity-0\"\n />\n <ng-template>\n <button\n tuiButton\n type=\"button\"\n tabindex=\"-1\"\n appearance=\"secondary\"\n size=\"m\"\n iconStart=\"@tui.paperclip\"\n >\n \u041F\u0440\u0438\u043A\u0440\u0435\u043F\u0438\u0442\u044C \u0444\u0430\u0439\u043B\n </button>\n </ng-template>\n </label>\n @if (loadedFile.invalid) {\n <tui-error\n [order]=\"['maxLength']\"\n [formControl]=\"loadedFile\"\n />\n }\n @let accepted = accepted$ | async;\n @if (accepted?.length || rejected.length) {\n <tui-files class=\"tui-space_top-1\">\n @for (file of accepted; track file) {\n <tui-file\n [file]=\"file\"\n (remove)=\"onRemove(file)\"\n />\n }\n @for (file of rejected; track file) {\n <tui-file\n state=\"error\"\n [file]=\"(file | tuiFileRejected: validator | async) || file\"\n (remove)=\"onRemove(file)\"\n />\n }\n </tui-files>\n }\n </div>\n }\n <!-- \u041A\u0430\u043F\u0447\u0430 -->\n @if (form.get('recaptcha'); as recaptcha) {\n <div\n class=\"mb-3 max-h-[7.5rem] overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': recaptcha.valid }\"\n [attr.inert]=\"recaptcha.valid ? '' : null\"\n >\n <sc-smart-captcha formControlName=\"recaptcha\" />\n </div>\n @if (recaptcha.getError('serverResponse'); as serverErrors) {\n <tui-error [error]=\"serverErrors.join(' ')\" />\n }\n }\n <!-- \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F -->\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 \u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\n </button>\n <div class=\"grow basis-60 text-body-s\">\n \u041D\u0430\u0436\u0438\u043C\u0430\u044F \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0443, \u0432\u044B \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u0435\u0442\u0435\u0441\u044C \u0441\n <button\n tuiLink\n [style.text-decoration-line]=\"'underline'\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); clickOffer.emit()\"\n >\n \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438\n </button>\n </div>\n </div>\n </form>\n}\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "directive", type: i2$3.TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i3$1.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "component", type: ScSmartCaptchaComponent, selector: "sc-smart-captcha" }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]" }, { kind: "component", type: i1$1.TuiTextareaComponent, selector: "textarea[tuiTextarea]", inputs: ["min", "max", "content"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]" }, { kind: "directive", type: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }, { kind: "component", type: i1$1.TuiFile, selector: "tui-file,a[tuiFile],button[tuiFile]", inputs: ["file", "state", "size", "showDelete", "showSize", "leftContent"], outputs: ["remove"] }, { kind: "component", type: i1$1.TuiInputFiles, selector: "label[tuiInputFiles]", inputs: ["tuiInputFiles"] }, { kind: "component", type: i1$1.TuiFilesComponent, selector: "tui-files", inputs: ["max", "expanded"], outputs: ["expandedChange"] }, { kind: "directive", type: i1$1.TuiInputFilesDirective, selector: "input[tuiInputFiles]", outputs: ["reject"] }, { kind: "component", type: i1$1.TuiInputPhoneInternationalComponent, selector: "input[tuiInputPhoneInternational]", inputs: ["countrySearch", "countryIsoCode", "countries"], outputs: ["countryIsoCodeChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TuiFileRejectedPipe, name: "tuiFileRejected" }, { kind: "pipe", type: TuiSortCountriesPipe, name: "tuiSortCountries" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10938
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScFeedbackFormComponent, isStandalone: true, selector: "sc-feedback-form", inputs: { slugInput: { classPropertyName: "slugInput", publicName: "slug", isSignal: true, isRequired: false, transformFunction: null }, fieldsInput: { classPropertyName: "fieldsInput", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickOffer: "clickOffer", sendSuccess: "sendSuccess" }, ngImport: i0, template: "@let fieldsList = fields();\n@if (fieldsList.length > 0) {\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n >\n <!-- \u0424\u0418\u041E -->\n @if (fieldsList.includes('name')) {\n <label tuiLabel>\n \u0424\u0418\u041E\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n placeholder=\"\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0424.\u0418.\u041E.\"\n />\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n }\n <!-- \u0422\u0435\u043B\u0435\u0444\u043E\u043D -->\n @if (fieldsList.includes('phone')) {\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries) || []\"\n autocomplete=\"phone\"\n placeholder=\"\u0422\u0435\u043B\u0435\u0444\u043E\u043D\"\n />\n </tui-textfield>\n <tui-error formControlName=\"phone\" />\n </label>\n @if (fieldsList.includes('isShouldUseMessenger') && form.controls.phone.value && isValidPhoneNumberForMessenger(form.controls.phone.value)) {\n <label tuiLabel>\n <input\n formControlName=\"isShouldUseMessenger\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span tuiTitle> \u041D\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0432 \u043C\u0435\u0441\u0441\u0435\u043D\u0434\u0436\u0435\u0440\u0430\u0445, \u0430 \u043D\u0435 \u0437\u0432\u043E\u043D\u0438\u0442\u044C </span>\n </label>\n }\n }\n <!-- \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B -->\n @if (fieldsList.includes('email')) {\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n }\n <!-- \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 -->\n @if (fieldsList.includes('message')) {\n <label tuiLabel>\n \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\n <tui-textfield>\n <textarea\n tuiTextarea\n formControlName=\"message\"\n [min]=\"3\"\n [max]=\"6\"\n placeholder=\"\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\"\n ></textarea>\n </tui-textfield>\n <tui-error formControlName=\"message\" />\n </label>\n }\n <!-- \u0424\u0430\u0439\u043B\u044B -->\n @if (fieldsList.includes('files')) {\n <div class=\"flex flex-col gap-1\">\n <label\n tuiInputFiles\n class=\"self-start !min-h-0 !p-0\"\n >\n <input\n #validator=\"tuiInputFilesValidator\"\n accept=\".doc,.docx,.pdf,image/*\"\n tuiInputFiles\n [formControl]=\"loadedFile\"\n [multiple]=\"true\"\n (reject)=\"onReject($event)\"\n class=\"opacity-0\"\n />\n <ng-template>\n <button\n tuiButton\n type=\"button\"\n tabindex=\"-1\"\n appearance=\"secondary\"\n size=\"m\"\n iconStart=\"@tui.paperclip\"\n >\n \u041F\u0440\u0438\u043A\u0440\u0435\u043F\u0438\u0442\u044C \u0444\u0430\u0439\u043B\n </button>\n </ng-template>\n </label>\n @if (loadedFile.invalid) {\n <tui-error\n [order]=\"['maxLength']\"\n [formControl]=\"loadedFile\"\n />\n }\n @let accepted = accepted$ | async;\n @if (accepted?.length || rejected.length) {\n <tui-files class=\"tui-space_top-1\">\n @for (file of accepted; track file) {\n <tui-file\n [file]=\"file\"\n (remove)=\"onRemove(file)\"\n />\n }\n @for (file of rejected; track file) {\n <tui-file\n state=\"error\"\n [file]=\"(file | tuiFileRejected: validator | async) || file\"\n (remove)=\"onRemove(file)\"\n />\n }\n </tui-files>\n }\n </div>\n }\n <!-- \u041A\u0430\u043F\u0447\u0430 -->\n @if (form.get('recaptcha'); as recaptcha) {\n <div\n class=\"mb-3 max-h-[7.5rem] overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': recaptcha.valid }\"\n [attr.inert]=\"recaptcha.valid ? '' : null\"\n >\n <sc-smart-captcha formControlName=\"recaptcha\" />\n </div>\n @if (recaptcha.getError('serverResponse'); as serverErrors) {\n <tui-error [error]=\"serverErrors.join(' ')\" />\n }\n }\n <!-- \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F -->\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 \u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\n </button>\n <div class=\"grow basis-60 text-body-s\">\n \u041D\u0430\u0436\u0438\u043C\u0430\u044F \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0443, \u0432\u044B \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u0435\u0442\u0435\u0441\u044C \u0441\n <button\n tuiLink\n [style.text-decoration-line]=\"'underline'\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); clickOffer.emit()\"\n >\n \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438\n </button>\n </div>\n </div>\n </form>\n}\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type", "showAddressQuality"], outputs: ["selectedClick"] }, { kind: "directive", type: i2$3.TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i3$1.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "component", type: ScSmartCaptchaComponent, selector: "sc-smart-captcha" }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]" }, { kind: "component", type: i1$1.TuiTextareaComponent, selector: "textarea[tuiTextarea]", inputs: ["min", "max", "content"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]" }, { kind: "directive", type: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }, { kind: "component", type: i1$1.TuiFile, selector: "tui-file,a[tuiFile],button[tuiFile]", inputs: ["file", "state", "size", "showDelete", "showSize", "leftContent"], outputs: ["remove"] }, { kind: "component", type: i1$1.TuiInputFiles, selector: "label[tuiInputFiles]", inputs: ["tuiInputFiles"] }, { kind: "component", type: i1$1.TuiFilesComponent, selector: "tui-files", inputs: ["max", "expanded"], outputs: ["expandedChange"] }, { kind: "directive", type: i1$1.TuiInputFilesDirective, selector: "input[tuiInputFiles]", outputs: ["reject"] }, { kind: "component", type: i1$1.TuiInputPhoneInternationalComponent, selector: "input[tuiInputPhoneInternational]", inputs: ["countrySearch", "countryIsoCode", "countries"], outputs: ["countryIsoCodeChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TuiFileRejectedPipe, name: "tuiFileRejected" }, { kind: "pipe", type: TuiSortCountriesPipe, name: "tuiSortCountries" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10596
10939
  }
10597
10940
  __decorate([
10598
10941
  tuiPure
@@ -10782,7 +11125,7 @@ class ScUpdateUserInfoDialogComponent {
10782
11125
  });
10783
11126
  }
10784
11127
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScUpdateUserInfoDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10785
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScUpdateUserInfoDialogComponent, isStandalone: true, selector: "sc-update-user-info-dialog", outputs: { cancelButtonClick: "cancelButtonClick", successUpdateDate: "successUpdateDate" }, ngImport: i0, template: "@if (user$ | async; as user) {\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-4\"\n >\n <label tuiLabel>\n {{ user.isOrg ? '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' : '\u0424.\u0418.\u041E.' }}\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n [placeholder]=\"user.isOrg ? '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' : '\u0424.\u0418.\u041E.'\"\n />\n @if (user.isOrg) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n @let phoneIsChange = user.contacts.phone.value === form.value.phone;\n <sc-verification-phone-check-form\n [showCodeFields]=\"!phoneIsChange\"\n [shouldBeBusy]=\"phoneIsChange\"\n class=\"w-full\"\n />\n <label\n tuiLabel\n class=\"w-full\"\n >\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n <sc-addresses-selection-field />\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n class=\"w-full\"\n />\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </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 \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.save\"\n >\n \u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C\n </button>\n </div>\n </form>\n}\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]" }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: ScAddressesSelectionFieldComponent, selector: "sc-addresses-selection-field", inputs: ["canSelectCountry"], outputs: ["canSelectCountryChange"] }, { kind: "component", type: ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "pseudoInvalid", "required", "subtitle", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange", "isBusyChange", "isConfirmedChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11128
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: ScUpdateUserInfoDialogComponent, isStandalone: true, selector: "sc-update-user-info-dialog", outputs: { cancelButtonClick: "cancelButtonClick", successUpdateDate: "successUpdateDate" }, ngImport: i0, template: "@if (user$ | async; as user) {\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-4\"\n >\n <label tuiLabel>\n {{ user.isOrg ? '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' : '\u0424.\u0418.\u041E.' }}\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n [placeholder]=\"user.isOrg ? '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' : '\u0424.\u0418.\u041E.'\"\n />\n @if (user.isOrg) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n [showAddressQuality]=\"false\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n @let phoneIsChange = user.contacts.phone.value === form.value.phone;\n <sc-verification-phone-check-form\n [showCodeFields]=\"!phoneIsChange\"\n [shouldBeBusy]=\"phoneIsChange\"\n class=\"w-full\"\n />\n <label\n tuiLabel\n class=\"w-full\"\n >\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n <sc-addresses-selection-field />\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n class=\"w-full\"\n />\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </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 \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.save\"\n >\n \u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C\n </button>\n </div>\n </form>\n}\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "component", type: i2.TuiErrorComponent, selector: "tui-error", inputs: ["error"] }, { kind: "directive", type: i2.TuiErrorDirective, selector: "tui-error[ngModel], tui-error[formControlName], tui-error[formControl], tui-error[formGroup], tui-error[formGroupName], tui-error[formArrayName], tui-error[formArray]", inputs: ["order"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]" }, { kind: "component", type: ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type", "showAddressQuality"], outputs: ["selectedClick"] }, { kind: "component", type: ScAddressesSelectionFieldComponent, selector: "sc-addresses-selection-field", inputs: ["canSelectCountry"], outputs: ["canSelectCountryChange"] }, { kind: "component", type: ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "pseudoInvalid", "required", "subtitle", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange", "isBusyChange", "isConfirmedChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10786
11129
  }
10787
11130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScUpdateUserInfoDialogComponent, decorators: [{
10788
11131
  type: Component,
@@ -10799,7 +11142,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
10799
11142
  ScSuggestionFieldComponent,
10800
11143
  ScAddressesSelectionFieldComponent,
10801
11144
  ScVerificationPhoneCheckFormComponent,
10802
- ], template: "@if (user$ | async; as user) {\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-4\"\n >\n <label tuiLabel>\n {{ user.isOrg ? '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' : '\u0424.\u0418.\u041E.' }}\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n [placeholder]=\"user.isOrg ? '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' : '\u0424.\u0418.\u041E.'\"\n />\n @if (user.isOrg) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n @let phoneIsChange = user.contacts.phone.value === form.value.phone;\n <sc-verification-phone-check-form\n [showCodeFields]=\"!phoneIsChange\"\n [shouldBeBusy]=\"phoneIsChange\"\n class=\"w-full\"\n />\n <label\n tuiLabel\n class=\"w-full\"\n >\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n <sc-addresses-selection-field />\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n class=\"w-full\"\n />\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </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 \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.save\"\n >\n \u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C\n </button>\n </div>\n </form>\n}\n" }]
11145
+ ], template: "@if (user$ | async; as user) {\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-4\"\n >\n <label tuiLabel>\n {{ user.isOrg ? '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' : '\u0424.\u0418.\u041E.' }}\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"name\"\n [placeholder]=\"user.isOrg ? '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043B\u0438 \u0418\u041F' : '\u0424.\u0418.\u041E.'\"\n />\n @if (user.isOrg) {\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.organization\"\n [showAddressQuality]=\"false\"\n />\n }\n </tui-textfield>\n <tui-error formControlName=\"name\" />\n </label>\n @let phoneIsChange = user.contacts.phone.value === form.value.phone;\n <sc-verification-phone-check-form\n [showCodeFields]=\"!phoneIsChange\"\n [shouldBeBusy]=\"phoneIsChange\"\n class=\"w-full\"\n />\n <label\n tuiLabel\n class=\"w-full\"\n >\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-textfield>\n <input\n tuiInput\n formControlName=\"email\"\n placeholder=\"\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\"\n />\n <sc-suggestion-field\n *tuiDropdown\n [type]=\"suggestionType.email\"\n />\n </tui-textfield>\n <tui-error formControlName=\"email\" />\n </label>\n <sc-addresses-selection-field />\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n class=\"w-full\"\n />\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </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 \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.save\"\n >\n \u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C\n </button>\n </div>\n </form>\n}\n" }]
10803
11146
  }], ctorParameters: () => [], propDecorators: { cancelButtonClick: [{
10804
11147
  type: Output
10805
11148
  }], successUpdateDate: [{
@@ -11105,5 +11448,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
11105
11448
  * Generated bundle index. Do not edit.
11106
11449
  */
11107
11450
 
11108
- export { AbstractScPriceCard, AuthMethod, CURRENT_COUNTRY_ID, CostWithDiscountComponent, FilesAndDocumentsComponent, FinishDateTimeTransformerDirective, IDLE_ITEM_STATE, IS_DEFAULT_COUNTRY, MAX_FILES_IN_FORM_INPUT, SC_ALLOW_SELECT_TERMINATED, SC_BANNER_DURATION, SC_CATALOG_PRODUCTS_FILTERS, SC_CATALOG_SHOW_PRODUCTS_RECURSIVELY, SC_DATE_FORMATTER, SC_DEBOUNCE_TIME_DEFAULT, SC_DIALOG_SERVICE_TOKEN, SC_ERROR_CHANGE_HANDLER, SC_FAQ_GROUP_QUERY_PARAM, SC_FAQ_QUESTION_ANCHOR_PREFIX, SC_HELP_NOTIFICATION_CLOSE, SC_HELP_NOTIFICATION_LIMIT, SC_HIDDEN_PRINT_ELEMENTS, SC_MANAGER_QR_HANDLER, SC_NOTIFY_WHEN_IN_STOCK_REQUIRED_FIELDS, SC_ORDER_FORM_CONFIG, SC_ORDER_OPTIONS, SC_PAGE_SIZE_OPTIONS$1 as SC_PAGE_SIZE_OPTIONS, SC_SHOW_HELP_NOTIFICATION_IN_PHONE_INPUT, SC_SMART_CAPTCHA_LOAD_TIMEOUT, SC_SMART_CAPTCHA_SETTINGS, SC_USER_CITY_INFO, SC_USER_INFO, SC_USER_PROVIDERS, SC_VERIFICATION_CODE_TIMEOUT, ScAccordionComponent, ScAccordionContentDirective, ScAddContactDialogComponent, ScAddContragentBankAccountsDialogComponent, ScAddContragentDialogComponent, ScAddDeliveryAddressDialogComponent, ScAddOrEditingCartItemDialogComponent, ScAddOrEditingCartItemFormComponent, ScAddressesSelectionFieldComponent, ScBannerComponent, ScBrandsListComponent, ScCartAddProductsFromCsvDialogComponent, ScCatalogFilterCollapsibleComponent, ScCatalogFiltersComponent, ScCategoryCardComponent, ScContactsAccordionComponent, ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScDownloadPriceListComponent, ScDraftComponent, ScEmailLinkDirective, ScErrorBlockStatusComponent, ScErrorHandlerComponent, ScFavoriteButtonComponent, ScFeedbackFormComponent, ScFocusFirstInvalidFieldDirective, ScFormatDatePipe, ScFrequentlyAskedQuestionsComponent, ScFrequentlyAskedQuestionsGroupSelectorComponent, ScFrequentlyAskedQuestionsWithGroupsComponent, ScGratitudeComponent, ScHelpNotificationService, ScHoverImageCarouselComponent, ScInputQuantityComponent, ScLinks, ScManagerCardComponent, ScManagerCardPushComponent, ScNewContactFormComponent, ScNewContragentBankAccountsFormComponent, ScNewContragentFormComponent, ScNewOrderItemsComponent, ScNewsCardComponent, ScNewsCardSkeletonComponent, ScNewsListComponent, ScNextInputFocusDirective, ScNoindexDirective, ScNoindexWrapperComponent, ScNotifyWhenInStockDialogComponent, ScOrderAccessorDirective, ScOrderFormComponent, ScOrderItemComponent, ScOrderItemsListByStockComponent, ScOrderItemsListComponent, ScOrderItemsListWithActionsComponent, ScPaginationLinksComponent, ScPaymentStatusComponent, ScPersonalDataProcessingPolicyComponent, ScPhoneFormatPipe, ScPreviewSampleComponent, ScPreviewSamplesMosquitoComponent, ScPriceCardComponent, ScPriceCardInlineComponent, ScPriceHistoryComponent, ScPriceListPaginationComponent, ScPriceWarehouseStockComponent, ScPrintDirective, ScPrintService, ScPrivacyPolicyComponent, ScProductInAllWarehousesPipe, ScProfileAccordionsContentComponent, ScPublicOfferComponent, ScQRCodeDialogComponent, ScResetUserPasswordComponent, ScResourcePreviewComponent, ScSandwichComponent, ScSandwichM2Component, ScSandwichM2SkeletonComponent, ScSandwichSkeletonComponent, ScScriptsService, ScSelectOnFocusinDirective, ScSeoTagsComponent, ScShareButtonComponent, ScShareDialogComponent, ScShareMessengersLinksComponent, ScShareService, ScSignInFormByEmailComponent, ScSignInFormByPhoneComponent, ScSignInFormComponent, ScSignUpFormComponent, ScSimpleSignUpFormComponent, ScSmartCaptchaComponent, ScSmartCaptchaLoaderService, ScSuggestionFieldComponent, ScTelLinkDirective, ScTerminalLinkDirective, ScUpdateUserInfoDialogComponent, ScUserManagersComponent, ScUserPhoneApproveDialogComponent, ScVerificationPhoneCheckFormComponent, TreeDirective, TreeIconService, TreeLoaderService, TreeTopDirective, phoneValidator, scAtLeastOneRequiredValidator, scBicValidator, scClientUiIconsName, scCorrespondentAccountValidator, scGetCurrentRoute, scGetFaqGroupQueryParams, scGetFaqQuestionAnchor, scGetFaqQuestionIdFromAnchor, scPasswordConfirmMatchingValidator, stepValidator, tuiDateValueTransformerDefaultProvider };
11451
+ export { AbstractScPriceCard, AuthMethod, CURRENT_COUNTRY_ID, CostWithDiscountComponent, FilesAndDocumentsComponent, FinishDateTimeTransformerDirective, IDLE_ITEM_STATE, IS_DEFAULT_COUNTRY, MAX_FILES_IN_FORM_INPUT, SC_ALLOW_SELECT_TERMINATED, SC_BANNER_DURATION, SC_BLOCK_INCOMPLETE_ADDRESS, SC_CATALOG_PRODUCTS_FILTERS, SC_CATALOG_SHOW_PRODUCTS_RECURSIVELY, SC_DATE_FORMATTER, SC_DEBOUNCE_TIME_DEFAULT, SC_DIALOG_SERVICE_TOKEN, SC_ERROR_CHANGE_HANDLER, SC_FAQ_GROUP_QUERY_PARAM, SC_FAQ_QUESTION_ANCHOR_PREFIX, SC_HELP_NOTIFICATION_CLOSE, SC_HELP_NOTIFICATION_LIMIT, SC_HIDDEN_PRINT_ELEMENTS, SC_MANAGER_QR_HANDLER, SC_NOTIFY_WHEN_IN_STOCK_REQUIRED_FIELDS, SC_ORDER_FORM_CONFIG, SC_ORDER_OPTIONS, SC_PAGE_SIZE_OPTIONS$1 as SC_PAGE_SIZE_OPTIONS, SC_SHOW_HELP_NOTIFICATION_IN_PHONE_INPUT, SC_SMART_CAPTCHA_LOAD_TIMEOUT, SC_SMART_CAPTCHA_SETTINGS, SC_USER_CITY_INFO, SC_USER_INFO, SC_USER_PROVIDERS, SC_VERIFICATION_CODE_TIMEOUT, ScAccordionComponent, ScAccordionContentDirective, ScAddContactDialogComponent, ScAddContragentBankAccountsDialogComponent, ScAddContragentDialogComponent, ScAddDeliveryAddressDialogComponent, ScAddOrEditingCartItemDialogComponent, ScAddOrEditingCartItemFormComponent, ScAddressQualityDirective, ScAddressQualityService, ScAddressesSelectionFieldComponent, ScBannerComponent, ScBrandsListComponent, ScCartAddProductsFromCsvDialogComponent, ScCatalogFilterCollapsibleComponent, ScCatalogFiltersComponent, ScCategoryCardComponent, ScContactsAccordionComponent, ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScDownloadPriceListComponent, ScDraftComponent, ScEmailLinkDirective, ScErrorBlockStatusComponent, ScErrorHandlerComponent, ScFavoriteButtonComponent, ScFeedbackFormComponent, ScFocusFirstInvalidFieldDirective, ScFormatDatePipe, ScFrequentlyAskedQuestionsComponent, ScFrequentlyAskedQuestionsGroupSelectorComponent, ScFrequentlyAskedQuestionsWithGroupsComponent, ScGratitudeComponent, ScHelpNotificationService, ScHoverImageCarouselComponent, ScInputQuantityComponent, ScLinks, ScManagerCardComponent, ScManagerCardPushComponent, ScNewContactFormComponent, ScNewContragentBankAccountsFormComponent, ScNewContragentFormComponent, ScNewOrderItemsComponent, ScNewsCardComponent, ScNewsCardSkeletonComponent, ScNewsListComponent, ScNextInputFocusDirective, ScNoindexDirective, ScNoindexWrapperComponent, ScNotifyWhenInStockDialogComponent, ScOrderAccessorDirective, ScOrderFormComponent, ScOrderItemComponent, ScOrderItemsListByStockComponent, ScOrderItemsListComponent, ScOrderItemsListWithActionsComponent, ScPaginationLinksComponent, ScPaymentStatusComponent, ScPersonalDataProcessingPolicyComponent, ScPhoneFormatPipe, ScPreviewSampleComponent, ScPreviewSamplesMosquitoComponent, ScPriceCardComponent, ScPriceCardInlineComponent, ScPriceHistoryComponent, ScPriceListPaginationComponent, ScPriceWarehouseStockComponent, ScPrintDirective, ScPrintService, ScPrivacyPolicyComponent, ScProductInAllWarehousesPipe, ScProfileAccordionsContentComponent, ScPublicOfferComponent, ScQRCodeDialogComponent, ScResetUserPasswordComponent, ScResourcePreviewComponent, ScSandwichComponent, ScSandwichM2Component, ScSandwichM2SkeletonComponent, ScSandwichSkeletonComponent, ScScriptsService, ScSelectOnFocusinDirective, ScSeoTagsComponent, ScShareButtonComponent, ScShareDialogComponent, ScShareMessengersLinksComponent, ScShareService, ScSignInFormByEmailComponent, ScSignInFormByPhoneComponent, ScSignInFormComponent, ScSignUpFormComponent, ScSimpleSignUpFormComponent, ScSmartCaptchaComponent, ScSmartCaptchaLoaderService, ScSuggestionFieldComponent, ScTelLinkDirective, ScTerminalLinkDirective, ScUpdateUserInfoDialogComponent, ScUserManagersComponent, ScUserPhoneApproveDialogComponent, ScVerificationPhoneCheckFormComponent, TreeDirective, TreeIconService, TreeLoaderService, TreeTopDirective, phoneValidator, scAtLeastOneRequiredValidator, scBicValidator, scClientUiIconsName, scCorrespondentAccountValidator, scGetCurrentRoute, scGetFaqGroupQueryParams, scGetFaqQuestionAnchor, scGetFaqQuestionIdFromAnchor, scPasswordConfirmMatchingValidator, stepValidator, tuiDateValueTransformerDefaultProvider };
11109
11452
  //# sourceMappingURL=snabcentr-client-ui.mjs.map