@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/catalog/category-card/sc-category-card.component.d.ts +1 -5
- package/catalog/cost-with-discount/cost-with-discount.component.d.ts +2 -2
- package/catalog/index.d.ts +0 -1
- package/catalog/price-card/sc-price-card.component.d.ts +6 -2
- package/catalog/sc-catalog.module.d.ts +12 -13
- package/esm2022/catalog/category-card/sc-category-card.component.mjs +7 -12
- package/esm2022/catalog/cost-with-discount/cost-with-discount.component.mjs +3 -3
- package/esm2022/catalog/index.mjs +1 -2
- package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +3 -3
- package/esm2022/catalog/price-card/sc-price-card.component.mjs +18 -3
- package/esm2022/catalog/price-card-inline/sc-price-card-inline.component.mjs +3 -3
- package/esm2022/catalog/sc-catalog.module.mjs +1 -6
- package/fesm2022/snabcentr-client-ui.mjs +55 -130
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/release_notes.tmp +14 -2
- package/styles/tailwind/tailwind.scss +15 -102
- package/catalog/categories-list/sc-categories-list.component.d.ts +0 -54
- package/esm2022/catalog/categories-list/sc-categories-list.component.mjs +0 -93
package/package.json
CHANGED
package/release_notes.tmp
CHANGED
@@ -1,4 +1,16 @@
|
|
1
|
-
## 3.4.
|
1
|
+
## 3.4.6 (2024-11-26)
|
2
2
|
|
3
|
-
|
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
|
-
|
915
|
-
|
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==
|