@snabcentr/client-ui 0.0.0-test
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +1 -0
- package/README.md +9 -0
- package/banner/index.d.ts +2 -0
- package/banner/sc-banner.component.d.ts +130 -0
- package/banner/sc-banner.module.d.ts +17 -0
- package/cart/cart-item-mobile/sc-cart-item-mobile.component.d.ts +77 -0
- package/cart/index.d.ts +2 -0
- package/cart/sc-cart.module.d.ts +16 -0
- package/catalog/category-card/sc-category-card.component.d.ts +68 -0
- package/catalog/index.d.ts +7 -0
- package/catalog/input-quantity/sc-input-quantity.component.d.ts +75 -0
- package/catalog/price-card/sc-price-card.component.d.ts +114 -0
- package/catalog/price-history/sc-chart-option.d.ts +7 -0
- package/catalog/price-history/sc-i-chart-data-item.d.ts +13 -0
- package/catalog/price-history/sc-lang-RU.d.ts +113 -0
- package/catalog/price-history/sc-price-history.component.d.ts +73 -0
- package/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.d.ts +37 -0
- package/catalog/sc-catalog.module.d.ts +21 -0
- package/catalog/sc-favorite-btn/sc-favorite-btn.component.d.ts +13 -0
- package/esm2020/banner/index.mjs +3 -0
- package/esm2020/banner/sc-banner.component.mjs +222 -0
- package/esm2020/banner/sc-banner.module.mjs +27 -0
- package/esm2020/cart/cart-item-mobile/sc-cart-item-mobile.component.mjs +119 -0
- package/esm2020/cart/index.mjs +3 -0
- package/esm2020/cart/sc-cart.module.mjs +58 -0
- package/esm2020/catalog/category-card/sc-category-card.component.mjs +109 -0
- package/esm2020/catalog/index.mjs +8 -0
- package/esm2020/catalog/input-quantity/sc-input-quantity.component.mjs +154 -0
- package/esm2020/catalog/price-card/sc-price-card.component.mjs +154 -0
- package/esm2020/catalog/price-history/sc-chart-option.mjs +79 -0
- package/esm2020/catalog/price-history/sc-i-chart-data-item.mjs +2 -0
- package/esm2020/catalog/price-history/sc-lang-RU.mjs +113 -0
- package/esm2020/catalog/price-history/sc-price-history.component.mjs +104 -0
- package/esm2020/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.mjs +44 -0
- package/esm2020/catalog/sc-catalog.module.mjs +88 -0
- package/esm2020/catalog/sc-favorite-btn/sc-favorite-btn.component.mjs +24 -0
- package/esm2020/files/directives/index.mjs +3 -0
- package/esm2020/files/directives/tree-top.directive.mjs +63 -0
- package/esm2020/files/directives/tree.directive.mjs +47 -0
- package/esm2020/files/file-tree-item/file-tree-item.component.mjs +18 -0
- package/esm2020/files/files-and-documents.component.mjs +60 -0
- package/esm2020/files/files-and-documents.module.mjs +26 -0
- package/esm2020/files/index.mjs +6 -0
- package/esm2020/files/interfaces/tree-node.mjs +2 -0
- package/esm2020/files/services/index.mjs +3 -0
- package/esm2020/files/services/tree-icon.service.mjs +48 -0
- package/esm2020/files/services/tree-loader.service.mjs +60 -0
- package/esm2020/helpers/index.mjs +2 -0
- package/esm2020/helpers/sc-px-converter.mjs +27 -0
- package/esm2020/helpers/sc-units-helper.mjs +44 -0
- package/esm2020/icons/index.mjs +2 -0
- package/esm2020/icons/sc-client-ui-icons-name.mjs +107 -0
- package/esm2020/loader/index.mjs +2 -0
- package/esm2020/loader/sc-i-loader.mjs +2 -0
- package/esm2020/news/index.mjs +4 -0
- package/esm2020/news/news-card/sc-news-card.component.mjs +31 -0
- package/esm2020/news/news-card-skeleton/sc-news-card-skeleton.component.mjs +23 -0
- package/esm2020/news/sc-news.module.mjs +24 -0
- package/esm2020/order/index.mjs +3 -0
- package/esm2020/order/order-item-mobile/order-item-mobile.component.mjs +79 -0
- package/esm2020/order/sc-order.module.mjs +23 -0
- package/esm2020/public-api.mjs +15 -0
- package/esm2020/share-button/index.mjs +3 -0
- package/esm2020/share-button/sc-share-button.component.mjs +35 -0
- package/esm2020/share-button/sc-share-button.module.mjs +22 -0
- package/esm2020/snabcentr-client-ui.mjs +5 -0
- package/esm2020/tokens/index.mjs +2 -0
- package/esm2020/tokens/sc-linear-values-token.mjs +10 -0
- package/esm2020/validators/index.mjs +2 -0
- package/esm2020/validators/stepValidator.mjs +13 -0
- package/fesm2015/snabcentr-client-ui.mjs +1929 -0
- package/fesm2015/snabcentr-client-ui.mjs.map +1 -0
- package/fesm2020/snabcentr-client-ui.mjs +1901 -0
- package/fesm2020/snabcentr-client-ui.mjs.map +1 -0
- package/files/directives/index.d.ts +2 -0
- package/files/directives/tree-top.directive.d.ts +33 -0
- package/files/directives/tree.directive.d.ts +35 -0
- package/files/file-tree-item/file-tree-item.component.d.ts +9 -0
- package/files/files-and-documents.component.d.ts +27 -0
- package/files/files-and-documents.module.d.ts +16 -0
- package/files/index.d.ts +5 -0
- package/files/interfaces/tree-node.d.ts +29 -0
- package/files/services/index.d.ts +2 -0
- package/files/services/tree-icon.service.d.ts +23 -0
- package/files/services/tree-loader.service.d.ts +43 -0
- package/helpers/index.d.ts +1 -0
- package/helpers/sc-px-converter.d.ts +15 -0
- package/helpers/sc-units-helper.d.ts +28 -0
- package/icons/index.d.ts +1 -0
- package/icons/sc-client-ui-icons-name.d.ts +5 -0
- package/icons/svg-pack/scIconAddProfile.svg +11 -0
- package/icons/svg-pack/scIconApplication.svg +11 -0
- package/icons/svg-pack/scIconArrowDown.svg +11 -0
- package/icons/svg-pack/scIconArrowDownLarge.svg +11 -0
- package/icons/svg-pack/scIconArrowDownLargeEnd.svg +12 -0
- package/icons/svg-pack/scIconArrowLeft.svg +11 -0
- package/icons/svg-pack/scIconArrowReturn.svg +11 -0
- package/icons/svg-pack/scIconArrowRight.svg +11 -0
- package/icons/svg-pack/scIconArrowUp.svg +11 -0
- package/icons/svg-pack/scIconAttention.svg +11 -0
- package/icons/svg-pack/scIconBag.svg +11 -0
- package/icons/svg-pack/scIconBasket.svg +11 -0
- package/icons/svg-pack/scIconBell.svg +11 -0
- package/icons/svg-pack/scIconBook.svg +11 -0
- package/icons/svg-pack/scIconBubble.svg +11 -0
- package/icons/svg-pack/scIconCalendar.svg +11 -0
- package/icons/svg-pack/scIconCancel.svg +18 -0
- package/icons/svg-pack/scIconCart.svg +11 -0
- package/icons/svg-pack/scIconCatalog.svg +16 -0
- package/icons/svg-pack/scIconClients.svg +11 -0
- package/icons/svg-pack/scIconClip.svg +11 -0
- package/icons/svg-pack/scIconClock.svg +11 -0
- package/icons/svg-pack/scIconConfigurator.svg +18 -0
- package/icons/svg-pack/scIconContacts.svg +11 -0
- package/icons/svg-pack/scIconCross.svg +11 -0
- package/icons/svg-pack/scIconDeleteProfile.svg +12 -0
- package/icons/svg-pack/scIconDone.svg +12 -0
- package/icons/svg-pack/scIconDownloading.svg +11 -0
- package/icons/svg-pack/scIconEdit.svg +11 -0
- package/icons/svg-pack/scIconError.svg +12 -0
- package/icons/svg-pack/scIconExcelFile.svg +11 -0
- package/icons/svg-pack/scIconEye.svg +11 -0
- package/icons/svg-pack/scIconFavorite.svg +11 -0
- package/icons/svg-pack/scIconFavoriteFill.svg +11 -0
- package/icons/svg-pack/scIconFile.svg +11 -0
- package/icons/svg-pack/scIconFilter.svg +11 -0
- package/icons/svg-pack/scIconFolder.svg +11 -0
- package/icons/svg-pack/scIconFolderOpen.svg +11 -0
- package/icons/svg-pack/scIconFolderPlus.svg +11 -0
- package/icons/svg-pack/scIconGraph.svg +11 -0
- package/icons/svg-pack/scIconHamburger.svg +13 -0
- package/icons/svg-pack/scIconHeart.svg +11 -0
- package/icons/svg-pack/scIconHeartFill.svg +11 -0
- package/icons/svg-pack/scIconHistory.svg +11 -0
- package/icons/svg-pack/scIconHome.svg +12 -0
- package/icons/svg-pack/scIconImage.svg +11 -0
- package/icons/svg-pack/scIconLike.svg +11 -0
- package/icons/svg-pack/scIconList.svg +11 -0
- package/icons/svg-pack/scIconLocation.svg +11 -0
- package/icons/svg-pack/scIconLock.svg +11 -0
- package/icons/svg-pack/scIconLockOpen.svg +11 -0
- package/icons/svg-pack/scIconLogIn.svg +11 -0
- package/icons/svg-pack/scIconLogOut.svg +13 -0
- package/icons/svg-pack/scIconLogOut2.svg +13 -0
- package/icons/svg-pack/scIconMail.svg +11 -0
- package/icons/svg-pack/scIconMinus.svg +11 -0
- package/icons/svg-pack/scIconMoney.svg +11 -0
- package/icons/svg-pack/scIconMoney2.svg +11 -0
- package/icons/svg-pack/scIconNews.svg +11 -0
- package/icons/svg-pack/scIconOffer.svg +11 -0
- package/icons/svg-pack/scIconPalette.svg +18 -0
- package/icons/svg-pack/scIconPdfFile.svg +12 -0
- package/icons/svg-pack/scIconPercentage.svg +11 -0
- package/icons/svg-pack/scIconPhone.svg +11 -0
- package/icons/svg-pack/scIconPlus.svg +11 -0
- package/icons/svg-pack/scIconPrice.svg +11 -0
- package/icons/svg-pack/scIconProfile.svg +11 -0
- package/icons/svg-pack/scIconQRCodeScan.svg +18 -0
- package/icons/svg-pack/scIconQuestion.svg +11 -0
- package/icons/svg-pack/scIconReclamation.svg +11 -0
- package/icons/svg-pack/scIconRefresh.svg +11 -0
- package/icons/svg-pack/scIconRepeat.svg +11 -0
- package/icons/svg-pack/scIconRequisites.svg +11 -0
- package/icons/svg-pack/scIconRocket.svg +18 -0
- package/icons/svg-pack/scIconSave.svg +11 -0
- package/icons/svg-pack/scIconSearch.svg +12 -0
- package/icons/svg-pack/scIconSend.svg +11 -0
- package/icons/svg-pack/scIconSettings.svg +11 -0
- package/icons/svg-pack/scIconShare.svg +15 -0
- package/icons/svg-pack/scIconSocialCopy.svg +13 -0
- package/icons/svg-pack/scIconSocialEmail.svg +13 -0
- package/icons/svg-pack/scIconSocialFacebook.svg +12 -0
- package/icons/svg-pack/scIconSocialInstagram.svg +33 -0
- package/icons/svg-pack/scIconSocialQR.svg +12 -0
- package/icons/svg-pack/scIconSocialTelegram.svg +20 -0
- package/icons/svg-pack/scIconSocialViber.svg +16 -0
- package/icons/svg-pack/scIconSocialVk.svg +12 -0
- package/icons/svg-pack/scIconSocialWhatsapp.svg +12 -0
- package/icons/svg-pack/scIconStar.svg +11 -0
- package/icons/svg-pack/scIconSuitcase.svg +11 -0
- package/icons/svg-pack/scIconTasks.svg +11 -0
- package/icons/svg-pack/scIconTick.svg +11 -0
- package/icons/svg-pack/scIconTop.svg +11 -0
- package/icons/svg-pack/scIconVerticalThreeDots.svg +11 -0
- package/icons/svg-pack/scIconViewGrid.svg +11 -0
- package/icons/svg-pack/scIconViewInline.svg +11 -0
- package/icons/svg-pack/scIconViewTree.svg +15 -0
- package/icons/svg-pack/scIconWallet.svg +11 -0
- package/icons/svg-pack/scIconWarning.svg +11 -0
- package/icons/svg-pack/scIconWordFile.svg +12 -0
- package/index.d.ts +5 -0
- package/loader/index.d.ts +1 -0
- package/loader/sc-i-loader.d.ts +9 -0
- package/news/index.d.ts +3 -0
- package/news/news-card/sc-news-card.component.d.ts +22 -0
- package/news/news-card-skeleton/sc-news-card-skeleton.component.d.ts +12 -0
- package/news/sc-news.module.d.ts +14 -0
- package/order/index.d.ts +2 -0
- package/order/order-item-mobile/order-item-mobile.component.d.ts +53 -0
- package/order/sc-order.module.d.ts +13 -0
- package/package.json +62 -0
- package/public-api.d.ts +11 -0
- package/share-button/index.d.ts +2 -0
- package/share-button/sc-share-button.component.d.ts +22 -0
- package/share-button/sc-share-button.module.d.ts +12 -0
- package/styles/taiga/taiga-tailwind-preset.js +163 -0
- package/styles/taiga/variables.less +44 -0
- package/styles/tailwind/tailwind.scss +1461 -0
- package/tokens/index.d.ts +1 -0
- package/tokens/sc-linear-values-token.d.ts +8 -0
- package/validators/index.d.ts +1 -0
- package/validators/stepValidator.d.ts +7 -0
@@ -0,0 +1,154 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Inject, Input, Output } from '@angular/core';
|
2
|
+
import { FormControl } from '@angular/forms';
|
3
|
+
import { SC_PATH_IMAGE_NOT_FOUND, SC_URLS } from '@snabcentr/client-core';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
import * as i1 from "../../helpers/sc-units-helper";
|
6
|
+
import * as i2 from "@snabcentr/client-core";
|
7
|
+
import * as i3 from "@angular/common";
|
8
|
+
import * as i4 from "@taiga-ui/core";
|
9
|
+
import * as i5 from "@angular/forms";
|
10
|
+
import * as i6 from "../sc-favorite-btn/sc-favorite-btn.component";
|
11
|
+
import * as i7 from "../input-quantity/sc-input-quantity.component";
|
12
|
+
import * as i8 from "../price-warehouse-stock/sc-price-warehouse-stock.component";
|
13
|
+
/**
|
14
|
+
* Компонент карточки товара.
|
15
|
+
*/
|
16
|
+
export class ScPriceCardComponent {
|
17
|
+
/**
|
18
|
+
* Инициирует экземпляр класса {@link ScPriceCardComponent}.
|
19
|
+
*
|
20
|
+
* @param unitsHelper Объект-хэлпер для работы со значениями единиц измерения товара.
|
21
|
+
* @param authService Сервис аутентификации пользователей.
|
22
|
+
* @param warehouseService Сервис для работы со складами.
|
23
|
+
* @param urls Список ссылок на разделы backend'a.
|
24
|
+
* @param pathImageNotFound Путь до изображения 'Товар не найден'.
|
25
|
+
*/
|
26
|
+
constructor(unitsHelper, authService, warehouseService, urls, pathImageNotFound) {
|
27
|
+
this.unitsHelper = unitsHelper;
|
28
|
+
this.authService = authService;
|
29
|
+
this.warehouseService = warehouseService;
|
30
|
+
this.urls = urls;
|
31
|
+
this.pathImageNotFound = pathImageNotFound;
|
32
|
+
/**
|
33
|
+
* Признак, что необходимо отобразить лоадер для поля ввода количества товара.
|
34
|
+
*/
|
35
|
+
this.quantityShowLoader = false;
|
36
|
+
/**
|
37
|
+
* Признак, что необходимо отобразить поле ввода количества товара.
|
38
|
+
*/
|
39
|
+
this.showQuantityControl = false;
|
40
|
+
/**
|
41
|
+
* Событие нажатия на кнопку "В избранное".
|
42
|
+
*/
|
43
|
+
this.clickFavoriteEvent = new EventEmitter();
|
44
|
+
/**
|
45
|
+
* Событие нажатия на кнопку "В корзину".
|
46
|
+
*/
|
47
|
+
this.clickAddToCartEvent = new EventEmitter();
|
48
|
+
/**
|
49
|
+
* Событие нажатия на кнопку очистки количества товара.
|
50
|
+
*/
|
51
|
+
this.clickClearEvent = new EventEmitter();
|
52
|
+
/**
|
53
|
+
* Событие нажатия на карточку товара.
|
54
|
+
*/
|
55
|
+
this.clickCardEvent = new EventEmitter();
|
56
|
+
/**
|
57
|
+
* {@link Observable} изменения выбранного склада.
|
58
|
+
*/
|
59
|
+
this.warehouseSelect$ = this.warehouseService.getWarehouseSelectChange$();
|
60
|
+
/**
|
61
|
+
* {@link FormControl} поля ввода количества товара в корзине.
|
62
|
+
*/
|
63
|
+
this.quantityControl = new FormControl(null);
|
64
|
+
/**
|
65
|
+
* {@link Observable} изменения количества товара в корзине.
|
66
|
+
*/
|
67
|
+
this.quantityValueChanges = this.quantityControl.valueChanges;
|
68
|
+
/**
|
69
|
+
* {@link Observable} изменения статуса авторизации.
|
70
|
+
*/
|
71
|
+
this.authStatus$ = this.authService.getAuthChange();
|
72
|
+
/**
|
73
|
+
* Размер компонента.
|
74
|
+
*/
|
75
|
+
this.size = 'm';
|
76
|
+
/**
|
77
|
+
* Признак того, нужно ли компонент растягивать на всю ширину свободного пространства.
|
78
|
+
*/
|
79
|
+
this.isWidthFull = false;
|
80
|
+
}
|
81
|
+
/**
|
82
|
+
* Позиция товара в корзине.
|
83
|
+
*
|
84
|
+
* TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].
|
85
|
+
*/
|
86
|
+
get cartItem() {
|
87
|
+
return this._cartItem;
|
88
|
+
}
|
89
|
+
/**
|
90
|
+
* Позиция товара в корзине
|
91
|
+
*
|
92
|
+
* TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].
|
93
|
+
*/
|
94
|
+
set cartItem(value) {
|
95
|
+
this._cartItem = value;
|
96
|
+
this.quantityControl.patchValue(this._cartItem?.quantity ?? null, { emitEvent: false });
|
97
|
+
this.quantityShowLoader = false;
|
98
|
+
}
|
99
|
+
/**
|
100
|
+
* Конвертация размера для компонента sc-input-quantity.
|
101
|
+
* TODO: Решить проблему с функционалом size для разных платформ.
|
102
|
+
*/
|
103
|
+
get getQuantitySize() {
|
104
|
+
return this.size === 'xs' ? 's' : this.size;
|
105
|
+
}
|
106
|
+
/**
|
107
|
+
* Признак, что нужно показать скелетон.
|
108
|
+
*/
|
109
|
+
get skeletonVisible() {
|
110
|
+
return !this.product;
|
111
|
+
}
|
112
|
+
/**
|
113
|
+
* Возвращает ссылку на изображение карточки товара.
|
114
|
+
*/
|
115
|
+
getCardImage() {
|
116
|
+
return this.product?.getImage(this.urls.imgServerUrl) ?? this.pathImageNotFound;
|
117
|
+
}
|
118
|
+
}
|
119
|
+
ScPriceCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceCardComponent, deps: [{ token: i1.UnitsHelper }, { token: i2.ScAuthService }, { token: i2.ScWarehouseService }, { token: SC_URLS }, { token: SC_PATH_IMAGE_NOT_FOUND }], target: i0.ɵɵFactoryTarget.Component });
|
120
|
+
ScPriceCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScPriceCardComponent, selector: "sc-price-card", inputs: { showQuantityControl: "showQuantityControl", cartItem: "cartItem", product: "product", size: "size", isWidthFull: "isWidthFull" }, outputs: { clickFavoriteEvent: "clickFavoriteEvent", clickAddToCartEvent: "clickAddToCartEvent", clickClearEvent: "clickClearEvent", clickCardEvent: "clickCardEvent", quantityValueChanges: "quantityValueChanges" }, host: { properties: { "attr.data-size": "this.size" } }, ngImport: i0, template: "<!-- TODO: \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u0442\u044C \u0434\u0430\u043D\u043D\u044B\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 \u0438 \u0434\u043B\u044F \u0434\u0435\u0441\u043A\u0442\u043E\u043F\u0430 \u0438 \u0434\u043B\u044F \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F. \u0418\u0441\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u044B\u0435 \u0442\u0430\u0439\u0433\u043E\u0432\u0441\u043A\u0438\u0435 \u0441\u0442\u0438\u043B\u0438, \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u0441\u043E\u0433\u043B\u0430\u0441\u043D\u043E \u0441 \u0434\u0438\u0437\u0430\u0439\u043D\u043E\u043C. -->\n<div\n *ngIf=\"product; else skeleton\"\n class=\"h-[17rem] min-w-[10rem] shadow-md w-auto rounded-xl p-2 grid max-h-[17rem] text-[0.75rem] text-left text-tui-text-02\"\n [style.width]=\"isWidthFull\"\n>\n <div class=\"overflow-hidden relative\">\n <img (click)=\"clickCardEvent.emit()\" [src]=\"getCardImage()\" [alt]=\"product.name\" class=\"rounded-xl w-full max-h-full object-cover\" />\n <sc-favorite-btn *ngIf=\"authStatus$ | async\" [class.!block]=\"product.isFavorite\" class=\"top-0 left-0 absolute hidden\"></sc-favorite-btn>\n <tui-svg *ngIf=\"product.isPreviouslyOrdered\" src=\"scIconStar\" class=\"top-0 right-0 absolute hidden text-red-700\"></tui-svg>\n </div>\n <a class=\"p-0 m-0\" tuiLink iconAlign=\"left\" (click)=\"clickCardEvent.emit()\">\n <p class=\"font-bold text-[0.875rem] text-[#526ED3]\">{{ product.name }}</p>\n </a>\n <p *ngIf=\"product?.pack\">\u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}</p>\n\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n <p *ngIf=\"(authStatus$ | async) && product?.costDate\">\u0414\u0430\u0442\u0430: {{ product.costDate }}</p>\n <div *ngIf=\"warehouseSelect$ | async as warehouseSelect\" class=\"flex flex-col\">\n <span *ngIf=\"product.discount\" class=\"flex items-center text-tui-text-02\">\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-black !text-[0.75rem] !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 <span [class.text-tui-text-02]=\"!product.isWarehouseStockExist(warehouseSelect.id)\" class=\"cost font-bold\">{{ product.costRubString }}</span>\n <span *ngIf=\"!product.priceInRub\" class=\"text-xs font-bold text-tui-text-02 hidden group-hover:block\">{{ product.costString }}</span>\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n <div *ngIf=\"!showQuantityControl\" class=\"flex gap-2 max-w-full items-center justify-stretch mt-1\">\n <button tuiButton (click)=\"clickAddToCartEvent.emit(product)\" [showLoader]=\"quantityShowLoader\" [size]=\"size\" class=\"grow\">\n <tui-svg src=\"scIconCart\" class=\"!text-xs !h-4\"> </tui-svg>\n \u0412 \u043A\u043E\u0440\u0437\u0438\u043D\u0443\n </button>\n <div *ngIf=\"cartItem\" class=\"flex justify-center\">\n <tui-svg src=\"tuiIconCheck\" class=\"!h-5 !w-5 bg-tui-primary text-black rounded-md\"></tui-svg>\n </div>\n </div>\n <sc-input-quantity\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n [quantityUnit]=\"product.quantityUnit\"\n [size]=\"getQuantitySize\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [showLoader]=\"quantityShowLoader\"\n (clickClearEvent)=\"clickClearEvent.emit(cartItem)\"\n class=\"w-full\"\n ></sc-input-quantity>\n</div>\n\n<ng-template #skeleton>\n <div class=\"flex flex-col card-wrapper bg-white rounded-xl overflow-hidden shadow-sc-1\">\n <!-- \u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <div class=\"w-full h-3/5 rounded-t bg-tui-base-02\"></div>\n <!-- \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0442\u043E\u0432\u0430\u0440\u0435 -->\n <div class=\"flex flex-col grow gap-2.5 bg-white rounded-b p-5\">\n <div class=\"w-full h-4 rounded bg-tui-base-02\"></div>\n <div class=\"w-3/5 h-4 rounded bg-tui-base-02\"></div>\n <div class=\"w-full h-4 rounded bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n", styles: [":host[data-size=s] .card-wrapper{width:10rem;height:16rem}:host[data-size=s] .card-wrapper .wrapper-info{padding:8px}:host[data-size=s] .card-wrapper .wrapper-info .cost{font-size:.875rem;line-height:1.25rem}:host[data-size=s] .card-wrapper .button-wrapper tui-svg{font-size:.75rem;line-height:1rem;width:1rem}:host[data-size=m] .card-wrapper{width:12.5rem;height:20rem}:host[data-size=m] .card-wrapper .wrapper-info{padding-inline:16px;padding-block:8px}:host[data-size=m] .card-wrapper .name{font-size:.875rem;line-height:1.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;max-height:3rem}:host[data-size=m] .card-wrapper .info{max-height:1rem}:host[data-size=m] .card-wrapper .cost{font-size:1.125rem;line-height:1.75rem}:host[data-size=m] .card-wrapper .button-wrapper{max-height:0px;font-size:.75rem;line-height:1rem}:host[data-size=m] .card-wrapper:hover .name{-webkit-line-clamp:unset;max-height:6rem}:host[data-size=m] .card-wrapper:hover .info{max-height:3rem}:host[data-size=m] .card-wrapper:hover .button-wrapper{max-height:3rem}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "component", type: i4.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.TuiHintDirective, selector: "[tuiHint]:not(ng-container)", inputs: ["tuiHint", "tuiHintContext", "tuiHintAppearance"] }, { kind: "directive", type: i4.TuiHintDriverDirective, selector: "[tuiHint]" }, { kind: "directive", type: i4.TuiHintHoverDirective, selector: "[tuiHint]:not(ng-container)", inputs: ["tuiHintShowDelay", "tuiHintHideDelay"], exportAs: ["tuiHintHover"] }, { kind: "directive", type: i4.TuiHintPositionDirective, selector: "[tuiHint]:not([tuiHintCustomPosition])", inputs: ["tuiHintDirection"] }, { kind: "component", type: i4.TuiLinkComponent, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo", "icon", "iconAlign", "iconRotated", "mode"], exportAs: ["tuiLink"] }, { kind: "component", type: i6.ScFavoriteBtnComponent, selector: "sc-favorite-btn", outputs: ["clickEvent"] }, { kind: "component", type: i7.ScInputQuantityComponent, selector: "sc-input-quantity", inputs: ["step", "quantityUnit", "showLoader", "showCross", "appearance", "isDisabled", "size"], outputs: ["clickClearEvent"] }, { kind: "component", type: i8.ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceCardComponent, decorators: [{
|
122
|
+
type: Component,
|
123
|
+
args: [{ selector: 'sc-price-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- TODO: \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u0442\u044C \u0434\u0430\u043D\u043D\u044B\u0439 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 \u0438 \u0434\u043B\u044F \u0434\u0435\u0441\u043A\u0442\u043E\u043F\u0430 \u0438 \u0434\u043B\u044F \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u0433\u043E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F. \u0418\u0441\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u044B\u0435 \u0442\u0430\u0439\u0433\u043E\u0432\u0441\u043A\u0438\u0435 \u0441\u0442\u0438\u043B\u0438, \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u0441\u043E\u0433\u043B\u0430\u0441\u043D\u043E \u0441 \u0434\u0438\u0437\u0430\u0439\u043D\u043E\u043C. -->\n<div\n *ngIf=\"product; else skeleton\"\n class=\"h-[17rem] min-w-[10rem] shadow-md w-auto rounded-xl p-2 grid max-h-[17rem] text-[0.75rem] text-left text-tui-text-02\"\n [style.width]=\"isWidthFull\"\n>\n <div class=\"overflow-hidden relative\">\n <img (click)=\"clickCardEvent.emit()\" [src]=\"getCardImage()\" [alt]=\"product.name\" class=\"rounded-xl w-full max-h-full object-cover\" />\n <sc-favorite-btn *ngIf=\"authStatus$ | async\" [class.!block]=\"product.isFavorite\" class=\"top-0 left-0 absolute hidden\"></sc-favorite-btn>\n <tui-svg *ngIf=\"product.isPreviouslyOrdered\" src=\"scIconStar\" class=\"top-0 right-0 absolute hidden text-red-700\"></tui-svg>\n </div>\n <a class=\"p-0 m-0\" tuiLink iconAlign=\"left\" (click)=\"clickCardEvent.emit()\">\n <p class=\"font-bold text-[0.875rem] text-[#526ED3]\">{{ product.name }}</p>\n </a>\n <p *ngIf=\"product?.pack\">\u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}</p>\n\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n <p *ngIf=\"(authStatus$ | async) && product?.costDate\">\u0414\u0430\u0442\u0430: {{ product.costDate }}</p>\n <div *ngIf=\"warehouseSelect$ | async as warehouseSelect\" class=\"flex flex-col\">\n <span *ngIf=\"product.discount\" class=\"flex items-center text-tui-text-02\">\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-black !text-[0.75rem] !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 <span [class.text-tui-text-02]=\"!product.isWarehouseStockExist(warehouseSelect.id)\" class=\"cost font-bold\">{{ product.costRubString }}</span>\n <span *ngIf=\"!product.priceInRub\" class=\"text-xs font-bold text-tui-text-02 hidden group-hover:block\">{{ product.costString }}</span>\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n <div *ngIf=\"!showQuantityControl\" class=\"flex gap-2 max-w-full items-center justify-stretch mt-1\">\n <button tuiButton (click)=\"clickAddToCartEvent.emit(product)\" [showLoader]=\"quantityShowLoader\" [size]=\"size\" class=\"grow\">\n <tui-svg src=\"scIconCart\" class=\"!text-xs !h-4\"> </tui-svg>\n \u0412 \u043A\u043E\u0440\u0437\u0438\u043D\u0443\n </button>\n <div *ngIf=\"cartItem\" class=\"flex justify-center\">\n <tui-svg src=\"tuiIconCheck\" class=\"!h-5 !w-5 bg-tui-primary text-black rounded-md\"></tui-svg>\n </div>\n </div>\n <sc-input-quantity\n *ngIf=\"showQuantityControl\"\n [formControl]=\"quantityControl\"\n [quantityUnit]=\"product.quantityUnit\"\n [size]=\"getQuantitySize\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [showLoader]=\"quantityShowLoader\"\n (clickClearEvent)=\"clickClearEvent.emit(cartItem)\"\n class=\"w-full\"\n ></sc-input-quantity>\n</div>\n\n<ng-template #skeleton>\n <div class=\"flex flex-col card-wrapper bg-white rounded-xl overflow-hidden shadow-sc-1\">\n <!-- \u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <div class=\"w-full h-3/5 rounded-t bg-tui-base-02\"></div>\n <!-- \u041A\u0440\u0430\u0442\u043A\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0442\u043E\u0432\u0430\u0440\u0435 -->\n <div class=\"flex flex-col grow gap-2.5 bg-white rounded-b p-5\">\n <div class=\"w-full h-4 rounded bg-tui-base-02\"></div>\n <div class=\"w-3/5 h-4 rounded bg-tui-base-02\"></div>\n <div class=\"w-full h-4 rounded bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n", styles: [":host[data-size=s] .card-wrapper{width:10rem;height:16rem}:host[data-size=s] .card-wrapper .wrapper-info{padding:8px}:host[data-size=s] .card-wrapper .wrapper-info .cost{font-size:.875rem;line-height:1.25rem}:host[data-size=s] .card-wrapper .button-wrapper tui-svg{font-size:.75rem;line-height:1rem;width:1rem}:host[data-size=m] .card-wrapper{width:12.5rem;height:20rem}:host[data-size=m] .card-wrapper .wrapper-info{padding-inline:16px;padding-block:8px}:host[data-size=m] .card-wrapper .name{font-size:.875rem;line-height:1.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;max-height:3rem}:host[data-size=m] .card-wrapper .info{max-height:1rem}:host[data-size=m] .card-wrapper .cost{font-size:1.125rem;line-height:1.75rem}:host[data-size=m] .card-wrapper .button-wrapper{max-height:0px;font-size:.75rem;line-height:1rem}:host[data-size=m] .card-wrapper:hover .name{-webkit-line-clamp:unset;max-height:6rem}:host[data-size=m] .card-wrapper:hover .info{max-height:3rem}:host[data-size=m] .card-wrapper:hover .button-wrapper{max-height:3rem}\n"] }]
|
124
|
+
}], ctorParameters: function () { return [{ type: i1.UnitsHelper }, { type: i2.ScAuthService }, { type: i2.ScWarehouseService }, { type: undefined, decorators: [{
|
125
|
+
type: Inject,
|
126
|
+
args: [SC_URLS]
|
127
|
+
}] }, { type: undefined, decorators: [{
|
128
|
+
type: Inject,
|
129
|
+
args: [SC_PATH_IMAGE_NOT_FOUND]
|
130
|
+
}] }]; }, propDecorators: { showQuantityControl: [{
|
131
|
+
type: Input
|
132
|
+
}], cartItem: [{
|
133
|
+
type: Input
|
134
|
+
}], product: [{
|
135
|
+
type: Input
|
136
|
+
}], clickFavoriteEvent: [{
|
137
|
+
type: Output
|
138
|
+
}], clickAddToCartEvent: [{
|
139
|
+
type: Output
|
140
|
+
}], clickClearEvent: [{
|
141
|
+
type: Output
|
142
|
+
}], clickCardEvent: [{
|
143
|
+
type: Output
|
144
|
+
}], quantityValueChanges: [{
|
145
|
+
type: Output
|
146
|
+
}], size: [{
|
147
|
+
type: Input
|
148
|
+
}, {
|
149
|
+
type: HostBinding,
|
150
|
+
args: ['attr.data-size']
|
151
|
+
}], isWidthFull: [{
|
152
|
+
type: Input
|
153
|
+
}] } });
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJpY2UtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2F0YWxvZy9wcmljZS1jYXJkL3NjLXByaWNlLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvcHJpY2UtY2FyZC9zYy1wcmljZS1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE9BQU8sRUFBa0YsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQUkxSjs7R0FFRztBQU9ILE1BQU0sT0FBTyxvQkFBb0I7SUFtSDdCOzs7Ozs7OztPQVFHO0lBQ0gsWUFDb0IsV0FBd0IsRUFDdkIsV0FBMEIsRUFDMUIsZ0JBQW9DLEVBQ25CLElBQWEsRUFDRyxpQkFBeUI7UUFKM0QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ0csc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO1FBaEkvRTs7V0FFRztRQUNJLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUUzQzs7V0FFRztRQUVJLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQWdDNUM7O1dBRUc7UUFFSSx1QkFBa0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV6RTs7V0FFRztRQUVJLHdCQUFtQixHQUE0QixJQUFJLFlBQVksRUFBYSxDQUFDO1FBRXBGOztXQUVHO1FBRUksb0JBQWUsR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUVsRjs7V0FFRztRQUVJLG1CQUFjLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFckU7O1dBRUc7UUFDSSxxQkFBZ0IsR0FBbUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFFNUc7O1dBRUc7UUFDSSxvQkFBZSxHQUErQixJQUFJLFdBQVcsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFFMUY7O1dBRUc7UUFFSSx5QkFBb0IsR0FBOEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7UUFFM0Y7O1dBRUc7UUFDYSxnQkFBVyxHQUF3QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXBGOztXQUVHO1FBR0ksU0FBSSxHQUF5QixHQUFHLENBQUM7UUFFeEM7O1dBRUc7UUFFSSxnQkFBVyxHQUFZLEtBQUssQ0FBQztJQWdDakMsQ0FBQztJQXRISjs7OztPQUlHO0lBQ0gsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFDVyxRQUFRLENBQUMsS0FBNkI7UUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFFdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBb0VEOzs7T0FHRztJQUNILElBQVcsZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDaEQsQ0FBQztJQTBCRDs7T0FFRztJQUNILElBQVcsZUFBZTtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNwRixDQUFDOztpSEFoSlEsb0JBQW9CLDRHQWdJakIsT0FBTyxhQUNQLHVCQUF1QjtxR0FqSTFCLG9CQUFvQixpZENoQmpDLHdrS0FpRUE7MkZEakRhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDSSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE1BQU07OzBCQWtJMUMsTUFBTTsyQkFBQyxPQUFPOzswQkFDZCxNQUFNOzJCQUFDLHVCQUF1Qjs0Q0F2SDVCLG1CQUFtQjtzQkFEekIsS0FBSztnQkFrQkssUUFBUTtzQkFEbEIsS0FBSztnQkFjQyxPQUFPO3NCQURiLEtBQUs7Z0JBT0Msa0JBQWtCO3NCQUR4QixNQUFNO2dCQU9BLG1CQUFtQjtzQkFEekIsTUFBTTtnQkFPQSxlQUFlO3NCQURyQixNQUFNO2dCQU9BLGNBQWM7c0JBRHBCLE1BQU07Z0JBaUJBLG9CQUFvQjtzQkFEMUIsTUFBTTtnQkFhQSxJQUFJO3NCQUZWLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQU90QixXQUFXO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFVuaXRzSGVscGVyIH0gZnJvbSAnLi4vLi4vaGVscGVycy9zYy11bml0cy1oZWxwZXInO1xuaW1wb3J0IHsgU0NfUEFUSF9JTUFHRV9OT1RfRk9VTkQsIFNDX1VSTFMsIFNjQXV0aFNlcnZpY2UsIFNjQ2FydEl0ZW0sIFNjSVVybHMsIFNjUHJvZHVjdCwgU2NXYXJlaG91c2UsIFNjV2FyZWhvdXNlU2VydmljZSB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVHVpU2l6ZVMsIFR1aVNpemVYUyB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LrQsNGA0YLQvtGH0LrQuCDRgtC+0LLQsNGA0LAuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtcHJpY2UtY2FyZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLXByaWNlLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NjLXByaWNlLWNhcmQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NQcmljZUNhcmRDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LfQuNGC0Ywg0LvQvtCw0LTQtdGAINC00LvRjyDQv9C+0LvRjyDQstCy0L7QtNCwINC60L7Qu9C40YfQtdGB0YLQstCwINGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcXVhbnRpdHlTaG93TG9hZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQvtCx0YDQsNC30LjRgtGMINC/0L7Qu9C1INCy0LLQvtC00LAg0LrQvtC70LjRh9C10YHRgtCy0LAg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dRdWFudGl0eUNvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCf0L7Qt9C40YbQuNGPINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKlxuICAgICAqIFRPRE86INCh0LTQtdC70LDRgtGMINGC0L7QstCw0YAg0LIg0LrQvtGA0LfQuNC90LUg0L3QsNCx0LvRjtC00LDQtdC80L7QuSDQv9C10YDQtdC80LXQvdC90L7QuSDQv9C+0YHQu9C1INGA0LXQsNC70LjQt9Cw0YbQuNC4IFRBU0s6WyM3MTQ0XS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNhcnRJdGVtKCk6IFNjQ2FydEl0ZW0gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FydEl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1XG4gICAgICpcbiAgICAgKiBUT0RPOiDQodC00LXQu9Cw0YLRjCDRgtC+0LLQsNGAINCyINC60L7RgNC30LjQvdC1INC90LDQsdC70Y7QtNCw0LXQvNC+0Lkg0L/QtdGA0LXQvNC10L3QvdC+0Lkg0L/QvtGB0LvQtSDRgNC10LDQu9C40LfQsNGG0LjQuCBUQVNLOlsjNzE0NF0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGNhcnRJdGVtKHZhbHVlOiBTY0NhcnRJdGVtIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2NhcnRJdGVtID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5xdWFudGl0eUNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLl9jYXJ0SXRlbT8ucXVhbnRpdHkgPz8gbnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLnF1YW50aXR5U2hvd0xvYWRlciA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRitC10LrRgiDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBUT0RPOiDQodC00LXQu9Cw0YLRjCDRgtC+0LLQsNGAINC90LDQsdC70Y7QtNCw0LXQvNC+0Lkg0L/QtdGA0LXQvNC10L3QvdC+0Lkg0L/QvtGB0LvQtSDRgNC10LDQu9C40LfQsNGG0LjQuCBUQVNLOlsjNzE0NF0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcHJvZHVjdD86IFNjUHJvZHVjdDtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQvdC+0L/QutGDIFwi0JIg0LjQt9Cx0YDQsNC90L3QvtC1XCIuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrRmF2b3JpdGVFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutC90L7Qv9C60YMgXCLQkiDQutC+0YDQt9C40L3Rg1wiLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0FkZFRvQ2FydEV2ZW50OiBFdmVudEVtaXR0ZXI8U2NQcm9kdWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2NQcm9kdWN0PigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutC90L7Qv9C60YMg0L7Rh9C40YHRgtC60Lgg0LrQvtC70LjRh9C10YHRgtCy0LAg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0NsZWFyRXZlbnQ6IEV2ZW50RW1pdHRlcjxTY0NhcnRJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8U2NDYXJ0SXRlbT4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQsNGA0YLQvtGH0LrRgyDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrQ2FyZEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINCy0YvQsdGA0LDQvdC90L7Qs9C+INGB0LrQu9Cw0LTQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2FyZWhvdXNlU2VsZWN0JDogT2JzZXJ2YWJsZTxTY1dhcmVob3VzZSB8IG51bGw+ID0gdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldFdhcmVob3VzZVNlbGVjdENoYW5nZSQoKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBGb3JtQ29udHJvbH0g0L/QvtC70Y8g0LLQstC+0LTQsCDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHF1YW50aXR5Q29udHJvbDogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4gPSBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINC60L7Qu9C40YfQtdGB0YLQstCwINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcXVhbnRpdHlWYWx1ZUNoYW5nZXM6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD4gPSB0aGlzLnF1YW50aXR5Q29udHJvbC52YWx1ZUNoYW5nZXM7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0YLQsNGC0YPRgdCwINCw0LLRgtC+0YDQuNC30LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGF1dGhTdGF0dXMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5hdXRoU2VydmljZS5nZXRBdXRoQ2hhbmdlKCk7XG5cbiAgICAvKipcbiAgICAgKiDQoNCw0LfQvNC10YAg0LrQvtC80L/QvtC90LXQvdGC0LAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1zaXplJylcbiAgICBwdWJsaWMgc2l6ZTogVHVpU2l6ZVMgfCBUdWlTaXplWFMgPSAnbSc7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0L3Rg9C20L3QviDQu9C4INC60L7QvNC/0L7QvdC10L3RgiDRgNCw0YHRgtGP0LPQuNCy0LDRgtGMINC90LAg0LLRgdGOINGI0LjRgNC40L3RgyDRgdCy0L7QsdC+0LTQvdC+0LPQviDQv9GA0L7RgdGC0YDQsNC90YHRgtCy0LAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXNXaWR0aEZ1bGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCa0L7QvdCy0LXRgNGC0LDRhtC40Y8g0YDQsNC30LzQtdGA0LAg0LTQu9GPINC60L7QvNC/0L7QvdC10L3RgtCwIHNjLWlucHV0LXF1YW50aXR5LlxuICAgICAqIFRPRE86INCg0LXRiNC40YLRjCDQv9GA0L7QsdC70LXQvNGDINGBINGE0YPQvdC60YbQuNC+0L3QsNC70L7QvCBzaXplINC00LvRjyDRgNCw0LfQvdGL0YUg0L/Qu9Cw0YLRhNC+0YDQvC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGdldFF1YW50aXR5U2l6ZSgpOiBUdWlTaXplUyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemUgPT09ICd4cycgPyAncycgOiB0aGlzLnNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICAgICAqXG4gICAgICogVE9ETzog0KHQtNC10LvQsNGC0Ywg0YLQvtCy0LDRgCDQsiDQutC+0YDQt9C40L3QtSDQvdCw0LHQu9GO0LTQsNC10LzQvtC5INC/0LXRgNC10LzQtdC90L3QvtC5INC/0L7RgdC70LUg0YDQtdCw0LvQuNC30LDRhtC40LggVEFTSzpbIzcxNDRdLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2NhcnRJdGVtPzogU2NDYXJ0SXRlbSB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjUHJpY2VDYXJkQ29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1bml0c0hlbHBlciDQntCx0YrQtdC60YIt0YXRjdC70L/QtdGAINC00LvRjyDRgNCw0LHQvtGC0Ysg0YHQviDQt9C90LDRh9C10L3QuNGP0LzQuCDQtdC00LjQvdC40YYg0LjQt9C80LXRgNC10L3QuNGPINGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gYXV0aFNlcnZpY2Ug0KHQtdGA0LLQuNGBINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LkuXG4gICAgICogQHBhcmFtIHdhcmVob3VzZVNlcnZpY2Ug0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YHQviDRgdC60LvQsNC00LDQvNC4LlxuICAgICAqIEBwYXJhbSB1cmxzINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L3QsCDRgNCw0LfQtNC10LvRiyBiYWNrZW5kJ2EuXG4gICAgICogQHBhcmFtIHBhdGhJbWFnZU5vdEZvdW5kINCf0YPRgtGMINC00L4g0LjQt9C+0LHRgNCw0LbQtdC90LjRjyAn0KLQvtCy0LDRgCDQvdC1INC90LDQudC00LXQvScuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgdW5pdHNIZWxwZXI6IFVuaXRzSGVscGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBTY0F1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHdhcmVob3VzZVNlcnZpY2U6IFNjV2FyZWhvdXNlU2VydmljZSxcbiAgICAgICAgQEluamVjdChTQ19VUkxTKSBwcml2YXRlIHJlYWRvbmx5IHVybHM6IFNjSVVybHMsXG4gICAgICAgIEBJbmplY3QoU0NfUEFUSF9JTUFHRV9OT1RfRk9VTkQpIHByaXZhdGUgcmVhZG9ubHkgcGF0aEltYWdlTm90Rm91bmQ6IHN0cmluZ1xuICAgICkge31cblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L3Rg9C20L3QviDQv9C+0LrQsNC30LDRgtGMINGB0LrQtdC70LXRgtC+0L0uXG4gICAgICovXG4gICAgcHVibGljIGdldCBza2VsZXRvblZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5wcm9kdWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0YHRi9C70LrRgyDQvdCwINC40LfQvtCx0YDQsNC20LXQvdC40LUg0LrQsNGA0YLQvtGH0LrQuCDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHVibGljIGdldENhcmRJbWFnZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0Py5nZXRJbWFnZSh0aGlzLnVybHMuaW1nU2VydmVyVXJsKSA/PyB0aGlzLnBhdGhJbWFnZU5vdEZvdW5kO1xuICAgIH1cbn1cbiIsIjwhLS0gVE9ETzog0YDQtdCw0LvQuNC30L7QstCw0YLRjCDQtNCw0L3QvdGL0Lkg0LrQvtC80L/QvtC90LXQvdGCINC4INC00LvRjyDQtNC10YHQutGC0L7Qv9CwINC4INC00LvRjyDQvNC+0LHQuNC70YzQvdC+0LPQviDQv9GA0LjQu9C+0LbQtdC90LjRjy4g0JjRgdC/0YDQsNCy0LjRgtGMINCy0YHQtSDQs9C70L7QsdCw0LvRjNC90YvQtSDRgtCw0LnQs9C+0LLRgdC60LjQtSDRgdGC0LjQu9C4LCDQv9GA0LjQstC10YHRgtC4INC40YUg0LIg0L/QvtGA0Y/QtNC+0Log0YHQvtCz0LvQsNGB0L3QviDRgSDQtNC40LfQsNC50L3QvtC8LiAtLT5cbjxkaXZcbiAgICAqbmdJZj1cInByb2R1Y3Q7IGVsc2Ugc2tlbGV0b25cIlxuICAgIGNsYXNzPVwiaC1bMTdyZW1dIG1pbi13LVsxMHJlbV0gc2hhZG93LW1kIHctYXV0byByb3VuZGVkLXhsIHAtMiBncmlkIG1heC1oLVsxN3JlbV0gdGV4dC1bMC43NXJlbV0gdGV4dC1sZWZ0IHRleHQtdHVpLXRleHQtMDJcIlxuICAgIFtzdHlsZS53aWR0aF09XCJpc1dpZHRoRnVsbFwiXG4+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlbiByZWxhdGl2ZVwiPlxuICAgICAgICA8aW1nIChjbGljayk9XCJjbGlja0NhcmRFdmVudC5lbWl0KClcIiBbc3JjXT1cImdldENhcmRJbWFnZSgpXCIgW2FsdF09XCJwcm9kdWN0Lm5hbWVcIiBjbGFzcz1cInJvdW5kZWQteGwgdy1mdWxsIG1heC1oLWZ1bGwgb2JqZWN0LWNvdmVyXCIgLz5cbiAgICAgICAgPHNjLWZhdm9yaXRlLWJ0biAqbmdJZj1cImF1dGhTdGF0dXMkIHwgYXN5bmNcIiBbY2xhc3MuIWJsb2NrXT1cInByb2R1Y3QuaXNGYXZvcml0ZVwiIGNsYXNzPVwidG9wLTAgbGVmdC0wIGFic29sdXRlIGhpZGRlblwiPjwvc2MtZmF2b3JpdGUtYnRuPlxuICAgICAgICA8dHVpLXN2ZyAqbmdJZj1cInByb2R1Y3QuaXNQcmV2aW91c2x5T3JkZXJlZFwiIHNyYz1cInNjSWNvblN0YXJcIiBjbGFzcz1cInRvcC0wIHJpZ2h0LTAgYWJzb2x1dGUgaGlkZGVuIHRleHQtcmVkLTcwMFwiPjwvdHVpLXN2Zz5cbiAgICA8L2Rpdj5cbiAgICA8YSBjbGFzcz1cInAtMCBtLTBcIiB0dWlMaW5rIGljb25BbGlnbj1cImxlZnRcIiAoY2xpY2spPVwiY2xpY2tDYXJkRXZlbnQuZW1pdCgpXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtWzAuODc1cmVtXSB0ZXh0LVsjNTI2RUQzXVwiPnt7IHByb2R1Y3QubmFtZSB9fTwvcD5cbiAgICA8L2E+XG4gICAgPHAgKm5nSWY9XCJwcm9kdWN0Py5wYWNrXCI+0J3QvtGA0LzQsCDRg9C/0LDQutC+0LLQutC4OiB7eyBwcm9kdWN0LnBhY2sgfX08L3A+XG5cbiAgICA8cD7QkNGA0YLQuNC60YPQuzoge3sgcHJvZHVjdC5jb2RlIH19PC9wPlxuICAgIDxwICpuZ0lmPVwiKGF1dGhTdGF0dXMkIHwgYXN5bmMpICYmIHByb2R1Y3Q/LmNvc3REYXRlXCI+0JTQsNGC0LA6IHt7IHByb2R1Y3QuY29zdERhdGUgfX08L3A+XG4gICAgPGRpdiAqbmdJZj1cIndhcmVob3VzZVNlbGVjdCQgfCBhc3luYyBhcyB3YXJlaG91c2VTZWxlY3RcIiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9kdWN0LmRpc2NvdW50XCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXR1aS10ZXh0LTAyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpbmUtdGhyb3VnaFwiPnt7IHByb2R1Y3QuZGlzY291bnRDb3N0U3RyaW5nIH19PC9zcGFuPiAmbmJzcDtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10dWktc3VjY2Vzcy1maWxsIGZvbnQtYm9sZFwiPiAte3sgcHJvZHVjdC5kaXNjb3VudC5wZXJjZW50IH19JSA8L3NwYW4+XG4gICAgICAgICAgICA8dHVpLXN2ZyBzcmM9XCJ0dWlJY29uSW5mb0xhcmdlXCIgW3R1aUhpbnRdPVwiZGlzY291bnRIaW50XCIgW3R1aUhpbnRTaG93RGVsYXldPVwiMTAwXCIgdHVpSGludERpcmVjdGlvbj1cInRvcFwiIGNsYXNzPVwidGV4dC1ibGFjayAhdGV4dC1bMC43NXJlbV0gIWgtNFwiPjwvdHVpLXN2Zz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzY291bnRIaW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJvbGRcIj57eyBwcm9kdWN0LmRpc2NvdW50Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvZHVjdC5kaXNjb3VudC5leHBpcmVkQXQgYXMgZXhwaXJlZEF0XCI+0JTQsNGC0LAg0L7QutC+0L3Rh9Cw0L3QuNGPOiB7eyBleHBpcmVkQXQgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gW2NsYXNzLnRleHQtdHVpLXRleHQtMDJdPVwiIXByb2R1Y3QuaXNXYXJlaG91c2VTdG9ja0V4aXN0KHdhcmVob3VzZVNlbGVjdC5pZClcIiBjbGFzcz1cImNvc3QgZm9udC1ib2xkXCI+e3sgcHJvZHVjdC5jb3N0UnViU3RyaW5nIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFwcm9kdWN0LnByaWNlSW5SdWJcIiBjbGFzcz1cInRleHQteHMgZm9udC1ib2xkIHRleHQtdHVpLXRleHQtMDIgaGlkZGVuIGdyb3VwLWhvdmVyOmJsb2NrXCI+e3sgcHJvZHVjdC5jb3N0U3RyaW5nIH19PC9zcGFuPlxuICAgICAgICA8c2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrIFtwcm9kdWN0XT1cInByb2R1Y3RcIj48L3NjLXByaWNlLXdhcmVob3VzZS1zdG9jaz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXNob3dRdWFudGl0eUNvbnRyb2xcIiBjbGFzcz1cImZsZXggZ2FwLTIgbWF4LXctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdHJldGNoIG10LTFcIj5cbiAgICAgICAgPGJ1dHRvbiB0dWlCdXR0b24gKGNsaWNrKT1cImNsaWNrQWRkVG9DYXJ0RXZlbnQuZW1pdChwcm9kdWN0KVwiIFtzaG93TG9hZGVyXT1cInF1YW50aXR5U2hvd0xvYWRlclwiIFtzaXplXT1cInNpemVcIiBjbGFzcz1cImdyb3dcIj5cbiAgICAgICAgICAgIDx0dWktc3ZnIHNyYz1cInNjSWNvbkNhcnRcIiBjbGFzcz1cIiF0ZXh0LXhzICFoLTRcIj4gPC90dWktc3ZnPlxuICAgICAgICAgICAg0JIg0LrQvtGA0LfQuNC90YNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjYXJ0SXRlbVwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgPHR1aS1zdmcgc3JjPVwidHVpSWNvbkNoZWNrXCIgY2xhc3M9XCIhaC01ICF3LTUgYmctdHVpLXByaW1hcnkgdGV4dC1ibGFjayByb3VuZGVkLW1kXCI+PC90dWktc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8c2MtaW5wdXQtcXVhbnRpdHlcbiAgICAgICAgKm5nSWY9XCJzaG93UXVhbnRpdHlDb250cm9sXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInF1YW50aXR5Q29udHJvbFwiXG4gICAgICAgIFtxdWFudGl0eVVuaXRdPVwicHJvZHVjdC5xdWFudGl0eVVuaXRcIlxuICAgICAgICBbc2l6ZV09XCJnZXRRdWFudGl0eVNpemVcIlxuICAgICAgICBbc3RlcF09XCJ1bml0c0hlbHBlci5wcm9kdWN0TXVsdGlwbGljaXR5KHByb2R1Y3QpXCJcbiAgICAgICAgW3Nob3dMb2FkZXJdPVwicXVhbnRpdHlTaG93TG9hZGVyXCJcbiAgICAgICAgKGNsaWNrQ2xlYXJFdmVudCk9XCJjbGlja0NsZWFyRXZlbnQuZW1pdChjYXJ0SXRlbSlcIlxuICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgPjwvc2MtaW5wdXQtcXVhbnRpdHk+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNza2VsZXRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBjYXJkLXdyYXBwZXIgYmctd2hpdGUgcm91bmRlZC14bCBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LXNjLTFcIj5cbiAgICAgICAgPCEtLSDQmNC30L7QsdGA0LDQttC10L3QuNC1INGC0L7QstCw0YDQsCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBoLTMvNSByb3VuZGVkLXQgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgPCEtLSDQmtGA0LDRgtC60LDRjyDQuNC90YTQvtGA0LzQsNGG0LjRjyDQviDRgtC+0LLQsNGA0LUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdyb3cgZ2FwLTIuNSBiZy13aGl0ZSByb3VuZGVkLWIgcC01XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGgtNCByb3VuZGVkIGJnLXR1aS1iYXNlLTAyXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zLzUgaC00IHJvdW5kZWQgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgaC00IHJvdW5kZWQgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import { formatDate } from '@angular/common';
|
2
|
+
import { tuiFormatNumber } from '@taiga-ui/core';
|
3
|
+
/**
|
4
|
+
* Настройки отрисовки графика.
|
5
|
+
*
|
6
|
+
* @see [Документация](https://echarts.apache.org/en/option.html#title)
|
7
|
+
*/
|
8
|
+
export const scChartOption = {
|
9
|
+
grid: {
|
10
|
+
top: 12,
|
11
|
+
left: 64,
|
12
|
+
right: 0,
|
13
|
+
bottom: 24,
|
14
|
+
},
|
15
|
+
tooltip: {
|
16
|
+
trigger: 'axis',
|
17
|
+
formatter: (params) => {
|
18
|
+
const data = Array.isArray(params) ? params[0].data : params.data;
|
19
|
+
const date = new Date(data.value[0]);
|
20
|
+
const nextDate = new Date(data.value[2]);
|
21
|
+
return `
|
22
|
+
<div class="text-center text-black">
|
23
|
+
<span class="font-bold">${data.value[1]} ₽</span>
|
24
|
+
</br>
|
25
|
+
<span class="text-xs">${formatDate(date, 'dd.MM', 'en')} - ${formatDate(nextDate, 'dd.MM', 'en')}</span>
|
26
|
+
</div>
|
27
|
+
`;
|
28
|
+
},
|
29
|
+
axisPointer: {
|
30
|
+
animation: false,
|
31
|
+
type: 'cross',
|
32
|
+
},
|
33
|
+
textStyle: {
|
34
|
+
fontFamily: 'Roboto, "Helvetica Neue", sans-serif',
|
35
|
+
},
|
36
|
+
},
|
37
|
+
xAxis: {
|
38
|
+
type: 'time',
|
39
|
+
splitLine: {
|
40
|
+
show: false,
|
41
|
+
},
|
42
|
+
axisLine: {
|
43
|
+
show: false,
|
44
|
+
},
|
45
|
+
axisTick: {
|
46
|
+
show: false,
|
47
|
+
},
|
48
|
+
axisLabel: {
|
49
|
+
hideOverlap: true,
|
50
|
+
},
|
51
|
+
boundaryGap: ['3%', '3%'],
|
52
|
+
},
|
53
|
+
yAxis: {
|
54
|
+
splitLine: {
|
55
|
+
show: false,
|
56
|
+
},
|
57
|
+
axisLine: {
|
58
|
+
show: false,
|
59
|
+
},
|
60
|
+
axisTick: {
|
61
|
+
show: false,
|
62
|
+
},
|
63
|
+
axisLabel: {
|
64
|
+
formatter: (value) => tuiFormatNumber(value),
|
65
|
+
},
|
66
|
+
type: 'value',
|
67
|
+
boundaryGap: [0, '100%'],
|
68
|
+
},
|
69
|
+
series: {
|
70
|
+
name: 'История цены',
|
71
|
+
type: 'line',
|
72
|
+
showSymbol: false,
|
73
|
+
symbolSize: 12,
|
74
|
+
itemStyle: {
|
75
|
+
color: '#ffcc40',
|
76
|
+
},
|
77
|
+
},
|
78
|
+
};
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2hhcnQtb3B0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvcHJpY2UtaGlzdG9yeS9zYy1jaGFydC1vcHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFrQjtJQUN4QyxJQUFJLEVBQUU7UUFDRixHQUFHLEVBQUUsRUFBRTtRQUNQLElBQUksRUFBRSxFQUFFO1FBQ1IsS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLEVBQUUsRUFBRTtLQUNiO0lBQ0QsT0FBTyxFQUFFO1FBQ0wsT0FBTyxFQUFFLE1BQU07UUFDZixTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNsQixNQUFNLElBQUksR0FBcUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQXlCLENBQUMsQ0FBQyxDQUFFLE1BQU0sQ0FBQyxJQUF5QixDQUFDO1lBQ2hJLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekMsT0FBTzs7OENBRTJCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzs0Q0FFZixVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7O2FBRXZHLENBQUM7UUFDTixDQUFDO1FBQ0QsV0FBVyxFQUFFO1lBQ1QsU0FBUyxFQUFFLEtBQUs7WUFDaEIsSUFBSSxFQUFFLE9BQU87U0FDaEI7UUFDRCxTQUFTLEVBQUU7WUFDUCxVQUFVLEVBQUUsc0NBQXNDO1NBQ3JEO0tBQ0o7SUFDRCxLQUFLLEVBQUU7UUFDSCxJQUFJLEVBQUUsTUFBTTtRQUNaLFNBQVMsRUFBRTtZQUNQLElBQUksRUFBRSxLQUFLO1NBQ2Q7UUFDRCxRQUFRLEVBQUU7WUFDTixJQUFJLEVBQUUsS0FBSztTQUNkO1FBQ0QsUUFBUSxFQUFFO1lBQ04sSUFBSSxFQUFFLEtBQUs7U0FDZDtRQUNELFNBQVMsRUFBRTtZQUNQLFdBQVcsRUFBRSxJQUFJO1NBQ3BCO1FBQ0QsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztLQUM1QjtJQUNELEtBQUssRUFBRTtRQUNILFNBQVMsRUFBRTtZQUNQLElBQUksRUFBRSxLQUFLO1NBQ2Q7UUFDRCxRQUFRLEVBQUU7WUFDTixJQUFJLEVBQUUsS0FBSztTQUNkO1FBQ0QsUUFBUSxFQUFFO1lBQ04sSUFBSSxFQUFFLEtBQUs7U0FDZDtRQUNELFNBQVMsRUFBRTtZQUNQLFNBQVMsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztTQUN2RDtRQUNELElBQUksRUFBRSxPQUFPO1FBQ2IsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztLQUMzQjtJQUNELE1BQU0sRUFBRTtRQUNKLElBQUksRUFBRSxjQUFjO1FBQ3BCLElBQUksRUFBRSxNQUFNO1FBQ1osVUFBVSxFQUFFLEtBQUs7UUFDakIsVUFBVSxFQUFFLEVBQUU7UUFDZCxTQUFTLEVBQUU7WUFDUCxLQUFLLEVBQUUsU0FBUztTQUNuQjtLQUNKO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVDaGFydHNPcHRpb24gfSBmcm9tICdlY2hhcnRzJztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2NJQ2hhcnREYXRhSXRlbSB9IGZyb20gJy4vc2MtaS1jaGFydC1kYXRhLWl0ZW0nO1xuaW1wb3J0IHsgdHVpRm9ybWF0TnVtYmVyIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuLyoqXG4gKiDQndCw0YHRgtGA0L7QudC60Lgg0L7RgtGA0LjRgdC+0LLQutC4INCz0YDQsNGE0LjQutCwLlxuICpcbiAqIEBzZWUgW9CU0L7QutGD0LzQtdC90YLQsNGG0LjRj10oaHR0cHM6Ly9lY2hhcnRzLmFwYWNoZS5vcmcvZW4vb3B0aW9uLmh0bWwjdGl0bGUpXG4gKi9cbmV4cG9ydCBjb25zdCBzY0NoYXJ0T3B0aW9uOiBFQ2hhcnRzT3B0aW9uID0ge1xuICAgIGdyaWQ6IHtcbiAgICAgICAgdG9wOiAxMixcbiAgICAgICAgbGVmdDogNjQsXG4gICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICBib3R0b206IDI0LFxuICAgIH0sXG4gICAgdG9vbHRpcDoge1xuICAgICAgICB0cmlnZ2VyOiAnYXhpcycsXG4gICAgICAgIGZvcm1hdHRlcjogKHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YTogU2NJQ2hhcnREYXRhSXRlbSA9IEFycmF5LmlzQXJyYXkocGFyYW1zKSA/IChwYXJhbXNbMF0uZGF0YSBhcyBTY0lDaGFydERhdGFJdGVtKSA6IChwYXJhbXMuZGF0YSBhcyBTY0lDaGFydERhdGFJdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRhLnZhbHVlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHREYXRlID0gbmV3IERhdGUoZGF0YS52YWx1ZVsyXSk7XG5cbiAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtYmxhY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRcIj4ke2RhdGEudmFsdWVbMV19IOKCvTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9icj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzXCI+JHtmb3JtYXREYXRlKGRhdGUsICdkZC5NTScsICdlbicpfSAtICR7Zm9ybWF0RGF0ZShuZXh0RGF0ZSwgJ2RkLk1NJywgJ2VuJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgICAgICAgfSxcbiAgICAgICAgYXhpc1BvaW50ZXI6IHtcbiAgICAgICAgICAgIGFuaW1hdGlvbjogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiAnY3Jvc3MnLFxuICAgICAgICB9LFxuICAgICAgICB0ZXh0U3R5bGU6IHtcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdSb2JvdG8sIFwiSGVsdmV0aWNhIE5ldWVcIiwgc2Fucy1zZXJpZicsXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB4QXhpczoge1xuICAgICAgICB0eXBlOiAndGltZScsXG4gICAgICAgIHNwbGl0TGluZToge1xuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGF4aXNMaW5lOiB7XG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgYXhpc1RpY2s6IHtcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBheGlzTGFiZWw6IHtcbiAgICAgICAgICAgIGhpZGVPdmVybGFwOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBib3VuZGFyeUdhcDogWyczJScsICczJSddLFxuICAgIH0sXG4gICAgeUF4aXM6IHtcbiAgICAgICAgc3BsaXRMaW5lOiB7XG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgYXhpc0xpbmU6IHtcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBheGlzVGljazoge1xuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGF4aXNMYWJlbDoge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiAodmFsdWU6IG51bWJlcikgPT4gdHVpRm9ybWF0TnVtYmVyKHZhbHVlKSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogJ3ZhbHVlJyxcbiAgICAgICAgYm91bmRhcnlHYXA6IFswLCAnMTAwJSddLFxuICAgIH0sXG4gICAgc2VyaWVzOiB7XG4gICAgICAgIG5hbWU6ICfQmNGB0YLQvtGA0LjRjyDRhtC10L3RiycsXG4gICAgICAgIHR5cGU6ICdsaW5lJyxcbiAgICAgICAgc2hvd1N5bWJvbDogZmFsc2UsXG4gICAgICAgIHN5bWJvbFNpemU6IDEyLFxuICAgICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgICAgIGNvbG9yOiAnI2ZmY2M0MCcsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4iXX0=
|
@@ -0,0 +1,2 @@
|
|
1
|
+
export {};
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1jaGFydC1kYXRhLWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2F0YWxvZy9wcmljZS1oaXN0b3J5L3NjLWktY2hhcnQtZGF0YS1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqINCc0L7QtNC10LvRjCDQtNCw0L3QvdGL0YUsINC/0YDQuNC90LjQvNCw0LXQvNGL0YUg0LPRgNCw0YTQuNC60L7QvC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY0lDaGFydERhdGFJdGVtIHtcbiAgICAvKipcbiAgICAgKiDQndCw0LfQstCw0L3QuNC1INC70LXQs9C10L3QtNGLLCDQuiDQutC+0YLQvtGA0L7QuSDQvtGC0L3QvtGB0LjRgtGB0Y8g0L/RgNC40LzQuNGC0LjQsi5cbiAgICAgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDQl9C90LDRh9C10L3QuNC1INC/0YDQuNC80LjRgtC40LLQsCDQtNC70Y8g0L7RgtGA0LjRgdC+0LLQutC4LlxuICAgICAqL1xuICAgIHZhbHVlOiBbc3RyaW5nIHwgRGF0ZSwgbnVtYmVyLCBzdHJpbmcgfCBEYXRlXTtcbn1cbiJdfQ==
|
@@ -0,0 +1,113 @@
|
|
1
|
+
/**
|
2
|
+
* Language: Russian.
|
3
|
+
*/
|
4
|
+
export default {
|
5
|
+
time: {
|
6
|
+
month: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
|
7
|
+
monthAbbr: ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'],
|
8
|
+
dayOfWeek: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],
|
9
|
+
dayOfWeekAbbr: ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],
|
10
|
+
},
|
11
|
+
legend: {
|
12
|
+
selector: {
|
13
|
+
all: 'Всё',
|
14
|
+
inverse: 'Обратить',
|
15
|
+
},
|
16
|
+
},
|
17
|
+
toolbox: {
|
18
|
+
brush: {
|
19
|
+
title: {
|
20
|
+
rect: 'Выделить область',
|
21
|
+
polygon: 'Инструмент «Лассо»',
|
22
|
+
lineX: 'Горизонтальное выделение',
|
23
|
+
lineY: 'Вертикальное выделение',
|
24
|
+
keep: 'Оставить выбранное',
|
25
|
+
clear: 'Очистить выбранное',
|
26
|
+
},
|
27
|
+
},
|
28
|
+
dataView: {
|
29
|
+
title: 'Данные',
|
30
|
+
lang: ['Данные', 'Закрыть', 'Обновить'],
|
31
|
+
},
|
32
|
+
dataZoom: {
|
33
|
+
title: {
|
34
|
+
zoom: 'Увеличить',
|
35
|
+
back: 'Сбросить увеличение',
|
36
|
+
},
|
37
|
+
},
|
38
|
+
magicType: {
|
39
|
+
title: {
|
40
|
+
line: 'Переключиться на линейный график',
|
41
|
+
bar: 'Переключиться на столбчатую диаграмму',
|
42
|
+
stack: 'Стопка',
|
43
|
+
tiled: 'Плитка',
|
44
|
+
},
|
45
|
+
},
|
46
|
+
restore: {
|
47
|
+
title: 'Восстановить',
|
48
|
+
},
|
49
|
+
saveAsImage: {
|
50
|
+
title: 'Сохранить картинку',
|
51
|
+
lang: ['Правый клик, чтобы сохранить картинку'],
|
52
|
+
},
|
53
|
+
},
|
54
|
+
series: {
|
55
|
+
typeNames: {
|
56
|
+
pie: 'Круговая диаграмма',
|
57
|
+
bar: 'Столбчатая диаграмма',
|
58
|
+
line: 'Линейный график',
|
59
|
+
scatter: 'Точечная диаграмма',
|
60
|
+
effectScatter: 'Точечная диаграмма с волнами',
|
61
|
+
radar: 'Лепестковая диаграмма',
|
62
|
+
tree: 'Дерево',
|
63
|
+
treemap: 'Плоское дерево',
|
64
|
+
boxplot: 'Ящик с усами',
|
65
|
+
candlestick: 'Свечной график',
|
66
|
+
k: 'График К-линий',
|
67
|
+
heatmap: 'Тепловая карта',
|
68
|
+
map: 'Карта',
|
69
|
+
parallel: 'Диаграмма параллельных координат',
|
70
|
+
lines: 'Линейный граф',
|
71
|
+
graph: 'Граф отношений',
|
72
|
+
sankey: 'Диаграмма Санкей',
|
73
|
+
funnel: 'Воронкообразная диаграмма',
|
74
|
+
gauge: 'Шкала',
|
75
|
+
pictorialBar: 'Столбец-картинка',
|
76
|
+
themeRiver: 'Тематическая река',
|
77
|
+
sunburst: 'Солнечные лучи',
|
78
|
+
},
|
79
|
+
},
|
80
|
+
aria: {
|
81
|
+
general: {
|
82
|
+
withTitle: 'Это график, показывающий "{title}"',
|
83
|
+
withoutTitle: 'Это график',
|
84
|
+
},
|
85
|
+
series: {
|
86
|
+
single: {
|
87
|
+
prefix: '',
|
88
|
+
withName: ' с типом {seriesType} и именем {seriesName}.',
|
89
|
+
withoutName: ' с типом {seriesType}.',
|
90
|
+
},
|
91
|
+
multiple: {
|
92
|
+
prefix: '. Он состоит из {seriesCount} серий.',
|
93
|
+
withName: ' Серия {seriesId} имеет тип {seriesType} и показывает {seriesName}.',
|
94
|
+
withoutName: ' Серия {seriesId} имеет тип {seriesType}.',
|
95
|
+
separator: {
|
96
|
+
middle: '',
|
97
|
+
end: '',
|
98
|
+
},
|
99
|
+
},
|
100
|
+
},
|
101
|
+
data: {
|
102
|
+
allData: 'Данные таковы: ',
|
103
|
+
partialData: 'Первые {displayCnt} элементов: ',
|
104
|
+
withName: 'значение для {name} — {value}',
|
105
|
+
withoutName: '{value}',
|
106
|
+
separator: {
|
107
|
+
middle: ', ',
|
108
|
+
end: '. ',
|
109
|
+
},
|
110
|
+
},
|
111
|
+
},
|
112
|
+
};
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtbGFuZy1SVS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL3ByaWNlLWhpc3Rvcnkvc2MtbGFuZy1SVS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGVBQWU7SUFDWCxJQUFJLEVBQUU7UUFDRixLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQztRQUMzSCxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztRQUMvRixTQUFTLEVBQUUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7UUFDOUYsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0tBQzVEO0lBQ0QsTUFBTSxFQUFFO1FBQ0osUUFBUSxFQUFFO1lBQ04sR0FBRyxFQUFFLEtBQUs7WUFDVixPQUFPLEVBQUUsVUFBVTtTQUN0QjtLQUNKO0lBQ0QsT0FBTyxFQUFFO1FBQ0wsS0FBSyxFQUFFO1lBQ0gsS0FBSyxFQUFFO2dCQUNILElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLE9BQU8sRUFBRSxvQkFBb0I7Z0JBQzdCLEtBQUssRUFBRSwwQkFBMEI7Z0JBQ2pDLEtBQUssRUFBRSx3QkFBd0I7Z0JBQy9CLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLEtBQUssRUFBRSxvQkFBb0I7YUFDOUI7U0FDSjtRQUNELFFBQVEsRUFBRTtZQUNOLEtBQUssRUFBRSxRQUFRO1lBQ2YsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUM7U0FDMUM7UUFDRCxRQUFRLEVBQUU7WUFDTixLQUFLLEVBQUU7Z0JBQ0gsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLElBQUksRUFBRSxxQkFBcUI7YUFDOUI7U0FDSjtRQUNELFNBQVMsRUFBRTtZQUNQLEtBQUssRUFBRTtnQkFDSCxJQUFJLEVBQUUsa0NBQWtDO2dCQUN4QyxHQUFHLEVBQUUsdUNBQXVDO2dCQUM1QyxLQUFLLEVBQUUsUUFBUTtnQkFDZixLQUFLLEVBQUUsUUFBUTthQUNsQjtTQUNKO1FBQ0QsT0FBTyxFQUFFO1lBQ0wsS0FBSyxFQUFFLGNBQWM7U0FDeEI7UUFDRCxXQUFXLEVBQUU7WUFDVCxLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLElBQUksRUFBRSxDQUFDLHVDQUF1QyxDQUFDO1NBQ2xEO0tBQ0o7SUFDRCxNQUFNLEVBQUU7UUFDSixTQUFTLEVBQUU7WUFDUCxHQUFHLEVBQUUsb0JBQW9CO1lBQ3pCLEdBQUcsRUFBRSxzQkFBc0I7WUFDM0IsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixPQUFPLEVBQUUsb0JBQW9CO1lBQzdCLGFBQWEsRUFBRSw4QkFBOEI7WUFDN0MsS0FBSyxFQUFFLHVCQUF1QjtZQUM5QixJQUFJLEVBQUUsUUFBUTtZQUNkLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsT0FBTyxFQUFFLGNBQWM7WUFDdkIsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixDQUFDLEVBQUUsZ0JBQWdCO1lBQ25CLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsR0FBRyxFQUFFLE9BQU87WUFDWixRQUFRLEVBQUUsa0NBQWtDO1lBQzVDLEtBQUssRUFBRSxlQUFlO1lBQ3RCLEtBQUssRUFBRSxnQkFBZ0I7WUFDdkIsTUFBTSxFQUFFLGtCQUFrQjtZQUMxQixNQUFNLEVBQUUsMkJBQTJCO1lBQ25DLEtBQUssRUFBRSxPQUFPO1lBQ2QsWUFBWSxFQUFFLGtCQUFrQjtZQUNoQyxVQUFVLEVBQUUsbUJBQW1CO1lBQy9CLFFBQVEsRUFBRSxnQkFBZ0I7U0FDN0I7S0FDSjtJQUNELElBQUksRUFBRTtRQUNGLE9BQU8sRUFBRTtZQUNMLFNBQVMsRUFBRSxvQ0FBb0M7WUFDL0MsWUFBWSxFQUFFLFlBQVk7U0FDN0I7UUFDRCxNQUFNLEVBQUU7WUFDSixNQUFNLEVBQUU7Z0JBQ0osTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsUUFBUSxFQUFFLDhDQUE4QztnQkFDeEQsV0FBVyxFQUFFLHdCQUF3QjthQUN4QztZQUNELFFBQVEsRUFBRTtnQkFDTixNQUFNLEVBQUUsc0NBQXNDO2dCQUM5QyxRQUFRLEVBQUUscUVBQXFFO2dCQUMvRSxXQUFXLEVBQUUsMkNBQTJDO2dCQUN4RCxTQUFTLEVBQUU7b0JBQ1AsTUFBTSxFQUFFLEVBQUU7b0JBQ1YsR0FBRyxFQUFFLEVBQUU7aUJBQ1Y7YUFDSjtTQUNKO1FBQ0QsSUFBSSxFQUFFO1lBQ0YsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsaUNBQWlDO1lBQzlDLFFBQVEsRUFBRSwrQkFBK0I7WUFDekMsV0FBVyxFQUFFLFNBQVM7WUFDdEIsU0FBUyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxJQUFJO2dCQUNaLEdBQUcsRUFBRSxJQUFJO2FBQ1o7U0FDSjtLQUNKO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGFuZ3VhZ2U6IFJ1c3NpYW4uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICB0aW1lOiB7XG4gICAgICAgIG1vbnRoOiBbJ9Cv0L3QstCw0YDRjCcsICfQpNC10LLRgNCw0LvRjCcsICfQnNCw0YDRgicsICfQkNC/0YDQtdC70YwnLCAn0JzQsNC5JywgJ9CY0Y7QvdGMJywgJ9CY0Y7Qu9GMJywgJ9CQ0LLQs9GD0YHRgicsICfQodC10L3RgtGP0LHRgNGMJywgJ9Ce0LrRgtGP0LHRgNGMJywgJ9Cd0L7Rj9Cx0YDRjCcsICfQlNC10LrQsNCx0YDRjCddLFxuICAgICAgICBtb250aEFiYnI6IFsn0K/QvdCyJywgJ9Ck0LXQsicsICfQnNCw0YAnLCAn0JDQv9GAJywgJ9Cc0LDQuScsICfQmNGO0L0nLCAn0JjRjtC7JywgJ9CQ0LLQsycsICfQodC10L0nLCAn0J7QutGCJywgJ9Cd0L7RjycsICfQlNC10LonXSxcbiAgICAgICAgZGF5T2ZXZWVrOiBbJ9CS0L7RgdC60YDQtdGB0LXQvdGM0LUnLCAn0J/QvtC90LXQtNC10LvRjNC90LjQuicsICfQktGC0L7RgNC90LjQuicsICfQodGA0LXQtNCwJywgJ9Cn0LXRgtCy0LXRgNCzJywgJ9Cf0Y/RgtC90LjRhtCwJywgJ9Ch0YPQsdCx0L7RgtCwJ10sXG4gICAgICAgIGRheU9mV2Vla0FiYnI6IFsn0LLRgScsICfQv9C9JywgJ9Cy0YInLCAn0YHRgCcsICfRh9GCJywgJ9C/0YInLCAn0YHQsSddLFxuICAgIH0sXG4gICAgbGVnZW5kOiB7XG4gICAgICAgIHNlbGVjdG9yOiB7XG4gICAgICAgICAgICBhbGw6ICfQktGB0ZEnLFxuICAgICAgICAgICAgaW52ZXJzZTogJ9Ce0LHRgNCw0YLQuNGC0YwnLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgdG9vbGJveDoge1xuICAgICAgICBicnVzaDoge1xuICAgICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgICAgICByZWN0OiAn0JLRi9C00LXQu9C40YLRjCDQvtCx0LvQsNGB0YLRjCcsXG4gICAgICAgICAgICAgICAgcG9seWdvbjogJ9CY0L3RgdGC0YDRg9C80LXQvdGCIMKr0JvQsNGB0YHQvsK7JyxcbiAgICAgICAgICAgICAgICBsaW5lWDogJ9CT0L7RgNC40LfQvtC90YLQsNC70YzQvdC+0LUg0LLRi9C00LXQu9C10L3QuNC1JyxcbiAgICAgICAgICAgICAgICBsaW5lWTogJ9CS0LXRgNGC0LjQutCw0LvRjNC90L7QtSDQstGL0LTQtdC70LXQvdC40LUnLFxuICAgICAgICAgICAgICAgIGtlZXA6ICfQntGB0YLQsNCy0LjRgtGMINCy0YvQsdGA0LDQvdC90L7QtScsXG4gICAgICAgICAgICAgICAgY2xlYXI6ICfQntGH0LjRgdGC0LjRgtGMINCy0YvQsdGA0LDQvdC90L7QtScsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBkYXRhVmlldzoge1xuICAgICAgICAgICAgdGl0bGU6ICfQlNCw0L3QvdGL0LUnLFxuICAgICAgICAgICAgbGFuZzogWyfQlNCw0L3QvdGL0LUnLCAn0JfQsNC60YDRi9GC0YwnLCAn0J7QsdC90L7QstC40YLRjCddLFxuICAgICAgICB9LFxuICAgICAgICBkYXRhWm9vbToge1xuICAgICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgICAgICB6b29tOiAn0KPQstC10LvQuNGH0LjRgtGMJyxcbiAgICAgICAgICAgICAgICBiYWNrOiAn0KHQsdGA0L7RgdC40YLRjCDRg9Cy0LXQu9C40YfQtdC90LjQtScsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBtYWdpY1R5cGU6IHtcbiAgICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICAgICAgbGluZTogJ9Cf0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINC90LAg0LvQuNC90LXQudC90YvQuSDQs9GA0LDRhNC40LonLFxuICAgICAgICAgICAgICAgIGJhcjogJ9Cf0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINC90LAg0YHRgtC+0LvQsdGH0LDRgtGD0Y4g0LTQuNCw0LPRgNCw0LzQvNGDJyxcbiAgICAgICAgICAgICAgICBzdGFjazogJ9Ch0YLQvtC/0LrQsCcsXG4gICAgICAgICAgICAgICAgdGlsZWQ6ICfQn9C70LjRgtC60LAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdG9yZToge1xuICAgICAgICAgICAgdGl0bGU6ICfQktC+0YHRgdGC0LDQvdC+0LLQuNGC0YwnLFxuICAgICAgICB9LFxuICAgICAgICBzYXZlQXNJbWFnZToge1xuICAgICAgICAgICAgdGl0bGU6ICfQodC+0YXRgNCw0L3QuNGC0Ywg0LrQsNGA0YLQuNC90LrRgycsXG4gICAgICAgICAgICBsYW5nOiBbJ9Cf0YDQsNCy0YvQuSDQutC70LjQuiwg0YfRgtC+0LHRiyDRgdC+0YXRgNCw0L3QuNGC0Ywg0LrQsNGA0YLQuNC90LrRgyddLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2VyaWVzOiB7XG4gICAgICAgIHR5cGVOYW1lczoge1xuICAgICAgICAgICAgcGllOiAn0JrRgNGD0LPQvtCy0LDRjyDQtNC40LDQs9GA0LDQvNC80LAnLFxuICAgICAgICAgICAgYmFyOiAn0KHRgtC+0LvQsdGH0LDRgtCw0Y8g0LTQuNCw0LPRgNCw0LzQvNCwJyxcbiAgICAgICAgICAgIGxpbmU6ICfQm9C40L3QtdC50L3Ri9C5INCz0YDQsNGE0LjQuicsXG4gICAgICAgICAgICBzY2F0dGVyOiAn0KLQvtGH0LXRh9C90LDRjyDQtNC40LDQs9GA0LDQvNC80LAnLFxuICAgICAgICAgICAgZWZmZWN0U2NhdHRlcjogJ9Ci0L7Rh9C10YfQvdCw0Y8g0LTQuNCw0LPRgNCw0LzQvNCwINGBINCy0L7Qu9C90LDQvNC4JyxcbiAgICAgICAgICAgIHJhZGFyOiAn0JvQtdC/0LXRgdGC0LrQvtCy0LDRjyDQtNC40LDQs9GA0LDQvNC80LAnLFxuICAgICAgICAgICAgdHJlZTogJ9CU0LXRgNC10LLQvicsXG4gICAgICAgICAgICB0cmVlbWFwOiAn0J/Qu9C+0YHQutC+0LUg0LTQtdGA0LXQstC+JyxcbiAgICAgICAgICAgIGJveHBsb3Q6ICfQr9GJ0LjQuiDRgSDRg9GB0LDQvNC4JyxcbiAgICAgICAgICAgIGNhbmRsZXN0aWNrOiAn0KHQstC10YfQvdC+0Lkg0LPRgNCw0YTQuNC6JyxcbiAgICAgICAgICAgIGs6ICfQk9GA0LDRhNC40Log0Jot0LvQuNC90LjQuScsXG4gICAgICAgICAgICBoZWF0bWFwOiAn0KLQtdC/0LvQvtCy0LDRjyDQutCw0YDRgtCwJyxcbiAgICAgICAgICAgIG1hcDogJ9Ca0LDRgNGC0LAnLFxuICAgICAgICAgICAgcGFyYWxsZWw6ICfQlNC40LDQs9GA0LDQvNC80LAg0L/QsNGA0LDQu9C70LXQu9GM0L3Ri9GFINC60L7QvtGA0LTQuNC90LDRgicsXG4gICAgICAgICAgICBsaW5lczogJ9Cb0LjQvdC10LnQvdGL0Lkg0LPRgNCw0YQnLFxuICAgICAgICAgICAgZ3JhcGg6ICfQk9GA0LDRhCDQvtGC0L3QvtGI0LXQvdC40LknLFxuICAgICAgICAgICAgc2Fua2V5OiAn0JTQuNCw0LPRgNCw0LzQvNCwINCh0LDQvdC60LXQuScsXG4gICAgICAgICAgICBmdW5uZWw6ICfQktC+0YDQvtC90LrQvtC+0LHRgNCw0LfQvdCw0Y8g0LTQuNCw0LPRgNCw0LzQvNCwJyxcbiAgICAgICAgICAgIGdhdWdlOiAn0KjQutCw0LvQsCcsXG4gICAgICAgICAgICBwaWN0b3JpYWxCYXI6ICfQodGC0L7Qu9Cx0LXRhi3QutCw0YDRgtC40L3QutCwJyxcbiAgICAgICAgICAgIHRoZW1lUml2ZXI6ICfQotC10LzQsNGC0LjRh9C10YHQutCw0Y8g0YDQtdC60LAnLFxuICAgICAgICAgICAgc3VuYnVyc3Q6ICfQodC+0LvQvdC10YfQvdGL0LUg0LvRg9GH0LgnLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgYXJpYToge1xuICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICB3aXRoVGl0bGU6ICfQrdGC0L4g0LPRgNCw0YTQuNC6LCDQv9C+0LrQsNC30YvQstCw0Y7RidC40LkgXCJ7dGl0bGV9XCInLFxuICAgICAgICAgICAgd2l0aG91dFRpdGxlOiAn0K3RgtC+INCz0YDQsNGE0LjQuicsXG4gICAgICAgIH0sXG4gICAgICAgIHNlcmllczoge1xuICAgICAgICAgICAgc2luZ2xlOiB7XG4gICAgICAgICAgICAgICAgcHJlZml4OiAnJyxcbiAgICAgICAgICAgICAgICB3aXRoTmFtZTogJyDRgSDRgtC40L/QvtC8IHtzZXJpZXNUeXBlfSDQuCDQuNC80LXQvdC10Lwge3Nlcmllc05hbWV9LicsXG4gICAgICAgICAgICAgICAgd2l0aG91dE5hbWU6ICcg0YEg0YLQuNC/0L7QvCB7c2VyaWVzVHlwZX0uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtdWx0aXBsZToge1xuICAgICAgICAgICAgICAgIHByZWZpeDogJy4g0J7QvSDRgdC+0YHRgtC+0LjRgiDQuNC3IHtzZXJpZXNDb3VudH0g0YHQtdGA0LjQuS4nLFxuICAgICAgICAgICAgICAgIHdpdGhOYW1lOiAnINCh0LXRgNC40Y8ge3Nlcmllc0lkfSDQuNC80LXQtdGCINGC0LjQvyB7c2VyaWVzVHlwZX0g0Lgg0L/QvtC60LDQt9GL0LLQsNC10YIge3Nlcmllc05hbWV9LicsXG4gICAgICAgICAgICAgICAgd2l0aG91dE5hbWU6ICcg0KHQtdGA0LjRjyB7c2VyaWVzSWR9INC40LzQtdC10YIg0YLQuNC/IHtzZXJpZXNUeXBlfS4nLFxuICAgICAgICAgICAgICAgIHNlcGFyYXRvcjoge1xuICAgICAgICAgICAgICAgICAgICBtaWRkbGU6ICcnLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6ICcnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhbGxEYXRhOiAn0JTQsNC90L3Ri9C1INGC0LDQutC+0LLRizogJyxcbiAgICAgICAgICAgIHBhcnRpYWxEYXRhOiAn0J/QtdGA0LLRi9C1IHtkaXNwbGF5Q250fSDRjdC70LXQvNC10L3RgtC+0LI6ICcsXG4gICAgICAgICAgICB3aXRoTmFtZTogJ9C30L3QsNGH0LXQvdC40LUg0LTQu9GPIHtuYW1lfSDigJQge3ZhbHVlfScsXG4gICAgICAgICAgICB3aXRob3V0TmFtZTogJ3t2YWx1ZX0nLFxuICAgICAgICAgICAgc2VwYXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgbWlkZGxlOiAnLCAnLFxuICAgICAgICAgICAgICAgIGVuZDogJy4gJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4iXX0=
|
@@ -0,0 +1,104 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
2
|
+
import { scChartOption } from './sc-chart-option';
|
3
|
+
import * as i0 from "@angular/core";
|
4
|
+
import * as i1 from "@angular/common";
|
5
|
+
import * as i2 from "ngx-echarts";
|
6
|
+
/**
|
7
|
+
* График истории цен товара или услуги.
|
8
|
+
* TODO: TASK[#7482] Перепроверить возможность использования TuiLineDaysChart.
|
9
|
+
*/
|
10
|
+
export class ScPriceHistoryComponent {
|
11
|
+
/**
|
12
|
+
* Инициализирует экземпляр класса {@link PriceHistoryChartComponent}.
|
13
|
+
*
|
14
|
+
* @param cdr Объект для работы с обнаружением изменений.
|
15
|
+
*/
|
16
|
+
constructor(cdr) {
|
17
|
+
this.cdr = cdr;
|
18
|
+
/**
|
19
|
+
* Настройки графика.
|
20
|
+
*/
|
21
|
+
this.initOption = { locale: 'RU' };
|
22
|
+
/**
|
23
|
+
* Параметры отрисовки графика истории цены.
|
24
|
+
*/
|
25
|
+
this.chartOption = scChartOption;
|
26
|
+
/**
|
27
|
+
* Данные об истории цены на товар или услугу.
|
28
|
+
*/
|
29
|
+
this.data = [];
|
30
|
+
}
|
31
|
+
/** @inheritDoc */
|
32
|
+
ngOnInit() {
|
33
|
+
if (this.chartOption.series && !Array.isArray(this.chartOption.series)) {
|
34
|
+
this.chartOption.series.data = [];
|
35
|
+
}
|
36
|
+
Object.keys(this.history)
|
37
|
+
.map((key) => {
|
38
|
+
// ? Можно избежать переведя даты в api в формат ECMAScript® 2023: https://tc39.es/ecma262/#sec-date-time-string-format
|
39
|
+
const dataString = key.split('.').reverse(), data = new Date(+dataString[0], +dataString[1] - 1, +dataString[2]);
|
40
|
+
return { data: data, cost: this.history[String(key)].cost };
|
41
|
+
})
|
42
|
+
.sort((a, b) => +a.data - +b.data)
|
43
|
+
.forEach((item, index, array) => {
|
44
|
+
let nextDate;
|
45
|
+
if (array[index + 1]?.data) {
|
46
|
+
nextDate = new Date(array[index + 1]?.data);
|
47
|
+
nextDate.setDate(nextDate.getDate() - 1);
|
48
|
+
}
|
49
|
+
else {
|
50
|
+
nextDate = new Date();
|
51
|
+
}
|
52
|
+
this.pushDataItem(item.cost, item.data, nextDate);
|
53
|
+
});
|
54
|
+
if (this.eChartsInstance) {
|
55
|
+
this.setChartData();
|
56
|
+
}
|
57
|
+
}
|
58
|
+
/**
|
59
|
+
* Перехватчик жизненного цикла {@link ECharts}, который вызывается при его инициализации.
|
60
|
+
*
|
61
|
+
* @param eChartsInstance Экземпляр {@link ECharts}.
|
62
|
+
*/
|
63
|
+
onChartInit(eChartsInstance) {
|
64
|
+
this.eChartsInstance = eChartsInstance;
|
65
|
+
if (this.data.length) {
|
66
|
+
this.setChartData();
|
67
|
+
}
|
68
|
+
}
|
69
|
+
/**
|
70
|
+
* Устанавливает новые данные {@link PriceHistoryChartComponent.eChartsInstance}.
|
71
|
+
*/
|
72
|
+
setChartData() {
|
73
|
+
if (this.chartOption.series && !Array.isArray(this.chartOption.series)) {
|
74
|
+
this.maxPrice = Math.max(...this.data.map((item) => item.value[1]));
|
75
|
+
this.minPrice = Math.min(...this.data.map((item) => item.value[1]));
|
76
|
+
this.chartOption.series.data = this.data;
|
77
|
+
this.eChartsInstance.clear();
|
78
|
+
this.eChartsInstance.setOption(this.chartOption, true, true);
|
79
|
+
this.cdr.markForCheck();
|
80
|
+
}
|
81
|
+
}
|
82
|
+
/**
|
83
|
+
* Добавляет значение цены товара в массив истории цен.
|
84
|
+
*
|
85
|
+
* @param value Цена товара или услуги.
|
86
|
+
* @param date Дата установки цены.
|
87
|
+
* @param nextDate Следующая дата установки цены.
|
88
|
+
*/
|
89
|
+
pushDataItem(value, date, nextDate) {
|
90
|
+
this.data.push({
|
91
|
+
name: date.toString(),
|
92
|
+
value: [date, value, nextDate],
|
93
|
+
});
|
94
|
+
}
|
95
|
+
}
|
96
|
+
ScPriceHistoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceHistoryComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
97
|
+
ScPriceHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScPriceHistoryComponent, selector: "sc-price-history", inputs: { history: "history" }, ngImport: i0, template: "<div class=\"flex flex-col items-center\">\n <div *ngIf=\"maxPrice && minPrice\" class=\"w-full font-bold text-end text-lg mb-1\">\u043E\u0442 {{ minPrice.toLocaleString() }} \u20BD \u0434\u043E {{ maxPrice.toLocaleString() }} \u20BD</div>\n <div class=\"relative w-full h-56\">\n <div class=\"h-48 bg-tui-base-02 mt-2 absolute rounded right-0 left-16\"></div>\n <div echarts [initOpts]=\"initOption\" (chartInit)=\"onChartInit($event)\" [options]=\"chartOption\" class=\"w-full !h-full touch-none\"></div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgxEchartsDirective, selector: "echarts, [echarts]", inputs: ["options", "theme", "loading", "initOpts", "merge", "autoResize", "loadingType", "loadingOpts"], outputs: ["chartInit", "optionsError", "chartClick", "chartDblClick", "chartMouseDown", "chartMouseMove", "chartMouseUp", "chartMouseOver", "chartMouseOut", "chartGlobalOut", "chartContextMenu", "chartLegendSelectChanged", "chartLegendSelected", "chartLegendUnselected", "chartLegendScroll", "chartDataZoom", "chartDataRangeSelected", "chartTimelineChanged", "chartTimelinePlayChanged", "chartRestore", "chartDataViewChanged", "chartMagicTypeChanged", "chartPieSelectChanged", "chartPieSelected", "chartPieUnselected", "chartMapSelectChanged", "chartMapSelected", "chartMapUnselected", "chartAxisAreaSelected", "chartFocusNodeAdjacency", "chartUnfocusNodeAdjacency", "chartBrush", "chartBrushEnd", "chartBrushSelected", "chartRendered", "chartFinished"], exportAs: ["echarts"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScPriceHistoryComponent, decorators: [{
|
99
|
+
type: Component,
|
100
|
+
args: [{ selector: 'sc-price-history', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col items-center\">\n <div *ngIf=\"maxPrice && minPrice\" class=\"w-full font-bold text-end text-lg mb-1\">\u043E\u0442 {{ minPrice.toLocaleString() }} \u20BD \u0434\u043E {{ maxPrice.toLocaleString() }} \u20BD</div>\n <div class=\"relative w-full h-56\">\n <div class=\"h-48 bg-tui-base-02 mt-2 absolute rounded right-0 left-16\"></div>\n <div echarts [initOpts]=\"initOption\" (chartInit)=\"onChartInit($event)\" [options]=\"chartOption\" class=\"w-full !h-full touch-none\"></div>\n </div>\n</div>\n" }]
|
101
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { history: [{
|
102
|
+
type: Input
|
103
|
+
}] } });
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJpY2UtaGlzdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2F0YWxvZy9wcmljZS1oaXN0b3J5L3NjLXByaWNlLWhpc3RvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvcHJpY2UtaGlzdG9yeS9zYy1wcmljZS1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUdyRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFHbEQ7OztHQUdHO0FBTUgsTUFBTSxPQUFPLHVCQUF1QjtJQTBDaEM7Ozs7T0FJRztJQUNILFlBQW9DLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBL0IxRDs7V0FFRztRQUNJLGVBQVUsR0FNYixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUVyQjs7V0FFRztRQUNJLGdCQUFXLEdBQWtCLGFBQWEsQ0FBQztRQUVsRDs7V0FFRztRQUNLLFNBQUksR0FBdUIsRUFBRSxDQUFDO0lBWXVCLENBQUM7SUFFOUQsa0JBQWtCO0lBQ1gsUUFBUTtRQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztTQUNyQztRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUNwQixHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNULHVIQUF1SDtZQUN2SCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUN2QyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFeEUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEUsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUNqQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzVCLElBQUksUUFBYyxDQUFDO1lBRW5CLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUU7Z0JBQ3hCLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM1QyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM1QztpQkFBTTtnQkFDSCxRQUFRLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQzthQUN6QjtZQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN2QjtJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLGVBQXdCO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBRXZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWTtRQUNoQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLFlBQVksQ0FBQyxLQUFhLEVBQUUsSUFBVSxFQUFFLFFBQWM7UUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQztTQUNqQyxDQUFDLENBQUM7SUFDUCxDQUFDOztvSEF6SFEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsd0ZDZnBDLHNpQkFPQTsyRkRRYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0ksa0JBQWtCLG1CQUVYLHVCQUF1QixDQUFDLE1BQU07d0dBTS9CLE9BQU87c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2NQcmljZUhpc3RvcnkgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IEVDaGFydHMsIEVDaGFydHNPcHRpb24gfSBmcm9tICdlY2hhcnRzJztcbmltcG9ydCB7IHNjQ2hhcnRPcHRpb24gfSBmcm9tICcuL3NjLWNoYXJ0LW9wdGlvbic7XG5pbXBvcnQgeyBTY0lDaGFydERhdGFJdGVtIH0gZnJvbSAnLi9zYy1pLWNoYXJ0LWRhdGEtaXRlbSc7XG5cbi8qKlxuICog0JPRgNCw0YTQuNC6INC40YHRgtC+0YDQuNC4INGG0LXQvSDRgtC+0LLQsNGA0LAg0LjQu9C4INGD0YHQu9GD0LPQuC5cbiAqIFRPRE86IFRBU0tbIzc0ODJdINCf0LXRgNC10L/RgNC+0LLQtdGA0LjRgtGMINCy0L7Qt9C80L7QttC90L7RgdGC0Ywg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8gVHVpTGluZURheXNDaGFydC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1wcmljZS1oaXN0b3J5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtcHJpY2UtaGlzdG9yeS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjUHJpY2VIaXN0b3J5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQmNGB0YLQvtGA0LjRjyDRhtC10L0g0L3QsCDRgtC+0LLQsNGAL9GD0YHQu9GD0LPRgy5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaGlzdG9yeTogU2NQcmljZUhpc3Rvcnk7XG5cbiAgICAvKipcbiAgICAgKiDQnNCw0LrRgdC40LzQsNC70YzQvdCw0Y8g0YbQtdC90LAg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBtYXhQcmljZT86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqINCc0LjQvdC40LzQsNC70YzQvdCw0Y8g0YbQtdC90LAg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBtaW5QcmljZT86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQs9GA0LDRhNC40LrQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdE9wdGlvbjoge1xuICAgICAgICBkZXZpY2VQaXhlbFJhdGlvPzogbnVtYmVyO1xuICAgICAgICByZW5kZXJlcj86IHN0cmluZztcbiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZztcbiAgICAgICAgbG9jYWxlPzogc3RyaW5nO1xuICAgIH0gPSB7IGxvY2FsZTogJ1JVJyB9O1xuXG4gICAgLyoqXG4gICAgICog0J/QsNGA0LDQvNC10YLRgNGLINC+0YLRgNC40YHQvtCy0LrQuCDQs9GA0LDRhNC40LrQsCDQuNGB0YLQvtGA0LjQuCDRhtC10L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2hhcnRPcHRpb246IEVDaGFydHNPcHRpb24gPSBzY0NoYXJ0T3B0aW9uO1xuXG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+0LEg0LjRgdGC0L7RgNC40Lgg0YbQtdC90Ysg0L3QsCDRgtC+0LLQsNGAINC40LvQuCDRg9GB0LvRg9Cz0YMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkYXRhOiBTY0lDaGFydERhdGFJdGVtW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqINCt0LrQt9C10LzQv9C70Y/RgCB7QGxpbmsgRUNoYXJ0c30g0LIg0YjQsNCx0LvQvtC90LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBlQ2hhcnRzSW5zdGFuY2U6IEVDaGFydHM7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFByaWNlSGlzdG9yeUNoYXJ0Q29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjZHIg0J7QsdGK0LXQutGCINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0L7QsdC90LDRgNGD0LbQtdC90LjQtdC8INC40LfQvNC10L3QtdC90LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jaGFydE9wdGlvbi5zZXJpZXMgJiYgIUFycmF5LmlzQXJyYXkodGhpcy5jaGFydE9wdGlvbi5zZXJpZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0T3B0aW9uLnNlcmllcy5kYXRhID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmhpc3RvcnkpXG4gICAgICAgICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyA/INCc0L7QttC90L4g0LjQt9Cx0LXQttCw0YLRjCDQv9C10YDQtdCy0LXQtNGPINC00LDRgtGLINCyIGFwaSDQsiDRhNC+0YDQvNCw0YIgRUNNQVNjcmlwdMKuIDIwMjM6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS10aW1lLXN0cmluZy1mb3JtYXRcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhU3RyaW5nID0ga2V5LnNwbGl0KCcuJykucmV2ZXJzZSgpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gbmV3IERhdGUoK2RhdGFTdHJpbmdbMF0sICtkYXRhU3RyaW5nWzFdIC0gMSwgK2RhdGFTdHJpbmdbMl0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogZGF0YSwgY29zdDogdGhpcy5oaXN0b3J5W1N0cmluZyhrZXkpXS5jb3N0IH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+ICthLmRhdGEgLSArYi5kYXRhKVxuICAgICAgICAgICAgLmZvckVhY2goKGl0ZW0sIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBuZXh0RGF0ZTogRGF0ZTtcblxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleCArIDFdPy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHREYXRlID0gbmV3IERhdGUoYXJyYXlbaW5kZXggKyAxXT8uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIG5leHREYXRlLnNldERhdGUobmV4dERhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucHVzaERhdGFJdGVtKGl0ZW0uY29zdCwgaXRlbS5kYXRhLCBuZXh0RGF0ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5lQ2hhcnRzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2hhcnREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdGF0LLQsNGC0YfQuNC6INC20LjQt9C90LXQvdC90L7Qs9C+INGG0LjQutC70LAge0BsaW5rIEVDaGFydHN9LCDQutC+0YLQvtGA0YvQuSDQstGL0LfRi9Cy0LDQtdGC0YHRjyDQv9GA0Lgg0LXQs9C+INC40L3QuNGG0LjQsNC70LjQt9Cw0YbQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVDaGFydHNJbnN0YW5jZSDQrdC60LfQtdC80L/Qu9GP0YAge0BsaW5rIEVDaGFydHN9LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoYXJ0SW5pdChlQ2hhcnRzSW5zdGFuY2U6IEVDaGFydHMpIHtcbiAgICAgICAgdGhpcy5lQ2hhcnRzSW5zdGFuY2UgPSBlQ2hhcnRzSW5zdGFuY2U7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2hhcnREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiDQvdC+0LLRi9C1INC00LDQvdC90YvQtSB7QGxpbmsgUHJpY2VIaXN0b3J5Q2hhcnRDb21wb25lbnQuZUNoYXJ0c0luc3RhbmNlfS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldENoYXJ0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhcnRPcHRpb24uc2VyaWVzICYmICFBcnJheS5pc0FycmF5KHRoaXMuY2hhcnRPcHRpb24uc2VyaWVzKSkge1xuICAgICAgICAgICAgdGhpcy5tYXhQcmljZSA9IE1hdGgubWF4KC4uLnRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWVbMV0pKTtcbiAgICAgICAgICAgIHRoaXMubWluUHJpY2UgPSBNYXRoLm1pbiguLi50aGlzLmRhdGEubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlWzFdKSk7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0T3B0aW9uLnNlcmllcy5kYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgdGhpcy5lQ2hhcnRzSW5zdGFuY2UuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZUNoYXJ0c0luc3RhbmNlLnNldE9wdGlvbih0aGlzLmNoYXJ0T3B0aW9uLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JTQvtCx0LDQstC70Y/QtdGCINC30L3QsNGH0LXQvdC40LUg0YbQtdC90Ysg0YLQvtCy0LDRgNCwINCyINC80LDRgdGB0LjQsiDQuNGB0YLQvtGA0LjQuCDRhtC10L0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUg0KbQtdC90LAg0YLQvtCy0LDRgNCwINC40LvQuCDRg9GB0LvRg9Cz0LguXG4gICAgICogQHBhcmFtIGRhdGUg0JTQsNGC0LAg0YPRgdGC0LDQvdC+0LLQutC4INGG0LXQvdGLLlxuICAgICAqIEBwYXJhbSBuZXh0RGF0ZSDQodC70LXQtNGD0Y7RidCw0Y8g0LTQsNGC0LAg0YPRgdGC0LDQvdC+0LLQutC4INGG0LXQvdGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHVzaERhdGFJdGVtKHZhbHVlOiBudW1iZXIsIGRhdGU6IERhdGUsIG5leHREYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0YS5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IGRhdGUudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHZhbHVlOiBbZGF0ZSwgdmFsdWUsIG5leHREYXRlXSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG4gICAgPGRpdiAqbmdJZj1cIm1heFByaWNlICYmIG1pblByaWNlXCIgY2xhc3M9XCJ3LWZ1bGwgZm9udC1ib2xkIHRleHQtZW5kIHRleHQtbGcgbWItMVwiPtC+0YIge3sgbWluUHJpY2UudG9Mb2NhbGVTdHJpbmcoKSB9fSDigr0g0LTQviB7eyBtYXhQcmljZS50b0xvY2FsZVN0cmluZygpIH19IOKCvTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC01NlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC00OCBiZy10dWktYmFzZS0wMiBtdC0yIGFic29sdXRlIHJvdW5kZWQgcmlnaHQtMCBsZWZ0LTE2XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgZWNoYXJ0cyBbaW5pdE9wdHNdPVwiaW5pdE9wdGlvblwiIChjaGFydEluaXQpPVwib25DaGFydEluaXQoJGV2ZW50KVwiIFtvcHRpb25zXT1cImNoYXJ0T3B0aW9uXCIgY2xhc3M9XCJ3LWZ1bGwgIWgtZnVsbCB0b3VjaC1ub25lXCI+PC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|