@snabcentr/client-ui 4.13.0 → 4.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/news/sc-news.module.mjs +4 -5
- package/esm2022/pages/frequently-asked-questions/sc-faq-question-anchor.mjs +23 -0
- package/esm2022/pages/frequently-asked-questions/sc-frequently-asked-questions.component.mjs +79 -6
- package/esm2022/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.mjs +4 -2
- package/esm2022/pages/index.mjs +2 -1
- package/esm2022/public-api.mjs +2 -2
- package/esm2022/share/index.mjs +6 -0
- package/esm2022/share/sc-share-dialog-data.mjs +2 -0
- package/esm2022/share/sc-share.service.mjs +40 -0
- package/esm2022/share/share-button/sc-share-button.component.mjs +99 -0
- package/esm2022/share/share-dialog/sc-share-dialog.component.mjs +134 -0
- package/esm2022/share/share-messengers-links/sc-share-messengers-links.component.mjs +84 -0
- package/fesm2022/snabcentr-client-ui.mjs +433 -62
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/news/sc-news.module.d.ts +3 -4
- package/package.json +1 -1
- package/pages/frequently-asked-questions/sc-faq-question-anchor.d.ts +16 -0
- package/pages/frequently-asked-questions/sc-frequently-asked-questions.component.d.ts +43 -1
- package/pages/index.d.ts +1 -0
- package/public-api.d.ts +1 -1
- package/release_notes.tmp +4 -2
- package/share/index.d.ts +5 -0
- package/share/sc-share-dialog-data.d.ts +13 -0
- package/share/sc-share.service.d.ts +19 -0
- package/share/share-button/sc-share-button.component.d.ts +78 -0
- package/share/share-dialog/sc-share-dialog.component.d.ts +87 -0
- package/share/share-messengers-links/sc-share-messengers-links.component.d.ts +49 -0
- package/styles/tailwind/tailwind.scss +18 -0
- package/esm2022/share-button/index.mjs +0 -3
- package/esm2022/share-button/sc-share-button.component.mjs +0 -35
- package/esm2022/share-button/sc-share-button.module.mjs +0 -22
- package/share-button/index.d.ts +0 -2
- package/share-button/sc-share-button.component.d.ts +0 -22
- package/share-button/sc-share-button.module.d.ts +0 -12
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, Injectable, NgZone, signal, EventEmitter, ChangeDetectorRef, Directive, Input, Output, Pipe, ElementRef, HostListener, Renderer2, ContentChildren, NgModule, input, computed, Component, ChangeDetectionStrategy, Inject, HostBinding, model, output, SkipSelf, DestroyRef, effect, ContentChild, ViewChild, viewChild, Optional, contentChild, TemplateRef, forwardRef, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, Injectable, NgZone, signal, EventEmitter, ChangeDetectorRef, Directive, Input, Output, Pipe, ElementRef, HostListener, Renderer2, ContentChildren, NgModule, input, computed, Component, ChangeDetectionStrategy, Inject, HostBinding, model, output, SkipSelf, DestroyRef, effect, ContentChild, ViewChild, viewChild, Optional, contentChild, TemplateRef, forwardRef, ViewEncapsulation, viewChildren, afterNextRender } from '@angular/core';
|
|
3
3
|
import * as i1 from '@snabcentr/client-core';
|
|
4
4
|
import { ScContactsService, ScUserService, ScLocationsService, ScAuthService, SEARCH_TERM, ScUnitsHelper, ScImageHelper, SC_PATH_IMAGE_NOT_FOUND, ScImage, ScPhoneService, ScUserMetrikaService, ScUserMetrikaGoalsEnum, IS_RUNNING_ON_TERMINAL, ScVCardService, ScVerificationService, ScISuggestionType, SC_MIN_LENGTH_SEARCH_TERM, ScConvertersService, ScOpfList, ScReferencesService, ScContragentService, ScBannerService, ScMediaImageTransformerPipe, ScCartService, ScUploadedFile, loadingPlaceholder, SC_ORDER_LOADER, ScMimeTypes, ScCatalogService, SC_URLS, ScWarehouseService, SEARCH_TERM_PROVIDERS, ScPaginationService, SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_OPTIONS, ScCatalogFilterService, ScIdOrSlugPipe, SC_CATEGORY_INFO, ScConfiguratorService, IS_SERVER, RESPONSE, ScIconTypesEnum, ScDocumentInfoTypesEnum, ScDeliveryAddressService, 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';
|
|
5
5
|
import * as i5$1 from 'rxjs';
|
|
6
6
|
import { EMPTY, BehaviorSubject, switchMap, of, shareReplay, map, Subject, filter, tap, catchError, finalize, startWith, share, timer, scan, takeWhile, endWith, distinctUntilChanged, debounceTime, throwError, combineLatest, Observable, pairwise, Subscription, merge, skip, from, concatMap, noop, first, retry } from 'rxjs';
|
|
7
|
-
import { WA_WINDOW } from '@ng-web-apis/common';
|
|
7
|
+
import { WA_WINDOW, WA_NAVIGATOR } from '@ng-web-apis/common';
|
|
8
8
|
import { takeUntilDestroyed, toSignal, outputFromObservable, toObservable } from '@angular/core/rxjs-interop';
|
|
9
9
|
import * as i4$1 from '@taiga-ui/cdk';
|
|
10
|
-
import { TuiDay, TuiTime, TuiValueTransformer, TUI_IS_MOBILE, tuiControlValue, tuiIsPresent, tuiMarkControlAsTouchedAndValidate, tuiIsFalsy, TuiAutoFocus, TuiRepeatTimes, TuiHovered, TuiDayRange, TuiMonth, tuiPure, tuiProvide, TuiValidationError,
|
|
10
|
+
import { TuiDay, TuiTime, TuiValueTransformer, TUI_IS_MOBILE, tuiControlValue, tuiIsPresent, tuiMarkControlAsTouchedAndValidate, tuiIsFalsy, TuiAutoFocus, TuiRepeatTimes, TuiHovered, TuiDayRange, TuiMonth, tuiPure, tuiProvide, TuiValidationError, TUI_WINDOW_SIZE, tuiClamp, TUI_TRUE_HANDLER } from '@taiga-ui/cdk';
|
|
11
11
|
import * as i2$1 from '@taiga-ui/kit';
|
|
12
12
|
import { TUI_DATE_VALUE_TRANSFORMER, TuiPreview, TuiAvatar, TuiAccordionItem, TuiElasticContainer, TuiAccordion, TuiFieldErrorPipe, TuiFilterByInputPipe, TuiStringifyContentPipe, TuiDataListWrapper, TuiButtonLoading, TuiSortCountriesPipe, TuiStepper, TuiCarousel, TuiPush, TuiCheckbox, TuiFiles, TuiChip, TuiInputNumber, TuiBadge, TuiTooltip, TuiHighlight, TuiLineClamp, TuiFade, TuiRange, tuiInputNumberOptionsProvider, TuiDataListWrapperComponent, TuiChevron, TuiSelect, TuiInputSlider, TuiTreeService, TuiTreeItemContent, TUI_TREE_START, TUI_TREE_CONTENT, TUI_TREE_LOADING, TUI_TREE_LOADER, TuiTree, TuiPreviewDialogService, tuiFilesAccepted, TuiInputFiles, TuiInputFilesDirective, TuiFilesComponent, TuiFile, TuiFileRejectedPipe, TUI_CONFIRM, tuiItemsHandlersProvider as tuiItemsHandlersProvider$1, TUI_PAGINATION_TEXTS, TuiAccordionDirective, TuiAccordionItemContent } from '@taiga-ui/kit';
|
|
13
13
|
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
|
|
14
14
|
import * as i1$1 from '@angular/forms';
|
|
15
15
|
import { FormControl, FormGroupDirective, NgControl, FormGroup, Validators, FormArray, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
16
16
|
import * as i1$2 from '@taiga-ui/core';
|
|
17
|
-
import { TuiButton, TuiDialog, TuiDialogService, TuiLink, TuiFallbackSrcPipe, TuiInitialsPipe, TuiIcon, TuiAppearance, TuiWithAppearance, TuiIcons, TuiWithIcons, TUI_DATA_LIST_HOST, tuiDropdownOptionsProvider, TuiLabel, TuiError, TuiLoader, TuiDataList, TuiNotification, TuiTextfield, TuiTitle, TuiNumberFormat, TuiHint, TUI_MONTHS, TuiScrollbar, tuiNumberFormatProvider, tuiItemsHandlersProvider, tuiTextfieldOptionsProvider, tuiHintOptionsProvider, TuiFormatNumberPipe, TuiHintDriver, TuiHintHover, TuiHintPosition, TuiHintDirective, TuiDataListComponent, TuiOption, TUI_BUTTON_OPTIONS, TUI_BUTTON_DEFAULT_OPTIONS, TUI_SPIN_ICONS, TuiSurface, tuiFadeIn } from '@taiga-ui/core';
|
|
17
|
+
import { TuiButton, TuiDialog, TuiDialogService, TuiLink, TuiFallbackSrcPipe, TuiInitialsPipe, TuiIcon, TuiAppearance, TuiWithAppearance, TuiIcons, TuiWithIcons, TUI_DATA_LIST_HOST, tuiDropdownOptionsProvider, TuiLabel, TuiError, TuiLoader, TuiDataList, TuiNotification, TuiTextfield, TuiTitle, TuiNumberFormat, TuiHint, TUI_MONTHS, TuiScrollbar, tuiNumberFormatProvider, tuiItemsHandlersProvider, tuiTextfieldOptionsProvider, tuiHintOptionsProvider, TuiFormatNumberPipe, TuiHintDriver, TuiHintHover, TuiHintPosition, TuiHintDirective, TuiDataListComponent, TuiOption, TuiAlertService, TuiIconPipe, TUI_BUTTON_OPTIONS, TUI_BUTTON_DEFAULT_OPTIONS, TUI_SPIN_ICONS, TuiSurface, tuiFadeIn } from '@taiga-ui/core';
|
|
18
18
|
import { isValidPhoneNumber } from 'libphonenumber-js/max';
|
|
19
19
|
import * as i4 from '@taiga-ui/legacy/components/primitive-textfield';
|
|
20
20
|
import * as i3 from '@taiga-ui/legacy';
|
|
@@ -8101,68 +8101,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
8101
8101
|
args: ['class.is_mobile']
|
|
8102
8102
|
}] } });
|
|
8103
8103
|
|
|
8104
|
-
/**
|
|
8105
|
-
* Компонент кнопки "Поделиться".
|
|
8106
|
-
*/
|
|
8107
|
-
class ScShareButtonComponent {
|
|
8108
|
-
constructor() {
|
|
8109
|
-
/**
|
|
8110
|
-
* Формат внешнего вида кнопки.
|
|
8111
|
-
*/
|
|
8112
|
-
this.appearance = 'secondary';
|
|
8113
|
-
/**
|
|
8114
|
-
* Размер кнопки.
|
|
8115
|
-
*/
|
|
8116
|
-
this.size = 'm';
|
|
8117
|
-
/**
|
|
8118
|
-
* Событие клика по кнопке "Поделиться".
|
|
8119
|
-
*/
|
|
8120
|
-
this.clickShareEvent = new EventEmitter();
|
|
8121
|
-
}
|
|
8122
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8123
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ScShareButtonComponent, selector: "sc-share-button", inputs: { appearance: "appearance", size: "size" }, outputs: { clickShareEvent: "clickShareEvent" }, ngImport: i0, template: "<button\n tuiIconButton\n iconStart=\"@tui.share-2\"\n [appearance]=\"appearance\"\n [size]=\"size\"\n (click)=\"$event.stopPropagation(); clickShareEvent.emit()\"\n></button>\n", dependencies: [{ kind: "directive", type: i1$2.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8124
|
-
}
|
|
8125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareButtonComponent, decorators: [{
|
|
8126
|
-
type: Component,
|
|
8127
|
-
args: [{ selector: 'sc-share-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n tuiIconButton\n iconStart=\"@tui.share-2\"\n [appearance]=\"appearance\"\n [size]=\"size\"\n (click)=\"$event.stopPropagation(); clickShareEvent.emit()\"\n></button>\n" }]
|
|
8128
|
-
}], propDecorators: { appearance: [{
|
|
8129
|
-
type: Input
|
|
8130
|
-
}], size: [{
|
|
8131
|
-
type: Input
|
|
8132
|
-
}], clickShareEvent: [{
|
|
8133
|
-
type: Output
|
|
8134
|
-
}] } });
|
|
8135
|
-
|
|
8136
|
-
/**
|
|
8137
|
-
* Модуль работы кнопки "Поделиться".
|
|
8138
|
-
*/
|
|
8139
|
-
class ScShareButtonModule {
|
|
8140
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
8141
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ScShareButtonModule, declarations: [ScShareButtonComponent], imports: [CommonModule, TuiButton], exports: [ScShareButtonComponent] }); }
|
|
8142
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareButtonModule, imports: [CommonModule] }); }
|
|
8143
|
-
}
|
|
8144
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareButtonModule, decorators: [{
|
|
8145
|
-
type: NgModule,
|
|
8146
|
-
args: [{
|
|
8147
|
-
declarations: [ScShareButtonComponent],
|
|
8148
|
-
imports: [CommonModule, TuiButton],
|
|
8149
|
-
exports: [ScShareButtonComponent],
|
|
8150
|
-
}]
|
|
8151
|
-
}] });
|
|
8152
|
-
|
|
8153
8104
|
/**
|
|
8154
8105
|
* Модуль работы с новостями.
|
|
8155
8106
|
*/
|
|
8156
8107
|
class ScNewsModule {
|
|
8157
8108
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScNewsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
8158
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ScNewsModule, declarations: [ScNewsCardComponent, ScNewsCardSkeletonComponent], imports: [CommonModule, RouterModule,
|
|
8159
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScNewsModule, imports: [CommonModule, RouterModule
|
|
8109
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ScNewsModule, declarations: [ScNewsCardComponent, ScNewsCardSkeletonComponent], imports: [CommonModule, RouterModule, ScFormatDatePipe, ScMediaImageTransformerPipe], exports: [ScNewsCardComponent, ScNewsCardSkeletonComponent] }); }
|
|
8110
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScNewsModule, imports: [CommonModule, RouterModule] }); }
|
|
8160
8111
|
}
|
|
8161
8112
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScNewsModule, decorators: [{
|
|
8162
8113
|
type: NgModule,
|
|
8163
8114
|
args: [{
|
|
8164
8115
|
declarations: [ScNewsCardComponent, ScNewsCardSkeletonComponent],
|
|
8165
|
-
imports: [CommonModule, RouterModule,
|
|
8116
|
+
imports: [CommonModule, RouterModule, ScFormatDatePipe, ScMediaImageTransformerPipe],
|
|
8166
8117
|
exports: [ScNewsCardComponent, ScNewsCardSkeletonComponent],
|
|
8167
8118
|
}]
|
|
8168
8119
|
}] });
|
|
@@ -9477,10 +9428,363 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
9477
9428
|
*/
|
|
9478
9429
|
const SC_FAQ_GROUP_QUERY_PARAM = 'group';
|
|
9479
9430
|
|
|
9431
|
+
/**
|
|
9432
|
+
* Префикс якоря (fragment) ссылки на конкретный вопрос.
|
|
9433
|
+
*/
|
|
9434
|
+
const SC_FAQ_QUESTION_ANCHOR_PREFIX = 'question-';
|
|
9435
|
+
/**
|
|
9436
|
+
* Возвращает якорь (fragment) ссылки на вопрос.
|
|
9437
|
+
*
|
|
9438
|
+
* @param questionId Идентификатор вопроса.
|
|
9439
|
+
*/
|
|
9440
|
+
const scGetFaqQuestionAnchor = (questionId) => `${SC_FAQ_QUESTION_ANCHOR_PREFIX}${questionId}`;
|
|
9441
|
+
/**
|
|
9442
|
+
* Возвращает идентификатор вопроса из якоря (fragment) ссылки или `null`, если якорь не ссылается на вопрос.
|
|
9443
|
+
*
|
|
9444
|
+
* @param fragment Якорь (fragment) адреса.
|
|
9445
|
+
*/
|
|
9446
|
+
const scGetFaqQuestionIdFromAnchor = (fragment) => {
|
|
9447
|
+
if (!fragment?.startsWith(SC_FAQ_QUESTION_ANCHOR_PREFIX)) {
|
|
9448
|
+
return null;
|
|
9449
|
+
}
|
|
9450
|
+
const questionId = Number(fragment.slice(SC_FAQ_QUESTION_ANCHOR_PREFIX.length));
|
|
9451
|
+
return Number.isInteger(questionId) && questionId > 0 ? questionId : null;
|
|
9452
|
+
};
|
|
9453
|
+
|
|
9454
|
+
/**
|
|
9455
|
+
* Диалоговое окно "Поделиться": варианты, как поделиться ссылкой.
|
|
9456
|
+
*
|
|
9457
|
+
* На терминале вместо вариантов отображается только QR-код ссылки.
|
|
9458
|
+
*/
|
|
9459
|
+
class ScShareDialogComponent {
|
|
9460
|
+
constructor() {
|
|
9461
|
+
/**
|
|
9462
|
+
* Провайдер данных о терминале.
|
|
9463
|
+
*/
|
|
9464
|
+
this.terminal = inject(IS_RUNNING_ON_TERMINAL);
|
|
9465
|
+
/**
|
|
9466
|
+
* Контекст диалогового окна, в котором открыт компонент.
|
|
9467
|
+
*/
|
|
9468
|
+
this.context = inject(POLYMORPHEUS_CONTEXT);
|
|
9469
|
+
/**
|
|
9470
|
+
* Ссылка на объект навигатора браузера.
|
|
9471
|
+
*/
|
|
9472
|
+
this.navigator = inject(WA_NAVIGATOR);
|
|
9473
|
+
/**
|
|
9474
|
+
* Ссылка на объект окна браузера.
|
|
9475
|
+
*/
|
|
9476
|
+
this.window = inject(WA_WINDOW);
|
|
9477
|
+
/**
|
|
9478
|
+
* Сервис уведомлений.
|
|
9479
|
+
*/
|
|
9480
|
+
this.alerts = inject(TuiAlertService);
|
|
9481
|
+
/**
|
|
9482
|
+
* Сервис для работы с диалоговыми окнами.
|
|
9483
|
+
*/
|
|
9484
|
+
this.dialog = inject(TuiDialogService);
|
|
9485
|
+
/**
|
|
9486
|
+
* Сервис для сбора метрик о действиях пользователей.
|
|
9487
|
+
*/
|
|
9488
|
+
this.userMetrikaService = inject(ScUserMetrikaService);
|
|
9489
|
+
/**
|
|
9490
|
+
* {@link Signal} формата отображения вариантов: в строку на широких экранах, списком на узких.
|
|
9491
|
+
*/
|
|
9492
|
+
this.viewMode = toSignal(inject(IS_SERVER) ? of('list') : inject(TUI_WINDOW_SIZE).pipe(map((rect) => (rect.width > 768 ? 'row' : 'list'))), { initialValue: 'list' });
|
|
9493
|
+
/**
|
|
9494
|
+
* Заголовок ссылки, которой необходимо поделиться.
|
|
9495
|
+
*/
|
|
9496
|
+
this.title = this.context.data.title;
|
|
9497
|
+
/**
|
|
9498
|
+
* Ссылка, которой необходимо поделиться.
|
|
9499
|
+
*/
|
|
9500
|
+
this.shareUrl = this.context.data.shareUrl;
|
|
9501
|
+
/**
|
|
9502
|
+
* Ссылка отправки по Email.
|
|
9503
|
+
*/
|
|
9504
|
+
this.emailLink = `mailto:?subject=${encodeURIComponent(['ООО Снабцентр', this.title].filter(Boolean).join(' - '))}&body=${encodeURIComponent(this.shareUrl)}`;
|
|
9505
|
+
/**
|
|
9506
|
+
* Ссылка отправки во ВКонтакте.
|
|
9507
|
+
*/
|
|
9508
|
+
this.vkLink = `https://vk.com/share.php?url=${encodeURIComponent(this.shareUrl)}`;
|
|
9509
|
+
/**
|
|
9510
|
+
* Ссылка отправки в Telegram.
|
|
9511
|
+
*/
|
|
9512
|
+
this.telegramLink = `https://t.me/share/url?url=${encodeURIComponent(this.shareUrl)}`;
|
|
9513
|
+
}
|
|
9514
|
+
/** @inheritDoc */
|
|
9515
|
+
ngOnInit() {
|
|
9516
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
9517
|
+
target: ScUserMetrikaGoalsEnum.shareShow,
|
|
9518
|
+
});
|
|
9519
|
+
}
|
|
9520
|
+
/**
|
|
9521
|
+
* Открывает окно перехода в социальную сеть.
|
|
9522
|
+
*
|
|
9523
|
+
* @param shareLink Ссылка перехода в социальную сеть.
|
|
9524
|
+
* @param socialMedia Slug социальной сети.
|
|
9525
|
+
*/
|
|
9526
|
+
openShareWindow(shareLink, socialMedia) {
|
|
9527
|
+
this.emitShareClick(socialMedia);
|
|
9528
|
+
this.window.open(shareLink, 'sharer', 'status=0,toolbar=0,width=650,height=500');
|
|
9529
|
+
}
|
|
9530
|
+
/**
|
|
9531
|
+
* Копирует ссылку в буфер обмена.
|
|
9532
|
+
*/
|
|
9533
|
+
copyShareLink() {
|
|
9534
|
+
this.emitShareClick('copy_to_clipboard');
|
|
9535
|
+
this.navigator.clipboard.writeText(this.shareUrl).catch(noop);
|
|
9536
|
+
this.alerts.open('Ссылка скопирована в буфер обмена.', { appearance: 'positive' }).subscribe();
|
|
9537
|
+
}
|
|
9538
|
+
/**
|
|
9539
|
+
* Открывает диалоговое окно с QR-кодом ссылки.
|
|
9540
|
+
*/
|
|
9541
|
+
showQRCode() {
|
|
9542
|
+
this.emitShareClick('qr');
|
|
9543
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
9544
|
+
target: ScUserMetrikaGoalsEnum.qrShow,
|
|
9545
|
+
});
|
|
9546
|
+
this.dialog
|
|
9547
|
+
.open(new PolymorpheusComponent(ScQRCodeDialogComponent), {
|
|
9548
|
+
size: 's',
|
|
9549
|
+
label: this.title || 'QR-код',
|
|
9550
|
+
data: { qrdata: this.shareUrl },
|
|
9551
|
+
})
|
|
9552
|
+
.subscribe();
|
|
9553
|
+
}
|
|
9554
|
+
/**
|
|
9555
|
+
* Отправляет метрику выбора варианта "Поделиться".
|
|
9556
|
+
*
|
|
9557
|
+
* @param shareLinkName Наименование варианта.
|
|
9558
|
+
*/
|
|
9559
|
+
emitShareClick(shareLinkName) {
|
|
9560
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
9561
|
+
target: ScUserMetrikaGoalsEnum.shareClick,
|
|
9562
|
+
params: {
|
|
9563
|
+
share_link_name: shareLinkName,
|
|
9564
|
+
},
|
|
9565
|
+
});
|
|
9566
|
+
}
|
|
9567
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9568
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScShareDialogComponent, isStandalone: true, selector: "sc-share-dialog", ngImport: i0, template: "@if (terminal.isRunningOnTerminal) {\n <p class=\"-mt-2 mb-3 text-tui-text-02\">\u0421\u043A\u0430\u043D\u0438\u0440\u0443\u0439\u0442\u0435 QR-\u043A\u043E\u0434.</p>\n <qrcode\n [margin]=\"0\"\n [qrdata]=\"shareUrl\"\n [width]=\"250\"\n elementType=\"img\"\n ></qrcode>\n} @else {\n @let isRow = viewMode() === 'row';\n @let appearance = isRow ? 'flat' : 'outline';\n @let buttonClass = isRow ? 'button _row' : 'button w-full !justify-start';\n @let iconClass = isRow ? '!m-0 !size-8' : '!m-0 !size-6';\n @let iconSize = isRow ? 32 : 24;\n\n <div\n class=\"gap-2\"\n [class.flex]=\"isRow\"\n [class.grid]=\"!isRow\"\n [class.grid-cols-2]=\"!isRow\"\n >\n <a\n tuiButton\n size=\"m\"\n scEmailLink\n linkLocation=\"share-link\"\n automation-id=\"sc-share-dialog__email\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"emailLink\"\n >\n <img\n [src]=\"'@tui.sc.img.email' | tuiIcon\"\n alt=\"Email\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>Email</span>\n </a>\n <a\n tuiButton\n size=\"m\"\n target=\"_blank\"\n automation-id=\"sc-share-dialog__vk\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"vkLink\"\n (click)=\"$event.preventDefault(); openShareWindow(vkLink, 'vk')\"\n >\n <img\n [src]=\"'@tui.sc.img.vk' | tuiIcon\"\n alt=\"\u0412\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u0435\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>\u0412\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u0435</span>\n </a>\n <a\n tuiButton\n size=\"m\"\n target=\"_blank\"\n automation-id=\"sc-share-dialog__telegram\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"telegramLink\"\n (click)=\"$event.preventDefault(); openShareWindow(telegramLink, 'telegram')\"\n >\n <img\n [src]=\"'@tui.sc.img.telegram' | tuiIcon\"\n alt=\"Telegram\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>Telegram</span>\n </a>\n <button\n tuiButton\n size=\"m\"\n type=\"button\"\n automation-id=\"sc-share-dialog__copy\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n (click)=\"copyShareLink()\"\n >\n <img\n [src]=\"'@tui.sc.img.copy' | tuiIcon\"\n alt=\"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C</span>\n </button>\n <button\n tuiButton\n size=\"m\"\n type=\"button\"\n automation-id=\"sc-share-dialog__qr\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n (click)=\"showQRCode()\"\n >\n <img\n [src]=\"'@tui.sc.img.qr-code' | tuiIcon\"\n alt=\"QR-\u043A\u043E\u0434\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>QR-\u043A\u043E\u0434</span>\n </button>\n </div>\n}\n", styles: [".button._row{--tui-padding: .625rem;--t-gap: 0 !important}.button._row span{max-width:0;overflow:hidden;opacity:0;transition-duration:.5s}.button._row:hover span{opacity:1;max-width:11.5rem;padding-left:1rem}\n"], dependencies: [{ kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "pipe", type: TuiIconPipe, name: "tuiIcon" }, { kind: "directive", type: ScEmailLinkDirective, selector: "a[scEmailLink]", inputs: ["linkLocation"] }, { kind: "ngmodule", type: QRCodeModule }, { kind: "component", type: i2.QRCodeComponent, selector: "qrcode", inputs: ["allowEmptyString", "colorDark", "colorLight", "cssClass", "elementType", "errorCorrectionLevel", "imageSrc", "imageHeight", "imageWidth", "margin", "qrdata", "scale", "version", "width", "alt", "ariaLabel", "title"], outputs: ["qrCodeURL"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
9569
|
+
}
|
|
9570
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareDialogComponent, decorators: [{
|
|
9571
|
+
type: Component,
|
|
9572
|
+
args: [{ standalone: true, selector: 'sc-share-dialog', imports: [TuiButton, TuiIconPipe, ScEmailLinkDirective, QRCodeModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (terminal.isRunningOnTerminal) {\n <p class=\"-mt-2 mb-3 text-tui-text-02\">\u0421\u043A\u0430\u043D\u0438\u0440\u0443\u0439\u0442\u0435 QR-\u043A\u043E\u0434.</p>\n <qrcode\n [margin]=\"0\"\n [qrdata]=\"shareUrl\"\n [width]=\"250\"\n elementType=\"img\"\n ></qrcode>\n} @else {\n @let isRow = viewMode() === 'row';\n @let appearance = isRow ? 'flat' : 'outline';\n @let buttonClass = isRow ? 'button _row' : 'button w-full !justify-start';\n @let iconClass = isRow ? '!m-0 !size-8' : '!m-0 !size-6';\n @let iconSize = isRow ? 32 : 24;\n\n <div\n class=\"gap-2\"\n [class.flex]=\"isRow\"\n [class.grid]=\"!isRow\"\n [class.grid-cols-2]=\"!isRow\"\n >\n <a\n tuiButton\n size=\"m\"\n scEmailLink\n linkLocation=\"share-link\"\n automation-id=\"sc-share-dialog__email\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"emailLink\"\n >\n <img\n [src]=\"'@tui.sc.img.email' | tuiIcon\"\n alt=\"Email\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>Email</span>\n </a>\n <a\n tuiButton\n size=\"m\"\n target=\"_blank\"\n automation-id=\"sc-share-dialog__vk\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"vkLink\"\n (click)=\"$event.preventDefault(); openShareWindow(vkLink, 'vk')\"\n >\n <img\n [src]=\"'@tui.sc.img.vk' | tuiIcon\"\n alt=\"\u0412\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u0435\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>\u0412\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u0435</span>\n </a>\n <a\n tuiButton\n size=\"m\"\n target=\"_blank\"\n automation-id=\"sc-share-dialog__telegram\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"telegramLink\"\n (click)=\"$event.preventDefault(); openShareWindow(telegramLink, 'telegram')\"\n >\n <img\n [src]=\"'@tui.sc.img.telegram' | tuiIcon\"\n alt=\"Telegram\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>Telegram</span>\n </a>\n <button\n tuiButton\n size=\"m\"\n type=\"button\"\n automation-id=\"sc-share-dialog__copy\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n (click)=\"copyShareLink()\"\n >\n <img\n [src]=\"'@tui.sc.img.copy' | tuiIcon\"\n alt=\"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C</span>\n </button>\n <button\n tuiButton\n size=\"m\"\n type=\"button\"\n automation-id=\"sc-share-dialog__qr\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n (click)=\"showQRCode()\"\n >\n <img\n [src]=\"'@tui.sc.img.qr-code' | tuiIcon\"\n alt=\"QR-\u043A\u043E\u0434\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>QR-\u043A\u043E\u0434</span>\n </button>\n </div>\n}\n", styles: [".button._row{--tui-padding: .625rem;--t-gap: 0 !important}.button._row span{max-width:0;overflow:hidden;opacity:0;transition-duration:.5s}.button._row:hover span{opacity:1;max-width:11.5rem;padding-left:1rem}\n"] }]
|
|
9573
|
+
}] });
|
|
9574
|
+
|
|
9575
|
+
/**
|
|
9576
|
+
* Сервис открытия диалогового окна "Поделиться".
|
|
9577
|
+
*/
|
|
9578
|
+
class ScShareService {
|
|
9579
|
+
constructor() {
|
|
9580
|
+
/**
|
|
9581
|
+
* Сервис для работы с диалоговыми окнами.
|
|
9582
|
+
*/
|
|
9583
|
+
this.dialog = inject(TuiDialogService);
|
|
9584
|
+
}
|
|
9585
|
+
/**
|
|
9586
|
+
* Открывает диалоговое окно "Поделиться".
|
|
9587
|
+
*
|
|
9588
|
+
* @param title Заголовок ссылки, которой необходимо поделиться.
|
|
9589
|
+
* @param shareUrl Абсолютная ссылка, которой необходимо поделиться.
|
|
9590
|
+
*/
|
|
9591
|
+
openShareDialog(title, shareUrl) {
|
|
9592
|
+
this.dialog
|
|
9593
|
+
.open(new PolymorpheusComponent(ScShareDialogComponent), {
|
|
9594
|
+
size: 'auto',
|
|
9595
|
+
label: 'Поделиться',
|
|
9596
|
+
data: { title, shareUrl },
|
|
9597
|
+
})
|
|
9598
|
+
.subscribe();
|
|
9599
|
+
}
|
|
9600
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
9601
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareService, providedIn: 'root' }); }
|
|
9602
|
+
}
|
|
9603
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareService, decorators: [{
|
|
9604
|
+
type: Injectable,
|
|
9605
|
+
args: [{
|
|
9606
|
+
providedIn: 'root',
|
|
9607
|
+
}]
|
|
9608
|
+
}] });
|
|
9609
|
+
|
|
9610
|
+
/**
|
|
9611
|
+
* Кнопка "Поделиться": открывает диалоговое окно с вариантами, как поделиться ссылкой.
|
|
9612
|
+
*
|
|
9613
|
+
* Ссылка формируется из {@link routerPath} относительно маршрутизации приложения, либо берётся из {@link shareUrl},
|
|
9614
|
+
* а если не задано ни то, ни другое - используется адрес текущей страницы.
|
|
9615
|
+
*/
|
|
9616
|
+
class ScShareButtonComponent {
|
|
9617
|
+
constructor() {
|
|
9618
|
+
/**
|
|
9619
|
+
* {@link InputSignal} заголовка ссылки, которой необходимо поделиться.
|
|
9620
|
+
*/
|
|
9621
|
+
this.title = input('');
|
|
9622
|
+
/**
|
|
9623
|
+
* {@link InputSignal} ссылки, которой необходимо поделиться (абсолютной или относительно корня сайта).
|
|
9624
|
+
*/
|
|
9625
|
+
this.shareUrl = input();
|
|
9626
|
+
/**
|
|
9627
|
+
* {@link InputSignal} команд маршрутизатора, из которых формируется ссылка относительно маршрутизации приложения.
|
|
9628
|
+
*/
|
|
9629
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9630
|
+
this.routerPath = input();
|
|
9631
|
+
/**
|
|
9632
|
+
* {@link InputSignal} параметров формирования ссылки из {@link routerPath}.
|
|
9633
|
+
*/
|
|
9634
|
+
this.routerCreationOptions = input();
|
|
9635
|
+
/**
|
|
9636
|
+
* {@link InputSignal} формата внешнего вида кнопки.
|
|
9637
|
+
*/
|
|
9638
|
+
this.appearance = input('secondary');
|
|
9639
|
+
/**
|
|
9640
|
+
* {@link InputSignal} размера кнопки.
|
|
9641
|
+
*/
|
|
9642
|
+
this.size = input('m');
|
|
9643
|
+
/**
|
|
9644
|
+
* {@link InputSignal} признака, что подпись "Поделиться" отображается постоянно.
|
|
9645
|
+
*/
|
|
9646
|
+
this.showLabel = input(false);
|
|
9647
|
+
/**
|
|
9648
|
+
* {@link InputSignal} признака, что кнопка раскрывается с появлением подписи "Поделиться" при наведении.
|
|
9649
|
+
*/
|
|
9650
|
+
this.expandable = input(false);
|
|
9651
|
+
/**
|
|
9652
|
+
* Ссылка на объект документа.
|
|
9653
|
+
*/
|
|
9654
|
+
this.document = inject(DOCUMENT);
|
|
9655
|
+
/**
|
|
9656
|
+
* Сервис маршрутизации.
|
|
9657
|
+
*/
|
|
9658
|
+
this.router = inject(Router);
|
|
9659
|
+
/**
|
|
9660
|
+
* Сервис открытия диалогового окна "Поделиться".
|
|
9661
|
+
*/
|
|
9662
|
+
this.shareService = inject(ScShareService);
|
|
9663
|
+
/**
|
|
9664
|
+
* {@link Signal} ссылки, которой необходимо поделиться, заданной через входные параметры.
|
|
9665
|
+
*/
|
|
9666
|
+
this.href = computed(() => {
|
|
9667
|
+
const routerPath = this.routerPath();
|
|
9668
|
+
const url = routerPath ? this.router.createUrlTree(routerPath, this.routerCreationOptions()).toString() : this.shareUrl();
|
|
9669
|
+
return url ? decodeURIComponent(url) : undefined;
|
|
9670
|
+
});
|
|
9671
|
+
}
|
|
9672
|
+
/**
|
|
9673
|
+
* Возвращает адрес текущей страницы.
|
|
9674
|
+
*/
|
|
9675
|
+
get currentUrl() {
|
|
9676
|
+
return decodeURIComponent(this.router.url);
|
|
9677
|
+
}
|
|
9678
|
+
/**
|
|
9679
|
+
* Обработчик нажатия на кнопку: открывает диалоговое окно "Поделиться".
|
|
9680
|
+
*
|
|
9681
|
+
* @param event Событие нажатия.
|
|
9682
|
+
*/
|
|
9683
|
+
openShareDialog(event) {
|
|
9684
|
+
event.preventDefault();
|
|
9685
|
+
this.shareService.openShareDialog(this.title(), this.getAbsoluteUrl(this.href() ?? this.currentUrl));
|
|
9686
|
+
}
|
|
9687
|
+
/**
|
|
9688
|
+
* Возвращает абсолютную ссылку.
|
|
9689
|
+
*
|
|
9690
|
+
* @param url Абсолютная ссылка или ссылка относительно корня сайта.
|
|
9691
|
+
*/
|
|
9692
|
+
getAbsoluteUrl(url) {
|
|
9693
|
+
return /^https?:\/\//.test(url) ? url : `${this.document.location.origin}${url}`;
|
|
9694
|
+
}
|
|
9695
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9696
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScShareButtonComponent, isStandalone: true, selector: "sc-share-button", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, shareUrl: { classPropertyName: "shareUrl", publicName: "shareUrl", isSignal: true, isRequired: false, transformFunction: null }, routerPath: { classPropertyName: "routerPath", publicName: "routerPath", isSignal: true, isRequired: false, transformFunction: null }, routerCreationOptions: { classPropertyName: "routerCreationOptions", publicName: "routerCreationOptions", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, expandable: { classPropertyName: "expandable", publicName: "expandable", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (showLabel() || expandable()) {\n <a\n tuiButton\n iconStart=\"@tui.share-2\"\n [appearance]=\"appearance()\"\n [size]=\"size()\"\n [attr.href]=\"href() ?? currentUrl\"\n [class._expandable]=\"expandable()\"\n (click)=\"openShareDialog($event)\"\n >\n <span>\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F</span>\n </a>\n} @else {\n <a\n tuiIconButton\n iconStart=\"@tui.share-2\"\n title=\"\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F\"\n aria-label=\"\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F\"\n [appearance]=\"appearance()\"\n [size]=\"size()\"\n [attr.href]=\"href() ?? currentUrl\"\n (click)=\"openShareDialog($event)\"\n ></a>\n}\n", styles: ["a._expandable{--t-gap: 0 !important}a._expandable span{max-width:0;overflow:hidden;opacity:0;transition-duration:.5s}a._expandable:hover span{opacity:1;max-width:11.5rem;padding-left:1rem}\n"], dependencies: [{ kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
9697
|
+
}
|
|
9698
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareButtonComponent, decorators: [{
|
|
9699
|
+
type: Component,
|
|
9700
|
+
args: [{ standalone: true, selector: 'sc-share-button', imports: [TuiButton], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (showLabel() || expandable()) {\n <a\n tuiButton\n iconStart=\"@tui.share-2\"\n [appearance]=\"appearance()\"\n [size]=\"size()\"\n [attr.href]=\"href() ?? currentUrl\"\n [class._expandable]=\"expandable()\"\n (click)=\"openShareDialog($event)\"\n >\n <span>\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F</span>\n </a>\n} @else {\n <a\n tuiIconButton\n iconStart=\"@tui.share-2\"\n title=\"\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F\"\n aria-label=\"\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F\"\n [appearance]=\"appearance()\"\n [size]=\"size()\"\n [attr.href]=\"href() ?? currentUrl\"\n (click)=\"openShareDialog($event)\"\n ></a>\n}\n", styles: ["a._expandable{--t-gap: 0 !important}a._expandable span{max-width:0;overflow:hidden;opacity:0;transition-duration:.5s}a._expandable:hover span{opacity:1;max-width:11.5rem;padding-left:1rem}\n"] }]
|
|
9701
|
+
}] });
|
|
9702
|
+
|
|
9703
|
+
/**
|
|
9704
|
+
* Ссылки на мессенджеры контакта по номеру телефона.
|
|
9705
|
+
*
|
|
9706
|
+
* На терминале вместо перехода в мессенджер отображается QR-код ссылки.
|
|
9707
|
+
*/
|
|
9708
|
+
class ScShareMessengersLinksComponent {
|
|
9709
|
+
constructor() {
|
|
9710
|
+
/**
|
|
9711
|
+
* {@link InputSignal} телефона контакта.
|
|
9712
|
+
*/
|
|
9713
|
+
this.phone = input.required();
|
|
9714
|
+
/**
|
|
9715
|
+
* {@link InputSignal} размера кнопок.
|
|
9716
|
+
*/
|
|
9717
|
+
this.size = input('s');
|
|
9718
|
+
/**
|
|
9719
|
+
* Сервис для сбора метрик о действиях пользователей.
|
|
9720
|
+
*/
|
|
9721
|
+
this.userMetrikaService = inject(ScUserMetrikaService);
|
|
9722
|
+
/**
|
|
9723
|
+
* Ссылка на объект окна браузера.
|
|
9724
|
+
*/
|
|
9725
|
+
this.window = inject(WA_WINDOW);
|
|
9726
|
+
/**
|
|
9727
|
+
* Провайдер данных о терминале.
|
|
9728
|
+
*/
|
|
9729
|
+
this.terminal = inject(IS_RUNNING_ON_TERMINAL);
|
|
9730
|
+
/**
|
|
9731
|
+
* Сервис для работы с диалоговыми окнами.
|
|
9732
|
+
*/
|
|
9733
|
+
this.dialog = inject(TuiDialogService);
|
|
9734
|
+
}
|
|
9735
|
+
/**
|
|
9736
|
+
* Открывает окно перехода в мессенджер.
|
|
9737
|
+
*
|
|
9738
|
+
* @param shareLink Ссылка перехода в мессенджер.
|
|
9739
|
+
* @param socialMedia Slug мессенджера.
|
|
9740
|
+
*/
|
|
9741
|
+
openShareWindow(shareLink, socialMedia) {
|
|
9742
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
9743
|
+
target: ScUserMetrikaGoalsEnum.shareClick,
|
|
9744
|
+
params: {
|
|
9745
|
+
share_link_name: socialMedia,
|
|
9746
|
+
phone: this.phone(),
|
|
9747
|
+
},
|
|
9748
|
+
});
|
|
9749
|
+
if (this.terminal.isRunningOnTerminal) {
|
|
9750
|
+
this.dialog
|
|
9751
|
+
.open(new PolymorpheusComponent(ScQRCodeDialogComponent), {
|
|
9752
|
+
size: 's',
|
|
9753
|
+
label: socialMedia,
|
|
9754
|
+
data: { qrdata: shareLink },
|
|
9755
|
+
})
|
|
9756
|
+
.subscribe();
|
|
9757
|
+
}
|
|
9758
|
+
else {
|
|
9759
|
+
this.window.open(shareLink, 'sharer', 'status=0,toolbar=0,width=650,height=500');
|
|
9760
|
+
}
|
|
9761
|
+
}
|
|
9762
|
+
/**
|
|
9763
|
+
* Проверяет, что номер телефона подходит для использования в мессенджерах.
|
|
9764
|
+
*
|
|
9765
|
+
* @param value Номер телефона.
|
|
9766
|
+
*/
|
|
9767
|
+
// eslint-disable-next-line class-methods-use-this
|
|
9768
|
+
isValidPhoneNumberForMessenger(value) {
|
|
9769
|
+
return ScPhoneService.isValidPhoneNumberForMessenger(value);
|
|
9770
|
+
}
|
|
9771
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareMessengersLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9772
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScShareMessengersLinksComponent, isStandalone: true, selector: "sc-share-messengers-links", inputs: { phone: { classPropertyName: "phone", publicName: "phone", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (isValidPhoneNumberForMessenger(phone())) {\n @let phoneNumber = phone() | scPhoneFormat: 'cleanWithPlus';\n\n <button\n tuiIconButton\n type=\"button\"\n appearance=\"mono\"\n iconStart=\"@tui.sc.telegram\"\n title=\"Telegram\"\n aria-label=\"Telegram\"\n [size]=\"size()\"\n (click)=\"openShareWindow('https://t.me/' + phoneNumber, 'telegram')\"\n ></button>\n}\n", dependencies: [{ kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "pipe", type: ScPhoneFormatPipe, name: "scPhoneFormat" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
9773
|
+
}
|
|
9774
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareMessengersLinksComponent, decorators: [{
|
|
9775
|
+
type: Component,
|
|
9776
|
+
args: [{ standalone: true, selector: 'sc-share-messengers-links', imports: [TuiButton, ScPhoneFormatPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isValidPhoneNumberForMessenger(phone())) {\n @let phoneNumber = phone() | scPhoneFormat: 'cleanWithPlus';\n\n <button\n tuiIconButton\n type=\"button\"\n appearance=\"mono\"\n iconStart=\"@tui.sc.telegram\"\n title=\"Telegram\"\n aria-label=\"Telegram\"\n [size]=\"size()\"\n (click)=\"openShareWindow('https://t.me/' + phoneNumber, 'telegram')\"\n ></button>\n}\n" }]
|
|
9777
|
+
}] });
|
|
9778
|
+
|
|
9480
9779
|
/**
|
|
9481
9780
|
* Компонент часто задаваемых вопросов.
|
|
9482
9781
|
*/
|
|
9483
9782
|
class ScFrequentlyAskedQuestionsComponent {
|
|
9783
|
+
/**
|
|
9784
|
+
* Инициализирует экземпляр класса {@link ScFrequentlyAskedQuestionsComponent}.
|
|
9785
|
+
*
|
|
9786
|
+
* Вопрос из якоря адреса раскрывается, а после отрисовки списка к нему выполняется прокрутка (в браузере).
|
|
9787
|
+
*/
|
|
9484
9788
|
constructor() {
|
|
9485
9789
|
/**
|
|
9486
9790
|
* {@link InputSignal} списка группы часто задаваемых вопросов.
|
|
@@ -9494,6 +9798,71 @@ class ScFrequentlyAskedQuestionsComponent {
|
|
|
9494
9798
|
* Признак, что приложение запущено на сервере.
|
|
9495
9799
|
*/
|
|
9496
9800
|
this.isServer = inject(IS_SERVER);
|
|
9801
|
+
/**
|
|
9802
|
+
* {@link WritableSignal} идентификаторов раскрытых вопросов.
|
|
9803
|
+
*/
|
|
9804
|
+
this.openedIds = signal(new Set());
|
|
9805
|
+
/**
|
|
9806
|
+
* Возвращает якорь ссылки на вопрос.
|
|
9807
|
+
*/
|
|
9808
|
+
this.getAnchor = scGetFaqQuestionAnchor;
|
|
9809
|
+
/**
|
|
9810
|
+
* Активный маршрут.
|
|
9811
|
+
*/
|
|
9812
|
+
this.route = inject(ActivatedRoute);
|
|
9813
|
+
/**
|
|
9814
|
+
* {@link Signal} ссылок на заголовки вопросов.
|
|
9815
|
+
*/
|
|
9816
|
+
this.questionHeaders = viewChildren('questionHeader');
|
|
9817
|
+
const questionId = scGetFaqQuestionIdFromAnchor(this.route.snapshot.fragment);
|
|
9818
|
+
if (questionId === null) {
|
|
9819
|
+
return;
|
|
9820
|
+
}
|
|
9821
|
+
this.onOpenedChange(questionId, true);
|
|
9822
|
+
if (!this.isServer) {
|
|
9823
|
+
afterNextRender(() => {
|
|
9824
|
+
this.getQuestionHeader(questionId)?.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
9825
|
+
});
|
|
9826
|
+
}
|
|
9827
|
+
}
|
|
9828
|
+
/**
|
|
9829
|
+
* Возвращает параметры формирования ссылки на вопрос: текущая страница с её query-параметрами и якорем вопроса.
|
|
9830
|
+
*
|
|
9831
|
+
* @param questionId Идентификатор вопроса.
|
|
9832
|
+
*/
|
|
9833
|
+
getShareLinkOptions(questionId) {
|
|
9834
|
+
return {
|
|
9835
|
+
relativeTo: this.route,
|
|
9836
|
+
queryParamsHandling: 'preserve',
|
|
9837
|
+
fragment: scGetFaqQuestionAnchor(questionId),
|
|
9838
|
+
};
|
|
9839
|
+
}
|
|
9840
|
+
/**
|
|
9841
|
+
* Обработчик изменения состояния раскрытия вопроса.
|
|
9842
|
+
*
|
|
9843
|
+
* @param questionId Идентификатор вопроса.
|
|
9844
|
+
* @param opened Признак, что вопрос раскрыт.
|
|
9845
|
+
*/
|
|
9846
|
+
onOpenedChange(questionId, opened) {
|
|
9847
|
+
this.openedIds.update((ids) => {
|
|
9848
|
+
const nextIds = new Set(ids);
|
|
9849
|
+
if (opened) {
|
|
9850
|
+
nextIds.add(questionId);
|
|
9851
|
+
}
|
|
9852
|
+
else {
|
|
9853
|
+
nextIds.delete(questionId);
|
|
9854
|
+
}
|
|
9855
|
+
return nextIds;
|
|
9856
|
+
});
|
|
9857
|
+
}
|
|
9858
|
+
/**
|
|
9859
|
+
* Возвращает элемент заголовка вопроса.
|
|
9860
|
+
*
|
|
9861
|
+
* @param questionId Идентификатор вопроса.
|
|
9862
|
+
*/
|
|
9863
|
+
getQuestionHeader(questionId) {
|
|
9864
|
+
const anchor = scGetFaqQuestionAnchor(questionId);
|
|
9865
|
+
return this.questionHeaders().find((header) => header.nativeElement.id === anchor)?.nativeElement;
|
|
9497
9866
|
}
|
|
9498
9867
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScFrequentlyAskedQuestionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9499
9868
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScFrequentlyAskedQuestionsComponent, isStandalone: true, selector: "sc-frequently-asked-questions", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, showLoading: { classPropertyName: "showLoading", publicName: "showLoading", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [
|
|
@@ -9504,11 +9873,11 @@ class ScFrequentlyAskedQuestionsComponent {
|
|
|
9504
9873
|
size: 'l',
|
|
9505
9874
|
},
|
|
9506
9875
|
},
|
|
9507
|
-
], ngImport: i0, template: "<tui-loader\n [showLoader]=\"showLoading()\"\n [overlay]=\"true\"\n>\n <tui-accordion\n class=\"accordion\"\n [closeOthers]=\"false\"\n >\n @for (item of items(); track item.id) {\n <button\n [tuiAccordion]=\"isServer\"\n class=\"!whitespace-normal !text-body-m-bold\"\n >\n {{ item.question }}\n </button>\n <tui-expand>\n <div [innerHTML]=\"item.answer\"></div>\n </tui-expand>\n }\n </tui-accordion>\n</tui-loader>\n", styles: [".accordion{border-radius:0}.accordion,.accordion[data-size=s],.accordion[data-size=m],.accordion[data-size=l],.accordion .tui-list{font:inherit}.accordion [tuiAccordion]{border-block:1px solid var(--tui-border-normal);border-block-end-color:#fff!important;font-weight:400;border-color:var(--tui-border-normal);mask:none;block-size:auto;padding-block:.5rem;min-block-size:var(--t-size)}.accordion [tuiAccordion]._open{border-block-end-color:var(--tui-border-normal)!important}.accordion tui-expand,.accordion [tuiAccordion]{box-shadow:none;white-space:normal}\n"], dependencies: [{ kind: "component", type: i1$3.TuiAccordionComponent, selector: "tui-accordion", inputs: ["closeOthers", "size"] }, { kind: "directive", type: i1$3.TuiAccordionDirective, selector: "button[tuiAccordion]", inputs: ["tuiAccordion"], outputs: ["tuiAccordionChange"] }, { kind: "component", type: i2$5.TuiExpand, selector: "tui-expand", inputs: ["expanded"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
9876
|
+
], viewQueries: [{ propertyName: "questionHeaders", predicate: ["questionHeader"], descendants: true, isSignal: true }], ngImport: i0, template: "<tui-loader\n [showLoader]=\"showLoading()\"\n [overlay]=\"true\"\n>\n <tui-accordion\n class=\"accordion\"\n [closeOthers]=\"false\"\n >\n @for (item of items(); track item.id) {\n @let anchor = getAnchor(item.id);\n\n <button\n #questionHeader\n [id]=\"anchor\"\n [tuiAccordion]=\"isServer || openedIds().has(item.id)\"\n (tuiAccordionChange)=\"onOpenedChange(item.id, $event)\"\n class=\"!whitespace-normal !text-body-m-bold\"\n >\n <span class=\"grow\">{{ item.question }}</span>\n <sc-share-button\n appearance=\"flat\"\n size=\"s\"\n class=\"shrink-0\"\n [title]=\"item.question\"\n [routerPath]=\"[]\"\n [routerCreationOptions]=\"getShareLinkOptions(item.id)\"\n (click)=\"$event.stopPropagation()\"\n />\n </button>\n <tui-expand>\n <div [innerHTML]=\"item.answer\"></div>\n </tui-expand>\n }\n </tui-accordion>\n</tui-loader>\n", styles: [".accordion{border-radius:0}.accordion,.accordion[data-size=s],.accordion[data-size=m],.accordion[data-size=l],.accordion .tui-list{font:inherit}.accordion [tuiAccordion]{border-block:1px solid var(--tui-border-normal);border-block-end-color:#fff!important;font-weight:400;border-color:var(--tui-border-normal);mask:none;block-size:auto;padding-block:.5rem;min-block-size:var(--t-size)}.accordion [tuiAccordion]._open{border-block-end-color:var(--tui-border-normal)!important}.accordion tui-expand,.accordion [tuiAccordion]{box-shadow:none;white-space:normal}\n"], dependencies: [{ kind: "component", type: i1$3.TuiAccordionComponent, selector: "tui-accordion", inputs: ["closeOthers", "size"] }, { kind: "directive", type: i1$3.TuiAccordionDirective, selector: "button[tuiAccordion]", inputs: ["tuiAccordion"], outputs: ["tuiAccordionChange"] }, { kind: "component", type: i2$5.TuiExpand, selector: "tui-expand", inputs: ["expanded"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "component", type: ScShareButtonComponent, selector: "sc-share-button", inputs: ["title", "shareUrl", "routerPath", "routerCreationOptions", "appearance", "size", "showLabel", "expandable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
9508
9877
|
}
|
|
9509
9878
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScFrequentlyAskedQuestionsComponent, decorators: [{
|
|
9510
9879
|
type: Component,
|
|
9511
|
-
args: [{ standalone: true, selector: 'sc-frequently-asked-questions', imports: [TuiAccordion$1, TuiLoader], providers: [
|
|
9880
|
+
args: [{ standalone: true, selector: 'sc-frequently-asked-questions', imports: [TuiAccordion$1, TuiLoader, ScShareButtonComponent], providers: [
|
|
9512
9881
|
{
|
|
9513
9882
|
provide: TUI_BUTTON_OPTIONS,
|
|
9514
9883
|
useValue: {
|
|
@@ -9516,8 +9885,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
9516
9885
|
size: 'l',
|
|
9517
9886
|
},
|
|
9518
9887
|
},
|
|
9519
|
-
], host: { ngSkipHydration: 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<tui-loader\n [showLoader]=\"showLoading()\"\n [overlay]=\"true\"\n>\n <tui-accordion\n class=\"accordion\"\n [closeOthers]=\"false\"\n >\n @for (item of items(); track item.id) {\n <button\n [tuiAccordion]=\"isServer\"\n class=\"!whitespace-normal !text-body-m-bold\"\n >\n {{ item.question }}\n </button>\n <tui-expand>\n <div [innerHTML]=\"item.answer\"></div>\n </tui-expand>\n }\n </tui-accordion>\n</tui-loader>\n", styles: [".accordion{border-radius:0}.accordion,.accordion[data-size=s],.accordion[data-size=m],.accordion[data-size=l],.accordion .tui-list{font:inherit}.accordion [tuiAccordion]{border-block:1px solid var(--tui-border-normal);border-block-end-color:#fff!important;font-weight:400;border-color:var(--tui-border-normal);mask:none;block-size:auto;padding-block:.5rem;min-block-size:var(--t-size)}.accordion [tuiAccordion]._open{border-block-end-color:var(--tui-border-normal)!important}.accordion tui-expand,.accordion [tuiAccordion]{box-shadow:none;white-space:normal}\n"] }]
|
|
9520
|
-
}] });
|
|
9888
|
+
], host: { ngSkipHydration: 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<tui-loader\n [showLoader]=\"showLoading()\"\n [overlay]=\"true\"\n>\n <tui-accordion\n class=\"accordion\"\n [closeOthers]=\"false\"\n >\n @for (item of items(); track item.id) {\n @let anchor = getAnchor(item.id);\n\n <button\n #questionHeader\n [id]=\"anchor\"\n [tuiAccordion]=\"isServer || openedIds().has(item.id)\"\n (tuiAccordionChange)=\"onOpenedChange(item.id, $event)\"\n class=\"!whitespace-normal !text-body-m-bold\"\n >\n <span class=\"grow\">{{ item.question }}</span>\n <sc-share-button\n appearance=\"flat\"\n size=\"s\"\n class=\"shrink-0\"\n [title]=\"item.question\"\n [routerPath]=\"[]\"\n [routerCreationOptions]=\"getShareLinkOptions(item.id)\"\n (click)=\"$event.stopPropagation()\"\n />\n </button>\n <tui-expand>\n <div [innerHTML]=\"item.answer\"></div>\n </tui-expand>\n }\n </tui-accordion>\n</tui-loader>\n", styles: [".accordion{border-radius:0}.accordion,.accordion[data-size=s],.accordion[data-size=m],.accordion[data-size=l],.accordion .tui-list{font:inherit}.accordion [tuiAccordion]{border-block:1px solid var(--tui-border-normal);border-block-end-color:#fff!important;font-weight:400;border-color:var(--tui-border-normal);mask:none;block-size:auto;padding-block:.5rem;min-block-size:var(--t-size)}.accordion [tuiAccordion]._open{border-block-end-color:var(--tui-border-normal)!important}.accordion tui-expand,.accordion [tuiAccordion]{box-shadow:none;white-space:normal}\n"] }]
|
|
9889
|
+
}], ctorParameters: () => [] });
|
|
9521
9890
|
|
|
9522
9891
|
/**
|
|
9523
9892
|
* Возвращает query-параметры ссылки на группу часто задаваемых вопросов.
|
|
@@ -9770,7 +10139,9 @@ class ScFrequentlyAskedQuestionsWithGroupsComponent {
|
|
|
9770
10139
|
.pipe(startWith(null))), tap((data) => {
|
|
9771
10140
|
if (data) {
|
|
9772
10141
|
const pageTitle = 'Часто задаваемые вопросы - FAQ';
|
|
9773
|
-
|
|
10142
|
+
// Якорь вопроса не входит в адрес страницы.
|
|
10143
|
+
const pagePath = this.router.url.split('#')[0];
|
|
10144
|
+
this.seoService.setByDefault(pageTitle, undefined, this.schemaOrgFactory.generateForFaqPage(data.data, pagePath, pageTitle));
|
|
9774
10145
|
}
|
|
9775
10146
|
}), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
9776
10147
|
/**
|
|
@@ -11044,5 +11415,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
11044
11415
|
* Generated bundle index. Do not edit.
|
|
11045
11416
|
*/
|
|
11046
11417
|
|
|
11047
|
-
export { AbstractScPriceCard, AuthMethod, CURRENT_COUNTRY_ID, CostWithDiscountComponent, FilesAndDocumentsComponent, FilesAndDocumentsModule, 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_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_USER_CITY_INFO, SC_USER_INFO, SC_USER_PROVIDERS, SC_VERIFICATION_CODE_TIMEOUT, ScAccordionComponent, ScAccordionContentDirective, ScAccordionModule, ScAddContactDialogComponent, ScAddContragentBankAccountsDialogComponent, ScAddContragentDialogComponent, ScAddDeliveryAddressDialogComponent, ScAddOrEditingCartItemDialogComponent, ScAddOrEditingCartItemFormComponent, ScAddressesSelectionFieldComponent, ScAuthModule, ScBannerComponent, ScBannerModule, ScBrandsListComponent, ScBrandsListModule, ScCartAddProductsFromCsvDialogComponent, ScCatalogFilterCollapsibleComponent, ScCatalogFiltersComponent, ScCatalogModule, ScCategoryCardComponent, ScContactsAccordionComponent, ScContactsModule, ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScContragentsModule, ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScDeliveryAddressModule, ScDownloadPriceListComponent, ScDraftComponent, ScEmailLinkDirective, ScErrorBlockStatusComponent, ScErrorHandlerComponent, ScFavoriteButtonComponent, ScFeedbackFormComponent, ScFocusFirstInvalidFieldDirective, ScFormFieldsModule, ScFormatDatePipe, ScFrequentlyAskedQuestionsComponent, ScFrequentlyAskedQuestionsGroupSelectorComponent, ScFrequentlyAskedQuestionsWithGroupsComponent, ScGratitudeComponent, ScHelpNotificationService, ScHoverImageCarouselComponent, ScInputQuantityComponent, ScLinks, ScManagerCardComponent, ScManagerCardPushComponent, ScNewContactFormComponent, ScNewContragentBankAccountsFormComponent, ScNewContragentFormComponent, ScNewsCardComponent, ScNewsCardSkeletonComponent, ScNewsListComponent, ScNewsModule, ScNextInputFocusDirective, ScNextInputFocusModule, ScNoindexDirective, ScNoindexWrapperComponent, ScNotifyWhenInStockDialogComponent, ScOrderAccessorDirective, ScOrderDirectionItemsComponent, ScOrderFormComponent, ScOrderItemComponent, ScOrderItemsByDirection, ScOrderItemsListByDirectionsComponent, ScOrderItemsListByStockComponent, ScOrderItemsListComponent, ScOrderModule, ScPaginationLinksComponent, ScPaymentStatusComponent, ScPersonalDataProcessingPolicyComponent, ScPhoneFormatPipe, ScPreviewSampleComponent, ScPreviewSampleModule, ScPreviewSamplesMosquitoComponent, ScPriceCardComponent, ScPriceCardInlineComponent, ScPriceHistoryComponent, ScPriceListPaginationComponent, ScPriceWarehouseStockComponent, ScPrintDirective, ScPrintService, ScPrivacyPolicyComponent, ScProductInAllWarehousesPipe, ScProfileAccordionsContentComponent, ScProfileModule, ScPublicOfferComponent, ScQRCodeDialogComponent, ScQRCodeModule, ScResetUserPasswordComponent, ScResourcePreviewComponent, ScSandwichComponent, ScSandwichM2Component, ScSandwichM2SkeletonComponent, ScSandwichSkeletonComponent, ScSelectOnFocusinDirective, ScSeoTagsComponent, ScShareButtonComponent,
|
|
11418
|
+
export { AbstractScPriceCard, AuthMethod, CURRENT_COUNTRY_ID, CostWithDiscountComponent, FilesAndDocumentsComponent, FilesAndDocumentsModule, 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_USER_CITY_INFO, SC_USER_INFO, SC_USER_PROVIDERS, SC_VERIFICATION_CODE_TIMEOUT, ScAccordionComponent, ScAccordionContentDirective, ScAccordionModule, ScAddContactDialogComponent, ScAddContragentBankAccountsDialogComponent, ScAddContragentDialogComponent, ScAddDeliveryAddressDialogComponent, ScAddOrEditingCartItemDialogComponent, ScAddOrEditingCartItemFormComponent, ScAddressesSelectionFieldComponent, ScAuthModule, ScBannerComponent, ScBannerModule, ScBrandsListComponent, ScBrandsListModule, ScCartAddProductsFromCsvDialogComponent, ScCatalogFilterCollapsibleComponent, ScCatalogFiltersComponent, ScCatalogModule, ScCategoryCardComponent, ScContactsAccordionComponent, ScContactsModule, ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScContragentsModule, ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScDeliveryAddressModule, ScDownloadPriceListComponent, ScDraftComponent, ScEmailLinkDirective, ScErrorBlockStatusComponent, ScErrorHandlerComponent, ScFavoriteButtonComponent, ScFeedbackFormComponent, ScFocusFirstInvalidFieldDirective, ScFormFieldsModule, ScFormatDatePipe, ScFrequentlyAskedQuestionsComponent, ScFrequentlyAskedQuestionsGroupSelectorComponent, ScFrequentlyAskedQuestionsWithGroupsComponent, ScGratitudeComponent, ScHelpNotificationService, ScHoverImageCarouselComponent, ScInputQuantityComponent, ScLinks, ScManagerCardComponent, ScManagerCardPushComponent, ScNewContactFormComponent, ScNewContragentBankAccountsFormComponent, ScNewContragentFormComponent, ScNewsCardComponent, ScNewsCardSkeletonComponent, ScNewsListComponent, ScNewsModule, ScNextInputFocusDirective, ScNextInputFocusModule, ScNoindexDirective, ScNoindexWrapperComponent, ScNotifyWhenInStockDialogComponent, ScOrderAccessorDirective, ScOrderDirectionItemsComponent, ScOrderFormComponent, ScOrderItemComponent, ScOrderItemsByDirection, ScOrderItemsListByDirectionsComponent, ScOrderItemsListByStockComponent, ScOrderItemsListComponent, ScOrderModule, ScPaginationLinksComponent, ScPaymentStatusComponent, ScPersonalDataProcessingPolicyComponent, ScPhoneFormatPipe, ScPreviewSampleComponent, ScPreviewSampleModule, ScPreviewSamplesMosquitoComponent, ScPriceCardComponent, ScPriceCardInlineComponent, ScPriceHistoryComponent, ScPriceListPaginationComponent, ScPriceWarehouseStockComponent, ScPrintDirective, ScPrintService, ScPrivacyPolicyComponent, ScProductInAllWarehousesPipe, ScProfileAccordionsContentComponent, ScProfileModule, ScPublicOfferComponent, ScQRCodeDialogComponent, ScQRCodeModule, ScResetUserPasswordComponent, ScResourcePreviewComponent, ScSandwichComponent, ScSandwichM2Component, ScSandwichM2SkeletonComponent, ScSandwichSkeletonComponent, ScSelectOnFocusinDirective, ScSeoTagsComponent, ScShareButtonComponent, ScShareDialogComponent, ScShareMessengersLinksComponent, ScShareService, ScSignInFormByEmailComponent, ScSignInFormByPhoneComponent, ScSignInFormComponent, ScSignUpFormComponent, ScSimpleSignUpFormComponent, ScSuggestionFieldComponent, ScTelLinkDirective, ScTerminalLinkDirective, ScUpdateUserInfoDialogComponent, ScUserManagersComponent, ScUserModule, ScUserPhoneApproveDialogComponent, ScVerificationModule, ScVerificationPhoneCheckFormComponent, TreeDirective, TreeIconService, TreeLoaderService, TreeTopDirective, cleanupRecaptchaArtifacts, phoneValidator, scAtLeastOneRequiredValidator, scBicValidator, scClientUiIconsName, scCorrespondentAccountValidator, scGetCurrentRoute, scGetFaqGroupQueryParams, scGetFaqQuestionAnchor, scGetFaqQuestionIdFromAnchor, scPasswordConfirmMatchingValidator, stepValidator, tuiDateValueTransformerDefaultProvider };
|
|
11048
11419
|
//# sourceMappingURL=snabcentr-client-ui.mjs.map
|