@snabcentr/client-ui 0.27.0 → 0.28.3
Sign up to get free protection for your applications and to get access to all the features.
- package/auth/sc-auth.module.d.ts +1 -2
- package/cart/cart-item-mobile/sc-cart-item-mobile.component.d.ts +15 -15
- package/catalog/price-card/sc-price-card.component.d.ts +11 -105
- package/contragents/sc-contragents.module.d.ts +1 -2
- package/directives/abstract-price-card/abstract-sc-price-card.directive.d.ts +107 -0
- package/directives/index.d.ts +1 -2
- package/esm2020/auth/sc-auth.module.mjs +3 -7
- package/esm2020/cart/cart-item-mobile/sc-cart-item-mobile.component.mjs +9 -8
- package/esm2020/catalog/price-card/sc-price-card.component.mjs +31 -142
- package/esm2020/catalog/price-list-pagination/sc-price-list-pagination.component.mjs +3 -3
- package/esm2020/contragents/sc-contragents.module.mjs +38 -20
- package/esm2020/directives/abstract-price-card/abstract-sc-price-card.directive.mjs +131 -0
- package/esm2020/directives/index.mjs +2 -3
- package/esm2020/helpers/sc-units-helper.mjs +11 -10
- package/esm2020/order/order-item-mobile/order-item-mobile.component.mjs +3 -3
- package/fesm2015/snabcentr-client-ui.mjs +301 -321
- package/fesm2015/snabcentr-client-ui.mjs.map +1 -1
- package/fesm2020/snabcentr-client-ui.mjs +299 -316
- package/fesm2020/snabcentr-client-ui.mjs.map +1 -1
- package/helpers/sc-units-helper.d.ts +6 -6
- package/order/order-item-mobile/order-item-mobile.component.d.ts +3 -3
- package/package.json +1 -1
- package/styles/tailwind/tailwind.scss +26 -37
- package/directives/carousel-item-hidden/sc-carousel-item-hidden.directive.d.ts +0 -24
- package/directives/carousel-item-hidden/sc-carousel-item-hidden.module.d.ts +0 -11
- package/esm2020/directives/carousel-item-hidden/sc-carousel-item-hidden.directive.mjs +0 -40
- package/esm2020/directives/carousel-item-hidden/sc-carousel-item-hidden.module.mjs +0 -21
package/auth/sc-auth.module.d.ts
CHANGED
@@ -13,12 +13,11 @@ import * as i11 from "../verification/sc-verification.module";
|
|
13
13
|
import * as i12 from "../form-fields/form-fields.module";
|
14
14
|
import * as i13 from "../contragents/sc-contragents.module";
|
15
15
|
import * as i14 from "../contacts/sc-contacts.module";
|
16
|
-
import * as i15 from "../directives/carousel-item-hidden/sc-carousel-item-hidden.module";
|
17
16
|
/**
|
18
17
|
* Модуль аутентификации.
|
19
18
|
*/
|
20
19
|
export declare class ScAuthModule {
|
21
20
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScAuthModule, never>;
|
22
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ScAuthModule, [typeof i1.ScSignInFormComponent, typeof i2.ScSignInFormByPhoneComponent, typeof i3.ScSignInFormByEmailComponent, typeof i4.ScSignUpFormComponent], [typeof i5.CommonModule, typeof i6.FormsModule, typeof i6.ReactiveFormsModule, typeof i7.TuiInputPasswordModule, typeof i7.TuiInputModule, typeof i8.TuiTextfieldControllerModule, typeof i8.TuiLinkModule, typeof i8.TuiButtonModule, typeof i8.TuiLabelModule, typeof i8.TuiModeModule, typeof i7.TuiFieldErrorPipeModule, typeof i8.TuiErrorModule, typeof i9.TuiLetModule, typeof i8.TuiLoaderModule, typeof i7.TuiInputPhoneModule, typeof i10.MaskitoModule, typeof i11.ScVerificationModule, typeof i12.ScFormFieldsModule, typeof i8.TuiDataListModule, typeof i7.TuiCheckboxModule, typeof i7.TuiCheckboxLabeledModule, typeof i7.TuiElasticContainerModule, typeof i7.TuiDataListWrapperModule, typeof i7.TuiSelectModule, typeof i7.TuiElasticContainerModule, typeof i13.ScContragentsModule, typeof i14.ScContactsModule
|
21
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ScAuthModule, [typeof i1.ScSignInFormComponent, typeof i2.ScSignInFormByPhoneComponent, typeof i3.ScSignInFormByEmailComponent, typeof i4.ScSignUpFormComponent], [typeof i5.CommonModule, typeof i6.FormsModule, typeof i6.ReactiveFormsModule, typeof i7.TuiInputPasswordModule, typeof i7.TuiInputModule, typeof i8.TuiTextfieldControllerModule, typeof i8.TuiLinkModule, typeof i8.TuiButtonModule, typeof i8.TuiLabelModule, typeof i8.TuiModeModule, typeof i7.TuiFieldErrorPipeModule, typeof i8.TuiErrorModule, typeof i9.TuiLetModule, typeof i8.TuiLoaderModule, typeof i7.TuiInputPhoneModule, typeof i10.MaskitoModule, typeof i11.ScVerificationModule, typeof i12.ScFormFieldsModule, typeof i8.TuiDataListModule, typeof i7.TuiCheckboxModule, typeof i7.TuiCheckboxLabeledModule, typeof i7.TuiElasticContainerModule, typeof i7.TuiDataListWrapperModule, typeof i7.TuiSelectModule, typeof i7.TuiElasticContainerModule, typeof i13.ScContragentsModule, typeof i14.ScContactsModule], [typeof i1.ScSignInFormComponent, typeof i2.ScSignInFormByPhoneComponent, typeof i3.ScSignInFormByEmailComponent, typeof i4.ScSignUpFormComponent]>;
|
23
22
|
static ɵinj: i0.ɵɵInjectorDeclaration<ScAuthModule>;
|
24
23
|
}
|
@@ -1,22 +1,26 @@
|
|
1
1
|
import { EventEmitter, OnInit } from '@angular/core';
|
2
2
|
import { FormControl } from '@angular/forms';
|
3
3
|
import { ScCartItem, ScIUrls, ScProduct } from '@snabcentr/client-core';
|
4
|
-
import { Observable } from 'rxjs';
|
5
4
|
import { TuiPreviewDialogService } from '@taiga-ui/addon-preview';
|
6
|
-
import {
|
5
|
+
import { Observable } from 'rxjs';
|
6
|
+
import { ScUnitsHelper } from '../../helpers/sc-units-helper';
|
7
7
|
import * as i0 from "@angular/core";
|
8
8
|
/**
|
9
9
|
* Компонент карточки элемента корзины.
|
10
10
|
*/
|
11
11
|
export declare class ScCartItemMobileComponent implements OnInit {
|
12
|
-
readonly unitsHelper:
|
12
|
+
readonly unitsHelper: ScUnitsHelper;
|
13
13
|
private readonly previewDialogService;
|
14
14
|
private readonly urls;
|
15
15
|
private readonly pathImageNotFound;
|
16
16
|
/**
|
17
17
|
* Элемент корзины.
|
18
18
|
*/
|
19
|
-
|
19
|
+
set cartItem(data: ScCartItem | undefined);
|
20
|
+
/**
|
21
|
+
* Элемент корзины.
|
22
|
+
*/
|
23
|
+
get cartItem(): ScCartItem | undefined;
|
20
24
|
/**
|
21
25
|
* Ссылка на представление спецификации.
|
22
26
|
*/
|
@@ -25,14 +29,6 @@ export declare class ScCartItemMobileComponent implements OnInit {
|
|
25
29
|
* {@link FormControl} поля ввода количества товара в корзине.
|
26
30
|
*/
|
27
31
|
quantityControl: FormControl<number | null>;
|
28
|
-
/**
|
29
|
-
* Элемент корзины.
|
30
|
-
*/
|
31
|
-
set cartItem(data: ScCartItem | undefined);
|
32
|
-
/**
|
33
|
-
* Элемент корзины.
|
34
|
-
*/
|
35
|
-
get cartItem(): ScCartItem | undefined;
|
36
32
|
/**
|
37
33
|
* {@link Observable} изменения количества товара в корзине.
|
38
34
|
*/
|
@@ -50,9 +46,9 @@ export declare class ScCartItemMobileComponent implements OnInit {
|
|
50
46
|
*/
|
51
47
|
clickCardEvent: EventEmitter<void>;
|
52
48
|
/**
|
53
|
-
*
|
49
|
+
* Элемент корзины.
|
54
50
|
*/
|
55
|
-
|
51
|
+
private _cartItem?;
|
56
52
|
/**
|
57
53
|
* Инициирует экземпляр класса {@link ScCartItemMobileComponent}.
|
58
54
|
*
|
@@ -61,7 +57,11 @@ export declare class ScCartItemMobileComponent implements OnInit {
|
|
61
57
|
* @param urls Список ссылок на разделы backend'a.
|
62
58
|
* @param pathImageNotFound Путь до изображения 'Товар не найден'.
|
63
59
|
*/
|
64
|
-
constructor(unitsHelper:
|
60
|
+
constructor(unitsHelper: ScUnitsHelper, previewDialogService: TuiPreviewDialogService, urls: ScIUrls, pathImageNotFound: string);
|
61
|
+
/**
|
62
|
+
* Продукт элемента корзины.
|
63
|
+
*/
|
64
|
+
get product(): ScProduct | undefined;
|
65
65
|
/** @inheritDoc */
|
66
66
|
ngOnInit(): void;
|
67
67
|
/**
|
@@ -1,128 +1,34 @@
|
|
1
|
-
import { ChangeDetectorRef
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
import { TuiSizeS, TuiSizeXS } from '@taiga-ui/core';
|
5
|
-
import { Observable } from 'rxjs';
|
6
|
-
import { UnitsHelper } from '../../helpers/sc-units-helper';
|
1
|
+
import { ChangeDetectorRef } from '@angular/core';
|
2
|
+
import { TuiSizeS } from '@taiga-ui/core';
|
3
|
+
import { AbstractScPriceCard } from '../../directives';
|
7
4
|
import * as i0 from "@angular/core";
|
8
5
|
/**
|
9
6
|
* Компонент карточки товара.
|
10
7
|
*/
|
11
|
-
export declare class ScPriceCardComponent {
|
12
|
-
readonly unitsHelper: UnitsHelper;
|
13
|
-
private readonly authService;
|
14
|
-
private readonly warehouseService;
|
15
|
-
private readonly urls;
|
16
|
-
private readonly pathImageNotFound;
|
17
|
-
readonly search$: Observable<string>;
|
8
|
+
export declare class ScPriceCardComponent extends AbstractScPriceCard {
|
18
9
|
private readonly cdr;
|
19
|
-
private readonly imageHelper;
|
20
|
-
/**
|
21
|
-
* Позиция товара в корзине.
|
22
|
-
*
|
23
|
-
* TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].
|
24
|
-
*/
|
25
|
-
get cartItem(): ScCartItem | undefined;
|
26
|
-
/**
|
27
|
-
* Позиция товара в корзине
|
28
|
-
*
|
29
|
-
* TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].
|
30
|
-
*/
|
31
|
-
set cartItem(value: ScCartItem | undefined);
|
32
|
-
/**
|
33
|
-
* Признак того, что этот компонент отображается на мобильном устройстве.
|
34
|
-
*/
|
35
|
-
readonly isMobile: boolean;
|
36
|
-
/**
|
37
|
-
* Признак, что необходимо отобразить лоадер для поля ввода количества товара.
|
38
|
-
*/
|
39
|
-
quantityShowLoader: boolean;
|
40
|
-
/**
|
41
|
-
* Признак, что необходимо отобразить лоадер для кнопки избранных товаров и категорий.
|
42
|
-
*/
|
43
|
-
favoriteShowLoader: boolean;
|
44
|
-
/**
|
45
|
-
* Признак, что необходимо отобразить поле ввода количества товара.
|
46
|
-
*/
|
47
|
-
showQuantityControl: boolean;
|
48
|
-
/**
|
49
|
-
* Объект товара.
|
50
|
-
*
|
51
|
-
* TODO: Сделать товар наблюдаемой переменной после реализации TASK:[#7144].
|
52
|
-
*/
|
53
|
-
product?: ScProduct;
|
54
|
-
/**
|
55
|
-
* Событие нажатия на кнопку "В избранное".
|
56
|
-
*/
|
57
|
-
clickFavoriteEvent: EventEmitter<void>;
|
58
|
-
/**
|
59
|
-
* Событие нажатия на кнопку "В корзину".
|
60
|
-
*/
|
61
|
-
clickAddToCartEvent: EventEmitter<ScProduct>;
|
62
|
-
/**
|
63
|
-
* Событие нажатия на кнопку очистки количества товара.
|
64
|
-
*/
|
65
|
-
clickClearEvent: EventEmitter<ScCartItem>;
|
66
|
-
/**
|
67
|
-
* Событие нажатия на карточку товара.
|
68
|
-
*/
|
69
|
-
clickCardEvent: EventEmitter<void>;
|
70
|
-
/**
|
71
|
-
* {@link Observable} изменения выбранного склада.
|
72
|
-
*/
|
73
|
-
warehouseSelect$: Observable<ScIWarehouse | null>;
|
74
|
-
/**
|
75
|
-
* {@link FormControl} поля ввода количества товара в корзине.
|
76
|
-
*/
|
77
|
-
quantityControl: FormControl<number | null>;
|
78
|
-
/**
|
79
|
-
* {@link Observable} изменения количества товара в корзине.
|
80
|
-
*/
|
81
|
-
quantityValueChanges: Observable<number | null>;
|
82
|
-
/**
|
83
|
-
* {@link Observable} изменения статуса авторизации.
|
84
|
-
*/
|
85
|
-
readonly authStatus$: Observable<boolean>;
|
86
10
|
/**
|
87
11
|
* Размер компонента.
|
88
12
|
*/
|
89
|
-
size: TuiSizeS
|
13
|
+
size: TuiSizeS;
|
90
14
|
/**
|
91
|
-
*
|
92
|
-
*
|
93
|
-
* TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].
|
15
|
+
* Признак того, что этот компонент отображается на мобильном устройстве.
|
94
16
|
*/
|
95
|
-
|
17
|
+
protected readonly isMobile: boolean;
|
96
18
|
/**
|
97
19
|
* Инициирует экземпляр класса {@link ScPriceCardComponent}.
|
98
20
|
*
|
99
|
-
* @param unitsHelper Объект-хэлпер для работы со значениями единиц измерения товара.
|
100
|
-
* @param authService Сервис аутентификации пользователей.
|
101
|
-
* @param warehouseService Сервис для работы со складами.
|
102
|
-
* @param urls Список ссылок на разделы backend'a.
|
103
|
-
* @param pathImageNotFound Путь до изображения 'Товар не найден'.
|
104
|
-
* @param search$ Провайдер поиска терма.
|
105
21
|
* @param cdr Объект для работы с обнаружением изменений.
|
106
|
-
* @param imageHelper Хелпер для работы с изображениями товара.
|
107
|
-
*/
|
108
|
-
constructor(unitsHelper: UnitsHelper, authService: ScAuthService, warehouseService: ScWarehouseService, urls: ScIUrls, pathImageNotFound: string, search$: Observable<string>, cdr: ChangeDetectorRef, imageHelper: ScImageHelper);
|
109
|
-
/**
|
110
|
-
* Конвертация размера для компонента sc-input-quantity.
|
111
|
-
* TODO: Решить проблему с функционалом size для разных платформ.
|
112
|
-
*/
|
113
|
-
get getQuantitySize(): TuiSizeS;
|
114
|
-
/**
|
115
|
-
* Признак, что нужно показать скелетон.
|
116
22
|
*/
|
117
|
-
|
23
|
+
constructor(cdr: ChangeDetectorRef);
|
118
24
|
/**
|
119
|
-
*
|
25
|
+
* Признак того, что компонент находится в корзине.
|
120
26
|
*/
|
121
|
-
|
27
|
+
get isInCart(): boolean;
|
122
28
|
/**
|
123
29
|
* Устанавливает компонент в очередь на обновление.
|
124
30
|
*/
|
125
31
|
markForCheck(): void;
|
126
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScPriceCardComponent, never>;
|
127
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ScPriceCardComponent, "sc-price-card", never, { "
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScPriceCardComponent, "sc-price-card", never, { "size": "size"; }, {}, never, never, false>;
|
128
34
|
}
|
@@ -14,12 +14,11 @@ import * as i12 from "../contacts/sc-contacts.module";
|
|
14
14
|
import * as i13 from "@taiga-ui/kit";
|
15
15
|
import * as i14 from "@maskito/angular";
|
16
16
|
import * as i15 from "../form-fields/form-fields.module";
|
17
|
-
import * as i16 from "../directives/carousel-item-hidden/sc-carousel-item-hidden.module";
|
18
17
|
/**
|
19
18
|
* Модуль для отображение контента разделами, с возможностью скрывать и отображать содержимое.
|
20
19
|
*/
|
21
20
|
export declare class ScContragentsModule {
|
22
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScContragentsModule, never>;
|
23
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ScContragentsModule, [typeof i1.ScContragentsAccordionComponent, typeof i2.ScContragentsAccordionItemComponent, typeof i3.ScNewContragentBankAccountsFormComponent, typeof i4.ScAddContragentBankAccountsDialogComponent, typeof i5.ScAddContragentDialogComponent, typeof i6.ScNewContragentFormComponent], [typeof i7.FormsModule, typeof i7.ReactiveFormsModule, typeof i8.CommonModule, typeof i9.ScAccordionModule, typeof i10.TuiButtonModule, typeof i10.TuiModeModule, typeof i10.TuiLoaderModule, typeof i11.TuiLetModule, typeof i10.TuiNotificationModule, typeof i12.ScContactsModule, typeof i13.TuiFieldErrorPipeModule, typeof i10.TuiErrorModule, typeof i13.TuiSelectModule, typeof i10.TuiDataListModule, typeof i13.TuiDataListWrapperModule, typeof i10.TuiLabelModule, typeof i13.TuiInputModule, typeof i13.TuiInputPhoneModule, typeof i14.MaskitoModule, typeof i15.ScFormFieldsModule, typeof i13.TuiElasticContainerModule, typeof i13.TuiCarouselModule
|
22
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ScContragentsModule, [typeof i1.ScContragentsAccordionComponent, typeof i2.ScContragentsAccordionItemComponent, typeof i3.ScNewContragentBankAccountsFormComponent, typeof i4.ScAddContragentBankAccountsDialogComponent, typeof i5.ScAddContragentDialogComponent, typeof i6.ScNewContragentFormComponent], [typeof i7.FormsModule, typeof i7.ReactiveFormsModule, typeof i8.CommonModule, typeof i9.ScAccordionModule, typeof i10.TuiButtonModule, typeof i10.TuiModeModule, typeof i10.TuiLoaderModule, typeof i11.TuiLetModule, typeof i10.TuiNotificationModule, typeof i12.ScContactsModule, typeof i13.TuiFieldErrorPipeModule, typeof i10.TuiErrorModule, typeof i13.TuiSelectModule, typeof i10.TuiDataListModule, typeof i13.TuiDataListWrapperModule, typeof i10.TuiLabelModule, typeof i13.TuiInputModule, typeof i13.TuiInputPhoneModule, typeof i14.MaskitoModule, typeof i15.ScFormFieldsModule, typeof i13.TuiElasticContainerModule, typeof i13.TuiCarouselModule], [typeof i1.ScContragentsAccordionComponent, typeof i3.ScNewContragentBankAccountsFormComponent, typeof i4.ScAddContragentBankAccountsDialogComponent, typeof i5.ScAddContragentDialogComponent, typeof i6.ScNewContragentFormComponent]>;
|
24
23
|
static ɵinj: i0.ɵɵInjectorDeclaration<ScContragentsModule>;
|
25
24
|
}
|
@@ -0,0 +1,107 @@
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
2
|
+
import { FormControl } from '@angular/forms';
|
3
|
+
import { ScCartItem, ScIWarehouse, ScProduct } from '@snabcentr/client-core';
|
4
|
+
import { Observable } from 'rxjs';
|
5
|
+
import { ScUnitsHelper } from '../../helpers/sc-units-helper';
|
6
|
+
import * as i0 from "@angular/core";
|
7
|
+
/**
|
8
|
+
* Директива абстрактной карточки товара.
|
9
|
+
*/
|
10
|
+
export declare class AbstractScPriceCard {
|
11
|
+
/**
|
12
|
+
* Позиция товара в корзине.
|
13
|
+
*
|
14
|
+
* TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].
|
15
|
+
*/
|
16
|
+
get cartItem(): ScCartItem | undefined;
|
17
|
+
/**
|
18
|
+
* Позиция товара в корзине
|
19
|
+
*
|
20
|
+
* TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].
|
21
|
+
*/
|
22
|
+
set cartItem(value: ScCartItem | undefined);
|
23
|
+
/**
|
24
|
+
* {@link FormControl} поля ввода количества товара в корзине.
|
25
|
+
*/
|
26
|
+
quantityControl: FormControl<number | null>;
|
27
|
+
/**
|
28
|
+
* Признак, что необходимо отобразить лоадер для поля ввода количества товара.
|
29
|
+
*/
|
30
|
+
quantityShowLoader: boolean;
|
31
|
+
/**
|
32
|
+
* Признак, что необходимо отобразить лоадер для кнопки избранных товаров и категорий.
|
33
|
+
*/
|
34
|
+
favoriteShowLoader: boolean;
|
35
|
+
/**
|
36
|
+
* {@link Observable} изменения выбранного склада.
|
37
|
+
*/
|
38
|
+
readonly warehouseSelect$: Observable<ScIWarehouse | null>;
|
39
|
+
/**
|
40
|
+
* {@link Observable} изменения статуса авторизации.
|
41
|
+
*/
|
42
|
+
readonly authStatus$: Observable<boolean>;
|
43
|
+
/**
|
44
|
+
* {@link Observable} поиска терма.
|
45
|
+
*/
|
46
|
+
readonly search$: Observable<string>;
|
47
|
+
/**
|
48
|
+
* Объект товара.
|
49
|
+
*/
|
50
|
+
product?: ScProduct;
|
51
|
+
/**
|
52
|
+
* Признак, что необходимо отобразить поле ввода количества товара.
|
53
|
+
*/
|
54
|
+
showQuantityControl: boolean;
|
55
|
+
/**
|
56
|
+
* Событие нажатия на кнопку "В избранное".
|
57
|
+
*/
|
58
|
+
readonly clickFavoriteEvent: EventEmitter<void>;
|
59
|
+
/**
|
60
|
+
* Событие нажатия на кнопку "В корзину".
|
61
|
+
*/
|
62
|
+
readonly clickAddToCartEvent: EventEmitter<ScProduct>;
|
63
|
+
/**
|
64
|
+
* Событие нажатия на кнопку очистки количества товара.
|
65
|
+
*/
|
66
|
+
readonly clickClearEvent: EventEmitter<ScCartItem>;
|
67
|
+
/**
|
68
|
+
* Событие нажатия на карточку товара.
|
69
|
+
*/
|
70
|
+
readonly clickCardEvent: EventEmitter<void>;
|
71
|
+
/**
|
72
|
+
* Событие нажатия на историю цен.
|
73
|
+
*/
|
74
|
+
readonly clickPriceHistoryEvent: EventEmitter<void>;
|
75
|
+
/**
|
76
|
+
* {@link Observable} изменения количества товара в корзине.
|
77
|
+
*/
|
78
|
+
readonly quantityValueChanges: Observable<number | null>;
|
79
|
+
/**
|
80
|
+
* Экземпляр класса-помощника для работы со значениями единиц измерения товара.
|
81
|
+
*/
|
82
|
+
protected readonly unitsHelper: ScUnitsHelper;
|
83
|
+
/**
|
84
|
+
* Хелпер для работы с изображениями товара.
|
85
|
+
*/
|
86
|
+
private readonly imageHelper;
|
87
|
+
/**
|
88
|
+
* Путь до изображения 'Товар не найден'.
|
89
|
+
*/
|
90
|
+
private readonly pathImageNotFound;
|
91
|
+
/**
|
92
|
+
* Позиция товара в корзине.
|
93
|
+
*
|
94
|
+
* TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].
|
95
|
+
*/
|
96
|
+
private _cartItem?;
|
97
|
+
/**
|
98
|
+
* Признак, что нужно показать скелетон.
|
99
|
+
*/
|
100
|
+
get skeletonVisible(): boolean;
|
101
|
+
/**
|
102
|
+
* Возвращает ссылку на preview-изображение карточки товара.
|
103
|
+
*/
|
104
|
+
getCardImagePreview(): string;
|
105
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AbstractScPriceCard, never>;
|
106
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractScPriceCard, never, never, { "cartItem": "cartItem"; "product": "product"; "showQuantityControl": "showQuantityControl"; }, { "clickFavoriteEvent": "clickFavoriteEvent"; "clickAddToCartEvent": "clickAddToCartEvent"; "clickClearEvent": "clickClearEvent"; "clickCardEvent": "clickCardEvent"; "clickPriceHistoryEvent": "clickPriceHistoryEvent"; "quantityValueChanges": "quantityValueChanges"; }, never, never, false>;
|
107
|
+
}
|
package/directives/index.d.ts
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
export * from './carousel-item-hidden/sc-carousel-item-hidden.directive';
|
2
|
-
export * from './carousel-item-hidden/sc-carousel-item-hidden.module';
|
3
1
|
export * from './next-input-focus/sc-next-input-focus.directive';
|
4
2
|
export * from './next-input-focus/sc-next-input-focus.module';
|
3
|
+
export * from './abstract-price-card/abstract-sc-price-card.directive';
|
@@ -7,7 +7,6 @@ import { TuiButtonModule, TuiDataListModule, TuiErrorModule, TuiLabelModule, Tui
|
|
7
7
|
import { TuiCheckboxLabeledModule, TuiCheckboxModule, TuiDataListWrapperModule, TuiElasticContainerModule, TuiFieldErrorPipeModule, TuiInputModule, TuiInputPasswordModule, TuiInputPhoneModule, TuiSelectModule, } from '@taiga-ui/kit';
|
8
8
|
import { ScContactsModule } from '../contacts/sc-contacts.module';
|
9
9
|
import { ScContragentsModule } from '../contragents/sc-contragents.module';
|
10
|
-
import { ScCarouselItemHiddenModule } from '../directives';
|
11
10
|
import { ScFormFieldsModule } from '../form-fields/form-fields.module';
|
12
11
|
import { ScVerificationModule } from '../verification';
|
13
12
|
import { ScSignInFormComponent } from './sc-sign-in-form/sc-sign-in-form.component';
|
@@ -47,8 +46,7 @@ ScAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
47
46
|
TuiSelectModule,
|
48
47
|
TuiElasticContainerModule,
|
49
48
|
ScContragentsModule,
|
50
|
-
ScContactsModule,
|
51
|
-
ScCarouselItemHiddenModule], exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent] });
|
49
|
+
ScContactsModule], exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent] });
|
52
50
|
ScAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScAuthModule, imports: [CommonModule,
|
53
51
|
FormsModule,
|
54
52
|
ReactiveFormsModule,
|
@@ -75,8 +73,7 @@ ScAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
75
73
|
TuiSelectModule,
|
76
74
|
TuiElasticContainerModule,
|
77
75
|
ScContragentsModule,
|
78
|
-
ScContactsModule
|
79
|
-
ScCarouselItemHiddenModule] });
|
76
|
+
ScContactsModule] });
|
80
77
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScAuthModule, decorators: [{
|
81
78
|
type: NgModule,
|
82
79
|
args: [{
|
@@ -109,9 +106,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
109
106
|
TuiElasticContainerModule,
|
110
107
|
ScContragentsModule,
|
111
108
|
ScContactsModule,
|
112
|
-
ScCarouselItemHiddenModule,
|
113
109
|
],
|
114
110
|
exports: [ScSignInFormComponent, ScSignInFormByPhoneComponent, ScSignInFormByEmailComponent, ScSignUpFormComponent],
|
115
111
|
}]
|
116
112
|
}] });
|
117
|
-
//# sourceMappingURL=data:application/json;base64,
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvYXV0aC9zYy1hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakwsT0FBTyxFQUNILHdCQUF3QixFQUN4QixpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDdkIsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsZUFBZSxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrRUFBK0UsQ0FBQztBQUM3SCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrRUFBK0UsQ0FBQztBQUM3SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFFakY7O0dBRUc7QUFrQ0gsTUFBTSxPQUFPLFlBQVk7O3lHQUFaLFlBQVk7MEdBQVosWUFBWSxpQkFoQ04scUJBQXFCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUscUJBQXFCLGFBRW5ILFlBQVk7UUFDWixXQUFXO1FBQ1gsbUJBQW1CO1FBQ25CLHNCQUFzQjtRQUN0QixjQUFjO1FBQ2QsNEJBQTRCO1FBQzVCLGFBQWE7UUFDYixlQUFlO1FBQ2YsY0FBYztRQUNkLGFBQWE7UUFDYix1QkFBdUI7UUFDdkIsY0FBYztRQUNkLFlBQVk7UUFDWixlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLGFBQWE7UUFDYixvQkFBb0I7UUFDcEIsa0JBQWtCO1FBQ2xCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLHlCQUF5QjtRQUN6Qix3QkFBd0I7UUFDeEIsZUFBZTtRQUNmLHlCQUF5QjtRQUN6QixtQkFBbUI7UUFDbkIsZ0JBQWdCLGFBRVYscUJBQXFCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUscUJBQXFCOzBHQUV6RyxZQUFZLFlBOUJqQixZQUFZO1FBQ1osV0FBVztRQUNYLG1CQUFtQjtRQUNuQixzQkFBc0I7UUFDdEIsY0FBYztRQUNkLDRCQUE0QjtRQUM1QixhQUFhO1FBQ2IsZUFBZTtRQUNmLGNBQWM7UUFDZCxhQUFhO1FBQ2IsdUJBQXVCO1FBQ3ZCLGNBQWM7UUFDZCxZQUFZO1FBQ1osZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixhQUFhO1FBQ2Isb0JBQW9CO1FBQ3BCLGtCQUFrQjtRQUNsQixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLHdCQUF3QjtRQUN4Qix5QkFBeUI7UUFDekIsd0JBQXdCO1FBQ3hCLGVBQWU7UUFDZix5QkFBeUI7UUFDekIsbUJBQW1CO1FBQ25CLGdCQUFnQjsyRkFJWCxZQUFZO2tCQWpDeEIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxxQkFBcUIsQ0FBQztvQkFDeEgsT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsY0FBYzt3QkFDZCw0QkFBNEI7d0JBQzVCLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixrQkFBa0I7d0JBQ2xCLGlCQUFpQjt3QkFDakIsaUJBQWlCO3dCQUNqQix3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLHlCQUF5Qjt3QkFDekIsbUJBQW1CO3dCQUNuQixnQkFBZ0I7cUJBQ25CO29CQUNELE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLHFCQUFxQixDQUFDO2lCQUN0SCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXNraXRvTW9kdWxlIH0gZnJvbSAnQG1hc2tpdG8vYW5ndWxhcic7XG5pbXBvcnQgeyBUdWlMZXRNb2R1bGUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aUJ1dHRvbk1vZHVsZSwgVHVpRGF0YUxpc3RNb2R1bGUsIFR1aUVycm9yTW9kdWxlLCBUdWlMYWJlbE1vZHVsZSwgVHVpTGlua01vZHVsZSwgVHVpTG9hZGVyTW9kdWxlLCBUdWlNb2RlTW9kdWxlLCBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBUdWlDaGVja2JveExhYmVsZWRNb2R1bGUsXG4gICAgVHVpQ2hlY2tib3hNb2R1bGUsXG4gICAgVHVpRGF0YUxpc3RXcmFwcGVyTW9kdWxlLFxuICAgIFR1aUVsYXN0aWNDb250YWluZXJNb2R1bGUsXG4gICAgVHVpRmllbGRFcnJvclBpcGVNb2R1bGUsXG4gICAgVHVpSW5wdXRNb2R1bGUsXG4gICAgVHVpSW5wdXRQYXNzd29yZE1vZHVsZSxcbiAgICBUdWlJbnB1dFBob25lTW9kdWxlLFxuICAgIFR1aVNlbGVjdE1vZHVsZSxcbn0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5cbmltcG9ydCB7IFNjQ29udGFjdHNNb2R1bGUgfSBmcm9tICcuLi9jb250YWN0cy9zYy1jb250YWN0cy5tb2R1bGUnO1xuaW1wb3J0IHsgU2NDb250cmFnZW50c01vZHVsZSB9IGZyb20gJy4uL2NvbnRyYWdlbnRzL3NjLWNvbnRyYWdlbnRzLm1vZHVsZSc7XG5pbXBvcnQgeyBTY0Zvcm1GaWVsZHNNb2R1bGUgfSBmcm9tICcuLi9mb3JtLWZpZWxkcy9mb3JtLWZpZWxkcy5tb2R1bGUnO1xuaW1wb3J0IHsgU2NWZXJpZmljYXRpb25Nb2R1bGUgfSBmcm9tICcuLi92ZXJpZmljYXRpb24nO1xuaW1wb3J0IHsgU2NTaWduSW5Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9zYy1zaWduLWluLWZvcm0vc2Mtc2lnbi1pbi1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTY1NpZ25JbkZvcm1CeUVtYWlsQ29tcG9uZW50IH0gZnJvbSAnLi9zYy1zaWduLWluLWZvcm0vc2Mtc2lnbi1pbi1mb3JtLWJ5LWVtYWlsL3NjLXNpZ24taW4tZm9ybS1ieS1lbWFpbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2NTaWduSW5Gb3JtQnlQaG9uZUNvbXBvbmVudCB9IGZyb20gJy4vc2Mtc2lnbi1pbi1mb3JtL3NjLXNpZ24taW4tZm9ybS1ieS1waG9uZS9zYy1zaWduLWluLWZvcm0tYnktcGhvbmUuY29tcG9uZW50JztcbmltcG9ydCB7IFNjU2lnblVwRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vc2lnbi11cC1mb3JtL3NjLXNpZ24tdXAtZm9ybS5jb21wb25lbnQnO1xuXG4vKipcbiAqINCc0L7QtNGD0LvRjCDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW1NjU2lnbkluRm9ybUNvbXBvbmVudCwgU2NTaWduSW5Gb3JtQnlQaG9uZUNvbXBvbmVudCwgU2NTaWduSW5Gb3JtQnlFbWFpbENvbXBvbmVudCwgU2NTaWduVXBGb3JtQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0UGFzc3dvcmRNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0TW9kdWxlLFxuICAgICAgICBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlLFxuICAgICAgICBUdWlMaW5rTW9kdWxlLFxuICAgICAgICBUdWlCdXR0b25Nb2R1bGUsXG4gICAgICAgIFR1aUxhYmVsTW9kdWxlLFxuICAgICAgICBUdWlNb2RlTW9kdWxlLFxuICAgICAgICBUdWlGaWVsZEVycm9yUGlwZU1vZHVsZSxcbiAgICAgICAgVHVpRXJyb3JNb2R1bGUsXG4gICAgICAgIFR1aUxldE1vZHVsZSxcbiAgICAgICAgVHVpTG9hZGVyTW9kdWxlLFxuICAgICAgICBUdWlJbnB1dFBob25lTW9kdWxlLFxuICAgICAgICBNYXNraXRvTW9kdWxlLFxuICAgICAgICBTY1ZlcmlmaWNhdGlvbk1vZHVsZSxcbiAgICAgICAgU2NGb3JtRmllbGRzTW9kdWxlLFxuICAgICAgICBUdWlEYXRhTGlzdE1vZHVsZSxcbiAgICAgICAgVHVpQ2hlY2tib3hNb2R1bGUsXG4gICAgICAgIFR1aUNoZWNrYm94TGFiZWxlZE1vZHVsZSxcbiAgICAgICAgVHVpRWxhc3RpY0NvbnRhaW5lck1vZHVsZSxcbiAgICAgICAgVHVpRGF0YUxpc3RXcmFwcGVyTW9kdWxlLFxuICAgICAgICBUdWlTZWxlY3RNb2R1bGUsXG4gICAgICAgIFR1aUVsYXN0aWNDb250YWluZXJNb2R1bGUsXG4gICAgICAgIFNjQ29udHJhZ2VudHNNb2R1bGUsXG4gICAgICAgIFNjQ29udGFjdHNNb2R1bGUsXG4gICAgXSxcbiAgICBleHBvcnRzOiBbU2NTaWduSW5Gb3JtQ29tcG9uZW50LCBTY1NpZ25JbkZvcm1CeVBob25lQ29tcG9uZW50LCBTY1NpZ25JbkZvcm1CeUVtYWlsQ29tcG9uZW50LCBTY1NpZ25VcEZvcm1Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBTY0F1dGhNb2R1bGUge31cbiJdfQ==
|
@@ -1,8 +1,9 @@
|
|
1
|
+
/* eslint-disable no-underscore-dangle */
|
1
2
|
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';
|
2
3
|
import { FormControl } from '@angular/forms';
|
3
4
|
import { SC_PATH_IMAGE_NOT_FOUND, SC_URLS } from '@snabcentr/client-core';
|
4
|
-
import { skip } from 'rxjs';
|
5
5
|
import { TuiPreviewDialogService } from '@taiga-ui/addon-preview';
|
6
|
+
import { skip } from 'rxjs';
|
6
7
|
import * as i0 from "@angular/core";
|
7
8
|
import * as i1 from "../../helpers/sc-units-helper";
|
8
9
|
import * as i2 from "@angular/common";
|
@@ -80,7 +81,7 @@ export class ScCartItemMobileComponent {
|
|
80
81
|
* Отобразить спецификацию.
|
81
82
|
*/
|
82
83
|
showSpecification() {
|
83
|
-
this.previewDialogService.open(this.specificationPreviewRef
|
84
|
+
this.previewDialogService.open(this.specificationPreviewRef ?? '').subscribe();
|
84
85
|
}
|
85
86
|
/**
|
86
87
|
* Возвращает ссылку на изображение карточки товара.
|
@@ -89,12 +90,12 @@ export class ScCartItemMobileComponent {
|
|
89
90
|
return this.product?.getImagePreview(this.urls.imgServerUrl) ?? this.urls.imgServerUrl + this.pathImageNotFound;
|
90
91
|
}
|
91
92
|
}
|
92
|
-
ScCartItemMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartItemMobileComponent, deps: [{ token: i1.
|
93
|
+
ScCartItemMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartItemMobileComponent, deps: [{ token: i1.ScUnitsHelper }, { token: TuiPreviewDialogService }, { token: SC_URLS }, { token: SC_PATH_IMAGE_NOT_FOUND }], target: i0.ɵɵFactoryTarget.Component });
|
93
94
|
ScCartItemMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCartItemMobileComponent, selector: "sc-cart-item-mobile", inputs: { cartItem: "cartItem" }, outputs: { quantityValueChanges: "quantityValueChanges", clickDeleteEvent: "clickDeleteEvent", clickSettingsEvent: "clickSettingsEvent", clickCardEvent: "clickCardEvent" }, viewQueries: [{ propertyName: "specificationPreviewRef", first: true, predicate: ["specificationPreview"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"cartItem && product; else skeleton\">\n <!-- TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton size=\"m\" icon=\"scIconVerticalThreeDots\" appearance=\"float\" tuiMode=\"onLight\" class=\"!absolute right-0 top-0\"></button> -->\n <div class=\"flex bg-white border border-tui-base-04 shadow-sc-2 rounded-xl min-w-[18rem] gap-2 p-2\">\n <div class=\"flex w-40 items-center\">\n <img (click)=\"clickCardEvent.emit()\" [src]=\"getCardImage()\" [alt]=\"product.name\" class=\"rounded-xl w-full max-h-full object-cover\" />\n </div>\n <div class=\"flex flex-col sm:flex-row sm:gap-5 items-center gap-2 justify-between w-full\">\n <div class=\"flex flex-col self-start max-w-full gap-1\">\n <a tuiLink (click)=\"clickCardEvent.emit()\">\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n\n <div class=\"flex flex-wrap gap-y-1 gap-x-2 w-full text-xs text-tui-base-05\">\n <p *ngIf=\"product.pack\">\u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}</p>\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-y-1 gap-x-2 w-full\">\n <p *ngIf=\"!product.priceInRub\" class=\"font-bold\">{{ product.costString }}</p>\n <p class=\"font-bold text-xs text-tui-base-05\">{{ product.costRubString }}</p>\n <span *ngIf=\"product.discount\" class=\"flex items-center\">\n <span class=\"line-through\">{{ product.discountCostString }}</span> \n <span class=\"text-tui-success-fill font-bold\"> -{{ product.discount.percent }}% </span>\n <tui-svg src=\"tuiIconInfoLarge\" [tuiHint]=\"discountHint\" [tuiHintShowDelay]=\"100\" tuiHintDirection=\"top\" class=\"!text-xs !h-4\"></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n </div>\n\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n\n <div *ngIf=\"cartItem.height || cartItem.length || cartItem.width\" class=\"flex gap-1 items-center\">\n <button\n tuiIconButton\n icon=\"tuiIconSettings\"\n (click)=\"clickSettingsEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n tuiMode=\"onLight\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-wrap gap-x-2 font-thin text-xs text-tui-base-04\">\n <p *ngIf=\"cartItem.marker\">\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ cartItem.marker }}</p>\n <p *ngIf=\"cartItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ cartItem.width }} \u043C.</p>\n <ng-container *ngIf=\"cartItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ cartItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"cartItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} \u043C.</p>\n </ng-template>\n </div>\n </div>\n\n <a tuiLink *ngIf=\"cartItem.specificationImgUrl\" (click)=\"showSpecification()\">\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a>\n <ng-template #specificationPreview let-preview>\n <tui-preview [rotatable]=\"false\" [zoomable]=\"false\">\n <img *polymorpheusOutlet=\"cartItem.specificationImgUrl as src\" alt=\"preview\" [src]=\"cartItem.specificationImgUrl\" />\n <button icon=\"tuiIconClose\" title=\"Close\" tuiIconButton tuiPreviewAction type=\"button\" (click)=\"preview.complete()\"></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"flex flex-col self-start gap-1 sm:mr-9 sm:self-center\">\n <div class=\"flex gap-2\">\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"quantityControl\"\n [formControl]=\"quantityControl\"\n [showCross]=\"false\"\n size=\"s\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-28\"\n ></sc-input-quantity>\n <button tuiIconButton icon=\"tuiIconTrash2\" shape=\"rounded\" size=\"xs\" (click)=\"clickDeleteEvent.emit()\"></button>\n </div>\n <p class=\"font-bold text-tui-text-01 text-sm\">\u0418\u0442\u043E\u0433\u043E: {{ cartItem.costRub | tuiFormatNumber }} {{ 'RUB' | tuiCurrency }}</p>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #skeleton>\n <div class=\"flex gap-2 w-full\">\n <div class=\"h-20 w-20 bg-tui-base-02 rounded-xl\"></div>\n <div class=\"flex flex-col grow gap-2.5 bg-white\">\n <div class=\"w-full h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-3/5 h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-4/5 h-4 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TuiLinkComponent, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo", "icon", "iconAlign", "iconRotated", "mode"], exportAs: ["tuiLink"] }, { kind: "component", type: i4.ScInputQuantityComponent, selector: "sc-input-quantity", inputs: ["step", "showLoader", "showCross", "appearance", "isDisabled", "size"], outputs: ["clickClearEvent"] }, { kind: "component", type: i5.ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint", "fromMain"] }, { kind: "component", type: i3.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "directive", type: i3.TuiModeDirective, selector: "[tuiMode]", inputs: ["tuiMode"] }, { kind: "component", type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i3.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHint", "tuiHintContext", "tuiHintAppearance"] }, { kind: "directive", type: i3.TuiHintDriverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)" }, { kind: "directive", type: i3.TuiHintHoverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintShowDelay", "tuiHintHideDelay"], exportAs: ["tuiHintHover"] }, { kind: "directive", type: i3.TuiHintPositionDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintDirection"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { kind: "directive", type: i7.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }, { kind: "directive", type: i8.PolymorpheusOutletDirective, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "pipe", type: i9.TuiCurrencyPipe, name: "tuiCurrency" }, { kind: "pipe", type: i3.TuiFormatNumberPipe, name: "tuiFormatNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
94
95
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartItemMobileComponent, decorators: [{
|
95
96
|
type: Component,
|
96
97
|
args: [{ selector: 'sc-cart-item-mobile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"cartItem && product; else skeleton\">\n <!-- TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton size=\"m\" icon=\"scIconVerticalThreeDots\" appearance=\"float\" tuiMode=\"onLight\" class=\"!absolute right-0 top-0\"></button> -->\n <div class=\"flex bg-white border border-tui-base-04 shadow-sc-2 rounded-xl min-w-[18rem] gap-2 p-2\">\n <div class=\"flex w-40 items-center\">\n <img (click)=\"clickCardEvent.emit()\" [src]=\"getCardImage()\" [alt]=\"product.name\" class=\"rounded-xl w-full max-h-full object-cover\" />\n </div>\n <div class=\"flex flex-col sm:flex-row sm:gap-5 items-center gap-2 justify-between w-full\">\n <div class=\"flex flex-col self-start max-w-full gap-1\">\n <a tuiLink (click)=\"clickCardEvent.emit()\">\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n\n <div class=\"flex flex-wrap gap-y-1 gap-x-2 w-full text-xs text-tui-base-05\">\n <p *ngIf=\"product.pack\">\u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}</p>\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n </div>\n\n <div class=\"flex flex-wrap items-center gap-y-1 gap-x-2 w-full\">\n <p *ngIf=\"!product.priceInRub\" class=\"font-bold\">{{ product.costString }}</p>\n <p class=\"font-bold text-xs text-tui-base-05\">{{ product.costRubString }}</p>\n <span *ngIf=\"product.discount\" class=\"flex items-center\">\n <span class=\"line-through\">{{ product.discountCostString }}</span> \n <span class=\"text-tui-success-fill font-bold\"> -{{ product.discount.percent }}% </span>\n <tui-svg src=\"tuiIconInfoLarge\" [tuiHint]=\"discountHint\" [tuiHintShowDelay]=\"100\" tuiHintDirection=\"top\" class=\"!text-xs !h-4\"></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n </div>\n\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n\n <div *ngIf=\"cartItem.height || cartItem.length || cartItem.width\" class=\"flex gap-1 items-center\">\n <button\n tuiIconButton\n icon=\"tuiIconSettings\"\n (click)=\"clickSettingsEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n tuiMode=\"onLight\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-wrap gap-x-2 font-thin text-xs text-tui-base-04\">\n <p *ngIf=\"cartItem.marker\">\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ cartItem.marker }}</p>\n <p *ngIf=\"cartItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ cartItem.width }} \u043C.</p>\n <ng-container *ngIf=\"cartItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ cartItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"cartItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} \u043C.</p>\n </ng-template>\n </div>\n </div>\n\n <a tuiLink *ngIf=\"cartItem.specificationImgUrl\" (click)=\"showSpecification()\">\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a>\n <ng-template #specificationPreview let-preview>\n <tui-preview [rotatable]=\"false\" [zoomable]=\"false\">\n <img *polymorpheusOutlet=\"cartItem.specificationImgUrl as src\" alt=\"preview\" [src]=\"cartItem.specificationImgUrl\" />\n <button icon=\"tuiIconClose\" title=\"Close\" tuiIconButton tuiPreviewAction type=\"button\" (click)=\"preview.complete()\"></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"flex flex-col self-start gap-1 sm:mr-9 sm:self-center\">\n <div class=\"flex gap-2\">\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"quantityControl\"\n [formControl]=\"quantityControl\"\n [showCross]=\"false\"\n size=\"s\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-28\"\n ></sc-input-quantity>\n <button tuiIconButton icon=\"tuiIconTrash2\" shape=\"rounded\" size=\"xs\" (click)=\"clickDeleteEvent.emit()\"></button>\n </div>\n <p class=\"font-bold text-tui-text-01 text-sm\">\u0418\u0442\u043E\u0433\u043E: {{ cartItem.costRub | tuiFormatNumber }} {{ 'RUB' | tuiCurrency }}</p>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #skeleton>\n <div class=\"flex gap-2 w-full\">\n <div class=\"h-20 w-20 bg-tui-base-02 rounded-xl\"></div>\n <div class=\"flex flex-col grow gap-2.5 bg-white\">\n <div class=\"w-full h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-3/5 h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-4/5 h-4 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n" }]
|
97
|
-
}], ctorParameters: function () { return [{ type: i1.
|
98
|
+
}], ctorParameters: function () { return [{ type: i1.ScUnitsHelper }, { type: i7.TuiPreviewDialogService, decorators: [{
|
98
99
|
type: Inject,
|
99
100
|
args: [TuiPreviewDialogService]
|
100
101
|
}] }, { type: undefined, decorators: [{
|
@@ -103,11 +104,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
103
104
|
}] }, { type: undefined, decorators: [{
|
104
105
|
type: Inject,
|
105
106
|
args: [SC_PATH_IMAGE_NOT_FOUND]
|
106
|
-
}] }]; }, propDecorators: {
|
107
|
+
}] }]; }, propDecorators: { cartItem: [{
|
108
|
+
type: Input
|
109
|
+
}], specificationPreviewRef: [{
|
107
110
|
type: ViewChild,
|
108
111
|
args: ['specificationPreview']
|
109
|
-
}], cartItem: [{
|
110
|
-
type: Input
|
111
112
|
}], quantityValueChanges: [{
|
112
113
|
type: Output
|
113
114
|
}], clickDeleteEvent: [{
|
@@ -117,4 +118,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
117
118
|
}], clickCardEvent: [{
|
118
119
|
type: Output
|
119
120
|
}] } });
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2FydC1pdGVtLW1vYmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9jYXJ0LWl0ZW0tbW9iaWxlL3NjLWNhcnQtaXRlbS1tb2JpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvY2FydC1pdGVtLW1vYmlsZS9zYy1jYXJ0LWl0ZW0tbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE9BQU8sRUFBa0MsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRyxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7OztBQUlsRTs7R0FFRztBQU1ILE1BQU0sT0FBTyx5QkFBeUI7SUFtRWxDOzs7Ozs7O09BT0c7SUFDSCxZQUNvQixXQUF3QixFQUV2QixvQkFBNkMsRUFDNUIsSUFBYSxFQUNHLGlCQUF5QjtRQUozRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUV2Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzVCLFNBQUksR0FBSixJQUFJLENBQVM7UUFDRyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQVE7UUFwRS9FOztXQUVHO1FBQ0ksb0JBQWUsR0FBK0IsSUFBSSxXQUFXLENBQWdCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBcUI3Rzs7V0FFRztRQUVJLHlCQUFvQixHQUE4QixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekc7O1dBRUc7UUFFSSxxQkFBZ0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV2RTs7V0FFRztRQUVJLHVCQUFrQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXpFOztXQUVHO1FBRUksbUJBQWMsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQXVCbEUsQ0FBQztJQWhFSjs7T0FFRztJQUNILElBQ1csUUFBUSxDQUFDLElBQTRCO1FBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUEwQkQ7O09BRUc7SUFDSCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFrQkQsa0JBQWtCO0lBQ1gsUUFBUTtRQUNYLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztJQUNsRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDcEgsQ0FBQzs7c0hBcEdRLHlCQUF5Qiw2Q0E2RXRCLHVCQUF1QixhQUV2QixPQUFPLGFBQ1AsdUJBQXVCOzBHQWhGMUIseUJBQXlCLDJZQ2hCdEMseXFNQThGQTsyRkQ5RWEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNJLHFCQUFxQixtQkFFZCx1QkFBdUIsQ0FBQyxNQUFNOzswQkErRTFDLE1BQU07MkJBQUMsdUJBQXVCOzswQkFFOUIsTUFBTTsyQkFBQyxPQUFPOzswQkFDZCxNQUFNOzJCQUFDLHVCQUF1Qjs0Q0F0RWxCLHVCQUF1QjtzQkFEdkMsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBWXRCLFFBQVE7c0JBRGxCLEtBQUs7Z0JBb0JDLG9CQUFvQjtzQkFEMUIsTUFBTTtnQkFPQSxnQkFBZ0I7c0JBRHRCLE1BQU07Z0JBT0Esa0JBQWtCO3NCQUR4QixNQUFNO2dCQU9BLGNBQWM7c0JBRHBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNDX1BBVEhfSU1BR0VfTk9UX0ZPVU5ELCBTQ19VUkxTLCBTY0NhcnRJdGVtLCBTY0lVcmxzLCBTY1Byb2R1Y3QgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHNraXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLXByZXZpZXcnO1xuaW1wb3J0IHsgVHVpRGlhbG9nQ29udGV4dCB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFVuaXRzSGVscGVyIH0gZnJvbSAnLi4vLi4vaGVscGVycy9zYy11bml0cy1oZWxwZXInO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQutCw0YDRgtC+0YfQutC4INGN0LvQtdC80LXQvdGC0LAg0LrQvtGA0LfQuNC90YsuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtY2FydC1pdGVtLW1vYmlsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWNhcnQtaXRlbS1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNjQ2FydEl0ZW1Nb2JpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKlxuICAgICAqINCt0LvQtdC80LXQvdGCINC60L7RgNC30LjQvdGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2NhcnRJdGVtPzogU2NDYXJ0SXRlbTtcblxuICAgIC8qKlxuICAgICAqINCh0YHRi9C70LrQsCDQvdCwINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1INGB0L/QtdGG0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdzcGVjaWZpY2F0aW9uUHJldmlldycpXG4gICAgcHJpdmF0ZSByZWFkb25seSBzcGVjaWZpY2F0aW9uUHJldmlld1JlZj86IFRlbXBsYXRlUmVmPFR1aURpYWxvZ0NvbnRleHQ+O1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIEZvcm1Db250cm9sfSDQv9C+0LvRjyDQstCy0L7QtNCwINC60L7Qu9C40YfQtdGB0YLQstCwINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcXVhbnRpdHlDb250cm9sOiBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPiA9IG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPigwLCB7IHVwZGF0ZU9uOiAnYmx1cicgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQrdC70LXQvNC10L3RgiDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY2FydEl0ZW0oZGF0YTogU2NDYXJ0SXRlbSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9jYXJ0SXRlbSA9IGRhdGE7XG5cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucXVhbnRpdHlDb250cm9sLnBhdGNoVmFsdWUoZGF0YS5xdWFudGl0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQrdC70LXQvNC10L3RgiDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNhcnRJdGVtKCk6IFNjQ2FydEl0ZW0gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FydEl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHF1YW50aXR5VmFsdWVDaGFuZ2VzOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0gdGhpcy5xdWFudGl0eUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc2tpcCgxKSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQvdCw0LbQsNGC0LjRjyDQvdCwINC60L3QvtC/0LrRgyBcItCj0LTQsNC70LjRgtGMINC40Lcg0LrQvtGA0LfQuNC90YtcIi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2xpY2tEZWxldGVFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutC90L7Qv9C60YMgXCLQo9C00LDQu9C40YLRjCDQuNC3INC60L7RgNC30LjQvdGLXCIuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrU2V0dGluZ3NFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutCw0YDRgtC+0YfQutGDLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0NhcmRFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC+0LTRg9C60YIg0Y3Qu9C10LzQtdC90YLQsCDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHByb2R1Y3QoKTogU2NQcm9kdWN0IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FydEl0ZW0/LnByb2R1Y3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNC40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NDYXJ0SXRlbU1vYmlsZUNvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdW5pdHNIZWxwZXIg0K3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsC3Qv9C+0LzQvtGJ0L3QuNC60LAg0LTQu9GPINGA0LDQsdC+0YLRiyDRgdC+INC30L3QsNGH0LXQvdC40Y/QvNC4INC10LTQuNC90LjRhiDQuNC30LzQtdGA0LXQvdC40Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqIEBwYXJhbSBwcmV2aWV3RGlhbG9nU2VydmljZSDQodC10YDQstC40YEg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCDQv9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdC+0LPQviDQv9GA0L7RgdC80L7RgtGA0LAuXG4gICAgICogQHBhcmFtIHVybHMg0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQvdCwINGA0LDQt9C00LXQu9GLIGJhY2tlbmQnYS5cbiAgICAgKiBAcGFyYW0gcGF0aEltYWdlTm90Rm91bmQg0J/Rg9GC0Ywg0LTQviDQuNC30L7QsdGA0LDQttC10L3QuNGPICfQotC+0LLQsNGAINC90LUg0L3QsNC50LTQtdC9Jy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSB1bml0c0hlbHBlcjogVW5pdHNIZWxwZXIsXG4gICAgICAgIEBJbmplY3QoVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UpXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcHJldmlld0RpYWxvZ1NlcnZpY2U6IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNDX1VSTFMpIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyxcbiAgICAgICAgQEluamVjdChTQ19QQVRIX0lNQUdFX05PVF9GT1VORCkgcHJpdmF0ZSByZWFkb25seSBwYXRoSW1hZ2VOb3RGb3VuZDogc3RyaW5nXG4gICAgKSB7fVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnF1YW50aXR5VmFsdWVDaGFuZ2VzID0gdGhpcy5xdWFudGl0eUNvbnRyb2wudmFsdWVDaGFuZ2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQvtCx0YDQsNC30LjRgtGMINGB0L/QtdGG0LjRhNC40LrQsNGG0LjRji5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1NwZWNpZmljYXRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLnNwZWNpZmljYXRpb25QcmV2aWV3UmVmIHx8ICcnKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdGB0YvQu9C60YMg0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC1INC60LDRgNGC0L7Rh9C60Lgg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYXJkSW1hZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdD8uZ2V0SW1hZ2VQcmV2aWV3KHRoaXMudXJscy5pbWdTZXJ2ZXJVcmwpID8/IHRoaXMudXJscy5pbWdTZXJ2ZXJVcmwgKyB0aGlzLnBhdGhJbWFnZU5vdEZvdW5kO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjYXJ0SXRlbSAmJiBwcm9kdWN0OyBlbHNlIHNrZWxldG9uXCI+XG4gICAgPCEtLSBUT0RPOiDQndC10L7QsdGF0L7QtNC40LzQsCDRgNC10LDQu9C40LfQsNGG0LjRjyDRhNGD0L3QutGG0LjQvtC90LDQu9CwLlxuICAgIDxidXR0b24gdHVpSWNvbkJ1dHRvbiBzaXplPVwibVwiIGljb249XCJzY0ljb25WZXJ0aWNhbFRocmVlRG90c1wiIGFwcGVhcmFuY2U9XCJmbG9hdFwiIHR1aU1vZGU9XCJvbkxpZ2h0XCIgY2xhc3M9XCIhYWJzb2x1dGUgcmlnaHQtMCB0b3AtMFwiPjwvYnV0dG9uPiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLXR1aS1iYXNlLTA0IHNoYWRvdy1zYy0yIHJvdW5kZWQteGwgbWluLXctWzE4cmVtXSBnYXAtMiBwLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy00MCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxpbWcgKGNsaWNrKT1cImNsaWNrQ2FyZEV2ZW50LmVtaXQoKVwiIFtzcmNdPVwiZ2V0Q2FyZEltYWdlKClcIiBbYWx0XT1cInByb2R1Y3QubmFtZVwiIGNsYXNzPVwicm91bmRlZC14bCB3LWZ1bGwgbWF4LWgtZnVsbCBvYmplY3QtY292ZXJcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgc206ZmxleC1yb3cgc206Z2FwLTUgaXRlbXMtY2VudGVyIGdhcC0yIGp1c3RpZnktYmV0d2VlbiB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHNlbGYtc3RhcnQgbWF4LXctZnVsbCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgIDxhIHR1aUxpbmsgKGNsaWNrKT1cImNsaWNrQ2FyZEV2ZW50LmVtaXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IHByb2R1Y3QubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLXktMSBnYXAteC0yIHctZnVsbCB0ZXh0LXhzIHRleHQtdHVpLWJhc2UtMDVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJwcm9kdWN0LnBhY2tcIj7QndC+0YDQvNCwINGD0L/QsNC60L7QstC60Lg6IHt7IHByb2R1Y3QucGFjayB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHA+0JDRgNGC0LjQutGD0Ls6IHt7IHByb2R1Y3QuY29kZSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLXktMSBnYXAteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIiFwcm9kdWN0LnByaWNlSW5SdWJcIiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IHByb2R1Y3QuY29zdFN0cmluZyB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LWJvbGQgdGV4dC14cyB0ZXh0LXR1aS1iYXNlLTA1XCI+e3sgcHJvZHVjdC5jb3N0UnViU3RyaW5nIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInByb2R1Y3QuZGlzY291bnRcIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpbmUtdGhyb3VnaFwiPnt7IHByb2R1Y3QuZGlzY291bnRDb3N0U3RyaW5nIH19PC9zcGFuPiAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10dWktc3VjY2Vzcy1maWxsIGZvbnQtYm9sZFwiPiAte3sgcHJvZHVjdC5kaXNjb3VudC5wZXJjZW50IH19JSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLXN2ZyBzcmM9XCJ0dWlJY29uSW5mb0xhcmdlXCIgW3R1aUhpbnRdPVwiZGlzY291bnRIaW50XCIgW3R1aUhpbnRTaG93RGVsYXldPVwiMTAwXCIgdHVpSGludERpcmVjdGlvbj1cInRvcFwiIGNsYXNzPVwiIXRleHQteHMgIWgtNFwiPjwvdHVpLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzY291bnRIaW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJvbGRcIj57eyBwcm9kdWN0LmRpc2NvdW50Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvZHVjdC5kaXNjb3VudC5leHBpcmVkQXQgYXMgZXhwaXJlZEF0XCI+0JTQsNGC0LAg0L7QutC+0L3Rh9Cw0L3QuNGPOiB7eyBleHBpcmVkQXQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxzYy1wcmljZS13YXJlaG91c2Utc3RvY2sgW3Byb2R1Y3RdPVwicHJvZHVjdFwiPjwvc2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrPlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhcnRJdGVtLmhlaWdodCB8fCBjYXJ0SXRlbS5sZW5ndGggfHwgY2FydEl0ZW0ud2lkdGhcIiBjbGFzcz1cImZsZXggZ2FwLTEgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0dWlJY29uU2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrU2V0dGluZ3NFdmVudC5lbWl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlNb2RlPVwib25MaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLTIgIXNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLXgtMiBmb250LXRoaW4gdGV4dC14cyB0ZXh0LXR1aS1iYXNlLTA0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNhcnRJdGVtLm1hcmtlclwiPtCc0LDRgNC60LjRgNC+0LLQutCwOiB7eyBjYXJ0SXRlbS5tYXJrZXIgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNhcnRJdGVtLndpZHRoXCI+0KjQuNGA0LjQvdCwOiB7eyBjYXJ0SXRlbS53aWR0aCB9fSDQvC48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FydEl0ZW0uaGVpZ2h0OyBlbHNlIGxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPtCS0YvRgdC+0YLQsDoge3sgY2FydEl0ZW0uaGVpZ2h0IH19INC8LjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZW5ndGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjYXJ0SXRlbS5sZW5ndGhcIj7QlNC70LjQvdCwOiB7eyBjYXJ0SXRlbS5sZW5ndGggfX0g0LwuPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8YSB0dWlMaW5rICpuZ0lmPVwiY2FydEl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybFwiIChjbGljayk9XCJzaG93U3BlY2lmaWNhdGlvbigpXCI+0KHQv9C10YbQuNGE0LjQutCw0YbQuNGPPC9hPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3BlY2lmaWNhdGlvblByZXZpZXcgbGV0LXByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktcHJldmlldyBbcm90YXRhYmxlXT1cImZhbHNlXCIgW3pvb21hYmxlXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpwb2x5bW9ycGhldXNPdXRsZXQ9XCJjYXJ0SXRlbS5zcGVjaWZpY2F0aW9uSW1nVXJsIGFzIHNyY1wiIGFsdD1cInByZXZpZXdcIiBbc3JjXT1cImNhcnRJdGVtLnNwZWNpZmljYXRpb25JbWdVcmxcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpY29uPVwidHVpSWNvbkNsb3NlXCIgdGl0bGU9XCJDbG9zZVwiIHR1aUljb25CdXR0b24gdHVpUHJldmlld0FjdGlvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInByZXZpZXcuY29tcGxldGUoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L3R1aS1wcmV2aWV3PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHNlbGYtc3RhcnQgZ2FwLTEgc206bXItOSBzbTpzZWxmLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzYy1pbnB1dC1xdWFudGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgI2lucHV0UXVhbnRpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVhbnRpdHlDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJxdWFudGl0eUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDcm9zc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RlcF09XCJ1bml0c0hlbHBlci5wcm9kdWN0TXVsdGlwbGljaXR5KHByb2R1Y3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImlucHV0UXVhbnRpdHkubmF0aXZlRm9jdXNhYmxlRWxlbWVudD8uYmx1cigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0yOFwiXG4gICAgICAgICAgICAgICAgICAgID48L3NjLWlucHV0LXF1YW50aXR5PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR1aUljb25CdXR0b24gaWNvbj1cInR1aUljb25UcmFzaDJcIiBzaGFwZT1cInJvdW5kZWRcIiBzaXplPVwieHNcIiAoY2xpY2spPVwiY2xpY2tEZWxldGVFdmVudC5lbWl0KClcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LXR1aS10ZXh0LTAxIHRleHQtc21cIj7QmNGC0L7Qs9C+OiB7eyBjYXJ0SXRlbS5jb3N0UnViIHwgdHVpRm9ybWF0TnVtYmVyIH19IHt7ICdSVUInIHwgdHVpQ3VycmVuY3kgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNza2VsZXRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiB3LWZ1bGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMjAgdy0yMCBiZy10dWktYmFzZS0wMiByb3VuZGVkLXhsXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdyb3cgZ2FwLTIuNSBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBoLTQgcm91bmRlZC14bCBiZy10dWktYmFzZS0wMlwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMy81IGgtNCByb3VuZGVkLXhsIGJnLXR1aS1iYXNlLTAyXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy00LzUgaC00IHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2FydC1pdGVtLW1vYmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9jYXJ0LWl0ZW0tbW9iaWxlL3NjLWNhcnQtaXRlbS1tb2JpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvY2FydC1pdGVtLW1vYmlsZS9zYy1jYXJ0LWl0ZW0tbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUV6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBZSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxPQUFPLEVBQWtDLE1BQU0sd0JBQXdCLENBQUM7QUFDMUcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEUsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFJeEM7O0dBRUc7QUFNSCxNQUFNLE9BQU8seUJBQXlCO0lBNERsQzs7Ozs7OztPQU9HO0lBQ0gsWUFDb0IsV0FBMEIsRUFFekIsb0JBQTZDLEVBQzVCLElBQWEsRUFDRyxpQkFBeUI7UUFKM0QsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFFekIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM1QixTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ0csc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO1FBL0MvRTs7V0FFRztRQUNJLG9CQUFlLEdBQStCLElBQUksV0FBVyxDQUFnQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUU3Rzs7V0FFRztRQUVJLHlCQUFvQixHQUE4QixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekc7O1dBRUc7UUFFSSxxQkFBZ0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV2RTs7V0FFRztRQUVJLHVCQUFrQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXpFOztXQUVHO1FBRUksbUJBQWMsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQXFCbEUsQ0FBQztJQXpFSjs7T0FFRztJQUNILElBQ1csUUFBUSxDQUFDLElBQTRCO1FBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUEwREQ7O09BRUc7SUFDSCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxrQkFBa0I7SUFDWCxRQUFRO1FBQ1gsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQjtRQUNwQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNwSCxDQUFDOztzSEFwR1EseUJBQXlCLCtDQXNFdEIsdUJBQXVCLGFBRXZCLE9BQU8sYUFDUCx1QkFBdUI7MEdBekUxQix5QkFBeUIsMllDbkJ0Qyx5cU1BOEZBOzJGRDNFYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0kscUJBQXFCLG1CQUVkLHVCQUF1QixDQUFDLE1BQU07OzBCQXdFMUMsTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUU5QixNQUFNOzJCQUFDLE9BQU87OzBCQUNkLE1BQU07MkJBQUMsdUJBQXVCOzRDQXBFeEIsUUFBUTtzQkFEbEIsS0FBSztnQkFvQlcsdUJBQXVCO3NCQUR2QyxTQUFTO3VCQUFDLHNCQUFzQjtnQkFZMUIsb0JBQW9CO3NCQUQxQixNQUFNO2dCQU9BLGdCQUFnQjtzQkFEdEIsTUFBTTtnQkFPQSxrQkFBa0I7c0JBRHhCLE1BQU07Z0JBT0EsY0FBYztzQkFEcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU0NfUEFUSF9JTUFHRV9OT1RfRk9VTkQsIFNDX1VSTFMsIFNjQ2FydEl0ZW0sIFNjSVVybHMsIFNjUHJvZHVjdCB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UgfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tcHJldmlldyc7XG5pbXBvcnQgeyBUdWlEaWFsb2dDb250ZXh0IH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgc2tpcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY1VuaXRzSGVscGVyIH0gZnJvbSAnLi4vLi4vaGVscGVycy9zYy11bml0cy1oZWxwZXInO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQutCw0YDRgtC+0YfQutC4INGN0LvQtdC80LXQvdGC0LAg0LrQvtGA0LfQuNC90YsuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtY2FydC1pdGVtLW1vYmlsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWNhcnQtaXRlbS1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0NhcnRJdGVtTW9iaWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQrdC70LXQvNC10L3RgiDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY2FydEl0ZW0oZGF0YTogU2NDYXJ0SXRlbSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9jYXJ0SXRlbSA9IGRhdGE7XG5cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucXVhbnRpdHlDb250cm9sLnBhdGNoVmFsdWUoZGF0YS5xdWFudGl0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQrdC70LXQvNC10L3RgiDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNhcnRJdGVtKCk6IFNjQ2FydEl0ZW0gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FydEl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC90LAg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0YHQv9C10YbQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NwZWNpZmljYXRpb25QcmV2aWV3JylcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNwZWNpZmljYXRpb25QcmV2aWV3UmVmPzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dD47XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgRm9ybUNvbnRyb2x9INC/0L7Qu9GPINCy0LLQvtC00LAg0LrQvtC70LjRh9C10YHRgtCy0LAg0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICAgICAqL1xuICAgIHB1YmxpYyBxdWFudGl0eUNvbnRyb2w6IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KDAsIHsgdXBkYXRlT246ICdibHVyJyB9KTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0LrQvtC70LjRh9C10YHRgtCy0LAg0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBxdWFudGl0eVZhbHVlQ2hhbmdlczogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPiA9IHRoaXMucXVhbnRpdHlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHNraXAoMSkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutC90L7Qv9C60YMgXCLQo9C00LDQu9C40YLRjCDQuNC3INC60L7RgNC30LjQvdGLXCIuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrRGVsZXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQvdC+0L/QutGDIFwi0KPQtNCw0LvQuNGC0Ywg0LjQtyDQutC+0YDQt9C40L3Ri1wiLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja1NldHRpbmdzRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQsNGA0YLQvtGH0LrRgy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2xpY2tDYXJkRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCt0LvQtdC80LXQvdGCINC60L7RgNC30LjQvdGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2NhcnRJdGVtPzogU2NDYXJ0SXRlbTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQ2FydEl0ZW1Nb2JpbGVDb21wb25lbnR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVuaXRzSGVscGVyINCt0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAt0L/QvtC80L7RidC90LjQutCwINC00LvRjyDRgNCw0LHQvtGC0Ysg0YHQviDQt9C90LDRh9C10L3QuNGP0LzQuCDQtdC00LjQvdC40YYg0LjQt9C80LXRgNC10L3QuNGPINGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gcHJldmlld0RpYWxvZ1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC00LjQsNC70L7Qs9C+0LLQvtCz0L4g0L7QutC90LAg0L/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3QvtCz0L4g0L/RgNC+0YHQvNC+0YLRgNCwLlxuICAgICAqIEBwYXJhbSB1cmxzINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L3QsCDRgNCw0LfQtNC10LvRiyBiYWNrZW5kJ2EuXG4gICAgICogQHBhcmFtIHBhdGhJbWFnZU5vdEZvdW5kINCf0YPRgtGMINC00L4g0LjQt9C+0LHRgNCw0LbQtdC90LjRjyAn0KLQvtCy0LDRgCDQvdC1INC90LDQudC00LXQvScuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgdW5pdHNIZWxwZXI6IFNjVW5pdHNIZWxwZXIsXG4gICAgICAgIEBJbmplY3QoVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UpXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcHJldmlld0RpYWxvZ1NlcnZpY2U6IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNDX1VSTFMpIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyxcbiAgICAgICAgQEluamVjdChTQ19QQVRIX0lNQUdFX05PVF9GT1VORCkgcHJpdmF0ZSByZWFkb25seSBwYXRoSW1hZ2VOb3RGb3VuZDogc3RyaW5nXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC+0LTRg9C60YIg0Y3Qu9C10LzQtdC90YLQsCDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHByb2R1Y3QoKTogU2NQcm9kdWN0IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FydEl0ZW0/LnByb2R1Y3Q7XG4gICAgfVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnF1YW50aXR5VmFsdWVDaGFuZ2VzID0gdGhpcy5xdWFudGl0eUNvbnRyb2wudmFsdWVDaGFuZ2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQvtCx0YDQsNC30LjRgtGMINGB0L/QtdGG0LjRhNC40LrQsNGG0LjRji5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1NwZWNpZmljYXRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLnNwZWNpZmljYXRpb25QcmV2aWV3UmVmID8/ICcnKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdGB0YvQu9C60YMg0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC1INC60LDRgNGC0L7Rh9C60Lgg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYXJkSW1hZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdD8uZ2V0SW1hZ2VQcmV2aWV3KHRoaXMudXJscy5pbWdTZXJ2ZXJVcmwpID8/IHRoaXMudXJscy5pbWdTZXJ2ZXJVcmwgKyB0aGlzLnBhdGhJbWFnZU5vdEZvdW5kO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjYXJ0SXRlbSAmJiBwcm9kdWN0OyBlbHNlIHNrZWxldG9uXCI+XG4gICAgPCEtLSBUT0RPOiDQndC10L7QsdGF0L7QtNC40LzQsCDRgNC10LDQu9C40LfQsNGG0LjRjyDRhNGD0L3QutGG0LjQvtC90LDQu9CwLlxuICAgIDxidXR0b24gdHVpSWNvbkJ1dHRvbiBzaXplPVwibVwiIGljb249XCJzY0ljb25WZXJ0aWNhbFRocmVlRG90c1wiIGFwcGVhcmFuY2U9XCJmbG9hdFwiIHR1aU1vZGU9XCJvbkxpZ2h0XCIgY2xhc3M9XCIhYWJzb2x1dGUgcmlnaHQtMCB0b3AtMFwiPjwvYnV0dG9uPiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLXR1aS1iYXNlLTA0IHNoYWRvdy1zYy0yIHJvdW5kZWQteGwgbWluLXctWzE4cmVtXSBnYXAtMiBwLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy00MCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxpbWcgKGNsaWNrKT1cImNsaWNrQ2FyZEV2ZW50LmVtaXQoKVwiIFtzcmNdPVwiZ2V0Q2FyZEltYWdlKClcIiBbYWx0XT1cInByb2R1Y3QubmFtZVwiIGNsYXNzPVwicm91bmRlZC14bCB3LWZ1bGwgbWF4LWgtZnVsbCBvYmplY3QtY292ZXJcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgc206ZmxleC1yb3cgc206Z2FwLTUgaXRlbXMtY2VudGVyIGdhcC0yIGp1c3RpZnktYmV0d2VlbiB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHNlbGYtc3RhcnQgbWF4LXctZnVsbCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgIDxhIHR1aUxpbmsgKGNsaWNrKT1cImNsaWNrQ2FyZEV2ZW50LmVtaXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IHByb2R1Y3QubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLXktMSBnYXAteC0yIHctZnVsbCB0ZXh0LXhzIHRleHQtdHVpLWJhc2UtMDVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJwcm9kdWN0LnBhY2tcIj7QndC+0YDQvNCwINGD0L/QsNC60L7QstC60Lg6IHt7IHByb2R1Y3QucGFjayB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHA+0JDRgNGC0LjQutGD0Ls6IHt7IHByb2R1Y3QuY29kZSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLXktMSBnYXAteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIiFwcm9kdWN0LnByaWNlSW5SdWJcIiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IHByb2R1Y3QuY29zdFN0cmluZyB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LWJvbGQgdGV4dC14cyB0ZXh0LXR1aS1iYXNlLTA1XCI+e3sgcHJvZHVjdC5jb3N0UnViU3RyaW5nIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInByb2R1Y3QuZGlzY291bnRcIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpbmUtdGhyb3VnaFwiPnt7IHByb2R1Y3QuZGlzY291bnRDb3N0U3RyaW5nIH19PC9zcGFuPiAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10dWktc3VjY2Vzcy1maWxsIGZvbnQtYm9sZFwiPiAte3sgcHJvZHVjdC5kaXNjb3VudC5wZXJjZW50IH19JSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLXN2ZyBzcmM9XCJ0dWlJY29uSW5mb0xhcmdlXCIgW3R1aUhpbnRdPVwiZGlzY291bnRIaW50XCIgW3R1aUhpbnRTaG93RGVsYXldPVwiMTAwXCIgdHVpSGludERpcmVjdGlvbj1cInRvcFwiIGNsYXNzPVwiIXRleHQteHMgIWgtNFwiPjwvdHVpLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzY291bnRIaW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJvbGRcIj57eyBwcm9kdWN0LmRpc2NvdW50Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvZHVjdC5kaXNjb3VudC5leHBpcmVkQXQgYXMgZXhwaXJlZEF0XCI+0JTQsNGC0LAg0L7QutC+0L3Rh9Cw0L3QuNGPOiB7eyBleHBpcmVkQXQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxzYy1wcmljZS13YXJlaG91c2Utc3RvY2sgW3Byb2R1Y3RdPVwicHJvZHVjdFwiPjwvc2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrPlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhcnRJdGVtLmhlaWdodCB8fCBjYXJ0SXRlbS5sZW5ndGggfHwgY2FydEl0ZW0ud2lkdGhcIiBjbGFzcz1cImZsZXggZ2FwLTEgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0dWlJY29uU2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrU2V0dGluZ3NFdmVudC5lbWl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlNb2RlPVwib25MaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLTIgIXNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLXgtMiBmb250LXRoaW4gdGV4dC14cyB0ZXh0LXR1aS1iYXNlLTA0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNhcnRJdGVtLm1hcmtlclwiPtCc0LDRgNC60LjRgNC+0LLQutCwOiB7eyBjYXJ0SXRlbS5tYXJrZXIgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNhcnRJdGVtLndpZHRoXCI+0KjQuNGA0LjQvdCwOiB7eyBjYXJ0SXRlbS53aWR0aCB9fSDQvC48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FydEl0ZW0uaGVpZ2h0OyBlbHNlIGxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPtCS0YvRgdC+0YLQsDoge3sgY2FydEl0ZW0uaGVpZ2h0IH19INC8LjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZW5ndGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjYXJ0SXRlbS5sZW5ndGhcIj7QlNC70LjQvdCwOiB7eyBjYXJ0SXRlbS5sZW5ndGggfX0g0LwuPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8YSB0dWlMaW5rICpuZ0lmPVwiY2FydEl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybFwiIChjbGljayk9XCJzaG93U3BlY2lmaWNhdGlvbigpXCI+0KHQv9C10YbQuNGE0LjQutCw0YbQuNGPPC9hPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3BlY2lmaWNhdGlvblByZXZpZXcgbGV0LXByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktcHJldmlldyBbcm90YXRhYmxlXT1cImZhbHNlXCIgW3pvb21hYmxlXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpwb2x5bW9ycGhldXNPdXRsZXQ9XCJjYXJ0SXRlbS5zcGVjaWZpY2F0aW9uSW1nVXJsIGFzIHNyY1wiIGFsdD1cInByZXZpZXdcIiBbc3JjXT1cImNhcnRJdGVtLnNwZWNpZmljYXRpb25JbWdVcmxcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpY29uPVwidHVpSWNvbkNsb3NlXCIgdGl0bGU9XCJDbG9zZVwiIHR1aUljb25CdXR0b24gdHVpUHJldmlld0FjdGlvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInByZXZpZXcuY29tcGxldGUoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L3R1aS1wcmV2aWV3PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHNlbGYtc3RhcnQgZ2FwLTEgc206bXItOSBzbTpzZWxmLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzYy1pbnB1dC1xdWFudGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgI2lucHV0UXVhbnRpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVhbnRpdHlDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJxdWFudGl0eUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDcm9zc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RlcF09XCJ1bml0c0hlbHBlci5wcm9kdWN0TXVsdGlwbGljaXR5KHByb2R1Y3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImlucHV0UXVhbnRpdHkubmF0aXZlRm9jdXNhYmxlRWxlbWVudD8uYmx1cigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0yOFwiXG4gICAgICAgICAgICAgICAgICAgID48L3NjLWlucHV0LXF1YW50aXR5PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR1aUljb25CdXR0b24gaWNvbj1cInR1aUljb25UcmFzaDJcIiBzaGFwZT1cInJvdW5kZWRcIiBzaXplPVwieHNcIiAoY2xpY2spPVwiY2xpY2tEZWxldGVFdmVudC5lbWl0KClcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LXR1aS10ZXh0LTAxIHRleHQtc21cIj7QmNGC0L7Qs9C+OiB7eyBjYXJ0SXRlbS5jb3N0UnViIHwgdHVpRm9ybWF0TnVtYmVyIH19IHt7ICdSVUInIHwgdHVpQ3VycmVuY3kgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNza2VsZXRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiB3LWZ1bGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMjAgdy0yMCBiZy10dWktYmFzZS0wMiByb3VuZGVkLXhsXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdyb3cgZ2FwLTIuNSBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBoLTQgcm91bmRlZC14bCBiZy10dWktYmFzZS0wMlwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMy81IGgtNCByb3VuZGVkLXhsIGJnLXR1aS1iYXNlLTAyXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy00LzUgaC00IHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|