@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,119 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';
|
2
|
+
import { FormControl } from '@angular/forms';
|
3
|
+
import { SC_PATH_IMAGE_NOT_FOUND, SC_URLS } from '@snabcentr/client-core';
|
4
|
+
import { skip } from 'rxjs';
|
5
|
+
import { TuiPreviewDialogService } from '@taiga-ui/addon-preview';
|
6
|
+
import * as i0 from "@angular/core";
|
7
|
+
import * as i1 from "../../helpers/sc-units-helper";
|
8
|
+
import * as i2 from "@angular/common";
|
9
|
+
import * as i3 from "@taiga-ui/core";
|
10
|
+
import * as i4 from "../../catalog/input-quantity/sc-input-quantity.component";
|
11
|
+
import * as i5 from "../../catalog/price-warehouse-stock/sc-price-warehouse-stock.component";
|
12
|
+
import * as i6 from "@angular/forms";
|
13
|
+
import * as i7 from "@taiga-ui/addon-preview";
|
14
|
+
import * as i8 from "@tinkoff/ng-polymorpheus";
|
15
|
+
/**
|
16
|
+
* Компонент карточки элемента корзины.
|
17
|
+
*/
|
18
|
+
export class ScCartItemMobileComponent {
|
19
|
+
/**
|
20
|
+
* Инициирует экземпляр класса {@link ScCartItemMobileComponent}.
|
21
|
+
*
|
22
|
+
* @param unitsHelper Объект-хэлпер для работы со значениями единиц измерения товара.
|
23
|
+
* @param previewDialogService Сервис диалогового окна предварительного просмотра.
|
24
|
+
* @param urls Список ссылок на разделы backend'a.
|
25
|
+
* @param pathImageNotFound Путь до изображения 'Товар не найден'.
|
26
|
+
*/
|
27
|
+
constructor(unitsHelper, previewDialogService, urls, pathImageNotFound) {
|
28
|
+
this.unitsHelper = unitsHelper;
|
29
|
+
this.previewDialogService = previewDialogService;
|
30
|
+
this.urls = urls;
|
31
|
+
this.pathImageNotFound = pathImageNotFound;
|
32
|
+
/**
|
33
|
+
* {@link FormControl} поля ввода количества товара в корзине.
|
34
|
+
*/
|
35
|
+
this.quantityControl = new FormControl(0);
|
36
|
+
/**
|
37
|
+
* {@link Observable} изменения количества товара в корзине.
|
38
|
+
*/
|
39
|
+
this.quantityValueChanges = this.quantityControl.valueChanges.pipe(skip(1));
|
40
|
+
/**
|
41
|
+
* Событие нажатия на кнопку "Удалить из корзины".
|
42
|
+
*/
|
43
|
+
this.clickDeleteEvent = new EventEmitter();
|
44
|
+
/**
|
45
|
+
* Событие нажатия на кнопку "Удалить из корзины".
|
46
|
+
*/
|
47
|
+
this.clickSettingsEvent = new EventEmitter();
|
48
|
+
/**
|
49
|
+
* Событие нажатия на карточку.
|
50
|
+
*/
|
51
|
+
this.clickCardEvent = new EventEmitter();
|
52
|
+
}
|
53
|
+
/**
|
54
|
+
* Элемент корзины.
|
55
|
+
*/
|
56
|
+
set cartItem(data) {
|
57
|
+
this._cartItem = data;
|
58
|
+
if (data) {
|
59
|
+
this.quantityControl.patchValue(data.quantity);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
/**
|
63
|
+
* Элемент корзины.
|
64
|
+
*/
|
65
|
+
get cartItem() {
|
66
|
+
return this._cartItem;
|
67
|
+
}
|
68
|
+
/**
|
69
|
+
* Продукт элемента корзины.
|
70
|
+
*/
|
71
|
+
get product() {
|
72
|
+
return this.cartItem?.product;
|
73
|
+
}
|
74
|
+
/** @inheritDoc */
|
75
|
+
ngOnInit() {
|
76
|
+
this.quantityValueChanges = this.quantityControl.valueChanges;
|
77
|
+
}
|
78
|
+
/**
|
79
|
+
* Отобразить спецификацию.
|
80
|
+
*/
|
81
|
+
showSpecification() {
|
82
|
+
this.previewDialogService.open(this.specificationPreviewRef || '').subscribe();
|
83
|
+
}
|
84
|
+
/**
|
85
|
+
* Возвращает ссылку на изображение карточки товара.
|
86
|
+
*/
|
87
|
+
getCardImage() {
|
88
|
+
return this.product?.getImage(this.urls.imgServerUrl) ?? this.urls.imgServerUrl + this.pathImageNotFound;
|
89
|
+
}
|
90
|
+
}
|
91
|
+
ScCartItemMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartItemMobileComponent, deps: [{ token: i1.UnitsHelper }, { token: TuiPreviewDialogService }, { token: SC_URLS }, { token: SC_PATH_IMAGE_NOT_FOUND }], target: i0.ɵɵFactoryTarget.Component });
|
92
|
+
ScCartItemMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCartItemMobileComponent, selector: "sc-cart-item-mobile", inputs: { cartItem: "cartItem" }, outputs: { quantityValueChanges: "quantityValueChanges", clickDeleteEvent: "clickDeleteEvent", clickSettingsEvent: "clickSettingsEvent", clickCardEvent: "clickCardEvent" }, viewQueries: [{ propertyName: "specificationPreviewRef", first: true, predicate: ["specificationPreview"], descendants: true }], ngImport: i0, template: "<div class=\"ml-2 mt-2 relative p-4 gap-y-2 gap-x-4 flex flex-wrap bg-white border border-tui-base-04 shadow-sc-2 rounded-xl\">\n <ng-container *ngIf=\"cartItem && product; else skeleton\">\n <!--\n TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton size=\"m\" icon=\"scIconVerticalThreeDots\" appearance=\"float\" tuiMode=\"onLight\" class=\"!absolute right-0 top-0\"></button>\n -->\n <button\n tuiIconButton\n size=\"m\"\n icon=\"scIconBasket\"\n appearance=\"secondary\"\n tuiMode=\"onLight\"\n (click)=\"clickDeleteEvent.emit()\"\n class=\"shadow-sc-2 !absolute -left-2 -top-2\"\n ></button>\n <div class=\"flex gap-2\">\n <div class=\"flex shrink-0 h-20 w-20 justify-center items-center overflow-hidden\">\n <img (click)=\"clickCardEvent.emit()\" [src]=\"getCardImage()\" [alt]=\"product.name\" [class.p-5]=\"!product.images?.length\" class=\"cursor-pointer\" />\n </div>\n\n <div class=\"flex flex-wrap self-center gap-x-8 gap-y-0.5\">\n <div class=\"w-[13rem]\">\n <a tuiLink (click)=\"clickCardEvent.emit()\">\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n <div class=\"text-tui-text-02 text-xs\">\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n <p *ngIf=\"product.pack\">\u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}</p>\n <a tuiLink *ngIf=\"cartItem.specificationImgUrl\" (click)=\"showSpecification()\">\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a>\n <ng-template #specificationPreview let-preview>\n <tui-preview [rotatable]=\"false\" [zoomable]=\"false\">\n <img *polymorpheusOutlet=\"cartItem.specificationImgUrl as src\" alt=\"preview\" [src]=\"cartItem.specificationImgUrl\" />\n <button icon=\"tuiIconClose\" title=\"Close\" tuiIconButton tuiPreviewAction type=\"button\" (click)=\"preview.complete()\"></button>\n </tui-preview>\n </ng-template>\n </div>\n </div>\n <div class=\"flex flex-col self-center w-[10rem] gap-x-8 gap-y-0.5\">\n <span *ngIf=\"product.discount\" class=\"flex items-center text-xs 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-xs !h-4\"></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <p class=\"flex flex-col items-baseline gap-x-2 font-bold\">\n <span>{{ product.costRubString }}</span>\n <span *ngIf=\"!product.priceInRub\" class=\"text-xs text-tui-text-02\">{{ product.costString }}</span>\n </p>\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n </div>\n </div>\n\n <div class=\"flex gap-2 items-center w-44 text-xs text-tui-text-02\">\n <!--\n TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton (click)=\"clickSettingsEvent.emit()\" size=\"m\" icon=\"scIconSettings\" appearance=\"secondary\" tuiMode=\"onLight\"></button>\n -->\n <div>\n <ng-container *ngIf=\"unitsHelper.productIsMeasurable(product); else notMeasurable\">\n <p>\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} {{ product.unit }}</p>\n </ng-container>\n <ng-template #notMeasurable>\n <p *ngIf=\"cartItem.length && !unitsHelper.productIsMeasurable(product)\">\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} \u043C.</p>\n <p *ngIf=\"cartItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ cartItem.width }} \u043C.</p>\n <p *ngIf=\"cartItem.height\">\u0412\u044B\u0441\u043E\u0442\u0430: {{ cartItem.height }} \u043C.</p>\n </ng-template>\n </div>\n </div>\n <div class=\"flex items-center grow justify-end\">\n <sc-input-quantity\n class=\"w-28\"\n *ngIf=\"quantityControl\"\n [formControl]=\"quantityControl\"\n [quantityUnit]=\"product.quantityUnit\"\n [showCross]=\"false\"\n size=\"s\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n ></sc-input-quantity>\n </div>\n </ng-container>\n\n <ng-template #skeleton>\n <div class=\"flex gap-2 w-full\">\n <div class=\"h-20 w-20 bg-tui-base-02 rounded-xl \"></div>\n <div class=\"flex flex-col grow gap-2.5 bg-white\">\n <div class=\"w-full h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-3/5 h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-4/5 h-4 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TuiLinkComponent, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo", "icon", "iconAlign", "iconRotated", "mode"], exportAs: ["tuiLink"] }, { kind: "component", type: i4.ScInputQuantityComponent, selector: "sc-input-quantity", inputs: ["step", "quantityUnit", "showLoader", "showCross", "appearance", "isDisabled", "size"], outputs: ["clickClearEvent"] }, { kind: "component", type: i5.ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint"] }, { kind: "component", type: i3.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "directive", type: i3.TuiModeDirective, selector: "[tuiMode]", inputs: ["tuiMode"] }, { kind: "component", type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i3.TuiHintDirective, selector: "[tuiHint]:not(ng-container)", inputs: ["tuiHint", "tuiHintContext", "tuiHintAppearance"] }, { kind: "directive", type: i3.TuiHintDriverDirective, selector: "[tuiHint]" }, { kind: "directive", type: i3.TuiHintHoverDirective, selector: "[tuiHint]:not(ng-container)", inputs: ["tuiHintShowDelay", "tuiHintHideDelay"], exportAs: ["tuiHintHover"] }, { kind: "directive", type: i3.TuiHintPositionDirective, selector: "[tuiHint]:not([tuiHintCustomPosition])", inputs: ["tuiHintDirection"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { kind: "directive", type: i7.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }, { kind: "directive", type: i8.PolymorpheusOutletDirective, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
93
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartItemMobileComponent, decorators: [{
|
94
|
+
type: Component,
|
95
|
+
args: [{ selector: 'sc-cart-item-mobile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ml-2 mt-2 relative p-4 gap-y-2 gap-x-4 flex flex-wrap bg-white border border-tui-base-04 shadow-sc-2 rounded-xl\">\n <ng-container *ngIf=\"cartItem && product; else skeleton\">\n <!--\n TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton size=\"m\" icon=\"scIconVerticalThreeDots\" appearance=\"float\" tuiMode=\"onLight\" class=\"!absolute right-0 top-0\"></button>\n -->\n <button\n tuiIconButton\n size=\"m\"\n icon=\"scIconBasket\"\n appearance=\"secondary\"\n tuiMode=\"onLight\"\n (click)=\"clickDeleteEvent.emit()\"\n class=\"shadow-sc-2 !absolute -left-2 -top-2\"\n ></button>\n <div class=\"flex gap-2\">\n <div class=\"flex shrink-0 h-20 w-20 justify-center items-center overflow-hidden\">\n <img (click)=\"clickCardEvent.emit()\" [src]=\"getCardImage()\" [alt]=\"product.name\" [class.p-5]=\"!product.images?.length\" class=\"cursor-pointer\" />\n </div>\n\n <div class=\"flex flex-wrap self-center gap-x-8 gap-y-0.5\">\n <div class=\"w-[13rem]\">\n <a tuiLink (click)=\"clickCardEvent.emit()\">\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n <div class=\"text-tui-text-02 text-xs\">\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n <p *ngIf=\"product.pack\">\u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}</p>\n <a tuiLink *ngIf=\"cartItem.specificationImgUrl\" (click)=\"showSpecification()\">\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a>\n <ng-template #specificationPreview let-preview>\n <tui-preview [rotatable]=\"false\" [zoomable]=\"false\">\n <img *polymorpheusOutlet=\"cartItem.specificationImgUrl as src\" alt=\"preview\" [src]=\"cartItem.specificationImgUrl\" />\n <button icon=\"tuiIconClose\" title=\"Close\" tuiIconButton tuiPreviewAction type=\"button\" (click)=\"preview.complete()\"></button>\n </tui-preview>\n </ng-template>\n </div>\n </div>\n <div class=\"flex flex-col self-center w-[10rem] gap-x-8 gap-y-0.5\">\n <span *ngIf=\"product.discount\" class=\"flex items-center text-xs 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-xs !h-4\"></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <p class=\"flex flex-col items-baseline gap-x-2 font-bold\">\n <span>{{ product.costRubString }}</span>\n <span *ngIf=\"!product.priceInRub\" class=\"text-xs text-tui-text-02\">{{ product.costString }}</span>\n </p>\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n </div>\n </div>\n </div>\n\n <div class=\"flex gap-2 items-center w-44 text-xs text-tui-text-02\">\n <!--\n TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton (click)=\"clickSettingsEvent.emit()\" size=\"m\" icon=\"scIconSettings\" appearance=\"secondary\" tuiMode=\"onLight\"></button>\n -->\n <div>\n <ng-container *ngIf=\"unitsHelper.productIsMeasurable(product); else notMeasurable\">\n <p>\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} {{ product.unit }}</p>\n </ng-container>\n <ng-template #notMeasurable>\n <p *ngIf=\"cartItem.length && !unitsHelper.productIsMeasurable(product)\">\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} \u043C.</p>\n <p *ngIf=\"cartItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ cartItem.width }} \u043C.</p>\n <p *ngIf=\"cartItem.height\">\u0412\u044B\u0441\u043E\u0442\u0430: {{ cartItem.height }} \u043C.</p>\n </ng-template>\n </div>\n </div>\n <div class=\"flex items-center grow justify-end\">\n <sc-input-quantity\n class=\"w-28\"\n *ngIf=\"quantityControl\"\n [formControl]=\"quantityControl\"\n [quantityUnit]=\"product.quantityUnit\"\n [showCross]=\"false\"\n size=\"s\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n ></sc-input-quantity>\n </div>\n </ng-container>\n\n <ng-template #skeleton>\n <div class=\"flex gap-2 w-full\">\n <div class=\"h-20 w-20 bg-tui-base-02 rounded-xl \"></div>\n <div class=\"flex flex-col grow gap-2.5 bg-white\">\n <div class=\"w-full h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-3/5 h-4 rounded-xl bg-tui-base-02\"></div>\n <div class=\"w-4/5 h-4 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n </ng-template>\n</div>\n" }]
|
96
|
+
}], ctorParameters: function () { return [{ type: i1.UnitsHelper }, { type: i7.TuiPreviewDialogService, decorators: [{
|
97
|
+
type: Inject,
|
98
|
+
args: [TuiPreviewDialogService]
|
99
|
+
}] }, { type: undefined, decorators: [{
|
100
|
+
type: Inject,
|
101
|
+
args: [SC_URLS]
|
102
|
+
}] }, { type: undefined, decorators: [{
|
103
|
+
type: Inject,
|
104
|
+
args: [SC_PATH_IMAGE_NOT_FOUND]
|
105
|
+
}] }]; }, propDecorators: { specificationPreviewRef: [{
|
106
|
+
type: ViewChild,
|
107
|
+
args: ['specificationPreview']
|
108
|
+
}], cartItem: [{
|
109
|
+
type: Input
|
110
|
+
}], quantityValueChanges: [{
|
111
|
+
type: Output
|
112
|
+
}], clickDeleteEvent: [{
|
113
|
+
type: Output
|
114
|
+
}], clickSettingsEvent: [{
|
115
|
+
type: Output
|
116
|
+
}], clickCardEvent: [{
|
117
|
+
type: Output
|
118
|
+
}] } });
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2FydC1pdGVtLW1vYmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9jYXJ0LWl0ZW0tbW9iaWxlL3NjLWNhcnQtaXRlbS1tb2JpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvY2FydC1pdGVtLW1vYmlsZS9zYy1jYXJ0LWl0ZW0tbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE9BQU8sRUFBa0MsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRyxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7O0FBSWxFOztHQUVHO0FBTUgsTUFBTSxPQUFPLHlCQUF5QjtJQWtFbEM7Ozs7Ozs7T0FPRztJQUNILFlBQ29CLFdBQXdCLEVBRXZCLG9CQUE2QyxFQUM1QixJQUFhLEVBQ0csaUJBQXlCO1FBSjNELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRXZCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBUztRQUNHLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtRQW5FL0U7O1dBRUc7UUFDSSxvQkFBZSxHQUErQixJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQW9CeEU7O1dBRUc7UUFFSSx5QkFBb0IsR0FBOEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpHOztXQUVHO1FBRUkscUJBQWdCLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdkU7O1dBRUc7UUFFSSx1QkFBa0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV6RTs7V0FFRztRQUVJLG1CQUFjLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7SUF1QmxFLENBQUM7SUEvREo7O09BRUc7SUFDSCxJQUNXLFFBQVEsQ0FBQyxJQUE0QjtRQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLElBQUksRUFBRTtZQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsRDtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBMEJEOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBa0JELGtCQUFrQjtJQUNYLFFBQVE7UUFDWCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25GLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQzdHLENBQUM7O3NIQW5HUSx5QkFBeUIsNkNBNEV0Qix1QkFBdUIsYUFFdkIsT0FBTyxhQUNQLHVCQUF1QjswR0EvRTFCLHlCQUF5QiwyWUNoQnRDLDJxTUFnR0E7MkZEaEZhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSxxQkFBcUIsbUJBRWQsdUJBQXVCLENBQUMsTUFBTTs7MEJBOEUxQyxNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBRTlCLE1BQU07MkJBQUMsT0FBTzs7MEJBQ2QsTUFBTTsyQkFBQyx1QkFBdUI7NENBckVsQix1QkFBdUI7c0JBRHZDLFNBQVM7dUJBQUMsc0JBQXNCO2dCQVl0QixRQUFRO3NCQURsQixLQUFLO2dCQW1CQyxvQkFBb0I7c0JBRDFCLE1BQU07Z0JBT0EsZ0JBQWdCO3NCQUR0QixNQUFNO2dCQU9BLGtCQUFrQjtzQkFEeEIsTUFBTTtnQkFPQSxjQUFjO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTQ19QQVRIX0lNQUdFX05PVF9GT1VORCwgU0NfVVJMUywgU2NDYXJ0SXRlbSwgU2NJVXJscywgU2NQcm9kdWN0IH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBza2lwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSB9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1wcmV2aWV3JztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBVbml0c0hlbHBlciB9IGZyb20gJy4uLy4uL2hlbHBlcnMvc2MtdW5pdHMtaGVscGVyJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LrQsNGA0YLQvtGH0LrQuCDRjdC70LXQvNC10L3RgtCwINC60L7RgNC30LjQvdGLLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLWNhcnQtaXRlbS1tb2JpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1jYXJ0LWl0ZW0tbW9iaWxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NDYXJ0SXRlbU1vYmlsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICog0K3Qu9C10LzQtdC90YIg0LrQvtGA0LfQuNC90YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2FydEl0ZW0/OiBTY0NhcnRJdGVtO1xuXG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC90LAg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0YHQv9C10YbQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NwZWNpZmljYXRpb25QcmV2aWV3JylcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNwZWNpZmljYXRpb25QcmV2aWV3UmVmPzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dD47XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgRm9ybUNvbnRyb2x9INC/0L7Qu9GPINCy0LLQvtC00LAg0LrQvtC70LjRh9C10YHRgtCy0LAg0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICAgICAqL1xuICAgIHB1YmxpYyBxdWFudGl0eUNvbnRyb2w6IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sKDApO1xuXG4gICAgLyoqXG4gICAgICog0K3Qu9C10LzQtdC90YIg0LrQvtGA0LfQuNC90YsuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGNhcnRJdGVtKGRhdGE6IFNjQ2FydEl0ZW0gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fY2FydEl0ZW0gPSBkYXRhO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5xdWFudGl0eUNvbnRyb2wucGF0Y2hWYWx1ZShkYXRhLnF1YW50aXR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCt0LvQtdC80LXQvdGCINC60L7RgNC30LjQvdGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2FydEl0ZW0oKTogU2NDYXJ0SXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJ0SXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINC60L7Qu9C40YfQtdGB0YLQstCwINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcXVhbnRpdHlWYWx1ZUNoYW5nZXM6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD4gPSB0aGlzLnF1YW50aXR5Q29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShza2lwKDEpKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQvdC+0L/QutGDIFwi0KPQtNCw0LvQuNGC0Ywg0LjQtyDQutC+0YDQt9C40L3Ri1wiLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0RlbGV0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQvdCw0LbQsNGC0LjRjyDQvdCwINC60L3QvtC/0LrRgyBcItCj0LTQsNC70LjRgtGMINC40Lcg0LrQvtGA0LfQuNC90YtcIi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2xpY2tTZXR0aW5nc0V2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQvdCw0LbQsNGC0LjRjyDQvdCwINC60LDRgNGC0L7Rh9C60YMuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrQ2FyZEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0L7QtNGD0LrRgiDRjdC70LXQvNC10L3RgtCwINC60L7RgNC30LjQvdGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcHJvZHVjdCgpOiBTY1Byb2R1Y3QgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJ0SXRlbT8ucHJvZHVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0NhcnRJdGVtTW9iaWxlQ29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1bml0c0hlbHBlciDQntCx0YrQtdC60YIt0YXRjdC70L/QtdGAINC00LvRjyDRgNCw0LHQvtGC0Ysg0YHQviDQt9C90LDRh9C10L3QuNGP0LzQuCDQtdC00LjQvdC40YYg0LjQt9C80LXRgNC10L3QuNGPINGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gcHJldmlld0RpYWxvZ1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC00LjQsNC70L7Qs9C+0LLQvtCz0L4g0L7QutC90LAg0L/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3QvtCz0L4g0L/RgNC+0YHQvNC+0YLRgNCwLlxuICAgICAqIEBwYXJhbSB1cmxzINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L3QsCDRgNCw0LfQtNC10LvRiyBiYWNrZW5kJ2EuXG4gICAgICogQHBhcmFtIHBhdGhJbWFnZU5vdEZvdW5kINCf0YPRgtGMINC00L4g0LjQt9C+0LHRgNCw0LbQtdC90LjRjyAn0KLQvtCy0LDRgCDQvdC1INC90LDQudC00LXQvScuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgdW5pdHNIZWxwZXI6IFVuaXRzSGVscGVyLFxuICAgICAgICBASW5qZWN0KFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHByZXZpZXdEaWFsb2dTZXJ2aWNlOiBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSxcbiAgICAgICAgQEluamVjdChTQ19VUkxTKSBwcml2YXRlIHJlYWRvbmx5IHVybHM6IFNjSVVybHMsXG4gICAgICAgIEBJbmplY3QoU0NfUEFUSF9JTUFHRV9OT1RfRk9VTkQpIHByaXZhdGUgcmVhZG9ubHkgcGF0aEltYWdlTm90Rm91bmQ6IHN0cmluZ1xuICAgICkge31cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5xdWFudGl0eVZhbHVlQ2hhbmdlcyA9IHRoaXMucXVhbnRpdHlDb250cm9sLnZhbHVlQ2hhbmdlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0L7QsdGA0LDQt9C40YLRjCDRgdC/0LXRhtC40YTQuNC60LDRhtC40Y4uXG4gICAgICovXG4gICAgcHVibGljIHNob3dTcGVjaWZpY2F0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5zcGVjaWZpY2F0aW9uUHJldmlld1JlZiB8fCAnJykuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0YHRgdGL0LvQutGDINC90LAg0LjQt9C+0LHRgNCw0LbQtdC90LjQtSDQutCw0YDRgtC+0YfQutC4INGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2FyZEltYWdlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3Q/LmdldEltYWdlKHRoaXMudXJscy5pbWdTZXJ2ZXJVcmwpID8/IHRoaXMudXJscy5pbWdTZXJ2ZXJVcmwgKyB0aGlzLnBhdGhJbWFnZU5vdEZvdW5kO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtbC0yIG10LTIgcmVsYXRpdmUgcC00IGdhcC15LTIgZ2FwLXgtNCBmbGV4IGZsZXgtd3JhcCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLXR1aS1iYXNlLTA0IHNoYWRvdy1zYy0yIHJvdW5kZWQteGxcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FydEl0ZW0gJiYgcHJvZHVjdDsgZWxzZSBza2VsZXRvblwiPlxuICAgICAgICA8IS0tXG4gICAgICAgIFRPRE86INCd0LXQvtCx0YXQvtC00LjQvNCwINGA0LXQsNC70LjQt9Cw0YbQuNGPINGE0YPQvdC60YbQuNC+0L3QsNC70LAuXG4gICAgICAgIDxidXR0b24gdHVpSWNvbkJ1dHRvbiBzaXplPVwibVwiIGljb249XCJzY0ljb25WZXJ0aWNhbFRocmVlRG90c1wiIGFwcGVhcmFuY2U9XCJmbG9hdFwiIHR1aU1vZGU9XCJvbkxpZ2h0XCIgY2xhc3M9XCIhYWJzb2x1dGUgcmlnaHQtMCB0b3AtMFwiPjwvYnV0dG9uPlxuICAgICAgICAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgaWNvbj1cInNjSWNvbkJhc2tldFwiXG4gICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIHR1aU1vZGU9XCJvbkxpZ2h0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGlja0RlbGV0ZUV2ZW50LmVtaXQoKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNoYWRvdy1zYy0yICFhYnNvbHV0ZSAtbGVmdC0yIC10b3AtMlwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNocmluay0wIGgtMjAgdy0yMCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPGltZyAoY2xpY2spPVwiY2xpY2tDYXJkRXZlbnQuZW1pdCgpXCIgW3NyY109XCJnZXRDYXJkSW1hZ2UoKVwiIFthbHRdPVwicHJvZHVjdC5uYW1lXCIgW2NsYXNzLnAtNV09XCIhcHJvZHVjdC5pbWFnZXM/Lmxlbmd0aFwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBzZWxmLWNlbnRlciBnYXAteC04IGdhcC15LTAuNVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVsxM3JlbV1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgdHVpTGluayAoY2xpY2spPVwiY2xpY2tDYXJkRXZlbnQuZW1pdCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IHByb2R1Y3QubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC10dWktdGV4dC0wMiB0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD7QkNGA0YLQuNC60YPQuzoge3sgcHJvZHVjdC5jb2RlIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJwcm9kdWN0LnBhY2tcIj7QndC+0YDQvNCwINGD0L/QsNC60L7QstC60Lg6IHt7IHByb2R1Y3QucGFjayB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHR1aUxpbmsgKm5nSWY9XCJjYXJ0SXRlbS5zcGVjaWZpY2F0aW9uSW1nVXJsXCIgKGNsaWNrKT1cInNob3dTcGVjaWZpY2F0aW9uKClcIj7QodC/0LXRhtC40YTQuNC60LDRhtC40Y88L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NwZWNpZmljYXRpb25QcmV2aWV3IGxldC1wcmV2aWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktcHJldmlldyBbcm90YXRhYmxlXT1cImZhbHNlXCIgW3pvb21hYmxlXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKnBvbHltb3JwaGV1c091dGxldD1cImNhcnRJdGVtLnNwZWNpZmljYXRpb25JbWdVcmwgYXMgc3JjXCIgYWx0PVwicHJldmlld1wiIFtzcmNdPVwiY2FydEl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWNvbj1cInR1aUljb25DbG9zZVwiIHRpdGxlPVwiQ2xvc2VcIiB0dWlJY29uQnV0dG9uIHR1aVByZXZpZXdBY3Rpb24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJwcmV2aWV3LmNvbXBsZXRlKClcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3R1aS1wcmV2aWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgc2VsZi1jZW50ZXIgdy1bMTByZW1dIGdhcC14LTggZ2FwLXktMC41XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC5kaXNjb3VudFwiIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdGV4dC14cyB0ZXh0LXR1aS10ZXh0LTAyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpbmUtdGhyb3VnaFwiPnt7IHByb2R1Y3QuZGlzY291bnRDb3N0U3RyaW5nIH19PC9zcGFuPiAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10dWktc3VjY2Vzcy1maWxsIGZvbnQtYm9sZFwiPiAte3sgcHJvZHVjdC5kaXNjb3VudC5wZXJjZW50IH19JSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLXN2ZyBzcmM9XCJ0dWlJY29uSW5mb0xhcmdlXCIgW3R1aUhpbnRdPVwiZGlzY291bnRIaW50XCIgW3R1aUhpbnRTaG93RGVsYXldPVwiMTAwXCIgdHVpSGludERpcmVjdGlvbj1cInRvcFwiIGNsYXNzPVwidGV4dC1ibGFjayAhdGV4dC14cyAhaC00XCI+PC90dWktc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNjb3VudEhpbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IHByb2R1Y3QuZGlzY291bnQubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9kdWN0LmRpc2NvdW50LmV4cGlyZWRBdCBhcyBleHBpcmVkQXRcIj7QlNCw0YLQsCDQvtC60L7QvdGH0LDQvdC40Y86IHt7IGV4cGlyZWRBdCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtYmFzZWxpbmUgZ2FwLXgtMiBmb250LWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHByb2R1Y3QuY29zdFJ1YlN0cmluZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXByb2R1Y3QucHJpY2VJblJ1YlwiIGNsYXNzPVwidGV4dC14cyB0ZXh0LXR1aS10ZXh0LTAyXCI+e3sgcHJvZHVjdC5jb3N0U3RyaW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxzYy1wcmljZS13YXJlaG91c2Utc3RvY2sgW3Byb2R1Y3RdPVwicHJvZHVjdFwiPjwvc2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlciB3LTQ0IHRleHQteHMgdGV4dC10dWktdGV4dC0wMlwiPlxuICAgICAgICAgICAgPCEtLVxuICAgICAgICAgICAgVE9ETzog0J3QtdC+0LHRhdC+0LTQuNC80LAg0YDQtdCw0LvQuNC30LDRhtC40Y8g0YTRg9C90LrRhtC40L7QvdCw0LvQsC5cbiAgICAgICAgICAgIDxidXR0b24gdHVpSWNvbkJ1dHRvbiAoY2xpY2spPVwiY2xpY2tTZXR0aW5nc0V2ZW50LmVtaXQoKVwiIHNpemU9XCJtXCIgaWNvbj1cInNjSWNvblNldHRpbmdzXCIgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiIHR1aU1vZGU9XCJvbkxpZ2h0XCI+PC9idXR0b24+XG4gICAgICAgICAgICAtLT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVuaXRzSGVscGVyLnByb2R1Y3RJc01lYXN1cmFibGUocHJvZHVjdCk7IGVsc2Ugbm90TWVhc3VyYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cD7QlNC70LjQvdCwOiB7eyBjYXJ0SXRlbS5sZW5ndGggfX0ge3sgcHJvZHVjdC51bml0IH19PC9wPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90TWVhc3VyYWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjYXJ0SXRlbS5sZW5ndGggJiYgIXVuaXRzSGVscGVyLnByb2R1Y3RJc01lYXN1cmFibGUocHJvZHVjdClcIj7QlNC70LjQvdCwOiB7eyBjYXJ0SXRlbS5sZW5ndGggfX0g0LwuPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNhcnRJdGVtLndpZHRoXCI+0KjQuNGA0LjQvdCwOiB7eyBjYXJ0SXRlbS53aWR0aCB9fSDQvC48L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY2FydEl0ZW0uaGVpZ2h0XCI+0JLRi9GB0L7RgtCwOiB7eyBjYXJ0SXRlbS5oZWlnaHQgfX0g0LwuPC9wPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBncm93IGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICA8c2MtaW5wdXQtcXVhbnRpdHlcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctMjhcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicXVhbnRpdHlDb250cm9sXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicXVhbnRpdHlDb250cm9sXCJcbiAgICAgICAgICAgICAgICBbcXVhbnRpdHlVbml0XT1cInByb2R1Y3QucXVhbnRpdHlVbml0XCJcbiAgICAgICAgICAgICAgICBbc2hvd0Nyb3NzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgICAgW3N0ZXBdPVwidW5pdHNIZWxwZXIucHJvZHVjdE11bHRpcGxpY2l0eShwcm9kdWN0KVwiXG4gICAgICAgICAgICA+PC9zYy1pbnB1dC1xdWFudGl0eT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI3NrZWxldG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTIwIHctMjAgYmctdHVpLWJhc2UtMDIgcm91bmRlZC14bCBcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdyb3cgZ2FwLTIuNSBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgaC00IHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zLzUgaC00IHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy00LzUgaC00IHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
@@ -0,0 +1,3 @@
|
|
1
|
+
export * from './sc-cart.module';
|
2
|
+
export * from './cart-item-mobile/sc-cart-item-mobile.component';
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsa0RBQWtELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NjLWNhcnQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vY2FydC1pdGVtLW1vYmlsZS9zYy1jYXJ0LWl0ZW0tbW9iaWxlLmNvbXBvbmVudCc7XG4iXX0=
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import { NgModule } from '@angular/core';
|
2
|
+
import { CommonModule } from '@angular/common';
|
3
|
+
import { ScCartItemMobileComponent } from './cart-item-mobile/sc-cart-item-mobile.component';
|
4
|
+
import { TuiButtonModule, TuiHintModule, TuiLinkModule, TuiModeModule, TuiSvgModule } from '@taiga-ui/core';
|
5
|
+
import { ScCatalogModule } from '../catalog';
|
6
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
7
|
+
import { TuiPreviewModule } from '@taiga-ui/addon-preview';
|
8
|
+
import { PolymorpheusModule } from '@tinkoff/ng-polymorpheus';
|
9
|
+
import * as i0 from "@angular/core";
|
10
|
+
/**
|
11
|
+
* Модуль корзины.
|
12
|
+
*/
|
13
|
+
export class ScCartModule {
|
14
|
+
}
|
15
|
+
ScCartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
16
|
+
ScCartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ScCartModule, declarations: [ScCartItemMobileComponent], imports: [CommonModule,
|
17
|
+
TuiLinkModule,
|
18
|
+
ScCatalogModule,
|
19
|
+
TuiButtonModule,
|
20
|
+
TuiModeModule,
|
21
|
+
TuiSvgModule,
|
22
|
+
TuiHintModule,
|
23
|
+
FormsModule,
|
24
|
+
ReactiveFormsModule,
|
25
|
+
TuiPreviewModule,
|
26
|
+
PolymorpheusModule], exports: [ScCartItemMobileComponent] });
|
27
|
+
ScCartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartModule, imports: [CommonModule,
|
28
|
+
TuiLinkModule,
|
29
|
+
ScCatalogModule,
|
30
|
+
TuiButtonModule,
|
31
|
+
TuiModeModule,
|
32
|
+
TuiSvgModule,
|
33
|
+
TuiHintModule,
|
34
|
+
FormsModule,
|
35
|
+
ReactiveFormsModule,
|
36
|
+
TuiPreviewModule,
|
37
|
+
PolymorpheusModule] });
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartModule, decorators: [{
|
39
|
+
type: NgModule,
|
40
|
+
args: [{
|
41
|
+
declarations: [ScCartItemMobileComponent],
|
42
|
+
exports: [ScCartItemMobileComponent],
|
43
|
+
imports: [
|
44
|
+
CommonModule,
|
45
|
+
TuiLinkModule,
|
46
|
+
ScCatalogModule,
|
47
|
+
TuiButtonModule,
|
48
|
+
TuiModeModule,
|
49
|
+
TuiSvgModule,
|
50
|
+
TuiHintModule,
|
51
|
+
FormsModule,
|
52
|
+
ReactiveFormsModule,
|
53
|
+
TuiPreviewModule,
|
54
|
+
PolymorpheusModule,
|
55
|
+
],
|
56
|
+
}]
|
57
|
+
}] });
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2FydC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9zYy1jYXJ0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUU5RDs7R0FFRztBQWtCSCxNQUFNLE9BQU8sWUFBWTs7eUdBQVosWUFBWTswR0FBWixZQUFZLGlCQWhCTix5QkFBeUIsYUFHcEMsWUFBWTtRQUNaLGFBQWE7UUFDYixlQUFlO1FBQ2YsZUFBZTtRQUNmLGFBQWE7UUFDYixZQUFZO1FBQ1osYUFBYTtRQUNiLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsZ0JBQWdCO1FBQ2hCLGtCQUFrQixhQVpaLHlCQUF5QjswR0FlMUIsWUFBWSxZQWJqQixZQUFZO1FBQ1osYUFBYTtRQUNiLGVBQWU7UUFDZixlQUFlO1FBQ2YsYUFBYTtRQUNiLFlBQVk7UUFDWixhQUFhO1FBQ2IsV0FBVztRQUNYLG1CQUFtQjtRQUNuQixnQkFBZ0I7UUFDaEIsa0JBQWtCOzJGQUdiLFlBQVk7a0JBakJ4QixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHlCQUF5QixDQUFDO29CQUN6QyxPQUFPLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztvQkFDcEMsT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsa0JBQWtCO3FCQUNyQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2NDYXJ0SXRlbU1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vY2FydC1pdGVtLW1vYmlsZS9zYy1jYXJ0LWl0ZW0tbW9iaWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUdWlCdXR0b25Nb2R1bGUsIFR1aUhpbnRNb2R1bGUsIFR1aUxpbmtNb2R1bGUsIFR1aU1vZGVNb2R1bGUsIFR1aVN2Z01vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFNjQ2F0YWxvZ01vZHVsZSB9IGZyb20gJy4uL2NhdGFsb2cnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUdWlQcmV2aWV3TW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLXByZXZpZXcnO1xuaW1wb3J0IHsgUG9seW1vcnBoZXVzTW9kdWxlIH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcblxuLyoqXG4gKiDQnNC+0LTRg9C70Ywg0LrQvtGA0LfQuNC90YsuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbU2NDYXJ0SXRlbU1vYmlsZUNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW1NjQ2FydEl0ZW1Nb2JpbGVDb21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBUdWlMaW5rTW9kdWxlLFxuICAgICAgICBTY0NhdGFsb2dNb2R1bGUsXG4gICAgICAgIFR1aUJ1dHRvbk1vZHVsZSxcbiAgICAgICAgVHVpTW9kZU1vZHVsZSxcbiAgICAgICAgVHVpU3ZnTW9kdWxlLFxuICAgICAgICBUdWlIaW50TW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgVHVpUHJldmlld01vZHVsZSxcbiAgICAgICAgUG9seW1vcnBoZXVzTW9kdWxlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNjQ2FydE1vZHVsZSB7fVxuIl19
|
@@ -0,0 +1,109 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Inject, Input, Output, ViewChild } from '@angular/core';
|
2
|
+
import { SC_PATH_IMAGE_NOT_FOUND, SC_URLS } from '@snabcentr/client-core';
|
3
|
+
import * as i0 from "@angular/core";
|
4
|
+
import * as i1 from "@angular/common";
|
5
|
+
import * as i2 from "../sc-favorite-btn/sc-favorite-btn.component";
|
6
|
+
/**
|
7
|
+
* Карточка категории.
|
8
|
+
*/
|
9
|
+
export class ScCategoryCardComponent {
|
10
|
+
/**
|
11
|
+
* Инициализирует экземпляр класса {@link CategoryCardComponent}.
|
12
|
+
*
|
13
|
+
* @param urls Список ссылок на разделы backend'a.
|
14
|
+
* @param renderer Экземпляр базового класса для реализации пользовательского рендеринга.
|
15
|
+
* @param pathImageNotFound Путь до изображения 'Товар не найден'.
|
16
|
+
*/
|
17
|
+
constructor(urls, renderer, pathImageNotFound) {
|
18
|
+
this.urls = urls;
|
19
|
+
this.renderer = renderer;
|
20
|
+
this.pathImageNotFound = pathImageNotFound;
|
21
|
+
/**
|
22
|
+
* Размер карточки категории.
|
23
|
+
*/
|
24
|
+
this.size = 'm';
|
25
|
+
/**
|
26
|
+
* Признак, что карточка является скелетоном.
|
27
|
+
*/
|
28
|
+
this.isSkeleton = false;
|
29
|
+
/**
|
30
|
+
* Признак необходимости отобразить/скрыть кнопку избранной категории.
|
31
|
+
*/
|
32
|
+
this.showFavoriteBtn = true;
|
33
|
+
/**
|
34
|
+
* Признак что категория имеет поведение наведения и скрытия названия.
|
35
|
+
*/
|
36
|
+
this.isHovered = false;
|
37
|
+
/**
|
38
|
+
* Событие нажатия на карточку категории.
|
39
|
+
*/
|
40
|
+
this.clickOnCardEvent = new EventEmitter();
|
41
|
+
/**
|
42
|
+
* Событие нажатия на кнопку избранной категории.
|
43
|
+
*/
|
44
|
+
this.clickOnFavoriteEvent = new EventEmitter();
|
45
|
+
}
|
46
|
+
/**
|
47
|
+
* Возвращает путь к изображению категории. Если путь отсутствует, то вернёт изображение по-умолчанию ("product_not_found").
|
48
|
+
*
|
49
|
+
* @param category Информация о категории.
|
50
|
+
*/
|
51
|
+
getCategoryImgURL(category) {
|
52
|
+
return category.properties?.image ? this.urls.imgServerUrl + '/' + category.properties?.image : this.pathImageNotFound;
|
53
|
+
}
|
54
|
+
/**
|
55
|
+
* Обработчик события mousemove.
|
56
|
+
*/
|
57
|
+
moveEnterHandler() {
|
58
|
+
if (this.isHovered) {
|
59
|
+
this.name.nativeElement.style.maxHeight = `${this.name.nativeElement.scrollHeight / 16}rem`;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
/**
|
63
|
+
* Обработчик события mouseleave.
|
64
|
+
*/
|
65
|
+
mouseLeaveHandler() {
|
66
|
+
if (this.isHovered) {
|
67
|
+
this.renderer.setStyle(this.name.nativeElement, 'maxHeight', null);
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
ScCategoryCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoryCardComponent, deps: [{ token: SC_URLS }, { token: i0.Renderer2 }, { token: SC_PATH_IMAGE_NOT_FOUND }], target: i0.ɵɵFactoryTarget.Component });
|
72
|
+
ScCategoryCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCategoryCardComponent, selector: "sc-category-card", inputs: { category: "category", size: "size", isSkeleton: "isSkeleton", showFavoriteBtn: "showFavoriteBtn", isHovered: "isHovered" }, outputs: { clickOnCardEvent: "clickOnCardEvent", clickOnFavoriteEvent: "clickOnFavoriteEvent" }, host: { listeners: { "mousemove": "moveEnterHandler()", "mouseleave": "mouseLeaveHandler()" }, properties: { "attr.data-size": "this.size" } }, viewQueries: [{ propertyName: "name", first: true, predicate: ["name"], descendants: true }], ngImport: i0, template: "<div class=\"relative group\">\n <button\n (click)=\"clickOnCardEvent.emit(category)\"\n [class.pointer-events-none]=\"!category || isSkeleton\"\n class=\"category-btn flex flex-col relative rounded-tui-radius-m overflow-hidden shadow-sc-2\"\n >\n <div class=\"img-wrapper w-full grow bg-tui-base-02 overflow-hidden\">\n <img *ngIf=\"category && !isSkeleton\" [src]=\"getCategoryImgURL(category)\" [alt]=\"category.name\" class=\"w-full\" />\n </div>\n <div #name [attr.data-is-hovered]=\"!isHovered\" class=\"name grid items-center justify-center font-bold bg-white w-full overflow-hidden shrink-0 duration-300\">\n <span *ngIf=\"category && !isSkeleton; else skeletonName\">{{ category.name }}</span>\n <ng-template #skeletonName>\n <div class=\"skeleton-name bg-tui-base-02 rounded-tui-radius-s\"></div>\n </ng-template>\n </div>\n </button>\n <sc-favorite-btn *ngIf=\"category && !isSkeleton && showFavoriteBtn\" (clickEvent)=\"clickOnFavoriteEvent.emit()\" class=\"absolute left-1 top-1\"></sc-favorite-btn>\n</div>\n", styles: [":host[data-size=m] button.category-btn{width:100%;height:12.5rem}:host[data-size=m] button.category-btn .img-wrapper{max-height:8.75rem}:host[data-size=m] button.category-btn .name{min-height:2.5rem;padding-inline:.75rem;margin-block:.75rem}:host[data-size=m] button.category-btn .name:not([data-is-hovered=true]){max-height:2.5rem}:host[data-size=m] button.category-btn .name .skeleton-name{width:10rem;height:1rem}:host[data-size=s] button.category-btn{width:100%;height:10rem}:host[data-size=s] button.category-btn .img-wrapper{max-height:8.75rem}:host[data-size=s] button.category-btn .name{min-height:2rem;font-size:.75rem;line-height:1rem;padding-inline:.5rem;margin-block:.5rem}:host[data-size=s] button.category-btn .name:not([data-is-hovered=true]){max-height:2rem}:host[data-size=s] button.category-btn .name .skeleton-name{width:7rem;height:.75rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ScFavoriteBtnComponent, selector: "sc-favorite-btn", outputs: ["clickEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoryCardComponent, decorators: [{
|
74
|
+
type: Component,
|
75
|
+
args: [{ selector: 'sc-category-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative group\">\n <button\n (click)=\"clickOnCardEvent.emit(category)\"\n [class.pointer-events-none]=\"!category || isSkeleton\"\n class=\"category-btn flex flex-col relative rounded-tui-radius-m overflow-hidden shadow-sc-2\"\n >\n <div class=\"img-wrapper w-full grow bg-tui-base-02 overflow-hidden\">\n <img *ngIf=\"category && !isSkeleton\" [src]=\"getCategoryImgURL(category)\" [alt]=\"category.name\" class=\"w-full\" />\n </div>\n <div #name [attr.data-is-hovered]=\"!isHovered\" class=\"name grid items-center justify-center font-bold bg-white w-full overflow-hidden shrink-0 duration-300\">\n <span *ngIf=\"category && !isSkeleton; else skeletonName\">{{ category.name }}</span>\n <ng-template #skeletonName>\n <div class=\"skeleton-name bg-tui-base-02 rounded-tui-radius-s\"></div>\n </ng-template>\n </div>\n </button>\n <sc-favorite-btn *ngIf=\"category && !isSkeleton && showFavoriteBtn\" (clickEvent)=\"clickOnFavoriteEvent.emit()\" class=\"absolute left-1 top-1\"></sc-favorite-btn>\n</div>\n", styles: [":host[data-size=m] button.category-btn{width:100%;height:12.5rem}:host[data-size=m] button.category-btn .img-wrapper{max-height:8.75rem}:host[data-size=m] button.category-btn .name{min-height:2.5rem;padding-inline:.75rem;margin-block:.75rem}:host[data-size=m] button.category-btn .name:not([data-is-hovered=true]){max-height:2.5rem}:host[data-size=m] button.category-btn .name .skeleton-name{width:10rem;height:1rem}:host[data-size=s] button.category-btn{width:100%;height:10rem}:host[data-size=s] button.category-btn .img-wrapper{max-height:8.75rem}:host[data-size=s] button.category-btn .name{min-height:2rem;font-size:.75rem;line-height:1rem;padding-inline:.5rem;margin-block:.5rem}:host[data-size=s] button.category-btn .name:not([data-is-hovered=true]){max-height:2rem}:host[data-size=s] button.category-btn .name .skeleton-name{width:7rem;height:.75rem}\n"] }]
|
76
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
77
|
+
type: Inject,
|
78
|
+
args: [SC_URLS]
|
79
|
+
}] }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
80
|
+
type: Inject,
|
81
|
+
args: [SC_PATH_IMAGE_NOT_FOUND]
|
82
|
+
}] }]; }, propDecorators: { category: [{
|
83
|
+
type: Input
|
84
|
+
}], name: [{
|
85
|
+
type: ViewChild,
|
86
|
+
args: ['name']
|
87
|
+
}], size: [{
|
88
|
+
type: Input
|
89
|
+
}, {
|
90
|
+
type: HostBinding,
|
91
|
+
args: ['attr.data-size']
|
92
|
+
}], isSkeleton: [{
|
93
|
+
type: Input
|
94
|
+
}], showFavoriteBtn: [{
|
95
|
+
type: Input
|
96
|
+
}], isHovered: [{
|
97
|
+
type: Input
|
98
|
+
}], clickOnCardEvent: [{
|
99
|
+
type: Output
|
100
|
+
}], clickOnFavoriteEvent: [{
|
101
|
+
type: Output
|
102
|
+
}], moveEnterHandler: [{
|
103
|
+
type: HostListener,
|
104
|
+
args: ['mousemove']
|
105
|
+
}], mouseLeaveHandler: [{
|
106
|
+
type: HostListener,
|
107
|
+
args: ['mouseleave']
|
108
|
+
}] } });
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0ZWdvcnktY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2F0YWxvZy9jYXRlZ29yeS1jYXJkL3NjLWNhdGVnb3J5LWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0ZWdvcnktY2FyZC9zYy1jYXRlZ29yeS1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JLLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxPQUFPLEVBQXVCLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFHL0Y7O0dBRUc7QUFPSCxNQUFNLE9BQU8sdUJBQXVCO0lBa0RoQzs7Ozs7O09BTUc7SUFDSCxZQUFxRCxJQUFhLEVBQVUsUUFBbUIsRUFBb0QsaUJBQXlCO1FBQXZILFNBQUksR0FBSixJQUFJLENBQVM7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQW9ELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtRQTVDNUs7O1dBRUc7UUFHSSxTQUFJLEdBQWEsR0FBRyxDQUFDO1FBRTVCOztXQUVHO1FBRUksZUFBVSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7V0FFRztRQUVJLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBRXZDOztXQUVHO1FBRUksY0FBUyxHQUFZLEtBQUssQ0FBQztRQUVsQzs7V0FFRztRQUVJLHFCQUFnQixHQUE2QixJQUFJLFlBQVksRUFBYyxDQUFDO1FBRW5GOztXQUVHO1FBRUkseUJBQW9CLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7SUFTd0YsQ0FBQztJQUVoTDs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUMsUUFBb0I7UUFDekMsT0FBTyxRQUFRLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDM0gsQ0FBQztJQUVEOztPQUVHO0lBRUssZ0JBQWdCO1FBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLEVBQUUsS0FBSyxDQUFDO1NBQy9GO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBRUssaUJBQWlCO1FBQ3JCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEU7SUFDTCxDQUFDOztvSEF0RlEsdUJBQXVCLGtCQXlETCxPQUFPLHNDQUF1RSx1QkFBdUI7d0dBekR2SCx1QkFBdUIsNmdCQ2JwQyx3bkNBa0JBOzJGRExhLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDSSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTTs7MEJBMkQzQixNQUFNOzJCQUFDLE9BQU87OzBCQUFnRSxNQUFNOzJCQUFDLHVCQUF1Qjs0Q0FwRHpILFFBQVE7c0JBRGQsS0FBSztnQkFPRSxJQUFJO3NCQURYLFNBQVM7dUJBQUMsTUFBTTtnQkFRVixJQUFJO3NCQUZWLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQU90QixVQUFVO3NCQURoQixLQUFLO2dCQU9DLGVBQWU7c0JBRHJCLEtBQUs7Z0JBT0MsU0FBUztzQkFEZixLQUFLO2dCQU9DLGdCQUFnQjtzQkFEdEIsTUFBTTtnQkFPQSxvQkFBb0I7c0JBRDFCLE1BQU07Z0JBeUJDLGdCQUFnQjtzQkFEdkIsWUFBWTt1QkFBQyxXQUFXO2dCQVdqQixpQkFBaUI7c0JBRHhCLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU0NfUEFUSF9JTUFHRV9OT1RfRk9VTkQsIFNDX1VSTFMsIFNjQ2F0ZWdvcnksIFNjSVVybHMgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aVNpemVTIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuXG4vKipcbiAqINCa0LDRgNGC0L7Rh9C60LAg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLWNhdGVnb3J5LWNhcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1jYXRlZ29yeS1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zYy1jYXRlZ29yeS1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjQ2F0ZWdvcnlDYXJkQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiDQmNC90YTQvtGA0LzQsNGG0LjRjyDQviDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2F0ZWdvcnk/OiBTY0NhdGVnb3J5O1xuXG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC90LAge0BsaW5rIEhUTUxFbGVtZW50fSDQsdC70L7QutCwINC90LDQt9Cy0LDQvdC40Y8uXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnbmFtZScpXG4gICAgcHJpdmF0ZSBuYW1lOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKlxuICAgICAqINCg0LDQt9C80LXRgCDQutCw0YDRgtC+0YfQutC4INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNpemUnKVxuICAgIHB1YmxpYyBzaXplOiBUdWlTaXplUyA9ICdtJztcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LrQsNGA0YLQvtGH0LrQsCDRj9Cy0LvRj9C10YLRgdGPINGB0LrQtdC70LXRgtC+0L3QvtC8LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlzU2tlbGV0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4INC+0YLQvtCx0YDQsNC30LjRgtGML9GB0LrRgNGL0YLRjCDQutC90L7Qv9C60YMg0LjQt9Cx0YDQsNC90L3QvtC5INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93RmF2b3JpdGVCdG46IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YfRgtC+INC60LDRgtC10LPQvtGA0LjRjyDQuNC80LXQtdGCINC/0L7QstC10LTQtdC90LjQtSDQvdCw0LLQtdC00LXQvdC40Y8g0Lgg0YHQutGA0YvRgtC40Y8g0L3QsNC30LLQsNC90LjRjy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpc0hvdmVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQsNGA0YLQvtGH0LrRgyDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrT25DYXJkRXZlbnQ6IEV2ZW50RW1pdHRlcjxTY0NhdGVnb3J5PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2NDYXRlZ29yeT4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQvdC+0L/QutGDINC40LfQsdGA0LDQvdC90L7QuSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrT25GYXZvcml0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8U2NDYXRlZ29yeT4gPSBuZXcgRXZlbnRFbWl0dGVyPFNjQ2F0ZWdvcnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIENhdGVnb3J5Q2FyZENvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJscyDQodC/0LjRgdC+0Log0YHRgdGL0LvQvtC6INC90LAg0YDQsNC30LTQtdC70YsgYmFja2VuZCdhLlxuICAgICAqIEBwYXJhbSByZW5kZXJlciDQrdC60LfQtdC80L/Qu9GP0YAg0LHQsNC30L7QstC+0LPQviDQutC70LDRgdGB0LAg0LTQu9GPINGA0LXQsNC70LjQt9Cw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNGB0LrQvtCz0L4g0YDQtdC90LTQtdGA0LjQvdCz0LAuXG4gICAgICogQHBhcmFtIHBhdGhJbWFnZU5vdEZvdW5kINCf0YPRgtGMINC00L4g0LjQt9C+0LHRgNCw0LbQtdC90LjRjyAn0KLQvtCy0LDRgCDQvdC1INC90LDQudC00LXQvScuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKEBJbmplY3QoU0NfVVJMUykgcHJpdmF0ZSByZWFkb25seSB1cmxzOiBTY0lVcmxzLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIEBJbmplY3QoU0NfUEFUSF9JTUFHRV9OT1RfRk9VTkQpIHByaXZhdGUgcmVhZG9ubHkgcGF0aEltYWdlTm90Rm91bmQ6IHN0cmluZykge31cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YPRgtGMINC6INC40LfQvtCx0YDQsNC20LXQvdC40Y4g0LrQsNGC0LXQs9C+0YDQuNC4LiDQldGB0LvQuCDQv9GD0YLRjCDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCLCDRgtC+INCy0LXRgNC90ZHRgiDQuNC30L7QsdGA0LDQttC10L3QuNC1INC/0L4t0YPQvNC+0LvRh9Cw0L3QuNGOIChcInByb2R1Y3Rfbm90X2ZvdW5kXCIpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3J5INCY0L3RhNC+0YDQvNCw0YbQuNGPINC+INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2F0ZWdvcnlJbWdVUkwoY2F0ZWdvcnk6IFNjQ2F0ZWdvcnkpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gY2F0ZWdvcnkucHJvcGVydGllcz8uaW1hZ2UgPyB0aGlzLnVybHMuaW1nU2VydmVyVXJsICsgJy8nICsgY2F0ZWdvcnkucHJvcGVydGllcz8uaW1hZ2UgOiB0aGlzLnBhdGhJbWFnZU5vdEZvdW5kO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INGB0L7QsdGL0YLQuNGPIG1vdXNlbW92ZS5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZW1vdmUnKVxuICAgIHByaXZhdGUgbW92ZUVudGVySGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3ZlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUubmF0aXZlRWxlbWVudC5zdHlsZS5tYXhIZWlnaHQgPSBgJHt0aGlzLm5hbWUubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLyAxNn1yZW1gO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0YHQvtCx0YvRgtC40Y8gbW91c2VsZWF2ZS5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgICBwcml2YXRlIG1vdXNlTGVhdmVIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0hvdmVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5uYW1lLm5hdGl2ZUVsZW1lbnQsICdtYXhIZWlnaHQnLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBncm91cFwiPlxuICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cImNsaWNrT25DYXJkRXZlbnQuZW1pdChjYXRlZ29yeSlcIlxuICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhY2F0ZWdvcnkgfHwgaXNTa2VsZXRvblwiXG4gICAgICAgIGNsYXNzPVwiY2F0ZWdvcnktYnRuIGZsZXggZmxleC1jb2wgcmVsYXRpdmUgcm91bmRlZC10dWktcmFkaXVzLW0gb3ZlcmZsb3ctaGlkZGVuIHNoYWRvdy1zYy0yXCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbWctd3JhcHBlciB3LWZ1bGwgZ3JvdyBiZy10dWktYmFzZS0wMiBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJjYXRlZ29yeSAmJiAhaXNTa2VsZXRvblwiIFtzcmNdPVwiZ2V0Q2F0ZWdvcnlJbWdVUkwoY2F0ZWdvcnkpXCIgW2FsdF09XCJjYXRlZ29yeS5uYW1lXCIgY2xhc3M9XCJ3LWZ1bGxcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAjbmFtZSBbYXR0ci5kYXRhLWlzLWhvdmVyZWRdPVwiIWlzSG92ZXJlZFwiIGNsYXNzPVwibmFtZSBncmlkIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmb250LWJvbGQgYmctd2hpdGUgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiBzaHJpbmstMCBkdXJhdGlvbi0zMDBcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2F0ZWdvcnkgJiYgIWlzU2tlbGV0b247IGVsc2Ugc2tlbGV0b25OYW1lXCI+e3sgY2F0ZWdvcnkubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2tlbGV0b25OYW1lPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJza2VsZXRvbi1uYW1lIGJnLXR1aS1iYXNlLTAyIHJvdW5kZWQtdHVpLXJhZGl1cy1zXCI+PC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2J1dHRvbj5cbiAgICA8c2MtZmF2b3JpdGUtYnRuICpuZ0lmPVwiY2F0ZWdvcnkgJiYgIWlzU2tlbGV0b24gJiYgc2hvd0Zhdm9yaXRlQnRuXCIgKGNsaWNrRXZlbnQpPVwiY2xpY2tPbkZhdm9yaXRlRXZlbnQuZW1pdCgpXCIgY2xhc3M9XCJhYnNvbHV0ZSBsZWZ0LTEgdG9wLTFcIj48L3NjLWZhdm9yaXRlLWJ0bj5cbjwvZGl2PlxuIl19
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export * from './category-card/sc-category-card.component';
|
2
|
+
export * from './input-quantity/sc-input-quantity.component';
|
3
|
+
export * from './price-card/sc-price-card.component';
|
4
|
+
export * from './price-history/sc-price-history.component';
|
5
|
+
export * from './price-warehouse-stock/sc-price-warehouse-stock.component';
|
6
|
+
export * from './sc-favorite-btn/sc-favorite-btn.component';
|
7
|
+
export * from './sc-catalog.module';
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2F0YWxvZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jYXRlZ29yeS1jYXJkL3NjLWNhdGVnb3J5LWNhcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW5wdXQtcXVhbnRpdHkvc2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcHJpY2UtY2FyZC9zYy1wcmljZS1jYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ByaWNlLWhpc3Rvcnkvc2MtcHJpY2UtaGlzdG9yeS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9wcmljZS13YXJlaG91c2Utc3RvY2svc2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWZhdm9yaXRlLWJ0bi9zYy1mYXZvcml0ZS1idG4uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc2MtY2F0YWxvZy5tb2R1bGUnO1xuIl19
|
@@ -0,0 +1,154 @@
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, HostListener, Inject, Input, Optional, Output, Self, ViewChild, } from '@angular/core';
|
2
|
+
import { NgControl } from '@angular/forms';
|
3
|
+
import { stepValidator } from '../../validators/stepValidator';
|
4
|
+
import { TUI_NUMBER_VALUE_TRANSFORMER, TuiInputNumberComponent } from '@taiga-ui/kit';
|
5
|
+
import { AbstractTuiNullableControl } from '@taiga-ui/cdk';
|
6
|
+
import * as i0 from "@angular/core";
|
7
|
+
import * as i1 from "@angular/common";
|
8
|
+
import * as i2 from "@taiga-ui/core";
|
9
|
+
import * as i3 from "@taiga-ui/kit";
|
10
|
+
import * as i4 from "@angular/forms";
|
11
|
+
import * as i5 from "@taiga-ui/cdk";
|
12
|
+
export class ScInputQuantityComponent extends AbstractTuiNullableControl {
|
13
|
+
/**
|
14
|
+
* Инициализирует экземпляр класса {@link ScInputQuantityComponent}.
|
15
|
+
*
|
16
|
+
* @param ngControl Объект поля ввода для настройки валидации.
|
17
|
+
* @param cdr Объект для работы с обнаружением изменений.
|
18
|
+
* @param transformer Преобразователь значений элемента формы.
|
19
|
+
*/
|
20
|
+
constructor(ngControl, cdr, transformer) {
|
21
|
+
super(ngControl, cdr, transformer);
|
22
|
+
/**
|
23
|
+
* Шаг увеличения количества. Отвечает за проверку кратности ввода.
|
24
|
+
*/
|
25
|
+
this.step = 1;
|
26
|
+
/**
|
27
|
+
* Признак, что необходимо отобразить {@link TuiLoaderComponent} над компонентом.
|
28
|
+
*/
|
29
|
+
this.showLoader = false;
|
30
|
+
/**
|
31
|
+
* Признак, что необходимо отобразить кнопку очистки поля ввода.
|
32
|
+
*/
|
33
|
+
this.showCross = true;
|
34
|
+
/**
|
35
|
+
* Формат внешнего вида компонента.
|
36
|
+
*/
|
37
|
+
this.appearance = 'primary';
|
38
|
+
/**
|
39
|
+
* Признак, что компонент деактивирован.
|
40
|
+
*/
|
41
|
+
this.isDisabled = false;
|
42
|
+
/**
|
43
|
+
* Размер компонента.
|
44
|
+
*/
|
45
|
+
this.size = 'm';
|
46
|
+
/**
|
47
|
+
* Событие нажатия на кнопку "Очистить".
|
48
|
+
*/
|
49
|
+
this.clickClearEvent = new EventEmitter();
|
50
|
+
}
|
51
|
+
get focused() {
|
52
|
+
return !!this.numberInput?.focused;
|
53
|
+
}
|
54
|
+
get formControl() {
|
55
|
+
return this.control;
|
56
|
+
}
|
57
|
+
/** @inheritDoc */
|
58
|
+
ngOnInit() {
|
59
|
+
if (this.control) {
|
60
|
+
this.control.setValidators(stepValidator(this.step));
|
61
|
+
}
|
62
|
+
}
|
63
|
+
/**
|
64
|
+
* Обработчик события нажатия стрелок клавиатуры.
|
65
|
+
*
|
66
|
+
* @param step Шаг изменения количества.
|
67
|
+
*/
|
68
|
+
onArrow(step) {
|
69
|
+
if (!step) {
|
70
|
+
return;
|
71
|
+
}
|
72
|
+
if (step > 0) {
|
73
|
+
this.incident();
|
74
|
+
}
|
75
|
+
else {
|
76
|
+
this.decrement();
|
77
|
+
}
|
78
|
+
}
|
79
|
+
/**
|
80
|
+
* Увеличивает значение в поле ввода на 1 шаг. Если число в поле ввода не кратно шагу, то увеличит до ближайшего кратного значения.
|
81
|
+
*/
|
82
|
+
incident() {
|
83
|
+
this.numberInput.onArrow(this.step - ((this.numberInput.value || 0) % this.step));
|
84
|
+
}
|
85
|
+
/**
|
86
|
+
* Уменьшает значение в поле ввода на 1 шаг. Если число в поле ввода не кратно шагу, то уменьшит до ближайшего кратного значения.
|
87
|
+
*/
|
88
|
+
decrement() {
|
89
|
+
this.numberInput.onArrow(-((this.numberInput.value || 0) % this.step) || -this.step);
|
90
|
+
}
|
91
|
+
/**
|
92
|
+
* Очищает поля ввода.
|
93
|
+
*/
|
94
|
+
clear() {
|
95
|
+
this.control?.patchValue(null);
|
96
|
+
this.clickClearEvent.emit();
|
97
|
+
}
|
98
|
+
}
|
99
|
+
ScInputQuantityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScInputQuantityComponent, deps: [{ token: NgControl, optional: true, self: true }, { token: ChangeDetectorRef }, { token: TUI_NUMBER_VALUE_TRANSFORMER, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
100
|
+
ScInputQuantityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScInputQuantityComponent, selector: "sc-input-quantity", inputs: { step: "step", quantityUnit: "quantityUnit", showLoader: "showLoader", showCross: "showCross", appearance: "appearance", isDisabled: "isDisabled", size: "size" }, outputs: { clickClearEvent: "clickClearEvent" }, host: { listeners: { "keydown.arrowDown": "onArrow(-step)", "keydown.arrowUp": "onArrow(step)" }, properties: { "attr.data-appearance": "this.appearance", "attr.data-disabled": "this.isDisabled", "attr.data-size": "this.size" } }, viewQueries: [{ propertyName: "numberInput", first: true, predicate: TuiInputNumberComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<tui-loader *ngIf=\"formControl\" class=\"w-full\" [overlay]=\"true\" [showLoader]=\"showLoader\" [size]=\"size\">\n <div class=\"flex items-center text-center gap-1\">\n <div class=\"field-with-button flex grow rounded-xl\">\n <button\n tuiIconButton\n tuiMode=\"onLight\"\n [appearance]=\"appearance\"\n [disabled]=\"!numberInput.canDecrement\"\n [focusable]=\"false\"\n [size]=\"size\"\n (click.prevent)=\"decrement()\"\n (mousedown.prevent)=\"numberInput.nativeFocusableElement?.focus()\"\n >\n <tui-svg src=\"scIconMinus\"></tui-svg>\n </button>\n <tui-input-number\n #numberInput\n [formControl]=\"formControl\"\n [tuiHint]=\"([] | tuiFieldError | async )?.message\"\n [tuiTextfieldPostfix]=\"quantityUnit || ''\"\n [tuiTextfieldLabelOutside]=\"true\"\n [min]=\"step\"\n [tuiTextfieldSize]=\"size\"\n [required]=\"true\"\n [style.text-align]=\"'center'\"\n [style.font-weight]=\"700\"\n class=\"grow\"\n >\n </tui-input-number>\n <button\n tuiIconButton\n tuiMode=\"onLight\"\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput.canIncrement\"\n [focusable]=\"false\"\n (click.prevent)=\"incident()\"\n (mousedown.prevent)=\"numberInput.nativeFocusableElement?.focus()\"\n >\n <tui-svg src=\"scIconPlus\"></tui-svg>\n </button>\n </div>\n <button\n *ngIf=\"showCross\"\n tuiIconButton\n tuiMode=\"onLight\"\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput.canIncrement\"\n [focusable]=\"false\"\n (click.prevent)=\"clear()\"\n (mousedown.prevent)=\"numberInput.nativeFocusableElement?.focus()\"\n >\n <tui-svg src=\"scIconCross\"></tui-svg>\n </button>\n </div>\n</tui-loader>\n", styles: [":host [data-size=l]{--tui-height-l: var(--tui-height-m);--tui-font-text-m: bold .875rem/1.25rem var(--tui-font-text);--tui-padding-l: 0}:host [data-size=m]{--tui-height-m: var(--tui-height-s);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-m: 0}:host [data-size=m] tui-svg{font-size:12px!important}:host [data-size=s]{--tui-height-s: var(--tui-height-xs);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-s: 0}:host [data-size=s] tui-svg{font-size:12px!important}:host[data-disabled=true]{pointer-events:none;opacity:var(--tui-disabled-opacity)}:host[data-appearance=secondary] .field-with-button{background-color:var(--tui-base-01);box-shadow:inset 0 0 0 .0625rem var(--tui-base-03)}:host[data-appearance=primary] .field-with-button{background-color:var(--tui-warning-bg)}:host .field-with-button:has(._invalid){background-color:var(--tui-error-bg)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "component", type: i2.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "component", type: i3.TuiInputNumberComponent, selector: "tui-input-number", inputs: ["min", "max", "decimal", "precision", "step", "prefix", "postfix"] }, { kind: "directive", type: i3.TuiInputNumberDirective, selector: "tui-input-number" }, { kind: "directive", type: i2.TuiTextfieldLabelOutsideDirective, selector: "[tuiTextfieldLabelOutside]", inputs: ["tuiTextfieldLabelOutside"] }, { kind: "directive", type: i2.TuiTextfieldSizeDirective, selector: "[tuiTextfieldSize]", inputs: ["tuiTextfieldSize"] }, { kind: "directive", type: i2.TuiTextfieldPostfixDirective, selector: "[tuiTextfieldPostfix]", inputs: ["tuiTextfieldPostfix"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.TuiHintDirective, selector: "[tuiHint]:not(ng-container)", inputs: ["tuiHint", "tuiHintContext", "tuiHintAppearance"] }, { kind: "directive", type: i2.TuiHintDriverDirective, selector: "[tuiHint]" }, { kind: "directive", type: i2.TuiHintHoverDirective, selector: "[tuiHint]:not(ng-container)", inputs: ["tuiHintShowDelay", "tuiHintHideDelay"], exportAs: ["tuiHintHover"] }, { kind: "directive", type: i2.TuiHintPositionDirective, selector: "[tuiHint]:not([tuiHintCustomPosition])", inputs: ["tuiHintDirection"] }, { kind: "directive", type: i2.TuiModeDirective, selector: "[tuiMode]", inputs: ["tuiMode"] }, { kind: "component", type: i2.TuiLoaderComponent, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScInputQuantityComponent, decorators: [{
|
102
|
+
type: Component,
|
103
|
+
args: [{ selector: 'sc-input-quantity', changeDetection: ChangeDetectionStrategy.OnPush, template: "<tui-loader *ngIf=\"formControl\" class=\"w-full\" [overlay]=\"true\" [showLoader]=\"showLoader\" [size]=\"size\">\n <div class=\"flex items-center text-center gap-1\">\n <div class=\"field-with-button flex grow rounded-xl\">\n <button\n tuiIconButton\n tuiMode=\"onLight\"\n [appearance]=\"appearance\"\n [disabled]=\"!numberInput.canDecrement\"\n [focusable]=\"false\"\n [size]=\"size\"\n (click.prevent)=\"decrement()\"\n (mousedown.prevent)=\"numberInput.nativeFocusableElement?.focus()\"\n >\n <tui-svg src=\"scIconMinus\"></tui-svg>\n </button>\n <tui-input-number\n #numberInput\n [formControl]=\"formControl\"\n [tuiHint]=\"([] | tuiFieldError | async )?.message\"\n [tuiTextfieldPostfix]=\"quantityUnit || ''\"\n [tuiTextfieldLabelOutside]=\"true\"\n [min]=\"step\"\n [tuiTextfieldSize]=\"size\"\n [required]=\"true\"\n [style.text-align]=\"'center'\"\n [style.font-weight]=\"700\"\n class=\"grow\"\n >\n </tui-input-number>\n <button\n tuiIconButton\n tuiMode=\"onLight\"\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput.canIncrement\"\n [focusable]=\"false\"\n (click.prevent)=\"incident()\"\n (mousedown.prevent)=\"numberInput.nativeFocusableElement?.focus()\"\n >\n <tui-svg src=\"scIconPlus\"></tui-svg>\n </button>\n </div>\n <button\n *ngIf=\"showCross\"\n tuiIconButton\n tuiMode=\"onLight\"\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput.canIncrement\"\n [focusable]=\"false\"\n (click.prevent)=\"clear()\"\n (mousedown.prevent)=\"numberInput.nativeFocusableElement?.focus()\"\n >\n <tui-svg src=\"scIconCross\"></tui-svg>\n </button>\n </div>\n</tui-loader>\n", styles: [":host [data-size=l]{--tui-height-l: var(--tui-height-m);--tui-font-text-m: bold .875rem/1.25rem var(--tui-font-text);--tui-padding-l: 0}:host [data-size=m]{--tui-height-m: var(--tui-height-s);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-m: 0}:host [data-size=m] tui-svg{font-size:12px!important}:host [data-size=s]{--tui-height-s: var(--tui-height-xs);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-s: 0}:host [data-size=s] tui-svg{font-size:12px!important}:host[data-disabled=true]{pointer-events:none;opacity:var(--tui-disabled-opacity)}:host[data-appearance=secondary] .field-with-button{background-color:var(--tui-base-01);box-shadow:inset 0 0 0 .0625rem var(--tui-base-03)}:host[data-appearance=primary] .field-with-button{background-color:var(--tui-warning-bg)}:host .field-with-button:has(._invalid){background-color:var(--tui-error-bg)}\n"] }]
|
104
|
+
}], ctorParameters: function () { return [{ type: i4.NgControl, decorators: [{
|
105
|
+
type: Optional
|
106
|
+
}, {
|
107
|
+
type: Self
|
108
|
+
}, {
|
109
|
+
type: Inject,
|
110
|
+
args: [NgControl]
|
111
|
+
}] }, { type: i0.ChangeDetectorRef, decorators: [{
|
112
|
+
type: Inject,
|
113
|
+
args: [ChangeDetectorRef]
|
114
|
+
}] }, { type: i5.AbstractTuiValueTransformer, decorators: [{
|
115
|
+
type: Optional
|
116
|
+
}, {
|
117
|
+
type: Inject,
|
118
|
+
args: [TUI_NUMBER_VALUE_TRANSFORMER]
|
119
|
+
}] }]; }, propDecorators: { numberInput: [{
|
120
|
+
type: ViewChild,
|
121
|
+
args: [TuiInputNumberComponent]
|
122
|
+
}], step: [{
|
123
|
+
type: Input
|
124
|
+
}], quantityUnit: [{
|
125
|
+
type: Input
|
126
|
+
}], showLoader: [{
|
127
|
+
type: Input
|
128
|
+
}], showCross: [{
|
129
|
+
type: Input
|
130
|
+
}], appearance: [{
|
131
|
+
type: Input
|
132
|
+
}, {
|
133
|
+
type: HostBinding,
|
134
|
+
args: ['attr.data-appearance']
|
135
|
+
}], isDisabled: [{
|
136
|
+
type: Input
|
137
|
+
}, {
|
138
|
+
type: HostBinding,
|
139
|
+
args: ['attr.data-disabled']
|
140
|
+
}], size: [{
|
141
|
+
type: Input
|
142
|
+
}, {
|
143
|
+
type: HostBinding,
|
144
|
+
args: ['attr.data-size']
|
145
|
+
}], clickClearEvent: [{
|
146
|
+
type: Output
|
147
|
+
}], onArrow: [{
|
148
|
+
type: HostListener,
|
149
|
+
args: ['keydown.arrowDown', ['-step']]
|
150
|
+
}, {
|
151
|
+
type: HostListener,
|
152
|
+
args: ['keydown.arrowUp', ['step']]
|
153
|
+
}] } });
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvaW5wdXQtcXVhbnRpdHkvc2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvaW5wdXQtcXVhbnRpdHkvc2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBZSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3RGLE9BQU8sRUFBRSwwQkFBMEIsRUFBK0IsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFReEYsTUFBTSxPQUFPLHdCQUF5QixTQUFRLDBCQUFrQztJQTBENUU7Ozs7OztPQU1HO0lBQ0gsWUFJSSxTQUEyQixFQUUzQixHQUFzQixFQUd0QixXQUF1RDtRQUV2RCxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQXJFdkM7O1dBRUc7UUFFSSxTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBUXhCOztXQUVHO1FBRUksZUFBVSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7V0FFRztRQUVJLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFakM7O1dBRUc7UUFHSSxlQUFVLEdBQTRCLFNBQVMsQ0FBQztRQUV2RDs7V0FFRztRQUdJLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFbkM7O1dBRUc7UUFHSSxTQUFJLEdBQW1DLEdBQUcsQ0FBQztRQUVsRDs7V0FFRztRQUVJLG9CQUFlLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7SUFxQnRFLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQWtDLENBQUM7SUFDbkQsQ0FBQztJQUVELGtCQUFrQjtJQUNGLFFBQVE7UUFDcEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFHSSxPQUFPLENBQUMsSUFBbUI7UUFDOUIsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuQjthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3BCO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNSLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQzs7cUhBcklRLHdCQUF3QixrQkFvRXJCLFNBQVMseUNBRVQsaUJBQWlCLGFBR2pCLDRCQUE0Qjt5R0F6RS9CLHdCQUF3QiwwaUJBSXRCLHVCQUF1Qix1RUNoQ3RDLGl4RUF5REE7MkZEN0JhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDSSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTTs7MEJBb0UxQyxRQUFROzswQkFDUixJQUFJOzswQkFDSixNQUFNOzJCQUFDLFNBQVM7OzBCQUVoQixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBRXhCLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsNEJBQTRCOzRDQXBFdkIsV0FBVztzQkFEM0IsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBTzNCLElBQUk7c0JBRFYsS0FBSztnQkFPQyxZQUFZO3NCQURsQixLQUFLO2dCQU9DLFVBQVU7c0JBRGhCLEtBQUs7Z0JBT0MsU0FBUztzQkFEZixLQUFLO2dCQVFDLFVBQVU7c0JBRmhCLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsc0JBQXNCO2dCQVE1QixVQUFVO3NCQUZoQixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLG9CQUFvQjtnQkFRMUIsSUFBSTtzQkFGVixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGdCQUFnQjtnQkFPdEIsZUFBZTtzQkFEckIsTUFBTTtnQkE4Q0EsT0FBTztzQkFGYixZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsT0FBTyxDQUFDOztzQkFDM0MsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHN0ZXBWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL3N0ZXBWYWxpZGF0b3InO1xuaW1wb3J0IHsgVFVJX05VTUJFUl9WQUxVRV9UUkFOU0ZPUk1FUiwgVHVpSW5wdXROdW1iZXJDb21wb25lbnQgfSBmcm9tICdAdGFpZ2EtdWkva2l0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmltcG9ydCB7IFR1aUxvYWRlckNvbXBvbmVudCwgVHVpU2l6ZUwsIFR1aVNpemVNLCBUdWlTaXplUyB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0VHVpTnVsbGFibGVDb250cm9sLCBBYnN0cmFjdFR1aVZhbHVlVHJhbnNmb3JtZXIgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1pbnB1dC1xdWFudGl0eScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWlucHV0LXF1YW50aXR5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zYy1pbnB1dC1xdWFudGl0eS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0lucHV0UXVhbnRpdHlDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFR1aU51bGxhYmxlQ29udHJvbDxudW1iZXI+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQmtC+0LzQv9C+0L3QtdC90YIg0L/QvtC70Y8g0LLQstC+0LTQsC5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKFR1aUlucHV0TnVtYmVyQ29tcG9uZW50KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgbnVtYmVySW5wdXQ6IFR1aUlucHV0TnVtYmVyQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICog0KjQsNCzINGD0LLQtdC70LjRh9C10L3QuNGPINC60L7Qu9C40YfQtdGB0YLQstCwLiDQntGC0LLQtdGH0LDQtdGCINC30LAg0L/RgNC+0LLQtdGA0LrRgyDQutGA0LDRgtC90L7RgdGC0Lgg0LLQstC+0LTQsC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzdGVwOiBudW1iZXIgPSAxO1xuXG4gICAgLyoqXG4gICAgICog0JXQtNC40L3QuNGG0LAg0LjQt9C80LXRgNC10L3QuNGPINC60L7Qu9C40YfQtdGB0YLQstCwLiDQkdGD0LTQtdGCINGD0LrQsNC30LDQvdCwINCyINC/0L7RgdGC0YTQuNC60YHQtSDQv9C+0LvRjyDQstCy0L7QtNCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHF1YW50aXR5VW5pdD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LfQuNGC0Ywge0BsaW5rIFR1aUxvYWRlckNvbXBvbmVudH0g0L3QsNC0INC60L7QvNC/0L7QvdC10L3RgtC+0LwuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQutC90L7Qv9C60YMg0L7Rh9C40YHRgtC60Lgg0L/QvtC70Y8g0LLQstC+0LTQsC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93Q3Jvc3M6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog0KTQvtGA0LzQsNGCINCy0L3QtdGI0L3QtdCz0L4g0LLQuNC00LAg0LrQvtC80L/QvtC90LXQvdGC0LAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1hcHBlYXJhbmNlJylcbiAgICBwdWJsaWMgYXBwZWFyYW5jZTogJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgPSAncHJpbWFyeSc7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC60L7QvNC/0L7QvdC10L3RgiDQtNC10LDQutGC0LjQstC40YDQvtCy0LDQvS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWRpc2FibGVkJylcbiAgICBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog0KDQsNC30LzQtdGAINC60L7QvNC/0L7QvdC10L3RgtCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtc2l6ZScpXG4gICAgcHVibGljIHNpemU6IFR1aVNpemVMIHwgVHVpU2l6ZU0gfCBUdWlTaXplUyA9ICdtJztcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQvdC+0L/QutGDIFwi0J7Rh9C40YHRgtC40YLRjFwiLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0NsZWFyRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NJbnB1dFF1YW50aXR5Q29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZ0NvbnRyb2wg0J7QsdGK0LXQutGCINC/0L7Qu9GPINCy0LLQvtC00LAg0LTQu9GPINC90LDRgdGC0YDQvtC50LrQuCDQstCw0LvQuNC00LDRhtC40LguXG4gICAgICogQHBhcmFtIGNkciDQntCx0YrQtdC60YIg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQvtCx0L3QsNGA0YPQttC10L3QuNC10Lwg0LjQt9C80LXQvdC10L3QuNC5LlxuICAgICAqIEBwYXJhbSB0cmFuc2Zvcm1lciDQn9GA0LXQvtCx0YDQsNC30L7QstCw0YLQtdC70Ywg0LfQvdCw0YfQtdC90LjQuSDRjdC70LXQvNC10L3RgtCwINGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBAU2VsZigpXG4gICAgICAgIEBJbmplY3QoTmdDb250cm9sKVxuICAgICAgICBuZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGwsXG4gICAgICAgIEBJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpXG4gICAgICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoVFVJX05VTUJFUl9WQUxVRV9UUkFOU0ZPUk1FUilcbiAgICAgICAgdHJhbnNmb3JtZXI6IEFic3RyYWN0VHVpVmFsdWVUcmFuc2Zvcm1lcjxudW1iZXIgfCBudWxsPlxuICAgICkge1xuICAgICAgICBzdXBlcihuZ0NvbnRyb2wsIGNkciwgdHJhbnNmb3JtZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5udW1iZXJJbnB1dD8uZm9jdXNlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZvcm1Db250cm9sKCk6IEZvcm1Db250cm9sPGFueT4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbCBhcyBGb3JtQ29udHJvbDxhbnk+IHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKiogQGluaGVyaXREb2MgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWxpZGF0b3JzKHN0ZXBWYWxpZGF0b3IodGhpcy5zdGVwKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDRgdC+0LHRi9GC0LjRjyDQvdCw0LbQsNGC0LjRjyDRgdGC0YDQtdC70L7QuiDQutC70LDQstC40LDRgtGD0YDRiy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGVwINCo0LDQsyDQuNC30LzQtdC90LXQvdC40Y8g0LrQvtC70LjRh9C10YHRgtCy0LAuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd0Rvd24nLCBbJy1zdGVwJ10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd1VwJywgWydzdGVwJ10pXG4gICAgcHVibGljIG9uQXJyb3coc3RlcDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXN0ZXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGVwID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pbmNpZGVudCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LLQtdC70LjRh9C40LLQsNC10YIg0LfQvdCw0YfQtdC90LjQtSDQsiDQv9C+0LvQtSDQstCy0L7QtNCwINC90LAgMSDRiNCw0LMuINCV0YHQu9C4INGH0LjRgdC70L4g0LIg0L/QvtC70LUg0LLQstC+0LTQsCDQvdC1INC60YDQsNGC0L3QviDRiNCw0LPRgywg0YLQviDRg9Cy0LXQu9C40YfQuNGCINC00L4g0LHQu9C40LbQsNC50YjQtdCz0L4g0LrRgNCw0YLQvdC+0LPQviDQt9C90LDRh9C10L3QuNGPLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbmNpZGVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5udW1iZXJJbnB1dC5vbkFycm93KHRoaXMuc3RlcCAtICgodGhpcy5udW1iZXJJbnB1dC52YWx1ZSB8fCAwKSAlIHRoaXMuc3RlcCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LzQtdC90YzRiNCw0LXRgiDQt9C90LDRh9C10L3QuNC1INCyINC/0L7Qu9C1INCy0LLQvtC00LAg0L3QsCAxINGI0LDQsy4g0JXRgdC70Lgg0YfQuNGB0LvQviDQsiDQv9C+0LvQtSDQstCy0L7QtNCwINC90LUg0LrRgNCw0YLQvdC+INGI0LDQs9GDLCDRgtC+INGD0LzQtdC90YzRiNC40YIg0LTQviDQsdC70LjQttCw0LnRiNC10LPQviDQutGA0LDRgtC90L7Qs9C+INC30L3QsNGH0LXQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIGRlY3JlbWVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5udW1iZXJJbnB1dC5vbkFycm93KC0oKHRoaXMubnVtYmVySW5wdXQudmFsdWUgfHwgMCkgJSB0aGlzLnN0ZXApIHx8IC10aGlzLnN0ZXApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YfQuNGJ0LDQtdGCINC/0L7Qu9GPINCy0LLQvtC00LAuXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRyb2w/LnBhdGNoVmFsdWUobnVsbCk7XG4gICAgICAgIHRoaXMuY2xpY2tDbGVhckV2ZW50LmVtaXQoKTtcbiAgICB9XG59XG4iLCI8dHVpLWxvYWRlciAqbmdJZj1cImZvcm1Db250cm9sXCIgY2xhc3M9XCJ3LWZ1bGxcIiBbb3ZlcmxheV09XCJ0cnVlXCIgW3Nob3dMb2FkZXJdPVwic2hvd0xvYWRlclwiIFtzaXplXT1cInNpemVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXdpdGgtYnV0dG9uIGZsZXggZ3JvdyByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIHR1aU1vZGU9XCJvbkxpZ2h0XCJcbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW51bWJlcklucHV0LmNhbkRlY3JlbWVudFwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrLnByZXZlbnQpPVwiZGVjcmVtZW50KClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24ucHJldmVudCk9XCJudW1iZXJJbnB1dC5uYXRpdmVGb2N1c2FibGVFbGVtZW50Py5mb2N1cygpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dHVpLXN2ZyBzcmM9XCJzY0ljb25NaW51c1wiPjwvdHVpLXN2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPHR1aS1pbnB1dC1udW1iZXJcbiAgICAgICAgICAgICAgICAjbnVtYmVySW5wdXRcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIFt0dWlIaW50XT1cIihbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luYyApPy5tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbdHVpVGV4dGZpZWxkUG9zdGZpeF09XCJxdWFudGl0eVVuaXQgfHwgJydcIlxuICAgICAgICAgICAgICAgIFt0dWlUZXh0ZmllbGRMYWJlbE91dHNpZGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJzdGVwXCJcbiAgICAgICAgICAgICAgICBbdHVpVGV4dGZpZWxkU2l6ZV09XCJzaXplXCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiJ2NlbnRlcidcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LXdlaWdodF09XCI3MDBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3Jvd1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3R1aS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIHR1aU1vZGU9XCJvbkxpZ2h0XCJcbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJzaXplXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW51bWJlcklucHV0LmNhbkluY3JlbWVudFwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrLnByZXZlbnQpPVwiaW5jaWRlbnQoKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bi5wcmV2ZW50KT1cIm51bWJlcklucHV0Lm5hdGl2ZUZvY3VzYWJsZUVsZW1lbnQ/LmZvY3VzKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx0dWktc3ZnIHNyYz1cInNjSWNvblBsdXNcIj48L3R1aS1zdmc+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0Nyb3NzXCJcbiAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgIHR1aU1vZGU9XCJvbkxpZ2h0XCJcbiAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW51bWJlcklucHV0LmNhbkluY3JlbWVudFwiXG4gICAgICAgICAgICBbZm9jdXNhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgIChjbGljay5wcmV2ZW50KT1cImNsZWFyKClcIlxuICAgICAgICAgICAgKG1vdXNlZG93bi5wcmV2ZW50KT1cIm51bWJlcklucHV0Lm5hdGl2ZUZvY3VzYWJsZUVsZW1lbnQ/LmZvY3VzKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dHVpLXN2ZyBzcmM9XCJzY0ljb25Dcm9zc1wiPjwvdHVpLXN2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L3R1aS1sb2FkZXI+XG4iXX0=
|