@snabcentr/client-ui 0.0.0-test

Sign up to get free protection for your applications and to get access to all the features.
Files changed (212) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +9 -0
  3. package/banner/index.d.ts +2 -0
  4. package/banner/sc-banner.component.d.ts +130 -0
  5. package/banner/sc-banner.module.d.ts +17 -0
  6. package/cart/cart-item-mobile/sc-cart-item-mobile.component.d.ts +77 -0
  7. package/cart/index.d.ts +2 -0
  8. package/cart/sc-cart.module.d.ts +16 -0
  9. package/catalog/category-card/sc-category-card.component.d.ts +68 -0
  10. package/catalog/index.d.ts +7 -0
  11. package/catalog/input-quantity/sc-input-quantity.component.d.ts +75 -0
  12. package/catalog/price-card/sc-price-card.component.d.ts +114 -0
  13. package/catalog/price-history/sc-chart-option.d.ts +7 -0
  14. package/catalog/price-history/sc-i-chart-data-item.d.ts +13 -0
  15. package/catalog/price-history/sc-lang-RU.d.ts +113 -0
  16. package/catalog/price-history/sc-price-history.component.d.ts +73 -0
  17. package/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.d.ts +37 -0
  18. package/catalog/sc-catalog.module.d.ts +21 -0
  19. package/catalog/sc-favorite-btn/sc-favorite-btn.component.d.ts +13 -0
  20. package/esm2020/banner/index.mjs +3 -0
  21. package/esm2020/banner/sc-banner.component.mjs +222 -0
  22. package/esm2020/banner/sc-banner.module.mjs +27 -0
  23. package/esm2020/cart/cart-item-mobile/sc-cart-item-mobile.component.mjs +119 -0
  24. package/esm2020/cart/index.mjs +3 -0
  25. package/esm2020/cart/sc-cart.module.mjs +58 -0
  26. package/esm2020/catalog/category-card/sc-category-card.component.mjs +109 -0
  27. package/esm2020/catalog/index.mjs +8 -0
  28. package/esm2020/catalog/input-quantity/sc-input-quantity.component.mjs +154 -0
  29. package/esm2020/catalog/price-card/sc-price-card.component.mjs +154 -0
  30. package/esm2020/catalog/price-history/sc-chart-option.mjs +79 -0
  31. package/esm2020/catalog/price-history/sc-i-chart-data-item.mjs +2 -0
  32. package/esm2020/catalog/price-history/sc-lang-RU.mjs +113 -0
  33. package/esm2020/catalog/price-history/sc-price-history.component.mjs +104 -0
  34. package/esm2020/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.mjs +44 -0
  35. package/esm2020/catalog/sc-catalog.module.mjs +88 -0
  36. package/esm2020/catalog/sc-favorite-btn/sc-favorite-btn.component.mjs +24 -0
  37. package/esm2020/files/directives/index.mjs +3 -0
  38. package/esm2020/files/directives/tree-top.directive.mjs +63 -0
  39. package/esm2020/files/directives/tree.directive.mjs +47 -0
  40. package/esm2020/files/file-tree-item/file-tree-item.component.mjs +18 -0
  41. package/esm2020/files/files-and-documents.component.mjs +60 -0
  42. package/esm2020/files/files-and-documents.module.mjs +26 -0
  43. package/esm2020/files/index.mjs +6 -0
  44. package/esm2020/files/interfaces/tree-node.mjs +2 -0
  45. package/esm2020/files/services/index.mjs +3 -0
  46. package/esm2020/files/services/tree-icon.service.mjs +48 -0
  47. package/esm2020/files/services/tree-loader.service.mjs +60 -0
  48. package/esm2020/helpers/index.mjs +2 -0
  49. package/esm2020/helpers/sc-px-converter.mjs +27 -0
  50. package/esm2020/helpers/sc-units-helper.mjs +44 -0
  51. package/esm2020/icons/index.mjs +2 -0
  52. package/esm2020/icons/sc-client-ui-icons-name.mjs +107 -0
  53. package/esm2020/loader/index.mjs +2 -0
  54. package/esm2020/loader/sc-i-loader.mjs +2 -0
  55. package/esm2020/news/index.mjs +4 -0
  56. package/esm2020/news/news-card/sc-news-card.component.mjs +31 -0
  57. package/esm2020/news/news-card-skeleton/sc-news-card-skeleton.component.mjs +23 -0
  58. package/esm2020/news/sc-news.module.mjs +24 -0
  59. package/esm2020/order/index.mjs +3 -0
  60. package/esm2020/order/order-item-mobile/order-item-mobile.component.mjs +79 -0
  61. package/esm2020/order/sc-order.module.mjs +23 -0
  62. package/esm2020/public-api.mjs +15 -0
  63. package/esm2020/share-button/index.mjs +3 -0
  64. package/esm2020/share-button/sc-share-button.component.mjs +35 -0
  65. package/esm2020/share-button/sc-share-button.module.mjs +22 -0
  66. package/esm2020/snabcentr-client-ui.mjs +5 -0
  67. package/esm2020/tokens/index.mjs +2 -0
  68. package/esm2020/tokens/sc-linear-values-token.mjs +10 -0
  69. package/esm2020/validators/index.mjs +2 -0
  70. package/esm2020/validators/stepValidator.mjs +13 -0
  71. package/fesm2015/snabcentr-client-ui.mjs +1929 -0
  72. package/fesm2015/snabcentr-client-ui.mjs.map +1 -0
  73. package/fesm2020/snabcentr-client-ui.mjs +1901 -0
  74. package/fesm2020/snabcentr-client-ui.mjs.map +1 -0
  75. package/files/directives/index.d.ts +2 -0
  76. package/files/directives/tree-top.directive.d.ts +33 -0
  77. package/files/directives/tree.directive.d.ts +35 -0
  78. package/files/file-tree-item/file-tree-item.component.d.ts +9 -0
  79. package/files/files-and-documents.component.d.ts +27 -0
  80. package/files/files-and-documents.module.d.ts +16 -0
  81. package/files/index.d.ts +5 -0
  82. package/files/interfaces/tree-node.d.ts +29 -0
  83. package/files/services/index.d.ts +2 -0
  84. package/files/services/tree-icon.service.d.ts +23 -0
  85. package/files/services/tree-loader.service.d.ts +43 -0
  86. package/helpers/index.d.ts +1 -0
  87. package/helpers/sc-px-converter.d.ts +15 -0
  88. package/helpers/sc-units-helper.d.ts +28 -0
  89. package/icons/index.d.ts +1 -0
  90. package/icons/sc-client-ui-icons-name.d.ts +5 -0
  91. package/icons/svg-pack/scIconAddProfile.svg +11 -0
  92. package/icons/svg-pack/scIconApplication.svg +11 -0
  93. package/icons/svg-pack/scIconArrowDown.svg +11 -0
  94. package/icons/svg-pack/scIconArrowDownLarge.svg +11 -0
  95. package/icons/svg-pack/scIconArrowDownLargeEnd.svg +12 -0
  96. package/icons/svg-pack/scIconArrowLeft.svg +11 -0
  97. package/icons/svg-pack/scIconArrowReturn.svg +11 -0
  98. package/icons/svg-pack/scIconArrowRight.svg +11 -0
  99. package/icons/svg-pack/scIconArrowUp.svg +11 -0
  100. package/icons/svg-pack/scIconAttention.svg +11 -0
  101. package/icons/svg-pack/scIconBag.svg +11 -0
  102. package/icons/svg-pack/scIconBasket.svg +11 -0
  103. package/icons/svg-pack/scIconBell.svg +11 -0
  104. package/icons/svg-pack/scIconBook.svg +11 -0
  105. package/icons/svg-pack/scIconBubble.svg +11 -0
  106. package/icons/svg-pack/scIconCalendar.svg +11 -0
  107. package/icons/svg-pack/scIconCancel.svg +18 -0
  108. package/icons/svg-pack/scIconCart.svg +11 -0
  109. package/icons/svg-pack/scIconCatalog.svg +16 -0
  110. package/icons/svg-pack/scIconClients.svg +11 -0
  111. package/icons/svg-pack/scIconClip.svg +11 -0
  112. package/icons/svg-pack/scIconClock.svg +11 -0
  113. package/icons/svg-pack/scIconConfigurator.svg +18 -0
  114. package/icons/svg-pack/scIconContacts.svg +11 -0
  115. package/icons/svg-pack/scIconCross.svg +11 -0
  116. package/icons/svg-pack/scIconDeleteProfile.svg +12 -0
  117. package/icons/svg-pack/scIconDone.svg +12 -0
  118. package/icons/svg-pack/scIconDownloading.svg +11 -0
  119. package/icons/svg-pack/scIconEdit.svg +11 -0
  120. package/icons/svg-pack/scIconError.svg +12 -0
  121. package/icons/svg-pack/scIconExcelFile.svg +11 -0
  122. package/icons/svg-pack/scIconEye.svg +11 -0
  123. package/icons/svg-pack/scIconFavorite.svg +11 -0
  124. package/icons/svg-pack/scIconFavoriteFill.svg +11 -0
  125. package/icons/svg-pack/scIconFile.svg +11 -0
  126. package/icons/svg-pack/scIconFilter.svg +11 -0
  127. package/icons/svg-pack/scIconFolder.svg +11 -0
  128. package/icons/svg-pack/scIconFolderOpen.svg +11 -0
  129. package/icons/svg-pack/scIconFolderPlus.svg +11 -0
  130. package/icons/svg-pack/scIconGraph.svg +11 -0
  131. package/icons/svg-pack/scIconHamburger.svg +13 -0
  132. package/icons/svg-pack/scIconHeart.svg +11 -0
  133. package/icons/svg-pack/scIconHeartFill.svg +11 -0
  134. package/icons/svg-pack/scIconHistory.svg +11 -0
  135. package/icons/svg-pack/scIconHome.svg +12 -0
  136. package/icons/svg-pack/scIconImage.svg +11 -0
  137. package/icons/svg-pack/scIconLike.svg +11 -0
  138. package/icons/svg-pack/scIconList.svg +11 -0
  139. package/icons/svg-pack/scIconLocation.svg +11 -0
  140. package/icons/svg-pack/scIconLock.svg +11 -0
  141. package/icons/svg-pack/scIconLockOpen.svg +11 -0
  142. package/icons/svg-pack/scIconLogIn.svg +11 -0
  143. package/icons/svg-pack/scIconLogOut.svg +13 -0
  144. package/icons/svg-pack/scIconLogOut2.svg +13 -0
  145. package/icons/svg-pack/scIconMail.svg +11 -0
  146. package/icons/svg-pack/scIconMinus.svg +11 -0
  147. package/icons/svg-pack/scIconMoney.svg +11 -0
  148. package/icons/svg-pack/scIconMoney2.svg +11 -0
  149. package/icons/svg-pack/scIconNews.svg +11 -0
  150. package/icons/svg-pack/scIconOffer.svg +11 -0
  151. package/icons/svg-pack/scIconPalette.svg +18 -0
  152. package/icons/svg-pack/scIconPdfFile.svg +12 -0
  153. package/icons/svg-pack/scIconPercentage.svg +11 -0
  154. package/icons/svg-pack/scIconPhone.svg +11 -0
  155. package/icons/svg-pack/scIconPlus.svg +11 -0
  156. package/icons/svg-pack/scIconPrice.svg +11 -0
  157. package/icons/svg-pack/scIconProfile.svg +11 -0
  158. package/icons/svg-pack/scIconQRCodeScan.svg +18 -0
  159. package/icons/svg-pack/scIconQuestion.svg +11 -0
  160. package/icons/svg-pack/scIconReclamation.svg +11 -0
  161. package/icons/svg-pack/scIconRefresh.svg +11 -0
  162. package/icons/svg-pack/scIconRepeat.svg +11 -0
  163. package/icons/svg-pack/scIconRequisites.svg +11 -0
  164. package/icons/svg-pack/scIconRocket.svg +18 -0
  165. package/icons/svg-pack/scIconSave.svg +11 -0
  166. package/icons/svg-pack/scIconSearch.svg +12 -0
  167. package/icons/svg-pack/scIconSend.svg +11 -0
  168. package/icons/svg-pack/scIconSettings.svg +11 -0
  169. package/icons/svg-pack/scIconShare.svg +15 -0
  170. package/icons/svg-pack/scIconSocialCopy.svg +13 -0
  171. package/icons/svg-pack/scIconSocialEmail.svg +13 -0
  172. package/icons/svg-pack/scIconSocialFacebook.svg +12 -0
  173. package/icons/svg-pack/scIconSocialInstagram.svg +33 -0
  174. package/icons/svg-pack/scIconSocialQR.svg +12 -0
  175. package/icons/svg-pack/scIconSocialTelegram.svg +20 -0
  176. package/icons/svg-pack/scIconSocialViber.svg +16 -0
  177. package/icons/svg-pack/scIconSocialVk.svg +12 -0
  178. package/icons/svg-pack/scIconSocialWhatsapp.svg +12 -0
  179. package/icons/svg-pack/scIconStar.svg +11 -0
  180. package/icons/svg-pack/scIconSuitcase.svg +11 -0
  181. package/icons/svg-pack/scIconTasks.svg +11 -0
  182. package/icons/svg-pack/scIconTick.svg +11 -0
  183. package/icons/svg-pack/scIconTop.svg +11 -0
  184. package/icons/svg-pack/scIconVerticalThreeDots.svg +11 -0
  185. package/icons/svg-pack/scIconViewGrid.svg +11 -0
  186. package/icons/svg-pack/scIconViewInline.svg +11 -0
  187. package/icons/svg-pack/scIconViewTree.svg +15 -0
  188. package/icons/svg-pack/scIconWallet.svg +11 -0
  189. package/icons/svg-pack/scIconWarning.svg +11 -0
  190. package/icons/svg-pack/scIconWordFile.svg +12 -0
  191. package/index.d.ts +5 -0
  192. package/loader/index.d.ts +1 -0
  193. package/loader/sc-i-loader.d.ts +9 -0
  194. package/news/index.d.ts +3 -0
  195. package/news/news-card/sc-news-card.component.d.ts +22 -0
  196. package/news/news-card-skeleton/sc-news-card-skeleton.component.d.ts +12 -0
  197. package/news/sc-news.module.d.ts +14 -0
  198. package/order/index.d.ts +2 -0
  199. package/order/order-item-mobile/order-item-mobile.component.d.ts +53 -0
  200. package/order/sc-order.module.d.ts +13 -0
  201. package/package.json +62 -0
  202. package/public-api.d.ts +11 -0
  203. package/share-button/index.d.ts +2 -0
  204. package/share-button/sc-share-button.component.d.ts +22 -0
  205. package/share-button/sc-share-button.module.d.ts +12 -0
  206. package/styles/taiga/taiga-tailwind-preset.js +163 -0
  207. package/styles/taiga/variables.less +44 -0
  208. package/styles/tailwind/tailwind.scss +1461 -0
  209. package/tokens/index.d.ts +1 -0
  210. package/tokens/sc-linear-values-token.d.ts +8 -0
  211. package/validators/index.d.ts +1 -0
  212. 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> &nbsp;\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> &nbsp;\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==