@snabcentr/client-ui 4.13.0 → 4.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/catalog/catalog-filters/sc-catalog-filters.component.d.ts +7 -0
- package/esm2022/catalog/catalog-filters/sc-catalog-filters.component.mjs +18 -2
- 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 +450 -63
- 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';
|
|
@@ -5691,7 +5691,7 @@ class ScCatalogFiltersComponent {
|
|
|
5691
5691
|
* {@link Observable} фильтров категории.
|
|
5692
5692
|
*/
|
|
5693
5693
|
this.filters = toSignal(inject(SC_CATEGORY_INFO).pipe(catchError(() => EMPTY), filter(tuiIsPresent), switchMap((category) => this.catalogFilterService.getFilters$(this.idOrSlugPipe.transform(category), this.isRecursively)), filter(tuiIsPresent), map((filters) => filters
|
|
5694
|
-
.filter((item) =>
|
|
5694
|
+
.filter((item) => this.isRenderableFilter(item))
|
|
5695
5695
|
.map((item) => (item.type === 'checkbox' ? { ...item, values: [...item.values].sort((a, b) => a.label.localeCompare(b.label)) } : item))), tap((filters) => {
|
|
5696
5696
|
this.updateFormControls(filters);
|
|
5697
5697
|
}), share()));
|
|
@@ -5708,6 +5708,22 @@ class ScCatalogFiltersComponent {
|
|
|
5708
5708
|
this.resetAllFilters(false);
|
|
5709
5709
|
});
|
|
5710
5710
|
}
|
|
5711
|
+
/**
|
|
5712
|
+
* Проверяет, что фильтр пригоден для вывода: у checkbox есть непустой список значений, у range заданы разные границы.
|
|
5713
|
+
* Некорректные фильтры из ответа API пропускаются, чтобы не ломать вывод остальных.
|
|
5714
|
+
*
|
|
5715
|
+
* @param item Фильтр каталога.
|
|
5716
|
+
*/
|
|
5717
|
+
isRenderableFilter(item) {
|
|
5718
|
+
switch (item.type) {
|
|
5719
|
+
case 'checkbox':
|
|
5720
|
+
return Array.isArray(item.values) && item.values.length > 0;
|
|
5721
|
+
case 'range':
|
|
5722
|
+
return !isNil(item.min) && !isNil(item.max) && item.min !== item.max;
|
|
5723
|
+
default:
|
|
5724
|
+
return true;
|
|
5725
|
+
}
|
|
5726
|
+
}
|
|
5711
5727
|
/**
|
|
5712
5728
|
* Обновляет состав контролов формы на основе переданных фильтров.
|
|
5713
5729
|
*
|
|
@@ -8101,68 +8117,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
8101
8117
|
args: ['class.is_mobile']
|
|
8102
8118
|
}] } });
|
|
8103
8119
|
|
|
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
8120
|
/**
|
|
8154
8121
|
* Модуль работы с новостями.
|
|
8155
8122
|
*/
|
|
8156
8123
|
class ScNewsModule {
|
|
8157
8124
|
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
|
|
8125
|
+
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] }); }
|
|
8126
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScNewsModule, imports: [CommonModule, RouterModule] }); }
|
|
8160
8127
|
}
|
|
8161
8128
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScNewsModule, decorators: [{
|
|
8162
8129
|
type: NgModule,
|
|
8163
8130
|
args: [{
|
|
8164
8131
|
declarations: [ScNewsCardComponent, ScNewsCardSkeletonComponent],
|
|
8165
|
-
imports: [CommonModule, RouterModule,
|
|
8132
|
+
imports: [CommonModule, RouterModule, ScFormatDatePipe, ScMediaImageTransformerPipe],
|
|
8166
8133
|
exports: [ScNewsCardComponent, ScNewsCardSkeletonComponent],
|
|
8167
8134
|
}]
|
|
8168
8135
|
}] });
|
|
@@ -9477,10 +9444,363 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
9477
9444
|
*/
|
|
9478
9445
|
const SC_FAQ_GROUP_QUERY_PARAM = 'group';
|
|
9479
9446
|
|
|
9447
|
+
/**
|
|
9448
|
+
* Префикс якоря (fragment) ссылки на конкретный вопрос.
|
|
9449
|
+
*/
|
|
9450
|
+
const SC_FAQ_QUESTION_ANCHOR_PREFIX = 'question-';
|
|
9451
|
+
/**
|
|
9452
|
+
* Возвращает якорь (fragment) ссылки на вопрос.
|
|
9453
|
+
*
|
|
9454
|
+
* @param questionId Идентификатор вопроса.
|
|
9455
|
+
*/
|
|
9456
|
+
const scGetFaqQuestionAnchor = (questionId) => `${SC_FAQ_QUESTION_ANCHOR_PREFIX}${questionId}`;
|
|
9457
|
+
/**
|
|
9458
|
+
* Возвращает идентификатор вопроса из якоря (fragment) ссылки или `null`, если якорь не ссылается на вопрос.
|
|
9459
|
+
*
|
|
9460
|
+
* @param fragment Якорь (fragment) адреса.
|
|
9461
|
+
*/
|
|
9462
|
+
const scGetFaqQuestionIdFromAnchor = (fragment) => {
|
|
9463
|
+
if (!fragment?.startsWith(SC_FAQ_QUESTION_ANCHOR_PREFIX)) {
|
|
9464
|
+
return null;
|
|
9465
|
+
}
|
|
9466
|
+
const questionId = Number(fragment.slice(SC_FAQ_QUESTION_ANCHOR_PREFIX.length));
|
|
9467
|
+
return Number.isInteger(questionId) && questionId > 0 ? questionId : null;
|
|
9468
|
+
};
|
|
9469
|
+
|
|
9470
|
+
/**
|
|
9471
|
+
* Диалоговое окно "Поделиться": варианты, как поделиться ссылкой.
|
|
9472
|
+
*
|
|
9473
|
+
* На терминале вместо вариантов отображается только QR-код ссылки.
|
|
9474
|
+
*/
|
|
9475
|
+
class ScShareDialogComponent {
|
|
9476
|
+
constructor() {
|
|
9477
|
+
/**
|
|
9478
|
+
* Провайдер данных о терминале.
|
|
9479
|
+
*/
|
|
9480
|
+
this.terminal = inject(IS_RUNNING_ON_TERMINAL);
|
|
9481
|
+
/**
|
|
9482
|
+
* Контекст диалогового окна, в котором открыт компонент.
|
|
9483
|
+
*/
|
|
9484
|
+
this.context = inject(POLYMORPHEUS_CONTEXT);
|
|
9485
|
+
/**
|
|
9486
|
+
* Ссылка на объект навигатора браузера.
|
|
9487
|
+
*/
|
|
9488
|
+
this.navigator = inject(WA_NAVIGATOR);
|
|
9489
|
+
/**
|
|
9490
|
+
* Ссылка на объект окна браузера.
|
|
9491
|
+
*/
|
|
9492
|
+
this.window = inject(WA_WINDOW);
|
|
9493
|
+
/**
|
|
9494
|
+
* Сервис уведомлений.
|
|
9495
|
+
*/
|
|
9496
|
+
this.alerts = inject(TuiAlertService);
|
|
9497
|
+
/**
|
|
9498
|
+
* Сервис для работы с диалоговыми окнами.
|
|
9499
|
+
*/
|
|
9500
|
+
this.dialog = inject(TuiDialogService);
|
|
9501
|
+
/**
|
|
9502
|
+
* Сервис для сбора метрик о действиях пользователей.
|
|
9503
|
+
*/
|
|
9504
|
+
this.userMetrikaService = inject(ScUserMetrikaService);
|
|
9505
|
+
/**
|
|
9506
|
+
* {@link Signal} формата отображения вариантов: в строку на широких экранах, списком на узких.
|
|
9507
|
+
*/
|
|
9508
|
+
this.viewMode = toSignal(inject(IS_SERVER) ? of('list') : inject(TUI_WINDOW_SIZE).pipe(map((rect) => (rect.width > 768 ? 'row' : 'list'))), { initialValue: 'list' });
|
|
9509
|
+
/**
|
|
9510
|
+
* Заголовок ссылки, которой необходимо поделиться.
|
|
9511
|
+
*/
|
|
9512
|
+
this.title = this.context.data.title;
|
|
9513
|
+
/**
|
|
9514
|
+
* Ссылка, которой необходимо поделиться.
|
|
9515
|
+
*/
|
|
9516
|
+
this.shareUrl = this.context.data.shareUrl;
|
|
9517
|
+
/**
|
|
9518
|
+
* Ссылка отправки по Email.
|
|
9519
|
+
*/
|
|
9520
|
+
this.emailLink = `mailto:?subject=${encodeURIComponent(['ООО Снабцентр', this.title].filter(Boolean).join(' - '))}&body=${encodeURIComponent(this.shareUrl)}`;
|
|
9521
|
+
/**
|
|
9522
|
+
* Ссылка отправки во ВКонтакте.
|
|
9523
|
+
*/
|
|
9524
|
+
this.vkLink = `https://vk.com/share.php?url=${encodeURIComponent(this.shareUrl)}`;
|
|
9525
|
+
/**
|
|
9526
|
+
* Ссылка отправки в Telegram.
|
|
9527
|
+
*/
|
|
9528
|
+
this.telegramLink = `https://t.me/share/url?url=${encodeURIComponent(this.shareUrl)}`;
|
|
9529
|
+
}
|
|
9530
|
+
/** @inheritDoc */
|
|
9531
|
+
ngOnInit() {
|
|
9532
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
9533
|
+
target: ScUserMetrikaGoalsEnum.shareShow,
|
|
9534
|
+
});
|
|
9535
|
+
}
|
|
9536
|
+
/**
|
|
9537
|
+
* Открывает окно перехода в социальную сеть.
|
|
9538
|
+
*
|
|
9539
|
+
* @param shareLink Ссылка перехода в социальную сеть.
|
|
9540
|
+
* @param socialMedia Slug социальной сети.
|
|
9541
|
+
*/
|
|
9542
|
+
openShareWindow(shareLink, socialMedia) {
|
|
9543
|
+
this.emitShareClick(socialMedia);
|
|
9544
|
+
this.window.open(shareLink, 'sharer', 'status=0,toolbar=0,width=650,height=500');
|
|
9545
|
+
}
|
|
9546
|
+
/**
|
|
9547
|
+
* Копирует ссылку в буфер обмена.
|
|
9548
|
+
*/
|
|
9549
|
+
copyShareLink() {
|
|
9550
|
+
this.emitShareClick('copy_to_clipboard');
|
|
9551
|
+
this.navigator.clipboard.writeText(this.shareUrl).catch(noop);
|
|
9552
|
+
this.alerts.open('Ссылка скопирована в буфер обмена.', { appearance: 'positive' }).subscribe();
|
|
9553
|
+
}
|
|
9554
|
+
/**
|
|
9555
|
+
* Открывает диалоговое окно с QR-кодом ссылки.
|
|
9556
|
+
*/
|
|
9557
|
+
showQRCode() {
|
|
9558
|
+
this.emitShareClick('qr');
|
|
9559
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
9560
|
+
target: ScUserMetrikaGoalsEnum.qrShow,
|
|
9561
|
+
});
|
|
9562
|
+
this.dialog
|
|
9563
|
+
.open(new PolymorpheusComponent(ScQRCodeDialogComponent), {
|
|
9564
|
+
size: 's',
|
|
9565
|
+
label: this.title || 'QR-код',
|
|
9566
|
+
data: { qrdata: this.shareUrl },
|
|
9567
|
+
})
|
|
9568
|
+
.subscribe();
|
|
9569
|
+
}
|
|
9570
|
+
/**
|
|
9571
|
+
* Отправляет метрику выбора варианта "Поделиться".
|
|
9572
|
+
*
|
|
9573
|
+
* @param shareLinkName Наименование варианта.
|
|
9574
|
+
*/
|
|
9575
|
+
emitShareClick(shareLinkName) {
|
|
9576
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
9577
|
+
target: ScUserMetrikaGoalsEnum.shareClick,
|
|
9578
|
+
params: {
|
|
9579
|
+
share_link_name: shareLinkName,
|
|
9580
|
+
},
|
|
9581
|
+
});
|
|
9582
|
+
}
|
|
9583
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9584
|
+
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 }); }
|
|
9585
|
+
}
|
|
9586
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareDialogComponent, decorators: [{
|
|
9587
|
+
type: Component,
|
|
9588
|
+
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"] }]
|
|
9589
|
+
}] });
|
|
9590
|
+
|
|
9591
|
+
/**
|
|
9592
|
+
* Сервис открытия диалогового окна "Поделиться".
|
|
9593
|
+
*/
|
|
9594
|
+
class ScShareService {
|
|
9595
|
+
constructor() {
|
|
9596
|
+
/**
|
|
9597
|
+
* Сервис для работы с диалоговыми окнами.
|
|
9598
|
+
*/
|
|
9599
|
+
this.dialog = inject(TuiDialogService);
|
|
9600
|
+
}
|
|
9601
|
+
/**
|
|
9602
|
+
* Открывает диалоговое окно "Поделиться".
|
|
9603
|
+
*
|
|
9604
|
+
* @param title Заголовок ссылки, которой необходимо поделиться.
|
|
9605
|
+
* @param shareUrl Абсолютная ссылка, которой необходимо поделиться.
|
|
9606
|
+
*/
|
|
9607
|
+
openShareDialog(title, shareUrl) {
|
|
9608
|
+
this.dialog
|
|
9609
|
+
.open(new PolymorpheusComponent(ScShareDialogComponent), {
|
|
9610
|
+
size: 'auto',
|
|
9611
|
+
label: 'Поделиться',
|
|
9612
|
+
data: { title, shareUrl },
|
|
9613
|
+
})
|
|
9614
|
+
.subscribe();
|
|
9615
|
+
}
|
|
9616
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
9617
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareService, providedIn: 'root' }); }
|
|
9618
|
+
}
|
|
9619
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareService, decorators: [{
|
|
9620
|
+
type: Injectable,
|
|
9621
|
+
args: [{
|
|
9622
|
+
providedIn: 'root',
|
|
9623
|
+
}]
|
|
9624
|
+
}] });
|
|
9625
|
+
|
|
9626
|
+
/**
|
|
9627
|
+
* Кнопка "Поделиться": открывает диалоговое окно с вариантами, как поделиться ссылкой.
|
|
9628
|
+
*
|
|
9629
|
+
* Ссылка формируется из {@link routerPath} относительно маршрутизации приложения, либо берётся из {@link shareUrl},
|
|
9630
|
+
* а если не задано ни то, ни другое - используется адрес текущей страницы.
|
|
9631
|
+
*/
|
|
9632
|
+
class ScShareButtonComponent {
|
|
9633
|
+
constructor() {
|
|
9634
|
+
/**
|
|
9635
|
+
* {@link InputSignal} заголовка ссылки, которой необходимо поделиться.
|
|
9636
|
+
*/
|
|
9637
|
+
this.title = input('');
|
|
9638
|
+
/**
|
|
9639
|
+
* {@link InputSignal} ссылки, которой необходимо поделиться (абсолютной или относительно корня сайта).
|
|
9640
|
+
*/
|
|
9641
|
+
this.shareUrl = input();
|
|
9642
|
+
/**
|
|
9643
|
+
* {@link InputSignal} команд маршрутизатора, из которых формируется ссылка относительно маршрутизации приложения.
|
|
9644
|
+
*/
|
|
9645
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9646
|
+
this.routerPath = input();
|
|
9647
|
+
/**
|
|
9648
|
+
* {@link InputSignal} параметров формирования ссылки из {@link routerPath}.
|
|
9649
|
+
*/
|
|
9650
|
+
this.routerCreationOptions = input();
|
|
9651
|
+
/**
|
|
9652
|
+
* {@link InputSignal} формата внешнего вида кнопки.
|
|
9653
|
+
*/
|
|
9654
|
+
this.appearance = input('secondary');
|
|
9655
|
+
/**
|
|
9656
|
+
* {@link InputSignal} размера кнопки.
|
|
9657
|
+
*/
|
|
9658
|
+
this.size = input('m');
|
|
9659
|
+
/**
|
|
9660
|
+
* {@link InputSignal} признака, что подпись "Поделиться" отображается постоянно.
|
|
9661
|
+
*/
|
|
9662
|
+
this.showLabel = input(false);
|
|
9663
|
+
/**
|
|
9664
|
+
* {@link InputSignal} признака, что кнопка раскрывается с появлением подписи "Поделиться" при наведении.
|
|
9665
|
+
*/
|
|
9666
|
+
this.expandable = input(false);
|
|
9667
|
+
/**
|
|
9668
|
+
* Ссылка на объект документа.
|
|
9669
|
+
*/
|
|
9670
|
+
this.document = inject(DOCUMENT);
|
|
9671
|
+
/**
|
|
9672
|
+
* Сервис маршрутизации.
|
|
9673
|
+
*/
|
|
9674
|
+
this.router = inject(Router);
|
|
9675
|
+
/**
|
|
9676
|
+
* Сервис открытия диалогового окна "Поделиться".
|
|
9677
|
+
*/
|
|
9678
|
+
this.shareService = inject(ScShareService);
|
|
9679
|
+
/**
|
|
9680
|
+
* {@link Signal} ссылки, которой необходимо поделиться, заданной через входные параметры.
|
|
9681
|
+
*/
|
|
9682
|
+
this.href = computed(() => {
|
|
9683
|
+
const routerPath = this.routerPath();
|
|
9684
|
+
const url = routerPath ? this.router.createUrlTree(routerPath, this.routerCreationOptions()).toString() : this.shareUrl();
|
|
9685
|
+
return url ? decodeURIComponent(url) : undefined;
|
|
9686
|
+
});
|
|
9687
|
+
}
|
|
9688
|
+
/**
|
|
9689
|
+
* Возвращает адрес текущей страницы.
|
|
9690
|
+
*/
|
|
9691
|
+
get currentUrl() {
|
|
9692
|
+
return decodeURIComponent(this.router.url);
|
|
9693
|
+
}
|
|
9694
|
+
/**
|
|
9695
|
+
* Обработчик нажатия на кнопку: открывает диалоговое окно "Поделиться".
|
|
9696
|
+
*
|
|
9697
|
+
* @param event Событие нажатия.
|
|
9698
|
+
*/
|
|
9699
|
+
openShareDialog(event) {
|
|
9700
|
+
event.preventDefault();
|
|
9701
|
+
this.shareService.openShareDialog(this.title(), this.getAbsoluteUrl(this.href() ?? this.currentUrl));
|
|
9702
|
+
}
|
|
9703
|
+
/**
|
|
9704
|
+
* Возвращает абсолютную ссылку.
|
|
9705
|
+
*
|
|
9706
|
+
* @param url Абсолютная ссылка или ссылка относительно корня сайта.
|
|
9707
|
+
*/
|
|
9708
|
+
getAbsoluteUrl(url) {
|
|
9709
|
+
return /^https?:\/\//.test(url) ? url : `${this.document.location.origin}${url}`;
|
|
9710
|
+
}
|
|
9711
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9712
|
+
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 }); }
|
|
9713
|
+
}
|
|
9714
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareButtonComponent, decorators: [{
|
|
9715
|
+
type: Component,
|
|
9716
|
+
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"] }]
|
|
9717
|
+
}] });
|
|
9718
|
+
|
|
9719
|
+
/**
|
|
9720
|
+
* Ссылки на мессенджеры контакта по номеру телефона.
|
|
9721
|
+
*
|
|
9722
|
+
* На терминале вместо перехода в мессенджер отображается QR-код ссылки.
|
|
9723
|
+
*/
|
|
9724
|
+
class ScShareMessengersLinksComponent {
|
|
9725
|
+
constructor() {
|
|
9726
|
+
/**
|
|
9727
|
+
* {@link InputSignal} телефона контакта.
|
|
9728
|
+
*/
|
|
9729
|
+
this.phone = input.required();
|
|
9730
|
+
/**
|
|
9731
|
+
* {@link InputSignal} размера кнопок.
|
|
9732
|
+
*/
|
|
9733
|
+
this.size = input('s');
|
|
9734
|
+
/**
|
|
9735
|
+
* Сервис для сбора метрик о действиях пользователей.
|
|
9736
|
+
*/
|
|
9737
|
+
this.userMetrikaService = inject(ScUserMetrikaService);
|
|
9738
|
+
/**
|
|
9739
|
+
* Ссылка на объект окна браузера.
|
|
9740
|
+
*/
|
|
9741
|
+
this.window = inject(WA_WINDOW);
|
|
9742
|
+
/**
|
|
9743
|
+
* Провайдер данных о терминале.
|
|
9744
|
+
*/
|
|
9745
|
+
this.terminal = inject(IS_RUNNING_ON_TERMINAL);
|
|
9746
|
+
/**
|
|
9747
|
+
* Сервис для работы с диалоговыми окнами.
|
|
9748
|
+
*/
|
|
9749
|
+
this.dialog = inject(TuiDialogService);
|
|
9750
|
+
}
|
|
9751
|
+
/**
|
|
9752
|
+
* Открывает окно перехода в мессенджер.
|
|
9753
|
+
*
|
|
9754
|
+
* @param shareLink Ссылка перехода в мессенджер.
|
|
9755
|
+
* @param socialMedia Slug мессенджера.
|
|
9756
|
+
*/
|
|
9757
|
+
openShareWindow(shareLink, socialMedia) {
|
|
9758
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
9759
|
+
target: ScUserMetrikaGoalsEnum.shareClick,
|
|
9760
|
+
params: {
|
|
9761
|
+
share_link_name: socialMedia,
|
|
9762
|
+
phone: this.phone(),
|
|
9763
|
+
},
|
|
9764
|
+
});
|
|
9765
|
+
if (this.terminal.isRunningOnTerminal) {
|
|
9766
|
+
this.dialog
|
|
9767
|
+
.open(new PolymorpheusComponent(ScQRCodeDialogComponent), {
|
|
9768
|
+
size: 's',
|
|
9769
|
+
label: socialMedia,
|
|
9770
|
+
data: { qrdata: shareLink },
|
|
9771
|
+
})
|
|
9772
|
+
.subscribe();
|
|
9773
|
+
}
|
|
9774
|
+
else {
|
|
9775
|
+
this.window.open(shareLink, 'sharer', 'status=0,toolbar=0,width=650,height=500');
|
|
9776
|
+
}
|
|
9777
|
+
}
|
|
9778
|
+
/**
|
|
9779
|
+
* Проверяет, что номер телефона подходит для использования в мессенджерах.
|
|
9780
|
+
*
|
|
9781
|
+
* @param value Номер телефона.
|
|
9782
|
+
*/
|
|
9783
|
+
// eslint-disable-next-line class-methods-use-this
|
|
9784
|
+
isValidPhoneNumberForMessenger(value) {
|
|
9785
|
+
return ScPhoneService.isValidPhoneNumberForMessenger(value);
|
|
9786
|
+
}
|
|
9787
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareMessengersLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9788
|
+
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 }); }
|
|
9789
|
+
}
|
|
9790
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareMessengersLinksComponent, decorators: [{
|
|
9791
|
+
type: Component,
|
|
9792
|
+
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" }]
|
|
9793
|
+
}] });
|
|
9794
|
+
|
|
9480
9795
|
/**
|
|
9481
9796
|
* Компонент часто задаваемых вопросов.
|
|
9482
9797
|
*/
|
|
9483
9798
|
class ScFrequentlyAskedQuestionsComponent {
|
|
9799
|
+
/**
|
|
9800
|
+
* Инициализирует экземпляр класса {@link ScFrequentlyAskedQuestionsComponent}.
|
|
9801
|
+
*
|
|
9802
|
+
* Вопрос из якоря адреса раскрывается, а после отрисовки списка к нему выполняется прокрутка (в браузере).
|
|
9803
|
+
*/
|
|
9484
9804
|
constructor() {
|
|
9485
9805
|
/**
|
|
9486
9806
|
* {@link InputSignal} списка группы часто задаваемых вопросов.
|
|
@@ -9494,6 +9814,71 @@ class ScFrequentlyAskedQuestionsComponent {
|
|
|
9494
9814
|
* Признак, что приложение запущено на сервере.
|
|
9495
9815
|
*/
|
|
9496
9816
|
this.isServer = inject(IS_SERVER);
|
|
9817
|
+
/**
|
|
9818
|
+
* {@link WritableSignal} идентификаторов раскрытых вопросов.
|
|
9819
|
+
*/
|
|
9820
|
+
this.openedIds = signal(new Set());
|
|
9821
|
+
/**
|
|
9822
|
+
* Возвращает якорь ссылки на вопрос.
|
|
9823
|
+
*/
|
|
9824
|
+
this.getAnchor = scGetFaqQuestionAnchor;
|
|
9825
|
+
/**
|
|
9826
|
+
* Активный маршрут.
|
|
9827
|
+
*/
|
|
9828
|
+
this.route = inject(ActivatedRoute);
|
|
9829
|
+
/**
|
|
9830
|
+
* {@link Signal} ссылок на заголовки вопросов.
|
|
9831
|
+
*/
|
|
9832
|
+
this.questionHeaders = viewChildren('questionHeader');
|
|
9833
|
+
const questionId = scGetFaqQuestionIdFromAnchor(this.route.snapshot.fragment);
|
|
9834
|
+
if (questionId === null) {
|
|
9835
|
+
return;
|
|
9836
|
+
}
|
|
9837
|
+
this.onOpenedChange(questionId, true);
|
|
9838
|
+
if (!this.isServer) {
|
|
9839
|
+
afterNextRender(() => {
|
|
9840
|
+
this.getQuestionHeader(questionId)?.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
9841
|
+
});
|
|
9842
|
+
}
|
|
9843
|
+
}
|
|
9844
|
+
/**
|
|
9845
|
+
* Возвращает параметры формирования ссылки на вопрос: текущая страница с её query-параметрами и якорем вопроса.
|
|
9846
|
+
*
|
|
9847
|
+
* @param questionId Идентификатор вопроса.
|
|
9848
|
+
*/
|
|
9849
|
+
getShareLinkOptions(questionId) {
|
|
9850
|
+
return {
|
|
9851
|
+
relativeTo: this.route,
|
|
9852
|
+
queryParamsHandling: 'preserve',
|
|
9853
|
+
fragment: scGetFaqQuestionAnchor(questionId),
|
|
9854
|
+
};
|
|
9855
|
+
}
|
|
9856
|
+
/**
|
|
9857
|
+
* Обработчик изменения состояния раскрытия вопроса.
|
|
9858
|
+
*
|
|
9859
|
+
* @param questionId Идентификатор вопроса.
|
|
9860
|
+
* @param opened Признак, что вопрос раскрыт.
|
|
9861
|
+
*/
|
|
9862
|
+
onOpenedChange(questionId, opened) {
|
|
9863
|
+
this.openedIds.update((ids) => {
|
|
9864
|
+
const nextIds = new Set(ids);
|
|
9865
|
+
if (opened) {
|
|
9866
|
+
nextIds.add(questionId);
|
|
9867
|
+
}
|
|
9868
|
+
else {
|
|
9869
|
+
nextIds.delete(questionId);
|
|
9870
|
+
}
|
|
9871
|
+
return nextIds;
|
|
9872
|
+
});
|
|
9873
|
+
}
|
|
9874
|
+
/**
|
|
9875
|
+
* Возвращает элемент заголовка вопроса.
|
|
9876
|
+
*
|
|
9877
|
+
* @param questionId Идентификатор вопроса.
|
|
9878
|
+
*/
|
|
9879
|
+
getQuestionHeader(questionId) {
|
|
9880
|
+
const anchor = scGetFaqQuestionAnchor(questionId);
|
|
9881
|
+
return this.questionHeaders().find((header) => header.nativeElement.id === anchor)?.nativeElement;
|
|
9497
9882
|
}
|
|
9498
9883
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScFrequentlyAskedQuestionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9499
9884
|
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 +9889,11 @@ class ScFrequentlyAskedQuestionsComponent {
|
|
|
9504
9889
|
size: 'l',
|
|
9505
9890
|
},
|
|
9506
9891
|
},
|
|
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 }); }
|
|
9892
|
+
], 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
9893
|
}
|
|
9509
9894
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScFrequentlyAskedQuestionsComponent, decorators: [{
|
|
9510
9895
|
type: Component,
|
|
9511
|
-
args: [{ standalone: true, selector: 'sc-frequently-asked-questions', imports: [TuiAccordion$1, TuiLoader], providers: [
|
|
9896
|
+
args: [{ standalone: true, selector: 'sc-frequently-asked-questions', imports: [TuiAccordion$1, TuiLoader, ScShareButtonComponent], providers: [
|
|
9512
9897
|
{
|
|
9513
9898
|
provide: TUI_BUTTON_OPTIONS,
|
|
9514
9899
|
useValue: {
|
|
@@ -9516,8 +9901,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
9516
9901
|
size: 'l',
|
|
9517
9902
|
},
|
|
9518
9903
|
},
|
|
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
|
-
}] });
|
|
9904
|
+
], 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"] }]
|
|
9905
|
+
}], ctorParameters: () => [] });
|
|
9521
9906
|
|
|
9522
9907
|
/**
|
|
9523
9908
|
* Возвращает query-параметры ссылки на группу часто задаваемых вопросов.
|
|
@@ -9770,7 +10155,9 @@ class ScFrequentlyAskedQuestionsWithGroupsComponent {
|
|
|
9770
10155
|
.pipe(startWith(null))), tap((data) => {
|
|
9771
10156
|
if (data) {
|
|
9772
10157
|
const pageTitle = 'Часто задаваемые вопросы - FAQ';
|
|
9773
|
-
|
|
10158
|
+
// Якорь вопроса не входит в адрес страницы.
|
|
10159
|
+
const pagePath = this.router.url.split('#')[0];
|
|
10160
|
+
this.seoService.setByDefault(pageTitle, undefined, this.schemaOrgFactory.generateForFaqPage(data.data, pagePath, pageTitle));
|
|
9774
10161
|
}
|
|
9775
10162
|
}), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
9776
10163
|
/**
|
|
@@ -11044,5 +11431,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
11044
11431
|
* Generated bundle index. Do not edit.
|
|
11045
11432
|
*/
|
|
11046
11433
|
|
|
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,
|
|
11434
|
+
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
11435
|
//# sourceMappingURL=snabcentr-client-ui.mjs.map
|