@snabcentr/client-ui 3.4.1 → 3.4.6

Sign up to get free protection for your applications and to get access to all the features.
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==