@snabcentr/client-ui 3.41.1 → 3.41.3
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 +187 -0
 - package/fesm2022/snabcentr-client-ui.mjs +185 -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,187 @@ 
     | 
|
| 
      
 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 
     | 
    
         
            +
                                item: {
         
     | 
| 
      
 155 
     | 
    
         
            +
                                    '@type': 'Product',
         
     | 
| 
      
 156 
     | 
    
         
            +
                                    name: product.name,
         
     | 
| 
      
 157 
     | 
    
         
            +
                                    url: `${this.urls.siteUrl}/catalog/${this.idOrSlugPipe.transform(product)}`,
         
     | 
| 
      
 158 
     | 
    
         
            +
                                    image: this.mediaImageTransformerPipe.transform(product.image, true),
         
     | 
| 
      
 159 
     | 
    
         
            +
                                    description: product.seo?.description ?? product.properties?.description,
         
     | 
| 
      
 160 
     | 
    
         
            +
                                    offers: [
         
     | 
| 
      
 161 
     | 
    
         
            +
                                        {
         
     | 
| 
      
 162 
     | 
    
         
            +
                                            '@type': 'Offer',
         
     | 
| 
      
 163 
     | 
    
         
            +
                                            priceCurrency: 'RUB',
         
     | 
| 
      
 164 
     | 
    
         
            +
                                            priceValidUntil: product.discount?.expiredAt ? product.discount.expiredAt.toString() : undefined,
         
     | 
| 
      
 165 
     | 
    
         
            +
                                            price: product.costRub,
         
     | 
| 
      
 166 
     | 
    
         
            +
                                            mpn: product.code,
         
     | 
| 
      
 167 
     | 
    
         
            +
                                            availability: !product.onOrder && product.stockCount?.length ? 'InStock' : 'OutOfStock',
         
     | 
| 
      
 168 
     | 
    
         
            +
                                            seller: {
         
     | 
| 
      
 169 
     | 
    
         
            +
                                                '@type': 'Organization',
         
     | 
| 
      
 170 
     | 
    
         
            +
                                                name: this.companyInfo.name,
         
     | 
| 
      
 171 
     | 
    
         
            +
                                            },
         
     | 
| 
      
 172 
     | 
    
         
            +
                                            url: `${this.urls.siteUrl}/catalog/product/${this.idOrSlugPipe.transform(product)}`,
         
     | 
| 
      
 173 
     | 
    
         
            +
                                        },
         
     | 
| 
      
 174 
     | 
    
         
            +
                                    ],
         
     | 
| 
      
 175 
     | 
    
         
            +
                                },
         
     | 
| 
      
 176 
     | 
    
         
            +
                            })) ?? []),
         
     | 
| 
      
 177 
     | 
    
         
            +
                        ],
         
     | 
| 
      
 178 
     | 
    
         
            +
                    };
         
     | 
| 
      
 179 
     | 
    
         
            +
                }
         
     | 
| 
      
 180 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScJsonLdCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
         
     | 
| 
      
 181 
     | 
    
         
            +
                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 }); }
         
     | 
| 
      
 182 
     | 
    
         
            +
            }
         
     | 
| 
      
 183 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScJsonLdCategoryComponent, decorators: [{
         
     | 
| 
      
 184 
     | 
    
         
            +
                        type: Component,
         
     | 
| 
      
 185 
     | 
    
         
            +
                        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" }]
         
     | 
| 
      
 186 
     | 
    
         
            +
                    }] });
         
     | 
| 
      
 187 
     | 
    
         
            +
            //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtanNvbi1sZC1jYXRlZ29yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvc2NoZW1hcy9zYy1qc29uLWxkLWNhdGVnb3J5L3NjLWpzb24tbGQtY2F0ZWdvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3NjaGVtYXMvc2MtanNvbi1sZC1jYXRlZ29yeS9zYy1qc29uLWxkLWNhdGVnb3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUNILGVBQWUsRUFDZixPQUFPLEVBR1AsY0FBYyxFQUVkLGNBQWMsRUFDZCwyQkFBMkIsR0FHOUIsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBS2hDOztHQUVHO0FBUUgsTUFBTSxPQUFPLHlCQUF5QjtJQVB0QztRQVFJOztXQUVHO1FBQ2EsYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWtDLENBQUM7UUFFNUU7O1dBRUc7UUFDYSxhQUFRLEdBQUcsS0FBSyxFQUFlLENBQUM7UUFFaEQ7O1dBRUc7UUFDYSxnQkFBVyxHQUFHLEtBQUssRUFBa0IsQ0FBQztRQUV0RDs7V0FFRztRQUNjLDhCQUF5QixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRWpGOztXQUVHO1FBQ2MsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFdkQ7O1dBRUc7UUFDZ0IsZ0JBQVcsR0FBaUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXZGOztXQUVHO1FBQ2dCLFNBQUksR0FBWSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkQ7O1dBRUc7UUFDYSxXQUFNLEdBQXdDLFFBQVEs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LFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLFdBQVcsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLFdBQVc7d0JBQ3hFLE1BQU0sRUFBRTs0QkFDSjtnQ0FDSSxPQUFPLEVBQUUsT0FBTztnQ0FDaEIsYUFBYSxFQUFFLEtBQUs7Z0NBQ3BCLGVBQWUsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0NBQ2hHLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTztnQ0FDdEIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dDQUNqQixZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVk7Z0NBQ3ZGLE1BQU0sRUFBRTtvQ0FDSixPQUFPLEVBQUUsY0FBYztvQ0FDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtpQ0FDOUI7Z0NBQ0QsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLG9CQUFvQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTs2QkFDdEY7eUJBQ0o7cUJBQ0o7aUJBQ0osQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2I7U0FDSixDQUFDO0lBQ04sQ0FBQzsrR0F0TFEseUJBQXlCO21HQUF6Qix5QkFBeUIsc2VDM0J0Qyw4TkFFQSwyQ0RzQmMsY0FBYzs7NEZBR2YseUJBQXlCO2tCQVByQyxTQUFTO2lDQUNNLElBQUksWUFDTixxQkFBcUIsV0FFdEIsQ0FBQyxjQUFjLENBQUMsbUJBQ1IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgU0NfQ09NUEFOWV9JTkZPLFxuICAgIFNDX1VSTFMsXG4gICAgU2NDYXRlZ29yeSxcbiAgICBTY0lDb21wYW55QmFzZUluZm8sXG4gICAgU2NJZE9yU2x1Z1BpcGUsXG4gICAgU2NJVXJscyxcbiAgICBTY0pzb25MZE1vZHVsZSxcbiAgICBTY01lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUsXG4gICAgU2NQcm9kdWN0LFxuICAgIFNjVmlydHVhbENhdGVnb3J5LFxufSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IENvbGxlY3Rpb25QYWdlLCBXaXRoQ29udGV4dCB9IGZyb20gJ3NjaGVtYS1kdHMnO1xuXG5pbXBvcnQgeyBCcmVhZGNydW1iTGlzdCB9IGZyb20gJy4uL2JyZWFkY3J1bWItbGlzdC5pbnRlcmZhY2UnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQtNC70Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDRgdGC0YDRg9C60YLRg9GA0LjRgNC+0LLQsNC90L3Ri9GFINC00LDQvdC90YvRhSBAc2VlIFtTY2hlbWEub3JnXShodHRwczovL3NjaGVtYS5vcmcpINC00LvRjyDRgdGC0YDQsNC90LjRhiDQutCw0YLQsNC70L7Qs9CwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2MtanNvbi1sZC1jYXRlZ29yeScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWpzb24tbGQtY2F0ZWdvcnkuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtTY0pzb25MZE1vZHVsZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjSnNvbkxkQ2F0ZWdvcnlDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCa0LDRgtC10LPQvtGA0LjRjyDRgtC+0LLQsNGA0L7QsiAo0L7QsdGL0YfQvdCw0Y8g0LjQu9C4INCy0LjRgNGC0YPQsNC70YzQvdCw0Y8pLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBjYXRlZ29yeSA9IGlucHV0LnJlcXVpcmVkPFNjQ2F0ZWdvcnkgfCBTY1ZpcnR1YWxDYXRlZ29yeT4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgtC+0LLQsNGA0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJvZHVjdHMgPSBpbnB1dDxTY1Byb2R1Y3RbXT4oKTtcblxuICAgIC8qKlxuICAgICAqINCl0LvQtdCx0L3Ri9C1INC60YDQvtGI0LrQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYnJlYWRjcnVtYnMgPSBpbnB1dDxCcmVhZGNydW1iTGlzdD4oKTtcblxuICAgIC8qKlxuICAgICAqINCf0LDQudC/INC00LvRjyDRhNC+0YDQvNC40YDQvtCy0LDQvdC40Y8g0L/QvtC70L3QvtCz0L4gVVJJINC40LfQvtCx0YDQsNC20LXQvdC40Y8g0L3QsCBtZWRpYSDRgdC10YDQstC10YDQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUgPSBpbmplY3QoU2NNZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlKTtcblxuICAgIC8qKlxuICAgICAqINCf0LDQudC/INC00LvRjyDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNGPINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LAg0LjQu9C4IHNsdWcg0LIg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBpZE9yU2x1Z1BpcGUgPSBpbmplY3QoU2NJZE9yU2x1Z1BpcGUpO1xuXG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+INC60L7QvNC/0LDQvdC40LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbXBhbnlJbmZvOiBSZWFkb25seTxTY0lDb21wYW55QmFzZUluZm8+ID0gaW5qZWN0KFNDX0NPTVBBTllfSU5GTyk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YHRgdGL0LvQvtC6INC/0YDQuNC70L7QttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB1cmxzOiBTY0lVcmxzID0gaW5qZWN0KFNDX1VSTFMpO1xuXG4gICAgLyoqXG4gICAgICog0KHRhdC10LzQsCDRgdGC0YDRg9C60YLRg9GA0LjRgNC+0LLQsNC90L3Ri9GFINC00LDQvdC90YvRhSDQtNC70Y8gQ29sbGVjdGlvblBhZ2UuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNjaGVtYTogU2lnbmFsPFdpdGhDb250ZXh0PENvbGxlY3Rpb25QYWdlPj4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yeSgpO1xuICAgICAgICBjb25zdCBwcm9kdWN0cyA9IHRoaXMucHJvZHVjdHMoKTtcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHRoaXMuYnJlYWRjcnVtYnMoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ0Bjb250ZXh0JzogJ2h0dHBzOi8vc2NoZW1hLm9yZycsXG4gICAgICAgICAgICAnQHR5cGUnOiAnQ29sbGVjdGlvblBhZ2UnLFxuICAgICAgICAgICAgbmFtZTogY2F0ZWdvcnkuc2VvPy50aXRsZSA/PyBjYXRlZ29yeS5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGNhdGVnb3J5LnNlbz8uZGVzY3JpcHRpb24gPz8gY2F0ZWdvcnkucHJvcGVydGllcz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB1cmw6IHRoaXMuZ2V0Q2F0ZWdvcnlVcmwoY2F0ZWdvcnkpLFxuICAgICAgICAgICAgaW1hZ2U6IHRoaXMubWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZS50cmFuc2Zvcm0oY2F0ZWdvcnkuaW1hZ2UsIHRydWUpLFxuICAgICAgICAgICAgLy8gU0VPINC00LDQvdC90YvQtS5cbiAgICAgICAgICAgIC4uLihjYXRlZ29yeS5zZW8/LmtleXdvcmRzICYmIHsga2V5d29yZHM6IGNhdGVnb3J5LnNlby5rZXl3b3JkcyB9KSxcbiAgICAgICAgICAgIC8vINCe0YHQvdC+0LLQvdC+0Lkg0LrQvtC90YLQtdC90YIg0YHRgtGA0LDQvdC40YbRiyAtINGB0L/QuNGB0L7QuiDRgtC+0LLQsNGA0L7QsiDQuCDQv9C+0LTQutCw0YLQtdCz0L7RgNC40LkuXG4gICAgICAgICAgICBtYWluRW50aXR5OiB0aGlzLmNyZWF0ZU1haW5FbnRpdHkoY2F0ZWdvcnksIHByb2R1Y3RzKSxcbiAgICAgICAgICAgIC8vINCd0LDQstC40LPQsNGG0LjQvtC90L3Ri9C1INGF0LvQtdCx0L3Ri9C1INC60YDQvtGI0LrQuFxuICAgICAgICAgICAgYnJlYWRjcnVtYixcbiAgICAgICAgICAgIC8vINCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LUg0LzQtdGC0LDQtNCw0L3QvdGL0LUg0LTQu9GPIFNFT1xuICAgICAgICAgICAgYWJvdXQ6IHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnQ2F0ZWdvcnlDb2RlJyxcbiAgICAgICAgICAgICAgICBjb2RlVmFsdWU6IGNhdGVnb3J5LnNsdWcsXG4gICAgICAgICAgICAgICAgbmFtZTogY2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogY2F0ZWdvcnkuc2VvPy5kZXNjcmlwdGlvbiA/PyBjYXRlZ29yeS5wcm9wZXJ0aWVzPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyDQmNC90YTQvtGA0LzQsNGG0LjRjyDQviDRgdCw0LnRgtC1XG4gICAgICAgICAgICBpc1BhcnRPZjoge1xuICAgICAgICAgICAgICAgICdAdHlwZSc6ICdXZWJTaXRlJyxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmNvbXBhbnlJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLnVybHMuc2l0ZVVybCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyDQodCy0Y/Qt9Cw0L3QvdGL0LUg0YHRgtGA0LDQvdC40YbRi1xuICAgICAgICAgICAgcmVsYXRlZExpbms6IFtgJHt0aGlzLnVybHMuc2l0ZVVybH0vY2F0YWxvZ2AsIC4uLih0aGlzLmlzVmlydHVhbENhdGVnb3J5KGNhdGVnb3J5KSA/IFtdIDogW2Ake3RoaXMudXJscy5zaXRlVXJsfS9jYXRhbG9nL2NhdGVnb3J5JHtjYXRlZ29yeS5wYXJlbnRJZH1gXSldLFxuICAgICAgICAgICAgLy8g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQuNC30L7QsdGA0LDQttC10L3QuNGPINC60LDRgtC10LPQvtGA0LjQuFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnR5OiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUHJvcGVydHlWYWx1ZScsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICfQmtC+0LvQuNGH0LXRgdGC0LLQviDRgtC+0LLQsNGA0L7QsicsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAocHJvZHVjdHM/Lmxlbmd0aCA/PyAwKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUHJvcGVydHlWYWx1ZScsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTbHVnINC60LDRgtC10LPQvtGA0LjQuCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRlZ29yeS5zbHVnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8IFNFTyDQtNCw0L3QvdGL0LUg0LXRgdC70Lgg0LXRgdGC0YxcbiAgICAgICAgICAgICAgICAuLi4oY2F0ZWdvcnkuc2VvPy5rZXl3b3Jkc1xuICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb3BlcnR5VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NFTyBLZXl3b3JkcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0ZWdvcnkuc2VvLmtleXdvcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICAgICAgLi4uKGNhdGVnb3J5LnNlbz8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdQcm9wZXJ0eVZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTRU8gVGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNhdGVnb3J5LnNlby50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSBhcyBXaXRoQ29udGV4dDxDb2xsZWN0aW9uUGFnZT47XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0L7QstC10YDRj9C10YIsINGP0LLQu9GP0LXRgtGB0Y8g0LvQuCDQutCw0YLQtdCz0L7RgNC40Y8g0LLQuNGA0YLRg9Cw0LvRjNC90L7QuS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeSDQmtCw0YLQtdCz0L7RgNC40Y8g0LTQu9GPINC/0YDQvtCy0LXRgNC60LguXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBwcml2YXRlIGlzVmlydHVhbENhdGVnb3J5KGNhdGVnb3J5OiBTY0NhdGVnb3J5IHwgU2NWaXJ0dWFsQ2F0ZWdvcnkpOiBjYXRlZ29yeSBpcyBTY1ZpcnR1YWxDYXRlZ29yeSB7XG4gICAgICAgIHJldHVybiAnY2hpbGRDYXRlZ29yaWVzJyBpbiBjYXRlZ29yeSAmJiAncHJvZHVjdENhdGVnb3JpZXMnIGluIGNhdGVnb3J5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0L7Qu9GD0YfQsNC10YIgVVJMINC00LvRjyDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnkg0JrQsNGC0LXQs9C+0YDQuNGPINC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8gVVJMLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q2F0ZWdvcnlVcmwoY2F0ZWdvcnk6IFNjQ2F0ZWdvcnkgfCBTY1ZpcnR1YWxDYXRlZ29yeSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmlzVmlydHVhbENhdGVnb3J5KGNhdGVnb3J5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMudXJscy5zaXRlVXJsfS9jYXRhbG9nL3ZpcnR1YWwvJHtjYXRlZ29yeS5zbHVnfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7dGhpcy51cmxzLnNpdGVVcmx9L2NhdGFsb2cvJHt0aGlzLmlkT3JTbHVnUGlwZS50cmFuc2Zvcm0oY2F0ZWdvcnkpfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIgbWFpbkVudGl0eSDQtNC70Y8g0YHRhdC10LzRiy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeSDQmtCw0YLQtdCz0L7RgNC40Y8uXG4gICAgICogQHBhcmFtIHByb2R1Y3RzINCh0L/QuNGB0L7QuiDRgtC+0LLQsNGA0L7Qsi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZU1haW5FbnRpdHkoY2F0ZWdvcnk6IFNjQ2F0ZWdvcnkgfCBTY1ZpcnR1YWxDYXRlZ29yeSwgcHJvZHVjdHM6IFNjUHJvZHVjdFtdIHwgdW5kZWZpbmVkKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2hpbGRDYXRlZ29yaWVzID0gdGhpcy5pc1ZpcnR1YWxDYXRlZ29yeShjYXRlZ29yeSkgPyBbLi4uKGNhdGVnb3J5LmNoaWxkQ2F0ZWdvcmllcyA/PyBbXSksIC4uLihjYXRlZ29yeS5wcm9kdWN0Q2F0ZWdvcmllcyA/PyBbXSldIDogKGNhdGVnb3J5LmNhdGVnb3JpZXMgPz8gW10pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQHR5cGUnOiAnSXRlbUxpc3QnLFxuICAgICAgICAgICAgbnVtYmVyT2ZJdGVtczogKHByb2R1Y3RzPy5sZW5ndGggPz8gMCkgKyBjaGlsZENhdGVnb3JpZXMubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbUxpc3RPcmRlcjogJ2h0dHBzOi8vc2NoZW1hLm9yZy9JdGVtTGlzdFVub3JkZXJlZCcsXG4gICAgICAgICAgICBpdGVtTGlzdEVsZW1lbnQ6IFtcbiAgICAgICAgICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0L/QvtC00LrQsNGC0LXQs9C+0YDQuNC4INCyINC90LDRh9Cw0LvQviDRgdC/0LjRgdC60LAuXG4gICAgICAgICAgICAgICAgLi4uY2hpbGRDYXRlZ29yaWVzLnNsaWNlKDAsIDUpLm1hcCgoc3ViQ2F0ZWdvcnksIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnTGlzdEl0ZW0nLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogaW5kZXggKyAxLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBzdWJDYXRlZ29yeS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHRoaXMuZ2V0Q2F0ZWdvcnlVcmwoc3ViQ2F0ZWdvcnkpLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogdGhpcy5tZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlLnRyYW5zZm9ybShzdWJDYXRlZ29yeS5pbWFnZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdWJDYXRlZ29yeS5zZW8/LmRlc2NyaXB0aW9uID8/IHN1YkNhdGVnb3J5LnByb3BlcnRpZXM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0YLQvtCy0LDRgNGLINC/0L7RgdC70LUg0L/QvtC00LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAgICAgICAgICAgIC4uLihwcm9kdWN0cz8uc2xpY2UoMCwgMTApLm1hcCgocHJvZHVjdCwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdMaXN0SXRlbScsXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBjaGlsZENhdGVnb3JpZXMubGVuZ3RoICsgaW5kZXggKyAxLFxuICAgICAgICAgICAgICAgICAgICBpdGVtOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUHJvZHVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwcm9kdWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMudXJscy5zaXRlVXJsfS9jYXRhbG9nLyR7dGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKHByb2R1Y3QpfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogdGhpcy5tZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlLnRyYW5zZm9ybShwcm9kdWN0LmltYWdlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9kdWN0LnNlbz8uZGVzY3JpcHRpb24gPz8gcHJvZHVjdC5wcm9wZXJ0aWVzPy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZmVyczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ09mZmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2VDdXJyZW5jeTogJ1JVQicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlVmFsaWRVbnRpbDogcHJvZHVjdC5kaXNjb3VudD8uZXhwaXJlZEF0ID8gcHJvZHVjdC5kaXNjb3VudC5leHBpcmVkQXQudG9TdHJpbmcoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IHByb2R1Y3QuY29zdFJ1YixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBuOiBwcm9kdWN0LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eTogIXByb2R1Y3Qub25PcmRlciAmJiBwcm9kdWN0LnN0b2NrQ291bnQ/Lmxlbmd0aCA/ICdJblN0b2NrJyA6ICdPdXRPZlN0b2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsbGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnT3JnYW5pemF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuY29tcGFueUluZm8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLnVybHMuc2l0ZVVybH0vY2F0YWxvZy9wcm9kdWN0LyR7dGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKHByb2R1Y3QpfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSkpID8/IFtdKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiPCEtLSDQodGC0YDRg9C60YLRg9GA0LjRgNC+0LLQsNC90L3Ri9C1INC00LDQvdC90YvQtSDQtNC70Y8gQ29sbGVjdGlvblBhZ2UgLS0+XG48c2MtanNvbi1sZCBbanNvbl09XCJzY2hlbWEoKVwiIC8+XG4iXX0=
         
     | 
| 
         @@ -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,189 @@ 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 
     | 
    
         
            +
                                item: {
         
     | 
| 
      
 8048 
     | 
    
         
            +
                                    '@type': 'Product',
         
     | 
| 
      
 8049 
     | 
    
         
            +
                                    name: product.name,
         
     | 
| 
      
 8050 
     | 
    
         
            +
                                    url: `${this.urls.siteUrl}/catalog/${this.idOrSlugPipe.transform(product)}`,
         
     | 
| 
      
 8051 
     | 
    
         
            +
                                    image: this.mediaImageTransformerPipe.transform(product.image, true),
         
     | 
| 
      
 8052 
     | 
    
         
            +
                                    description: product.seo?.description ?? product.properties?.description,
         
     | 
| 
      
 8053 
     | 
    
         
            +
                                    offers: [
         
     | 
| 
      
 8054 
     | 
    
         
            +
                                        {
         
     | 
| 
      
 8055 
     | 
    
         
            +
                                            '@type': 'Offer',
         
     | 
| 
      
 8056 
     | 
    
         
            +
                                            priceCurrency: 'RUB',
         
     | 
| 
      
 8057 
     | 
    
         
            +
                                            priceValidUntil: product.discount?.expiredAt ? product.discount.expiredAt.toString() : undefined,
         
     | 
| 
      
 8058 
     | 
    
         
            +
                                            price: product.costRub,
         
     | 
| 
      
 8059 
     | 
    
         
            +
                                            mpn: product.code,
         
     | 
| 
      
 8060 
     | 
    
         
            +
                                            availability: !product.onOrder && product.stockCount?.length ? 'InStock' : 'OutOfStock',
         
     | 
| 
      
 8061 
     | 
    
         
            +
                                            seller: {
         
     | 
| 
      
 8062 
     | 
    
         
            +
                                                '@type': 'Organization',
         
     | 
| 
      
 8063 
     | 
    
         
            +
                                                name: this.companyInfo.name,
         
     | 
| 
      
 8064 
     | 
    
         
            +
                                            },
         
     | 
| 
      
 8065 
     | 
    
         
            +
                                            url: `${this.urls.siteUrl}/catalog/product/${this.idOrSlugPipe.transform(product)}`,
         
     | 
| 
      
 8066 
     | 
    
         
            +
                                        },
         
     | 
| 
      
 8067 
     | 
    
         
            +
                                    ],
         
     | 
| 
      
 8068 
     | 
    
         
            +
                                },
         
     | 
| 
      
 8069 
     | 
    
         
            +
                            })) ?? []),
         
     | 
| 
      
 8070 
     | 
    
         
            +
                        ],
         
     | 
| 
      
 8071 
     | 
    
         
            +
                    };
         
     | 
| 
      
 8072 
     | 
    
         
            +
                }
         
     | 
| 
      
 8073 
     | 
    
         
            +
                static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScJsonLdCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
         
     | 
| 
      
 8074 
     | 
    
         
            +
                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 }); }
         
     | 
| 
      
 8075 
     | 
    
         
            +
            }
         
     | 
| 
      
 8076 
     | 
    
         
            +
            i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ScJsonLdCategoryComponent, decorators: [{
         
     | 
| 
      
 8077 
     | 
    
         
            +
                        type: Component,
         
     | 
| 
      
 8078 
     | 
    
         
            +
                        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" }]
         
     | 
| 
      
 8079 
     | 
    
         
            +
                    }] });
         
     | 
| 
      
 8080 
     | 
    
         
            +
             
     | 
| 
       7898 
8081 
     | 
    
         
             
            /*
         
     | 
| 
       7899 
8082 
     | 
    
         
             
             * Public API Surface of ui
         
     | 
| 
       7900 
8083 
     | 
    
         
             
             */
         
     | 
| 
         @@ -7903,5 +8086,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo 
     | 
|
| 
       7903 
8086 
     | 
    
         
             
             * Generated bundle index. Do not edit.
         
     | 
| 
       7904 
8087 
     | 
    
         
             
             */
         
     | 
| 
       7905 
8088 
     | 
    
         | 
| 
       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 };
         
     | 
| 
      
 8089 
     | 
    
         
            +
            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 
8090 
     | 
    
         
             
            //# sourceMappingURL=snabcentr-client-ui.mjs.map
         
     |