@snabcentr/client-ui 3.4.1 → 3.4.6

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.

Potentially problematic release.


This version of @snabcentr/client-ui might be problematic. Click here for more details.

package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snabcentr/client-ui",
3
- "version": "3.4.1",
3
+ "version": "3.4.6",
4
4
  "author": "Snabcentr Ltd.",
5
5
  "repository": "https://gitlab.snabcentr.met/web/angular/snabcentr-client-ui-lib",
6
6
  "license": "Commercial",
package/release_notes.tmp CHANGED
@@ -1,4 +1,16 @@
1
- ## 3.4.1 (2024-11-21)
1
+ ## 3.4.6 (2024-11-26)
2
2
 
3
- No changes.
3
+ ### fixed (1 change)
4
+
5
+ - [#10710: Исправлено выравнивание контента в плитке товара](web_soft/libs/angular/snabcentr-client-ui-lib@8cf75ffdcfcbe392757856704e009d3f96856ca8) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!192))
6
+
7
+ ### added (1 change)
8
+
9
+ - [#10694: Добавлен фон горизонтальной плитки товара при наведении](web_soft/libs/angular/snabcentr-client-ui-lib@86e652628879584326ee46f16a541bb19932bf64) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!193))
10
+
11
+ ### changed (3 changes)
12
+
13
+ - [#10693, #10698: Доработаны карточки товара](web_soft/libs/angular/snabcentr-client-ui-lib@677bc07cfb9639c5db5a75d514d9ca0337572f15) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!191))
14
+ - [#10489: Удалён компонент списка категорий, доработана карточка категорий](web_soft/libs/angular/snabcentr-client-ui-lib@dbda0009e6a87f427e56b713d923f4120ba90cd4) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!190))
15
+ - [#10501: Доработан appearance кнопок удаления товара в плитках, добавлен...](web_soft/libs/angular/snabcentr-client-ui-lib@aa85a6ac3ea474e8bba774984ab1d04db04f7e18) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!189))
4
16
 
@@ -746,6 +746,10 @@ video {
746
746
  margin-bottom: 2rem;
747
747
  }
748
748
 
749
+ .mb-auto {
750
+ margin-bottom: auto;
751
+ }
752
+
749
753
  .ml-2 {
750
754
  margin-left: 0.5rem;
751
755
  }
@@ -754,14 +758,6 @@ video {
754
758
  margin-right: 0.5rem;
755
759
  }
756
760
 
757
- .mr-auto {
758
- margin-right: auto;
759
- }
760
-
761
- .mt-1 {
762
- margin-top: 0.25rem;
763
- }
764
-
765
761
  .mt-2 {
766
762
  margin-top: 0.5rem;
767
763
  }
@@ -781,10 +777,6 @@ video {
781
777
  display: inline;
782
778
  }
783
779
 
784
- .\!flex {
785
- display: flex !important;
786
- }
787
-
788
780
  .flex {
789
781
  display: flex;
790
782
  }
@@ -833,11 +825,6 @@ video {
833
825
  height: 1.5rem;
834
826
  }
835
827
 
836
- .size-8 {
837
- width: 2rem;
838
- height: 2rem;
839
- }
840
-
841
828
  .size-full {
842
829
  width: 100%;
843
830
  height: 100%;
@@ -851,18 +838,10 @@ video {
851
838
  height: 1rem !important;
852
839
  }
853
840
 
854
- .\!h-8 {
855
- height: 2rem !important;
856
- }
857
-
858
841
  .h-10 {
859
842
  height: 2.5rem;
860
843
  }
861
844
 
862
- .h-11 {
863
- height: 2.75rem;
864
- }
865
-
866
845
  .h-12 {
867
846
  height: 3rem;
868
847
  }
@@ -911,8 +890,8 @@ video {
911
890
  max-height: 100%;
912
891
  }
913
892
 
914
- .\!w-8 {
915
- width: 2rem !important;
893
+ .min-h-8 {
894
+ min-height: 2rem;
916
895
  }
917
896
 
918
897
  .w-12 {
@@ -1029,14 +1008,6 @@ video {
1029
1008
  resize: both;
1030
1009
  }
1031
1010
 
1032
- .grid-cols-\[repeat\(auto-fill\2c minmax\(21rem\2c 1fr\)\)\] {
1033
- grid-template-columns: repeat(auto-fill,minmax(21rem,1fr));
1034
- }
1035
-
1036
- .\!flex-col {
1037
- flex-direction: column !important;
1038
- }
1039
-
1040
1011
  .flex-col {
1041
1012
  flex-direction: column;
1042
1013
  }
@@ -1210,18 +1181,10 @@ video {
1210
1181
  background-color: var(--tui-background-base-alt);
1211
1182
  }
1212
1183
 
1213
- .bg-tui-base-03 {
1214
- background-color: var(--tui-background-neutral-1-hover);
1215
- }
1216
-
1217
1184
  .bg-tui-base-04 {
1218
1185
  background-color: var(--tui-border-normal);
1219
1186
  }
1220
1187
 
1221
- .bg-tui-primary {
1222
- background-color: var(--tui-background-accent-1);
1223
- }
1224
-
1225
1188
  .bg-white {
1226
1189
  --tw-bg-opacity: 1;
1227
1190
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
@@ -1307,21 +1270,11 @@ video {
1307
1270
  padding-right: 0.5rem;
1308
1271
  }
1309
1272
 
1310
- .px-3 {
1311
- padding-left: 0.75rem;
1312
- padding-right: 0.75rem;
1313
- }
1314
-
1315
1273
  .px-6 {
1316
1274
  padding-left: 1.5rem;
1317
1275
  padding-right: 1.5rem;
1318
1276
  }
1319
1277
 
1320
- .py-1\.5 {
1321
- padding-top: 0.375rem;
1322
- padding-bottom: 0.375rem;
1323
- }
1324
-
1325
1278
  .py-4\.5 {
1326
1279
  padding-top: 1.125rem;
1327
1280
  padding-bottom: 1.125rem;
@@ -1343,10 +1296,6 @@ video {
1343
1296
  padding-top: 0.5rem;
1344
1297
  }
1345
1298
 
1346
- .text-left {
1347
- text-align: left;
1348
- }
1349
-
1350
1299
  .text-center {
1351
1300
  text-align: center;
1352
1301
  }
@@ -1365,11 +1314,6 @@ video {
1365
1314
  font-weight: 800 !important;
1366
1315
  }
1367
1316
 
1368
- .\!text-sm {
1369
- font-size: 0.875rem !important;
1370
- line-height: 1.25rem !important;
1371
- }
1372
-
1373
1317
  .\!text-xl {
1374
1318
  font-size: 1.25rem !important;
1375
1319
  line-height: 1.75rem !important;
@@ -1431,6 +1375,11 @@ video {
1431
1375
  line-height: 1.25rem;
1432
1376
  }
1433
1377
 
1378
+ .text-xl {
1379
+ font-size: 1.25rem;
1380
+ line-height: 1.75rem;
1381
+ }
1382
+
1434
1383
  .text-xs {
1435
1384
  font-size: 0.75rem;
1436
1385
  line-height: 1rem;
@@ -1505,10 +1454,6 @@ video {
1505
1454
  color: rgb(0 0 0 / var(--tw-text-opacity, 1));
1506
1455
  }
1507
1456
 
1508
- .text-tui-base-05 {
1509
- color: var(--tui-border-hover);
1510
- }
1511
-
1512
1457
  .text-tui-base-07 {
1513
1458
  color: var(--tui-background-accent-opposite-pressed);
1514
1459
  }
@@ -1585,14 +1530,6 @@ video {
1585
1530
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1586
1531
  }
1587
1532
 
1588
- .ring-tui-base-05 {
1589
- --tw-ring-color: var(--tui-border-hover);
1590
- }
1591
-
1592
- .ring-tui-primary {
1593
- --tw-ring-color: var(--tui-background-accent-1);
1594
- }
1595
-
1596
1533
  .blur {
1597
1534
  --tw-blur: blur(8px);
1598
1535
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
@@ -1640,10 +1577,6 @@ video {
1640
1577
  transition-duration: 150ms;
1641
1578
  }
1642
1579
 
1643
- .duration-150 {
1644
- transition-duration: 150ms;
1645
- }
1646
-
1647
1580
  .duration-500 {
1648
1581
  transition-duration: 500ms;
1649
1582
  }
@@ -1664,6 +1597,10 @@ video {
1664
1597
  k: string;
1665
1598
  }
1666
1599
 
1600
+ .hover\:bg-tui-background-neutral-1:hover {
1601
+ background-color: var(--tui-background-neutral-1);
1602
+ }
1603
+
1667
1604
  @media (min-width: 640px) {
1668
1605
  .sm\:mr-9 {
1669
1606
  margin-right: 2.25rem;
@@ -1765,28 +1702,4 @@ video {
1765
1702
  .lg\:gap-4 {
1766
1703
  gap: 1rem;
1767
1704
  }
1768
- }
1769
-
1770
- @media (hover: hover) {
1771
- .hover-hover\:hover\:ring-2:hover {
1772
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1773
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1774
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1775
- }
1776
-
1777
- .group:hover .hover-hover\:group-hover\:text-tui-primary {
1778
- color: var(--tui-background-accent-1);
1779
- }
1780
- }
1781
-
1782
- @media (hover: none) {
1783
- .hover-none\:active\:ring-2:active {
1784
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1785
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1786
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1787
- }
1788
-
1789
- .group:active .hover-none\:group-active\:text-tui-primary {
1790
- color: var(--tui-background-accent-1);
1791
- }
1792
1705
  }
@@ -1,54 +0,0 @@
1
- import { ChangeDetectorRef, OnInit } from '@angular/core';
2
- import { UrlTree } from '@angular/router';
3
- import { ScFavoriteService, ScITerminalProvider, ScIUrls } from '@snabcentr/client-core';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * Компонент списка категорий.
7
- */
8
- export declare class ScCategoriesListComponent<T extends object> implements OnInit {
9
- private readonly urls;
10
- readonly terminal: ScITerminalProvider;
11
- private readonly favoriteService;
12
- private readonly cdr;
13
- /**
14
- * Список категорий.
15
- */
16
- categories: T[] | undefined | null;
17
- /**
18
- * Признак того, отображается этот компонент на мобильном устройстве или нет.
19
- */
20
- readonly isMobile: boolean;
21
- /**
22
- * Ссылка для автоматического управления уничтожением зависимостей.
23
- */
24
- private destroyRef;
25
- /**
26
- * Функция получения `routerLink` из объекта {@link T}.
27
- */
28
- getRouterLink: (data: T) => string | any[] | UrlTree | null | undefined;
29
- /**
30
- * Инициализирует экземпляр класса {@link ScCategoriesListComponent}.
31
- *
32
- * @param urls Объект данных о базовом списке ссылок приложения.
33
- * @param terminal Данные о запуске приложения на терминале.
34
- * @param favoriteService Сервис для работы с корзиной.
35
- * @param cdr Объект для работы с обнаружением изменений.
36
- */
37
- constructor(urls: ScIUrls, terminal: ScITerminalProvider, favoriteService: ScFavoriteService, cdr: ChangeDetectorRef);
38
- /** @inheritDoc */
39
- ngOnInit(): void;
40
- /**
41
- * Возвращает путь до изображения на сервере.
42
- *
43
- * @param imgPath путь, где хранится изображение.
44
- */
45
- getCategoryImage(imgPath: string): string;
46
- /**
47
- * Проверяет наличие хотя бы одного изображения.
48
- *
49
- * @param categories Список категорий.
50
- */
51
- checkImagesExists(categories: any[]): boolean;
52
- static ɵfac: i0.ɵɵFactoryDeclaration<ScCategoriesListComponent<any>, never>;
53
- static ɵcmp: i0.ɵɵComponentDeclaration<ScCategoriesListComponent<any>, "sc-categories-list", never, { "categories": { "alias": "categories"; "required": false; }; "getRouterLink": { "alias": "getRouterLink"; "required": false; }; }, {}, never, never, false, never>;
54
- }
@@ -1,93 +0,0 @@
1
- import { __decorate } from "tslib";
2
- /* eslint-disable @typescript-eslint/no-explicit-any,class-methods-use-this,lodash/prefer-some,lodash/prefer-lodash-method,no-param-reassign */
3
- import { ChangeDetectionStrategy, Component, DestroyRef, Inject, inject, Input } from '@angular/core';
4
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
- import { IS_RUNNING_ON_TERMINAL, SC_URLS, TERMINAL_PROVIDERS } from '@snabcentr/client-core';
6
- import { TUI_IS_MOBILE, tuiPure } from '@taiga-ui/cdk';
7
- import { filter, tap } from 'rxjs';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@snabcentr/client-core";
10
- import * as i2 from "@angular/common";
11
- import * as i3 from "@angular/router";
12
- import * as i4 from "@taiga-ui/core";
13
- import * as i5 from "@taiga-ui/cdk";
14
- /**
15
- * Компонент списка категорий.
16
- */
17
- export class ScCategoriesListComponent {
18
- /**
19
- * Инициализирует экземпляр класса {@link ScCategoriesListComponent}.
20
- *
21
- * @param urls Объект данных о базовом списке ссылок приложения.
22
- * @param terminal Данные о запуске приложения на терминале.
23
- * @param favoriteService Сервис для работы с корзиной.
24
- * @param cdr Объект для работы с обнаружением изменений.
25
- */
26
- constructor(urls, terminal, favoriteService, cdr) {
27
- this.urls = urls;
28
- this.terminal = terminal;
29
- this.favoriteService = favoriteService;
30
- this.cdr = cdr;
31
- /**
32
- * Признак того, отображается этот компонент на мобильном устройстве или нет.
33
- */
34
- this.isMobile = inject(TUI_IS_MOBILE);
35
- /**
36
- * Ссылка для автоматического управления уничтожением зависимостей.
37
- */
38
- this.destroyRef = inject(DestroyRef);
39
- /**
40
- * Функция получения `routerLink` из объекта {@link T}.
41
- */
42
- this.getRouterLink = () => null;
43
- }
44
- /** @inheritDoc */
45
- ngOnInit() {
46
- this.favoriteService.categories$
47
- .pipe(filter(() => !!this.categories && this.categories.length > 0 && 'id' in this.categories[0]), tap((categories) => {
48
- this.categories.forEach((category) => {
49
- category.isFavorite = categories.some((item) => category.id === item.id);
50
- });
51
- }), takeUntilDestroyed(this.destroyRef))
52
- .subscribe(() => {
53
- this.cdr.markForCheck();
54
- });
55
- }
56
- /**
57
- * Возвращает путь до изображения на сервере.
58
- *
59
- * @param imgPath путь, где хранится изображение.
60
- */
61
- getCategoryImage(imgPath) {
62
- return `${this.urls.imgServerUrl}/${imgPath}`;
63
- }
64
- /**
65
- * Проверяет наличие хотя бы одного изображения.
66
- *
67
- * @param categories Список категорий.
68
- */
69
- checkImagesExists(categories) {
70
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
71
- return categories.some((item) => item.properties?.image);
72
- }
73
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScCategoriesListComponent, deps: [{ token: SC_URLS }, { token: IS_RUNNING_ON_TERMINAL }, { token: i1.ScFavoriteService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
74
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ScCategoriesListComponent, selector: "sc-categories-list", inputs: { categories: "categories", getRouterLink: "getRouterLink" }, providers: [TERMINAL_PROVIDERS], ngImport: i0, template: "<div\n [ngClass]=\"{ '!flex !flex-col': terminal.isRunningOnTerminal }\"\n class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\"\n>\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <ng-container *ngFor=\"let item of $any(categories)\">\n <a\n *tuiLet=\"getRouterLink(item) as routerLink\"\n [routerLink]=\"routerLink\"\n class=\"group flex h-11 cursor-pointer items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-icon\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n icon=\"@tui.camera-off\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-icon>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-icon\n *ngIf=\"item.isFavorite\"\n background=\"@tui.bookmark-filled\"\n icon=\"@tui.bookmark\"\n class=\"mr-auto bg-tui-primary !text-sm text-tui-primary\"\n ></tui-icon>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-icon\n icon=\"@tui.chevron-right\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-icon>\n </a>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-icon\n icon=\"@tui.chevron-right\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-icon>\n </button>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "directive", type: i5.TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "directive", type: i5.TuiRepeatTimes, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
75
- }
76
- __decorate([
77
- tuiPure
78
- ], ScCategoriesListComponent.prototype, "checkImagesExists", null);
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScCategoriesListComponent, decorators: [{
80
- type: Component,
81
- args: [{ selector: 'sc-categories-list', providers: [TERMINAL_PROVIDERS], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [ngClass]=\"{ '!flex !flex-col': terminal.isRunningOnTerminal }\"\n class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\"\n>\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <ng-container *ngFor=\"let item of $any(categories)\">\n <a\n *tuiLet=\"getRouterLink(item) as routerLink\"\n [routerLink]=\"routerLink\"\n class=\"group flex h-11 cursor-pointer items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-icon\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n icon=\"@tui.camera-off\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-icon>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-icon\n *ngIf=\"item.isFavorite\"\n background=\"@tui.bookmark-filled\"\n icon=\"@tui.bookmark\"\n class=\"mr-auto bg-tui-primary !text-sm text-tui-primary\"\n ></tui-icon>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-icon\n icon=\"@tui.chevron-right\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-icon>\n </a>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-icon\n icon=\"@tui.chevron-right\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-icon>\n </button>\n</ng-template>\n" }]
82
- }], ctorParameters: () => [{ type: undefined, decorators: [{
83
- type: Inject,
84
- args: [SC_URLS]
85
- }] }, { type: undefined, decorators: [{
86
- type: Inject,
87
- args: [IS_RUNNING_ON_TERMINAL]
88
- }] }, { type: i1.ScFavoriteService }, { type: i0.ChangeDetectorRef }], propDecorators: { categories: [{
89
- type: Input
90
- }], getRouterLink: [{
91
- type: Input
92
- }], checkImagesExists: [] } });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0ZWdvcmllcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL2NhdGVnb3JpZXMtbGlzdC9zYy1jYXRlZ29yaWVzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0ZWdvcmllcy1saXN0L3NjLWNhdGVnb3JpZXMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0lBQStJO0FBRS9JLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsT0FBTyxFQUErRCxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFKLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBRW5DOztHQUVHO0FBT0gsTUFBTSxPQUFPLHlCQUF5QjtJQXdCbEM7Ozs7Ozs7T0FPRztJQUNILFlBRXFCLElBQWEsRUFFZCxRQUE2QixFQUM1QixlQUFrQyxFQUNsQyxHQUFzQjtRQUp0QixTQUFJLEdBQUosSUFBSSxDQUFTO1FBRWQsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQW1CO1FBQ2xDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBL0IzQzs7V0FFRztRQUNhLGFBQVEsR0FBWSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFMUQ7O1dBRUc7UUFDSyxlQUFVLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXBEOztXQUVHO1FBR0ksa0JBQWEsR0FBNkQsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBaUJ6RixDQUFDO0lBRUosa0JBQWtCO0lBQ1gsUUFBUTtRQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVzthQUMzQixJQUFJLENBQ0QsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMzRixHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNkLElBQUksQ0FBQyxVQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNuRCxRQUFRLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUN0QzthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxPQUFlO1FBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUVJLGlCQUFpQixDQUFDLFVBQWlCO1FBQ3RDLHNFQUFzRTtRQUN0RSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQzsrR0E1RVEseUJBQXlCLGtCQWlDdEIsT0FBTyxhQUVQLHNCQUFzQjttR0FuQ3pCLHlCQUF5QixtSEFIdkIsQ0FBQyxrQkFBa0IsQ0FBQywwQkNmbkMsdWhHQStEQTs7QUQ0Qlc7SUFETixPQUFPO2tFQUlQOzRGQTVFUSx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0ksb0JBQW9CLGFBRW5CLENBQUMsa0JBQWtCLENBQUMsbUJBQ2QsdUJBQXVCLENBQUMsTUFBTTs7MEJBbUMxQyxNQUFNOzJCQUFDLE9BQU87OzBCQUVkLE1BQU07MkJBQUMsc0JBQXNCO3lHQTlCM0IsVUFBVTtzQkFEaEIsS0FBSztnQkFrQkMsYUFBYTtzQkFGbkIsS0FBSztnQkFxREMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSxjbGFzcy1tZXRob2RzLXVzZS10aGlzLGxvZGFzaC9wcmVmZXItc29tZSxsb2Rhc2gvcHJlZmVyLWxvZGFzaC1tZXRob2Qsbm8tcGFyYW0tcmVhc3NpZ24gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEluamVjdCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBVcmxUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElTX1JVTk5JTkdfT05fVEVSTUlOQUwsIFNDX1VSTFMsIFNjQ2F0ZWdvcnksIFNjRmF2b3JpdGVTZXJ2aWNlLCBTY0lUZXJtaW5hbFByb3ZpZGVyLCBTY0lVcmxzLCBURVJNSU5BTF9QUk9WSURFUlMgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFRVSV9JU19NT0JJTEUsIHR1aVB1cmUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINGB0L/QuNGB0LrQsCDQutCw0YLQtdCz0L7RgNC40LkuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtY2F0ZWdvcmllcy1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtY2F0ZWdvcmllcy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtURVJNSU5BTF9QUk9WSURFUlNdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0NhdGVnb3JpZXNMaXN0Q29tcG9uZW50PFQgZXh0ZW5kcyBvYmplY3Q+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNhdGVnb3JpZXM6IFRbXSB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINGN0YLQvtGCINC60L7QvNC/0L7QvdC10L3RgiDQvdCwINC80L7QsdC40LvRjNC90L7QvCDRg9GB0YLRgNC+0LnRgdGC0LLQtSDQuNC70Lgg0L3QtdGCLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc01vYmlsZTogYm9vbGVhbiA9IGluamVjdChUVUlfSVNfTU9CSUxFKTtcblxuICAgIC8qKlxuICAgICAqINCh0YHRi9C70LrQsCDQtNC70Y8g0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60L7Qs9C+INGD0L/RgNCw0LLQu9C10L3QuNGPINGD0L3QuNGH0YLQvtC20LXQvdC40LXQvCDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC10LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqXG4gICAgICog0KTRg9C90LrRhtC40Y8g0L/QvtC70YPRh9C10L3QuNGPIGByb3V0ZXJMaW5rYCDQuNC3INC+0LHRitC10LrRgtCwIHtAbGluayBUfS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBsb2Rhc2gvcHJlZmVyLWNvbnN0YW50XG4gICAgcHVibGljIGdldFJvdXRlckxpbms6IChkYXRhOiBUKSA9PiBzdHJpbmcgfCBhbnlbXSB8IFVybFRyZWUgfCBudWxsIHwgdW5kZWZpbmVkID0gKCkgPT4gbnVsbDtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NDYXRlZ29yaWVzTGlzdENvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJscyDQntCx0YrQtdC60YIg0LTQsNC90L3Ri9GFINC+INCx0LDQt9C+0LLQvtC8INGB0L/QuNGB0LrQtSDRgdGB0YvQu9C+0Log0L/RgNC40LvQvtC20LXQvdC40Y8uXG4gICAgICogQHBhcmFtIHRlcm1pbmFsINCU0LDQvdC90YvQtSDQviDQt9Cw0L/Rg9GB0LrQtSDQv9GA0LjQu9C+0LbQtdC90LjRjyDQvdCwINGC0LXRgNC80LjQvdCw0LvQtS5cbiAgICAgKiBAcGFyYW0gZmF2b3JpdGVTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC60L7RgNC30LjQvdC+0LkuXG4gICAgICogQHBhcmFtIGNkciDQntCx0YrQtdC60YIg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQvtCx0L3QsNGA0YPQttC10L3QuNC10Lwg0LjQt9C80LXQvdC10L3QuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChTQ19VUkxTKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVybHM6IFNjSVVybHMsXG4gICAgICAgIEBJbmplY3QoSVNfUlVOTklOR19PTl9URVJNSU5BTClcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHRlcm1pbmFsOiBTY0lUZXJtaW5hbFByb3ZpZGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZhdm9yaXRlU2VydmljZTogU2NGYXZvcml0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge31cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mYXZvcml0ZVNlcnZpY2UuY2F0ZWdvcmllcyRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhIXRoaXMuY2F0ZWdvcmllcyAmJiB0aGlzLmNhdGVnb3JpZXMubGVuZ3RoID4gMCAmJiAnaWQnIGluIHRoaXMuY2F0ZWdvcmllc1swXSksXG4gICAgICAgICAgICAgICAgdGFwKChjYXRlZ29yaWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmNhdGVnb3JpZXMgYXMgU2NDYXRlZ29yeVtdKS5mb3JFYWNoKChjYXRlZ29yeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkuaXNGYXZvcml0ZSA9IGNhdGVnb3JpZXMuc29tZSgoaXRlbSkgPT4gY2F0ZWdvcnkuaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQv9GD0YLRjCDQtNC+INC40LfQvtCx0YDQsNC20LXQvdC40Y8g0L3QsCDRgdC10YDQstC10YDQtS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbWdQYXRoINC/0YPRgtGMLCDQs9C00LUg0YXRgNCw0L3QuNGC0YHRjyDQuNC30L7QsdGA0LDQttC10L3QuNC1LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYXRlZ29yeUltYWdlKGltZ1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnVybHMuaW1nU2VydmVyVXJsfS8ke2ltZ1BhdGh9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0L7QstC10YDRj9C10YIg0L3QsNC70LjRh9C40LUg0YXQvtGC0Y8g0LHRiyDQvtC00L3QvtCz0L4g0LjQt9C+0LHRgNCw0LbQtdC90LjRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yaWVzINCh0L/QuNGB0L7QuiDQutCw0YLQtdCz0L7RgNC40LkuXG4gICAgICovXG4gICAgQHR1aVB1cmVcbiAgICBwdWJsaWMgY2hlY2tJbWFnZXNFeGlzdHMoY2F0ZWdvcmllczogYW55W10pOiBib29sZWFuIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICByZXR1cm4gY2F0ZWdvcmllcy5zb21lKChpdGVtKSA9PiBpdGVtLnByb3BlcnRpZXM/LmltYWdlKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgW25nQ2xhc3NdPVwieyAnIWZsZXggIWZsZXgtY29sJzogdGVybWluYWwuaXNSdW5uaW5nT25UZXJtaW5hbCB9XCJcbiAgICBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLVtyZXBlYXQoYXV0by1maWxsLG1pbm1heCgyMXJlbSwxZnIpKV0gZ2FwLXgtOCBnYXAteS0yXCJcbj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2F0ZWdvcmllczsgZWxzZSBjYXRlZ29yaWVzU2tlbGV0b25cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiAkYW55KGNhdGVnb3JpZXMpXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICp0dWlMZXQ9XCJnZXRSb3V0ZXJMaW5rKGl0ZW0pIGFzIHJvdXRlckxpbmtcIlxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlckxpbmtcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAgZmxleCBoLTExIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXhsIGJnLXR1aS1iYXNlLTAyIHB4LTMgcHktMS41IHRleHQtbGVmdCByaW5nLXR1aS1wcmltYXJ5IGR1cmF0aW9uLTE1MCBob3Zlci1ob3Zlcjpob3ZlcjpyaW5nLTIgaG92ZXItbm9uZTphY3RpdmU6cmluZy0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5wcm9wZXJ0aWVzPy5pbWFnZSBhcyBpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0Q2F0ZWdvcnlJbWFnZShpbWFnZSlcIlxuICAgICAgICAgICAgICAgICAgICBbYWx0XT1cIml0ZW0ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2l6ZS04IHJvdW5kZWQgYmctdHVpLWJhc2UtMDMgb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgPHR1aS1pY29uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0ucHJvcGVydGllcz8uaW1hZ2UgJiYgY2hlY2tJbWFnZXNFeGlzdHMoY2F0ZWdvcmllcylcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiQHR1aS5jYW1lcmEtb2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIhaC04ICF3LTggcm91bmRlZCBiZy10dWktYmFzZS0wMyB0ZXh0LXR1aS1iYXNlLTA1XCJcbiAgICAgICAgICAgICAgICA+PC90dWktaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBncm93IGZsZXgtY29sIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdyb3cgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidHJ1bmNhdGUgdGV4dC1iYXNlIGZvbnQtYm9sZFwiPnt7IGl0ZW0ubmFtZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pc0Zhdm9yaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kPVwiQHR1aS5ib29rbWFyay1maWxsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJAdHVpLmJvb2ttYXJrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLWF1dG8gYmctdHVpLXByaW1hcnkgIXRleHQtc20gdGV4dC10dWktcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC90dWktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ubTJQcmljZSBhcyBtMlByaWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXR1aS10ZXh0LTAyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAg0KHRgNC10LTQvdGP0Y8g0YHRgtC+0LjQvNC+0YHRgtGMIDxzcGFuIFtpbm5lckhUTUxdPVwibTJQcmljZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPHR1aS1pY29uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJAdHVpLmNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR1cmF0aW9uLTE1MCBob3Zlci1ob3Zlcjpncm91cC1ob3Zlcjp0ZXh0LXR1aS1wcmltYXJ5IGhvdmVyLW5vbmU6Z3JvdXAtYWN0aXZlOnRleHQtdHVpLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgID48L3R1aS1pY29uPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NhdGVnb3JpZXNTa2VsZXRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgICp0dWlSZXBlYXRUaW1lcz1cImxldCBpbmRleCBvZiBpc01vYmlsZSA/IDMgOiA2XCJcbiAgICAgICAgY2xhc3M9XCJncm91cCBmbGV4IGgtMTEgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDIgcHgtMyBweS0xLjUgdGV4dC1sZWZ0IHJpbmctdHVpLWJhc2UtMDUgZHVyYXRpb24tMTUwIGhvdmVyLWhvdmVyOmhvdmVyOnJpbmctMiBob3Zlci1ub25lOmFjdGl2ZTpyaW5nLTJcIlxuICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInR1aS1za2VsZXRvbiBzaXplLThcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInR1aS1za2VsZXRvbiBoLTQgZ3Jvd1wiPjwvZGl2PlxuICAgICAgICA8dHVpLWljb25cbiAgICAgICAgICAgIGljb249XCJAdHVpLmNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0dWktc2tlbGV0b24gZHVyYXRpb24tMTUwIGhvdmVyLWhvdmVyOmdyb3VwLWhvdmVyOnRleHQtdHVpLXByaW1hcnkgaG92ZXItbm9uZTpncm91cC1hY3RpdmU6dGV4dC10dWktcHJpbWFyeVwiXG4gICAgICAgID48L3R1aS1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==