@snabcentr/client-ui 3.40.5 → 3.41.2
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/public-api.mjs +2 -1
- package/esm2022/schemas/breadcrumb-list.interface.mjs +2 -0
- package/esm2022/schemas/index.mjs +3 -0
- package/esm2022/schemas/sc-json-ld-category/sc-json-ld-category.component.mjs +184 -0
- package/fesm2022/snabcentr-client-ui.mjs +182 -2
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/release_notes.tmp +1 -1
- package/schemas/breadcrumb-list.interface.d.ts +38 -0
- package/schemas/index.d.ts +2 -0
- package/schemas/sc-json-ld-category/sc-json-ld-category.component.d.ts +63 -0
package/esm2022/public-api.mjs
CHANGED
|
@@ -32,4 +32,5 @@ export * from './user';
|
|
|
32
32
|
export * from './validators';
|
|
33
33
|
export * from './verification';
|
|
34
34
|
export * from './profile';
|
|
35
|
-
|
|
35
|
+
export * from './schemas';
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdWlcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vYXV0aCc7XG5leHBvcnQgKiBmcm9tICcuL2FjY29yZGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2Jhbm5lcic7XG5leHBvcnQgKiBmcm9tICcuL2NhcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXRhbG9nJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhZ2VudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250YWN0cyc7XG5leHBvcnQgKiBmcm9tICcuL2RlbGl2ZXJ5LWFkZHJlc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsb2dzJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9yLWhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlcyc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tZmllbGRzJztcbmV4cG9ydCAqIGZyb20gJy4vaWNvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9icmFuZHMtbGlzdCc7XG5leHBvcnQgKiBmcm9tICcuL25ld3MnO1xuZXhwb3J0ICogZnJvbSAnLi9vcmRlcic7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYW1wbGVzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vZmVlZGJhY2snO1xuZXhwb3J0ICogZnJvbSAnLi9xcmNvZGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zaGFyZS1idXR0b24nO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyJztcbmV4cG9ydCAqIGZyb20gJy4vdmFsaWRhdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3ZlcmlmaWNhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3Byb2ZpbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWFzJztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1saXN0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zY2hlbWFzL2JyZWFkY3J1bWItbGlzdC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog0JjQvdGC0LXRgNGE0LXQudGBINC00LvRjyDRgdGC0YDRg9C60YLRg9GA0LjRgNC+0LLQsNC90L3Ri9GFINC00LDQvdC90YvRhSDRhdC70LXQsdC90YvRhSDQutGA0L7RiNC10Log0YHQvtCz0LvQsNGB0L3QviBTY2hlbWEub3JnLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9zY2hlbWEub3JnL0JyZWFkY3J1bWJMaXN0XG4gKlxuICog0JvQvtC60LDQu9GM0L3Ri9C5INC40L3RgtC10YDRhNC10LnRgSDQtNC70Y8gQnJlYWRjcnVtYkxpc3QsINGH0YLQvtCx0Ysg0LjQt9Cx0LXQttCw0YLRjCDQvtGI0LjQsdC60LggVFM0MDI5INGBINGN0LrRgdC/0L7RgNGC0L7QvCDRgtC40L/QvtCyLlxuICog0JjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPIEpTT04tTEQg0YDQsNC30LzQtdGC0LrQuCDQvdCw0LLQuNCz0LDRhtC40L7QvdC90YvRhSDRhdC70LXQsdC90YvRhSDQutGA0L7RiNC10LpcbiAqINC90LAg0YHRgtGA0LDQvdC40YbQsNGFINC60LDRgtCw0LvQvtCz0LAg0YLQvtCy0LDRgNC+0LIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWRjcnVtYkxpc3Qge1xuICAgIC8qKlxuICAgICAqINCi0LjQvyDRgdGF0LXQvNGLIFNjaGVtYS5vcmcg0LTQu9GPINGF0LvQtdCx0L3Ri9GFINC60YDQvtGI0LXQui5cbiAgICAgKi9cbiAgICAnQHR5cGUnOiAnQnJlYWRjcnVtYkxpc3QnO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGN0LvQtdC80LXQvdGC0L7QsiDQvdCw0LLQuNCz0LDRhtC40LggKNGF0LvQtdCx0L3Ri9GFINC60YDQvtGI0LXQuikuXG4gICAgICog0JrQsNC20LTRi9C5INGN0LvQtdC80LXQvdGCINC/0YDQtdC00YHRgtCw0LLQu9GP0LXRgiDQvtC00LjQvSDRg9GA0L7QstC10L3RjCDQvdCw0LLQuNCz0LDRhtC40LguXG4gICAgICovXG4gICAgaXRlbUxpc3RFbGVtZW50OiBBcnJheTx7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiDQotC40L8g0Y3Qu9C10LzQtdC90YLQsCDRgdC/0LjRgdC60LAg0YHQvtCz0LvQsNGB0L3QviBTY2hlbWEub3JnLlxuICAgICAgICAgKi9cbiAgICAgICAgJ0B0eXBlJzogJ0xpc3RJdGVtJztcblxuICAgICAgICAvKipcbiAgICAgICAgICog0J/QvtC30LjRhtC40Y8g0Y3Qu9C10LzQtdC90YLQsCDQsiDRgdC/0LjRgdC60LUg0L3QsNCy0LjQs9Cw0YbQuNC4ICjQvdCw0YfQuNC90LDRjyDRgSAxKS5cbiAgICAgICAgICovXG4gICAgICAgIHBvc2l0aW9uOiBudW1iZXI7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqINCe0YLQvtCx0YDQsNC20LDQtdC80L7QtSDQvdCw0LfQstCw0L3QuNC1INGN0LvQtdC80LXQvdGC0LAg0L3QsNCy0LjQs9Cw0YbQuNC4LlxuICAgICAgICAgKi9cbiAgICAgICAgbmFtZTogc3RyaW5nO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVUkwt0LDQtNGA0LXRgSDRgdGC0YDQsNC90LjRhtGLICjQvtC/0YbQuNC+0L3QsNC70YzQvdC+KS5cbiAgICAgICAgICog0JXRgdC70Lgg0L3QtSDRg9C60LDQt9Cw0L0sINGN0LvQtdC80LXQvdGCINGB0YfQuNGC0LDQtdGC0YHRjyDQvdC10LDQutGC0LjQstC90YvQvC5cbiAgICAgICAgICovXG4gICAgICAgIGl0ZW0/OiBzdHJpbmc7XG4gICAgfT47XG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './breadcrumb-list.interface';
|
|
2
|
+
export * from './sc-json-ld-category/sc-json-ld-category.component';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvc2NoZW1hcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMscURBQXFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2JyZWFkY3J1bWItbGlzdC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1qc29uLWxkLWNhdGVnb3J5L3NjLWpzb24tbGQtY2F0ZWdvcnkuY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';
|
|
2
|
+
import { SC_COMPANY_INFO, SC_URLS, ScIdOrSlugPipe, ScJsonLdModule, ScMediaImageTransformerPipe, } from '@snabcentr/client-core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@snabcentr/client-core";
|
|
5
|
+
/**
|
|
6
|
+
* Компонент для отображения структурированных данных @see [Schema.org](https://schema.org) для страниц каталога.
|
|
7
|
+
*/
|
|
8
|
+
export class ScJsonLdCategoryComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
/**
|
|
11
|
+
* Категория товаров (обычная или виртуальная).
|
|
12
|
+
*/
|
|
13
|
+
this.category = input.required();
|
|
14
|
+
/**
|
|
15
|
+
* Список товаров.
|
|
16
|
+
*/
|
|
17
|
+
this.products = input();
|
|
18
|
+
/**
|
|
19
|
+
* Хлебные крошки.
|
|
20
|
+
*/
|
|
21
|
+
this.breadcrumbs = input();
|
|
22
|
+
/**
|
|
23
|
+
* Пайп для формирования полного URI изображения на media сервере.
|
|
24
|
+
*/
|
|
25
|
+
this.mediaImageTransformerPipe = inject(ScMediaImageTransformerPipe);
|
|
26
|
+
/**
|
|
27
|
+
* Пайп для преобразования идентификатора или slug в идентификатор.
|
|
28
|
+
*/
|
|
29
|
+
this.idOrSlugPipe = inject(ScIdOrSlugPipe);
|
|
30
|
+
/**
|
|
31
|
+
* Данные о компании.
|
|
32
|
+
*/
|
|
33
|
+
this.companyInfo = inject(SC_COMPANY_INFO);
|
|
34
|
+
/**
|
|
35
|
+
* Список ссылок приложения.
|
|
36
|
+
*/
|
|
37
|
+
this.urls = inject(SC_URLS);
|
|
38
|
+
/**
|
|
39
|
+
* Схема структурированных данных для CollectionPage.
|
|
40
|
+
*/
|
|
41
|
+
this.schema = computed(() => {
|
|
42
|
+
const category = this.category();
|
|
43
|
+
const products = this.products();
|
|
44
|
+
const breadcrumb = this.breadcrumbs();
|
|
45
|
+
return {
|
|
46
|
+
'@context': 'https://schema.org',
|
|
47
|
+
'@type': 'CollectionPage',
|
|
48
|
+
name: category.seo?.title ?? category.name,
|
|
49
|
+
description: category.seo?.description ?? category.properties?.description,
|
|
50
|
+
url: this.getCategoryUrl(category),
|
|
51
|
+
image: this.mediaImageTransformerPipe.transform(category.image, true),
|
|
52
|
+
// SEO данные.
|
|
53
|
+
...(category.seo?.keywords && { keywords: category.seo.keywords }),
|
|
54
|
+
// Основной контент страницы - список товаров и подкатегорий.
|
|
55
|
+
mainEntity: this.createMainEntity(category, products),
|
|
56
|
+
// Навигационные хлебные крошки
|
|
57
|
+
breadcrumb,
|
|
58
|
+
// Дополнительные метаданные для SEO
|
|
59
|
+
about: {
|
|
60
|
+
'@type': 'CategoryCode',
|
|
61
|
+
codeValue: category.slug,
|
|
62
|
+
name: category.name,
|
|
63
|
+
description: category.seo?.description ?? category.properties?.description,
|
|
64
|
+
},
|
|
65
|
+
// Информация о сайте
|
|
66
|
+
isPartOf: {
|
|
67
|
+
'@type': 'WebSite',
|
|
68
|
+
name: this.companyInfo.name,
|
|
69
|
+
url: this.urls.siteUrl,
|
|
70
|
+
},
|
|
71
|
+
// Связанные страницы
|
|
72
|
+
relatedLink: [`${this.urls.siteUrl}/catalog`, ...(this.isVirtualCategory(category) ? [] : [`${this.urls.siteUrl}/catalog/category${category.parentId}`])],
|
|
73
|
+
// Дополнительные изображения категории
|
|
74
|
+
additionalProperty: [
|
|
75
|
+
{
|
|
76
|
+
'@type': 'PropertyValue',
|
|
77
|
+
name: 'Количество товаров',
|
|
78
|
+
value: (products?.length ?? 0).toString(),
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
'@type': 'PropertyValue',
|
|
82
|
+
name: 'Slug категории',
|
|
83
|
+
value: category.slug,
|
|
84
|
+
},
|
|
85
|
+
// Добавляем SEO данные если есть
|
|
86
|
+
...(category.seo?.keywords
|
|
87
|
+
? [
|
|
88
|
+
{
|
|
89
|
+
'@type': 'PropertyValue',
|
|
90
|
+
name: 'SEO Keywords',
|
|
91
|
+
value: category.seo.keywords,
|
|
92
|
+
},
|
|
93
|
+
]
|
|
94
|
+
: []),
|
|
95
|
+
...(category.seo?.title
|
|
96
|
+
? [
|
|
97
|
+
{
|
|
98
|
+
'@type': 'PropertyValue',
|
|
99
|
+
name: 'SEO Title',
|
|
100
|
+
value: category.seo.title,
|
|
101
|
+
},
|
|
102
|
+
]
|
|
103
|
+
: []),
|
|
104
|
+
],
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Проверяет, является ли категория виртуальной.
|
|
110
|
+
*
|
|
111
|
+
* @param category Категория для проверки.
|
|
112
|
+
*/
|
|
113
|
+
// eslint-disable-next-line class-methods-use-this
|
|
114
|
+
isVirtualCategory(category) {
|
|
115
|
+
return 'childCategories' in category && 'productCategories' in category;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Получает URL для категории.
|
|
119
|
+
*
|
|
120
|
+
* @param category Категория для получения URL.
|
|
121
|
+
*/
|
|
122
|
+
getCategoryUrl(category) {
|
|
123
|
+
if (this.isVirtualCategory(category)) {
|
|
124
|
+
return `${this.urls.siteUrl}/catalog/virtual/${category.slug}`;
|
|
125
|
+
}
|
|
126
|
+
return `${this.urls.siteUrl}/catalog/${this.idOrSlugPipe.transform(category)}`;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Создает mainEntity для схемы.
|
|
130
|
+
*
|
|
131
|
+
* @param category Категория.
|
|
132
|
+
* @param products Список товаров.
|
|
133
|
+
*/
|
|
134
|
+
createMainEntity(category, products) {
|
|
135
|
+
const childCategories = this.isVirtualCategory(category) ? [...(category.childCategories ?? []), ...(category.productCategories ?? [])] : (category.categories ?? []);
|
|
136
|
+
return {
|
|
137
|
+
'@type': 'ItemList',
|
|
138
|
+
numberOfItems: (products?.length ?? 0) + childCategories.length,
|
|
139
|
+
itemListOrder: 'https://schema.org/ItemListUnordered',
|
|
140
|
+
itemListElement: [
|
|
141
|
+
// Добавляем подкатегории в начало списка.
|
|
142
|
+
...childCategories.slice(0, 5).map((subCategory, index) => ({
|
|
143
|
+
'@type': 'ListItem',
|
|
144
|
+
position: index + 1,
|
|
145
|
+
name: subCategory.name,
|
|
146
|
+
url: this.getCategoryUrl(subCategory),
|
|
147
|
+
image: this.mediaImageTransformerPipe.transform(subCategory.image, true),
|
|
148
|
+
description: subCategory.seo?.description ?? subCategory.properties?.description,
|
|
149
|
+
})),
|
|
150
|
+
// Добавляем товары после подкатегорий.
|
|
151
|
+
...(products?.slice(0, 10).map((product, index) => ({
|
|
152
|
+
'@type': 'ListItem',
|
|
153
|
+
position: childCategories.length + index + 1,
|
|
154
|
+
name: product.name,
|
|
155
|
+
url: `${this.urls.siteUrl}/catalog/${this.idOrSlugPipe.transform(product)}`,
|
|
156
|
+
image: this.mediaImageTransformerPipe.transform(product.image, true),
|
|
157
|
+
description: product.seo?.description ?? product.properties?.description,
|
|
158
|
+
offers: [
|
|
159
|
+
{
|
|
160
|
+
'@type': 'Offer',
|
|
161
|
+
priceCurrency: 'RUB',
|
|
162
|
+
priceValidUntil: product.discount?.expiredAt ? product.discount.expiredAt.toString() : undefined,
|
|
163
|
+
price: product.costRub,
|
|
164
|
+
mpn: product.code,
|
|
165
|
+
availability: !product.onOrder && product.stockCount?.length ? 'InStock' : 'OutOfStock',
|
|
166
|
+
seller: {
|
|
167
|
+
'@type': 'Organization',
|
|
168
|
+
name: this.companyInfo.name,
|
|
169
|
+
},
|
|
170
|
+
url: `${this.urls.siteUrl}/catalog/product/${this.idOrSlugPipe.transform(product)}`,
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
})) ?? []),
|
|
174
|
+
],
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScJsonLdCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
178
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: ScJsonLdCategoryComponent, isStandalone: true, selector: "sc-json-ld-category", inputs: { category: { classPropertyName: "category", publicName: "category", isSignal: true, isRequired: true, transformFunction: null }, products: { classPropertyName: "products", publicName: "products", isSignal: true, isRequired: false, transformFunction: null }, breadcrumbs: { classPropertyName: "breadcrumbs", publicName: "breadcrumbs", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<!-- \u0421\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u0434\u043B\u044F CollectionPage -->\n<sc-json-ld [json]=\"schema()\" />\n", dependencies: [{ kind: "ngmodule", type: ScJsonLdModule }, { kind: "component", type: i1.ScJsonLdComponent, selector: "sc-json-ld", inputs: ["json"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
179
|
+
}
|
|
180
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScJsonLdCategoryComponent, decorators: [{
|
|
181
|
+
type: Component,
|
|
182
|
+
args: [{ standalone: true, selector: 'sc-json-ld-category', imports: [ScJsonLdModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- \u0421\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u0434\u043B\u044F CollectionPage -->\n<sc-json-ld [json]=\"schema()\" />\n" }]
|
|
183
|
+
}] });
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtanNvbi1sZC1jYXRlZ29yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvc2NoZW1hcy9zYy1qc29uLWxkLWNhdGVnb3J5L3NjLWpzb24tbGQtY2F0ZWdvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3NjaGVtYXMvc2MtanNvbi1sZC1jYXRlZ29yeS9zYy1qc29uLWxkLWNhdGVnb3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUNILGVBQWUsRUFDZixPQUFPLEVBR1AsY0FBYyxFQUVkLGNBQWMsRUFDZCwyQkFBMkIsR0FHOUIsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBS2hDOztHQUVHO0FBUUgsTUFBTSxPQUFPLHlCQUF5QjtJQVB0QztRQVFJOztXQUVHO1FBQ2EsYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWtDLENBQUM7UUFFNUU7O1dBRUc7UUFDYSxhQUFRLEdBQUcsS0FBSyxFQUFlLENBQUM7UUFFaEQ7O1dBRUc7UUFDYSxnQkFBVyxHQUFHLEtBQUssRUFBa0IsQ0FBQztRQUV0RDs7V0FFRztRQUNjLDhCQUF5QixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRWpGOztXQUVHO1FBQ2MsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFdkQ7O1dBRUc7UUFDZ0IsZ0JBQVcsR0FBaUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXZGOztXQUVHO1FBQ2dCLFNBQUksR0FBWSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkQ7O1dBRUc7UUFDYSxXQUFNLEdBQXdDLFFBQVEs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QUksT0FBTyxDQUFDLFVBQVUsRUFBRSxXQUFXO29CQUN4RSxNQUFNLEVBQUU7d0JBQ0o7NEJBQ0ksT0FBTyxFQUFFLE9BQU87NEJBQ2hCLGFBQWEsRUFBRSxLQUFLOzRCQUNwQixlQUFlLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTOzRCQUNoRyxLQUFLLEVBQUUsT0FBTyxDQUFDLE9BQU87NEJBQ3RCLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSTs0QkFDakIsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZOzRCQUN2RixNQUFNLEVBQUU7Z0NBQ0osT0FBTyxFQUFFLGNBQWM7Z0NBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7NkJBQzlCOzRCQUNELEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxvQkFBb0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7eUJBQ3RGO3FCQUNKO2lCQUNKLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNiO1NBQ0osQ0FBQztJQUNOLENBQUM7K0dBbkxRLHlCQUF5QjttR0FBekIseUJBQXlCLHNlQzNCdEMsOE5BRUEsMkNEc0JjLGNBQWM7OzRGQUdmLHlCQUF5QjtrQkFQckMsU0FBUztpQ0FDTSxJQUFJLFlBQ04scUJBQXFCLFdBRXRCLENBQUMsY0FBYyxDQUFDLG1CQUNSLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIFNDX0NPTVBBTllfSU5GTyxcbiAgICBTQ19VUkxTLFxuICAgIFNjQ2F0ZWdvcnksXG4gICAgU2NJQ29tcGFueUJhc2VJbmZvLFxuICAgIFNjSWRPclNsdWdQaXBlLFxuICAgIFNjSVVybHMsXG4gICAgU2NKc29uTGRNb2R1bGUsXG4gICAgU2NNZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlLFxuICAgIFNjUHJvZHVjdCxcbiAgICBTY1ZpcnR1YWxDYXRlZ29yeSxcbn0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUGFnZSwgV2l0aENvbnRleHQgfSBmcm9tICdzY2hlbWEtZHRzJztcblxuaW1wb3J0IHsgQnJlYWRjcnVtYkxpc3QgfSBmcm9tICcuLi9icmVhZGNydW1iLWxpc3QuaW50ZXJmYWNlJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0YHRgtGA0YPQutGC0YPRgNC40YDQvtCy0LDQvdC90YvRhSDQtNCw0L3QvdGL0YUgQHNlZSBbU2NoZW1hLm9yZ10oaHR0cHM6Ly9zY2hlbWEub3JnKSDQtNC70Y8g0YHRgtGA0LDQvdC40YYg0LrQsNGC0LDQu9C+0LPQsC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLWpzb24tbGQtY2F0ZWdvcnknLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1qc29uLWxkLWNhdGVnb3J5LmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbU2NKc29uTGRNb2R1bGVdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0pzb25MZENhdGVnb3J5Q29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiDQmtCw0YLQtdCz0L7RgNC40Y8g0YLQvtCy0LDRgNC+0LIgKNC+0LHRi9GH0L3QsNGPINC40LvQuCDQstC40YDRgtGD0LDQu9GM0L3QsNGPKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY2F0ZWdvcnkgPSBpbnB1dC5yZXF1aXJlZDxTY0NhdGVnb3J5IHwgU2NWaXJ0dWFsQ2F0ZWdvcnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YLQvtCy0LDRgNC+0LIuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHByb2R1Y3RzID0gaW5wdXQ8U2NQcm9kdWN0W10+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQpdC70LXQsdC90YvQtSDQutGA0L7RiNC60LguXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGJyZWFkY3J1bWJzID0gaW5wdXQ8QnJlYWRjcnVtYkxpc3Q+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQn9Cw0LnQvyDQtNC70Y8g0YTQvtGA0LzQuNGA0L7QstCw0L3QuNGPINC/0L7Qu9C90L7Qs9C+IFVSSSDQuNC30L7QsdGA0LDQttC10L3QuNGPINC90LAgbWVkaWEg0YHQtdGA0LLQtdGA0LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlID0gaW5qZWN0KFNjTWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9Cw0LnQvyDQtNC70Y8g0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjRjyDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCwINC40LvQuCBzbHVnINCyINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGALlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaWRPclNsdWdQaXBlID0gaW5qZWN0KFNjSWRPclNsdWdQaXBlKTtcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQviDQutC+0LzQv9Cw0L3QuNC4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjb21wYW55SW5mbzogUmVhZG9ubHk8U2NJQ29tcGFueUJhc2VJbmZvPiA9IGluamVjdChTQ19DT01QQU5ZX0lORk8pO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdXJsczogU2NJVXJscyA9IGluamVjdChTQ19VUkxTKTtcblxuICAgIC8qKlxuICAgICAqINCh0YXQtdC80LAg0YHRgtGA0YPQutGC0YPRgNC40YDQvtCy0LDQvdC90YvRhSDQtNCw0L3QvdGL0YUg0LTQu9GPIENvbGxlY3Rpb25QYWdlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzY2hlbWE6IFNpZ25hbDxXaXRoQ29udGV4dDxDb2xsZWN0aW9uUGFnZT4+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcnkoKTtcbiAgICAgICAgY29uc3QgcHJvZHVjdHMgPSB0aGlzLnByb2R1Y3RzKCk7XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWIgPSB0aGlzLmJyZWFkY3J1bWJzKCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdAY29udGV4dCc6ICdodHRwczovL3NjaGVtYS5vcmcnLFxuICAgICAgICAgICAgJ0B0eXBlJzogJ0NvbGxlY3Rpb25QYWdlJyxcbiAgICAgICAgICAgIG5hbWU6IGNhdGVnb3J5LnNlbz8udGl0bGUgPz8gY2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjYXRlZ29yeS5zZW8/LmRlc2NyaXB0aW9uID8/IGNhdGVnb3J5LnByb3BlcnRpZXM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgdXJsOiB0aGlzLmdldENhdGVnb3J5VXJsKGNhdGVnb3J5KSxcbiAgICAgICAgICAgIGltYWdlOiB0aGlzLm1lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUudHJhbnNmb3JtKGNhdGVnb3J5LmltYWdlLCB0cnVlKSxcbiAgICAgICAgICAgIC8vIFNFTyDQtNCw0L3QvdGL0LUuXG4gICAgICAgICAgICAuLi4oY2F0ZWdvcnkuc2VvPy5rZXl3b3JkcyAmJiB7IGtleXdvcmRzOiBjYXRlZ29yeS5zZW8ua2V5d29yZHMgfSksXG4gICAgICAgICAgICAvLyDQntGB0L3QvtCy0L3QvtC5INC60L7QvdGC0LXQvdGCINGB0YLRgNCw0L3QuNGG0YsgLSDRgdC/0LjRgdC+0Log0YLQvtCy0LDRgNC+0LIg0Lgg0L/QvtC00LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAgICAgICAgbWFpbkVudGl0eTogdGhpcy5jcmVhdGVNYWluRW50aXR5KGNhdGVnb3J5LCBwcm9kdWN0cyksXG4gICAgICAgICAgICAvLyDQndCw0LLQuNCz0LDRhtC40L7QvdC90YvQtSDRhdC70LXQsdC90YvQtSDQutGA0L7RiNC60LhcbiAgICAgICAgICAgIGJyZWFkY3J1bWIsXG4gICAgICAgICAgICAvLyDQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9C1INC80LXRgtCw0LTQsNC90L3Ri9C1INC00LvRjyBTRU9cbiAgICAgICAgICAgIGFib3V0OiB7XG4gICAgICAgICAgICAgICAgJ0B0eXBlJzogJ0NhdGVnb3J5Q29kZScsXG4gICAgICAgICAgICAgICAgY29kZVZhbHVlOiBjYXRlZ29yeS5zbHVnLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNhdGVnb3J5Lm5hbWUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGNhdGVnb3J5LnNlbz8uZGVzY3JpcHRpb24gPz8gY2F0ZWdvcnkucHJvcGVydGllcz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8g0JjQvdGE0L7RgNC80LDRhtC40Y8g0L4g0YHQsNC50YLQtVxuICAgICAgICAgICAgaXNQYXJ0T2Y6IHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnV2ViU2l0ZScsXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5jb21wYW55SW5mby5uYW1lLFxuICAgICAgICAgICAgICAgIHVybDogdGhpcy51cmxzLnNpdGVVcmwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8g0KHQstGP0LfQsNC90L3Ri9C1INGB0YLRgNCw0L3QuNGG0YtcbiAgICAgICAgICAgIHJlbGF0ZWRMaW5rOiBbYCR7dGhpcy51cmxzLnNpdGVVcmx9L2NhdGFsb2dgLCAuLi4odGhpcy5pc1ZpcnR1YWxDYXRlZ29yeShjYXRlZ29yeSkgPyBbXSA6IFtgJHt0aGlzLnVybHMuc2l0ZVVybH0vY2F0YWxvZy9jYXRlZ29yeSR7Y2F0ZWdvcnkucGFyZW50SWR9YF0pXSxcbiAgICAgICAgICAgIC8vINCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LUg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQutCw0YLQtdCz0L7RgNC40LhcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0eTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb3BlcnR5VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAn0JrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNC+0LInLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogKHByb2R1Y3RzPy5sZW5ndGggPz8gMCkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb3BlcnR5VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU2x1ZyDQutCw0YLQtdCz0L7RgNC40LgnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0ZWdvcnkuc2x1ZyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vINCU0L7QsdCw0LLQu9GP0LXQvCBTRU8g0LTQsNC90L3Ri9C1INC10YHQu9C4INC10YHRgtGMXG4gICAgICAgICAgICAgICAgLi4uKGNhdGVnb3J5LnNlbz8ua2V5d29yZHNcbiAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdQcm9wZXJ0eVZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTRU8gS2V5d29yZHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNhdGVnb3J5LnNlby5rZXl3b3JkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICAgIC4uLihjYXRlZ29yeS5zZW8/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUHJvcGVydHlWYWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0VPIFRpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRlZ29yeS5zZW8udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0gYXMgV2l0aENvbnRleHQ8Q29sbGVjdGlvblBhZ2U+O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC+0LLQtdGA0Y/QtdGCLCDRj9Cy0LvRj9C10YLRgdGPINC70Lgg0LrQsNGC0LXQs9C+0YDQuNGPINCy0LjRgNGC0YPQsNC70YzQvdC+0LkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnkg0JrQsNGC0LXQs9C+0YDQuNGPINC00LvRjyDQv9GA0L7QstC10YDQutC4LlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgcHJpdmF0ZSBpc1ZpcnR1YWxDYXRlZ29yeShjYXRlZ29yeTogU2NDYXRlZ29yeSB8IFNjVmlydHVhbENhdGVnb3J5KTogY2F0ZWdvcnkgaXMgU2NWaXJ0dWFsQ2F0ZWdvcnkge1xuICAgICAgICByZXR1cm4gJ2NoaWxkQ2F0ZWdvcmllcycgaW4gY2F0ZWdvcnkgJiYgJ3Byb2R1Y3RDYXRlZ29yaWVzJyBpbiBjYXRlZ29yeTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LvRg9GH0LDQtdGCIFVSTCDQtNC70Y8g0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3J5INCa0LDRgtC10LPQvtGA0LjRjyDQtNC70Y8g0L/QvtC70YPRh9C10L3QuNGPIFVSTC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENhdGVnb3J5VXJsKGNhdGVnb3J5OiBTY0NhdGVnb3J5IHwgU2NWaXJ0dWFsQ2F0ZWdvcnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5pc1ZpcnR1YWxDYXRlZ29yeShjYXRlZ29yeSkpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLnVybHMuc2l0ZVVybH0vY2F0YWxvZy92aXJ0dWFsLyR7Y2F0ZWdvcnkuc2x1Z31gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3RoaXMudXJscy5zaXRlVXJsfS9jYXRhbG9nLyR7dGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKGNhdGVnb3J5KX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDQtdGCIG1haW5FbnRpdHkg0LTQu9GPINGB0YXQtdC80YsuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnkg0JrQsNGC0LXQs9C+0YDQuNGPLlxuICAgICAqIEBwYXJhbSBwcm9kdWN0cyDQodC/0LjRgdC+0Log0YLQvtCy0LDRgNC+0LIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVNYWluRW50aXR5KGNhdGVnb3J5OiBTY0NhdGVnb3J5IHwgU2NWaXJ0dWFsQ2F0ZWdvcnksIHByb2R1Y3RzOiBTY1Byb2R1Y3RbXSB8IHVuZGVmaW5lZCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNoaWxkQ2F0ZWdvcmllcyA9IHRoaXMuaXNWaXJ0dWFsQ2F0ZWdvcnkoY2F0ZWdvcnkpID8gWy4uLihjYXRlZ29yeS5jaGlsZENhdGVnb3JpZXMgPz8gW10pLCAuLi4oY2F0ZWdvcnkucHJvZHVjdENhdGVnb3JpZXMgPz8gW10pXSA6IChjYXRlZ29yeS5jYXRlZ29yaWVzID8/IFtdKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ0B0eXBlJzogJ0l0ZW1MaXN0JyxcbiAgICAgICAgICAgIG51bWJlck9mSXRlbXM6IChwcm9kdWN0cz8ubGVuZ3RoID8/IDApICsgY2hpbGRDYXRlZ29yaWVzLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW1MaXN0T3JkZXI6ICdodHRwczovL3NjaGVtYS5vcmcvSXRlbUxpc3RVbm9yZGVyZWQnLFxuICAgICAgICAgICAgaXRlbUxpc3RFbGVtZW50OiBbXG4gICAgICAgICAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INC/0L7QtNC60LDRgtC10LPQvtGA0LjQuCDQsiDQvdCw0YfQsNC70L4g0YHQv9C40YHQutCwLlxuICAgICAgICAgICAgICAgIC4uLmNoaWxkQ2F0ZWdvcmllcy5zbGljZSgwLCA1KS5tYXAoKHN1YkNhdGVnb3J5LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ0xpc3RJdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGluZGV4ICsgMSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogc3ViQ2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzLmdldENhdGVnb3J5VXJsKHN1YkNhdGVnb3J5KSxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IHRoaXMubWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZS50cmFuc2Zvcm0oc3ViQ2F0ZWdvcnkuaW1hZ2UsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc3ViQ2F0ZWdvcnkuc2VvPy5kZXNjcmlwdGlvbiA/PyBzdWJDYXRlZ29yeS5wcm9wZXJ0aWVzPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INGC0L7QstCw0YDRiyDQv9C+0YHQu9C1INC/0L7QtNC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgICAgICAgICAgICAuLi4ocHJvZHVjdHM/LnNsaWNlKDAsIDEwKS5tYXAoKHByb2R1Y3QsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnTGlzdEl0ZW0nLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogY2hpbGRDYXRlZ29yaWVzLmxlbmd0aCArIGluZGV4ICsgMSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogcHJvZHVjdC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMudXJscy5zaXRlVXJsfS9jYXRhbG9nLyR7dGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKHByb2R1Y3QpfWAsXG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiB0aGlzLm1lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUudHJhbnNmb3JtKHByb2R1Y3QuaW1hZ2UsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdC5zZW8/LmRlc2NyaXB0aW9uID8/IHByb2R1Y3QucHJvcGVydGllcz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIG9mZmVyczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdPZmZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2VDdXJyZW5jeTogJ1JVQicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2VWYWxpZFVudGlsOiBwcm9kdWN0LmRpc2NvdW50Py5leHBpcmVkQXQgPyBwcm9kdWN0LmRpc2NvdW50LmV4cGlyZWRBdC50b1N0cmluZygpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBwcm9kdWN0LmNvc3RSdWIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBuOiBwcm9kdWN0LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5OiAhcHJvZHVjdC5vbk9yZGVyICYmIHByb2R1Y3Quc3RvY2tDb3VudD8ubGVuZ3RoID8gJ0luU3RvY2snIDogJ091dE9mU3RvY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGxlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnT3JnYW5pemF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5jb21wYW55SW5mby5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLnVybHMuc2l0ZVVybH0vY2F0YWxvZy9wcm9kdWN0LyR7dGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKHByb2R1Y3QpfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0pKSA/PyBbXSksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIjwhLS0g0KHRgtGA0YPQutGC0YPRgNC40YDQvtCy0LDQvdC90YvQtSDQtNCw0L3QvdGL0LUg0LTQu9GPIENvbGxlY3Rpb25QYWdlIC0tPlxuPHNjLWpzb24tbGQgW2pzb25dPVwic2NoZW1hKClcIiAvPlxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, Injectable, Directive, ContentChildren, HostListener, NgModule, EventEmitter, signal, ChangeDetectorRef, Input, Output, Component, ChangeDetectionStrategy, Inject, HostBinding, ElementRef, Pipe, Renderer2, input, model, output, SkipSelf, DestroyRef, effect, ContentChild, ViewChild, Optional, computed, viewChild, forwardRef } from '@angular/core';
|
|
3
3
|
import * as i1 from '@snabcentr/client-core';
|
|
4
|
-
import { ScContactsService, ScUserService, ScAuthService, SEARCH_TERM, ScUnitsHelper, ScImageHelper, SC_PATH_IMAGE_NOT_FOUND, ScImage, IS_RUNNING_ON_TERMINAL, ScPhoneService, ScUserMetrikaService, ScUserMetrikaGoalsEnum, ScVCardService, ScVerificationService, ScISuggestionType, SC_MIN_LENGTH_SEARCH_TERM, ScConvertersService, ScOpfList, ScMediaImageTransformerPipe, ScLocationsService, ScWarehouseService, SEARCH_TERM_PROVIDERS, ScCartService, ScUploadedFile, ScMimeTypes, ScCatalogService, SC_URLS, ScPaginationService, SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_OPTIONS, ScIconTypesEnum, ScDocumentInfoTypesEnum, ScFrequentlyAskedQuestionsService, SC_COMPANY_INFO, ScFeedbackService } from '@snabcentr/client-core';
|
|
4
|
+
import { ScContactsService, ScUserService, ScAuthService, SEARCH_TERM, ScUnitsHelper, ScImageHelper, SC_PATH_IMAGE_NOT_FOUND, ScImage, IS_RUNNING_ON_TERMINAL, ScPhoneService, ScUserMetrikaService, ScUserMetrikaGoalsEnum, ScVCardService, ScVerificationService, ScISuggestionType, SC_MIN_LENGTH_SEARCH_TERM, ScConvertersService, ScOpfList, ScMediaImageTransformerPipe, ScLocationsService, ScWarehouseService, SEARCH_TERM_PROVIDERS, ScCartService, ScUploadedFile, ScMimeTypes, ScCatalogService, SC_URLS, ScPaginationService, SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_OPTIONS, ScIconTypesEnum, ScDocumentInfoTypesEnum, ScFrequentlyAskedQuestionsService, SC_COMPANY_INFO, ScFeedbackService, ScIdOrSlugPipe, ScJsonLdModule } from '@snabcentr/client-core';
|
|
5
5
|
import * as i6 from 'rxjs';
|
|
6
6
|
import { EMPTY, BehaviorSubject, switchMap, of, shareReplay, Subject, map, filter, tap, catchError, finalize, startWith, share, timer, scan, takeWhile, endWith, distinctUntilChanged, debounceTime, throwError, combineLatest, Observable, pairwise, noop, first, merge, skip } from 'rxjs';
|
|
7
7
|
import * as i7 from '@taiga-ui/cdk';
|
|
@@ -7895,6 +7895,186 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
7895
7895
|
}]
|
|
7896
7896
|
}] });
|
|
7897
7897
|
|
|
7898
|
+
/**
|
|
7899
|
+
* Компонент для отображения структурированных данных @see [Schema.org](https://schema.org) для страниц каталога.
|
|
7900
|
+
*/
|
|
7901
|
+
class ScJsonLdCategoryComponent {
|
|
7902
|
+
constructor() {
|
|
7903
|
+
/**
|
|
7904
|
+
* Категория товаров (обычная или виртуальная).
|
|
7905
|
+
*/
|
|
7906
|
+
this.category = input.required();
|
|
7907
|
+
/**
|
|
7908
|
+
* Список товаров.
|
|
7909
|
+
*/
|
|
7910
|
+
this.products = input();
|
|
7911
|
+
/**
|
|
7912
|
+
* Хлебные крошки.
|
|
7913
|
+
*/
|
|
7914
|
+
this.breadcrumbs = input();
|
|
7915
|
+
/**
|
|
7916
|
+
* Пайп для формирования полного URI изображения на media сервере.
|
|
7917
|
+
*/
|
|
7918
|
+
this.mediaImageTransformerPipe = inject(ScMediaImageTransformerPipe);
|
|
7919
|
+
/**
|
|
7920
|
+
* Пайп для преобразования идентификатора или slug в идентификатор.
|
|
7921
|
+
*/
|
|
7922
|
+
this.idOrSlugPipe = inject(ScIdOrSlugPipe);
|
|
7923
|
+
/**
|
|
7924
|
+
* Данные о компании.
|
|
7925
|
+
*/
|
|
7926
|
+
this.companyInfo = inject(SC_COMPANY_INFO);
|
|
7927
|
+
/**
|
|
7928
|
+
* Список ссылок приложения.
|
|
7929
|
+
*/
|
|
7930
|
+
this.urls = inject(SC_URLS);
|
|
7931
|
+
/**
|
|
7932
|
+
* Схема структурированных данных для CollectionPage.
|
|
7933
|
+
*/
|
|
7934
|
+
this.schema = computed(() => {
|
|
7935
|
+
const category = this.category();
|
|
7936
|
+
const products = this.products();
|
|
7937
|
+
const breadcrumb = this.breadcrumbs();
|
|
7938
|
+
return {
|
|
7939
|
+
'@context': 'https://schema.org',
|
|
7940
|
+
'@type': 'CollectionPage',
|
|
7941
|
+
name: category.seo?.title ?? category.name,
|
|
7942
|
+
description: category.seo?.description ?? category.properties?.description,
|
|
7943
|
+
url: this.getCategoryUrl(category),
|
|
7944
|
+
image: this.mediaImageTransformerPipe.transform(category.image, true),
|
|
7945
|
+
// SEO данные.
|
|
7946
|
+
...(category.seo?.keywords && { keywords: category.seo.keywords }),
|
|
7947
|
+
// Основной контент страницы - список товаров и подкатегорий.
|
|
7948
|
+
mainEntity: this.createMainEntity(category, products),
|
|
7949
|
+
// Навигационные хлебные крошки
|
|
7950
|
+
breadcrumb,
|
|
7951
|
+
// Дополнительные метаданные для SEO
|
|
7952
|
+
about: {
|
|
7953
|
+
'@type': 'CategoryCode',
|
|
7954
|
+
codeValue: category.slug,
|
|
7955
|
+
name: category.name,
|
|
7956
|
+
description: category.seo?.description ?? category.properties?.description,
|
|
7957
|
+
},
|
|
7958
|
+
// Информация о сайте
|
|
7959
|
+
isPartOf: {
|
|
7960
|
+
'@type': 'WebSite',
|
|
7961
|
+
name: this.companyInfo.name,
|
|
7962
|
+
url: this.urls.siteUrl,
|
|
7963
|
+
},
|
|
7964
|
+
// Связанные страницы
|
|
7965
|
+
relatedLink: [`${this.urls.siteUrl}/catalog`, ...(this.isVirtualCategory(category) ? [] : [`${this.urls.siteUrl}/catalog/category${category.parentId}`])],
|
|
7966
|
+
// Дополнительные изображения категории
|
|
7967
|
+
additionalProperty: [
|
|
7968
|
+
{
|
|
7969
|
+
'@type': 'PropertyValue',
|
|
7970
|
+
name: 'Количество товаров',
|
|
7971
|
+
value: (products?.length ?? 0).toString(),
|
|
7972
|
+
},
|
|
7973
|
+
{
|
|
7974
|
+
'@type': 'PropertyValue',
|
|
7975
|
+
name: 'Slug категории',
|
|
7976
|
+
value: category.slug,
|
|
7977
|
+
},
|
|
7978
|
+
// Добавляем SEO данные если есть
|
|
7979
|
+
...(category.seo?.keywords
|
|
7980
|
+
? [
|
|
7981
|
+
{
|
|
7982
|
+
'@type': 'PropertyValue',
|
|
7983
|
+
name: 'SEO Keywords',
|
|
7984
|
+
value: category.seo.keywords,
|
|
7985
|
+
},
|
|
7986
|
+
]
|
|
7987
|
+
: []),
|
|
7988
|
+
...(category.seo?.title
|
|
7989
|
+
? [
|
|
7990
|
+
{
|
|
7991
|
+
'@type': 'PropertyValue',
|
|
7992
|
+
name: 'SEO Title',
|
|
7993
|
+
value: category.seo.title,
|
|
7994
|
+
},
|
|
7995
|
+
]
|
|
7996
|
+
: []),
|
|
7997
|
+
],
|
|
7998
|
+
};
|
|
7999
|
+
});
|
|
8000
|
+
}
|
|
8001
|
+
/**
|
|
8002
|
+
* Проверяет, является ли категория виртуальной.
|
|
8003
|
+
*
|
|
8004
|
+
* @param category Категория для проверки.
|
|
8005
|
+
*/
|
|
8006
|
+
// eslint-disable-next-line class-methods-use-this
|
|
8007
|
+
isVirtualCategory(category) {
|
|
8008
|
+
return 'childCategories' in category && 'productCategories' in category;
|
|
8009
|
+
}
|
|
8010
|
+
/**
|
|
8011
|
+
* Получает URL для категории.
|
|
8012
|
+
*
|
|
8013
|
+
* @param category Категория для получения URL.
|
|
8014
|
+
*/
|
|
8015
|
+
getCategoryUrl(category) {
|
|
8016
|
+
if (this.isVirtualCategory(category)) {
|
|
8017
|
+
return `${this.urls.siteUrl}/catalog/virtual/${category.slug}`;
|
|
8018
|
+
}
|
|
8019
|
+
return `${this.urls.siteUrl}/catalog/${this.idOrSlugPipe.transform(category)}`;
|
|
8020
|
+
}
|
|
8021
|
+
/**
|
|
8022
|
+
* Создает mainEntity для схемы.
|
|
8023
|
+
*
|
|
8024
|
+
* @param category Категория.
|
|
8025
|
+
* @param products Список товаров.
|
|
8026
|
+
*/
|
|
8027
|
+
createMainEntity(category, products) {
|
|
8028
|
+
const childCategories = this.isVirtualCategory(category) ? [...(category.childCategories ?? []), ...(category.productCategories ?? [])] : (category.categories ?? []);
|
|
8029
|
+
return {
|
|
8030
|
+
'@type': 'ItemList',
|
|
8031
|
+
numberOfItems: (products?.length ?? 0) + childCategories.length,
|
|
8032
|
+
itemListOrder: 'https://schema.org/ItemListUnordered',
|
|
8033
|
+
itemListElement: [
|
|
8034
|
+
// Добавляем подкатегории в начало списка.
|
|
8035
|
+
...childCategories.slice(0, 5).map((subCategory, index) => ({
|
|
8036
|
+
'@type': 'ListItem',
|
|
8037
|
+
position: index + 1,
|
|
8038
|
+
name: subCategory.name,
|
|
8039
|
+
url: this.getCategoryUrl(subCategory),
|
|
8040
|
+
image: this.mediaImageTransformerPipe.transform(subCategory.image, true),
|
|
8041
|
+
description: subCategory.seo?.description ?? subCategory.properties?.description,
|
|
8042
|
+
})),
|
|
8043
|
+
// Добавляем товары после подкатегорий.
|
|
8044
|
+
...(products?.slice(0, 10).map((product, index) => ({
|
|
8045
|
+
'@type': 'ListItem',
|
|
8046
|
+
position: childCategories.length + index + 1,
|
|
8047
|
+
name: product.name,
|
|
8048
|
+
url: `${this.urls.siteUrl}/catalog/${this.idOrSlugPipe.transform(product)}`,
|
|
8049
|
+
image: this.mediaImageTransformerPipe.transform(product.image, true),
|
|
8050
|
+
description: product.seo?.description ?? product.properties?.description,
|
|
8051
|
+
offers: [
|
|
8052
|
+
{
|
|
8053
|
+
'@type': 'Offer',
|
|
8054
|
+
priceCurrency: 'RUB',
|
|
8055
|
+
priceValidUntil: product.discount?.expiredAt ? product.discount.expiredAt.toString() : undefined,
|
|
8056
|
+
price: product.costRub,
|
|
8057
|
+
mpn: product.code,
|
|
8058
|
+
availability: !product.onOrder && product.stockCount?.length ? 'InStock' : 'OutOfStock',
|
|
8059
|
+
seller: {
|
|
8060
|
+
'@type': 'Organization',
|
|
8061
|
+
name: this.companyInfo.name,
|
|
8062
|
+
},
|
|
8063
|
+
url: `${this.urls.siteUrl}/catalog/product/${this.idOrSlugPipe.transform(product)}`,
|
|
8064
|
+
},
|
|
8065
|
+
],
|
|
8066
|
+
})) ?? []),
|
|
8067
|
+
],
|
|
8068
|
+
};
|
|
8069
|
+
}
|
|
8070
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScJsonLdCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8071
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: ScJsonLdCategoryComponent, isStandalone: true, selector: "sc-json-ld-category", inputs: { category: { classPropertyName: "category", publicName: "category", isSignal: true, isRequired: true, transformFunction: null }, products: { classPropertyName: "products", publicName: "products", isSignal: true, isRequired: false, transformFunction: null }, breadcrumbs: { classPropertyName: "breadcrumbs", publicName: "breadcrumbs", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<!-- \u0421\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u0434\u043B\u044F CollectionPage -->\n<sc-json-ld [json]=\"schema()\" />\n", dependencies: [{ kind: "ngmodule", type: ScJsonLdModule }, { kind: "component", type: i1.ScJsonLdComponent, selector: "sc-json-ld", inputs: ["json"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8072
|
+
}
|
|
8073
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScJsonLdCategoryComponent, decorators: [{
|
|
8074
|
+
type: Component,
|
|
8075
|
+
args: [{ standalone: true, selector: 'sc-json-ld-category', imports: [ScJsonLdModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- \u0421\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u0434\u043B\u044F CollectionPage -->\n<sc-json-ld [json]=\"schema()\" />\n" }]
|
|
8076
|
+
}] });
|
|
8077
|
+
|
|
7898
8078
|
/*
|
|
7899
8079
|
* Public API Surface of ui
|
|
7900
8080
|
*/
|
|
@@ -7903,5 +8083,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
7903
8083
|
* Generated bundle index. Do not edit.
|
|
7904
8084
|
*/
|
|
7905
8085
|
|
|
7906
|
-
export { AbstractScPriceCard, AuthMethod, CURRENT_COUNTRY_ID, FilesAndDocumentsComponent, FilesAndDocumentsModule, FinishDateTimeTransformerDirective, IS_DEFAULT_COUNTRY, MAX_FILES_IN_FORM_INPUT, SC_ALLOW_SELECT_TERMINATED, SC_DATE_FORMATTER, SC_ERROR_CHANGE_HANDLER, SC_HELP_NOTIFICATION_CLOSE, SC_HELP_NOTIFICATION_LIMIT, SC_MANAGER_QR_HANDLER, SC_NOTIFY_WHEN_IN_STOCK_REQUIRED_FIELDS, 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, ScCartItemComponent, ScCatalogModule, ScCategoryCardComponent, ScContactsAccordionComponent, ScContactsModule, ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScContragentsModule, ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScDeliveryAddressModule, ScDownloadPriceListComponent, ScEmailLinkDirective, ScErrorBlockStatusComponent, ScErrorHandlerComponent, ScFavoriteButtonComponent, ScFeedbackFormComponent, ScFormFieldsModule, ScFormatDatePipe, ScFrequentlyAskedQuestionsComponent, ScFrequentlyAskedQuestionsGroupSelectorComponent, ScFrequentlyAskedQuestionsWithGroupsComponent, ScGratitudeComponent, ScHelpNotificationService, ScHoverImageCarouselComponent, ScInputQuantityComponent, ScLinks, ScManagerCardComponent, ScManagerCardPushComponent, ScNewContactFormComponent, ScNewContragentBankAccountsFormComponent, ScNewContragentFormComponent, ScNewsCardComponent, ScNewsCardSkeletonComponent, ScNewsModule, ScNextInputFocusDirective, ScNextInputFocusModule, ScNotifyWhenInStockDialogComponent, ScOrderItemMobileComponent, ScOrderModule, ScPaymentStatusComponent, ScPersonalDataProcessingPolicyComponent, ScPhoneFormatPipe, ScPreviewSampleComponent, ScPreviewSampleModule, ScPreviewSamplesMosquitoComponent, ScPriceCardComponent, ScPriceCardInlineComponent, ScPriceHistoryComponent, ScPriceListPaginationComponent, ScPriceWarehouseStockComponent, ScPrivacyPolicyComponent, ScProductInAllWarehousesPipe, ScProfileAccordionsContentComponent, ScProfileModule, ScPublicOfferComponent, ScQRCodeDialogComponent, ScQRCodeModule, ScResetUserPasswordComponent, ScResourcePreviewComponent, ScSelectOnFocusinDirective, ScShareButtonComponent, ScShareButtonModule, ScSignInFormByEmailComponent, ScSignInFormByPhoneComponent, ScSignInFormComponent, ScSignUpFormComponent, ScSimpleSignUpFormComponent, ScSuggestionFieldComponent, ScTelLinkDirective, ScTerminalLinkDirective, ScUpdateUserInfoDialogComponent, ScUserManagersComponent, ScUserModule, ScUserPhoneApproveDialogComponent, ScVerificationModule, ScVerificationPhoneCheckFormComponent, TreeDirective, TreeIconService, TreeLoaderService, TreeTopDirective, phoneValidator, scAtLeastOneRequiredValidator, scBicValidator, scClientUiIconsName, scCorrespondentAccountValidator, scPasswordConfirmMatchingValidator, stepValidator, tuiDateValueTransformerDefaultProvider };
|
|
8086
|
+
export { AbstractScPriceCard, AuthMethod, CURRENT_COUNTRY_ID, FilesAndDocumentsComponent, FilesAndDocumentsModule, FinishDateTimeTransformerDirective, IS_DEFAULT_COUNTRY, MAX_FILES_IN_FORM_INPUT, SC_ALLOW_SELECT_TERMINATED, SC_DATE_FORMATTER, SC_ERROR_CHANGE_HANDLER, SC_HELP_NOTIFICATION_CLOSE, SC_HELP_NOTIFICATION_LIMIT, SC_MANAGER_QR_HANDLER, SC_NOTIFY_WHEN_IN_STOCK_REQUIRED_FIELDS, 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, ScCartItemComponent, ScCatalogModule, ScCategoryCardComponent, ScContactsAccordionComponent, ScContactsModule, ScContragentsAccordionComponent, ScContragentsAccordionItemComponent, ScContragentsModule, ScDeliveryAddressAccordionComponent, ScDeliveryAddressAccordionItemComponent, ScDeliveryAddressModule, ScDownloadPriceListComponent, ScEmailLinkDirective, ScErrorBlockStatusComponent, ScErrorHandlerComponent, ScFavoriteButtonComponent, ScFeedbackFormComponent, ScFormFieldsModule, ScFormatDatePipe, ScFrequentlyAskedQuestionsComponent, ScFrequentlyAskedQuestionsGroupSelectorComponent, ScFrequentlyAskedQuestionsWithGroupsComponent, ScGratitudeComponent, ScHelpNotificationService, ScHoverImageCarouselComponent, ScInputQuantityComponent, ScJsonLdCategoryComponent, ScLinks, ScManagerCardComponent, ScManagerCardPushComponent, ScNewContactFormComponent, ScNewContragentBankAccountsFormComponent, ScNewContragentFormComponent, ScNewsCardComponent, ScNewsCardSkeletonComponent, ScNewsModule, ScNextInputFocusDirective, ScNextInputFocusModule, ScNotifyWhenInStockDialogComponent, ScOrderItemMobileComponent, ScOrderModule, ScPaymentStatusComponent, ScPersonalDataProcessingPolicyComponent, ScPhoneFormatPipe, ScPreviewSampleComponent, ScPreviewSampleModule, ScPreviewSamplesMosquitoComponent, ScPriceCardComponent, ScPriceCardInlineComponent, ScPriceHistoryComponent, ScPriceListPaginationComponent, ScPriceWarehouseStockComponent, ScPrivacyPolicyComponent, ScProductInAllWarehousesPipe, ScProfileAccordionsContentComponent, ScProfileModule, ScPublicOfferComponent, ScQRCodeDialogComponent, ScQRCodeModule, ScResetUserPasswordComponent, ScResourcePreviewComponent, ScSelectOnFocusinDirective, ScShareButtonComponent, ScShareButtonModule, ScSignInFormByEmailComponent, ScSignInFormByPhoneComponent, ScSignInFormComponent, ScSignUpFormComponent, ScSimpleSignUpFormComponent, ScSuggestionFieldComponent, ScTelLinkDirective, ScTerminalLinkDirective, ScUpdateUserInfoDialogComponent, ScUserManagersComponent, ScUserModule, ScUserPhoneApproveDialogComponent, ScVerificationModule, ScVerificationPhoneCheckFormComponent, TreeDirective, TreeIconService, TreeLoaderService, TreeTopDirective, phoneValidator, scAtLeastOneRequiredValidator, scBicValidator, scClientUiIconsName, scCorrespondentAccountValidator, scPasswordConfirmMatchingValidator, stepValidator, tuiDateValueTransformerDefaultProvider };
|
|
7907
8087
|
//# sourceMappingURL=snabcentr-client-ui.mjs.map
|