ng-easycommerce-v18 0.2.11 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/esm2022/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.mjs +3 -3
- package/esm2022/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.mjs +14 -10
- package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +19 -3
- package/esm2022/lib/ec-components/product-detail-ec/product-detail-ec.component.mjs +5 -1
- package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +15 -4
- package/esm2022/lib/ec-components/widgets-ec/price-ec/price-ec.component.mjs +11 -3
- package/fesm2022/ng-easycommerce-v18.mjs +57 -17
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
- package/lib/ec-components/header-ec/header-ec.component.d.ts +6 -0
- package/lib/ec-components/product-detail-ec/product-detail-ec.component.d.ts +2 -0
- package/lib/ec-components/product-ec/product-ec.component.d.ts +7 -1
- package/lib/ec-components/widgets-ec/price-ec/price-ec.component.d.ts +4 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, inject, Input, Output, Injector } from '@angular/core';
|
|
2
2
|
import { CoreConstantsService } from '../../constants';
|
|
3
|
-
import { AnalyticsService } from '../../ec-services';
|
|
3
|
+
import { AnalyticsService, ChannelService, AuthService } from '../../ec-services';
|
|
4
4
|
import { Router, RouterLink } from '@angular/router';
|
|
5
5
|
import { CommonModule } from '@angular/common';
|
|
6
6
|
import { PriceEcComponent } from "../widgets-ec/price-ec/price-ec.component";
|
|
@@ -13,6 +13,7 @@ import * as i2 from "@ngx-translate/core";
|
|
|
13
13
|
* @class ProductEcComponent
|
|
14
14
|
*/
|
|
15
15
|
export class ProductEcComponent {
|
|
16
|
+
injector = inject(Injector);
|
|
16
17
|
/**
|
|
17
18
|
* Datos del producto.
|
|
18
19
|
*/
|
|
@@ -29,6 +30,16 @@ export class ProductEcComponent {
|
|
|
29
30
|
ngOnInit() {
|
|
30
31
|
this.loaded.emit(this.product.id);
|
|
31
32
|
}
|
|
33
|
+
showPricesOnlyToLoggedUsers = false;
|
|
34
|
+
hidePrices = false;
|
|
35
|
+
_authService = inject(AuthService);
|
|
36
|
+
isAuthenticated$ = this._authService.isAuthenticated();
|
|
37
|
+
constructor() {
|
|
38
|
+
this.injector.get(ChannelService).channel$.subscribe(channel => {
|
|
39
|
+
this.showPricesOnlyToLoggedUsers = !!channel.showPricesOnlyToLoggedUsers;
|
|
40
|
+
this.hidePrices = !!channel.hidePrices;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
32
43
|
consts = inject(CoreConstantsService);
|
|
33
44
|
analyticsService = inject(AnalyticsService);
|
|
34
45
|
router = inject(Router);
|
|
@@ -67,7 +78,7 @@ export class ProductEcComponent {
|
|
|
67
78
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductEcComponent, decorators: [{
|
|
68
79
|
type: Component,
|
|
69
80
|
args: [{ selector: 'app-product-ec', standalone: true, imports: [CommonModule, PriceEcComponent, RouterLink, TranslateModule], template: "<a [routerLink]=\"['/product', product.id]\" class=\"text-decoration-none producto\">\r\n <!-- Marca especial y descuento -->\r\n <!-- <div *ngIf=\"product.saleprice || (product.special_mark && product.special_mark !== null && product.special_mark !== undefined && product.special_mark.length >0)\"\r\n class=\"marcas\">\r\n <div *ecProductStock=\"product\" [ecProductMini]=\"product.special_mark\"></div>\r\n <ng-container *ngIf=\"shouldShowPrice\">\r\n <div *ecProductStock=\"product\" [ngClass]=\"{'tag-dsc float-right': product.saleprice}\"\r\n [ecProductOff]=\"product\">\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n\r\n <!-- Imagen del producto -->\r\n <div class=\"foto\">\r\n @if(product.picturesdefault){\r\n @if (product.picturesdefault && product.picturesdefault.length > 1 ) {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n <img [src]=\"mediaUrl + product.picturesdefault[1]\" alt=\"Imagen secundaria\" class=\"w-100 pic02\" />\r\n } @else {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n }\r\n }\r\n </div>\r\n <!-- Precio -->\r\n\r\n\r\n <!-- Nombre del producto -->\r\n <h6 class=\"title\">{{ product.name | titlecase }}</h6>\r\n\r\n <div class=\"sku\" [innerHTML]=\"product.shortdetails\"></div>\r\n\r\n @if (shouldShowPrice) {\r\n <app-price-ec [price]=\"product.price\" [saleprice]=\"product.saleprice\" class=\"\" />\r\n }\r\n\r\n <div class=\"fixBottom\">\r\n\r\n <!-- Bot\u00F3n de acciones -->\r\n <!-- <ng-container *ecProductStock=\"product; else noStock\"> -->\r\n <!-- Cuando no tiene marca especial o es de tipo 'standard' -->\r\n @if (!product.special_mark || product.special_mark.length === 0 || product.special_mark[0]?.type ===\r\n 'standard') {\r\n <button class=\"btn standard\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n <ng-container *ngIf=\"isCollection; else normalText\">\r\n <span> {{(\"buy\" | translate) | uppercase}} </span>\r\n </ng-container>\r\n <ng-template #normalText>\r\n {{(\"buy\" | translate) | uppercase}}\r\n </ng-template>\r\n </button>\r\n }@else {\r\n <!-- Caso 1: Agotado o Disponible muy pronto -->\r\n @if (product.special_mark[0]?.type === 'out_of_stock' || product.special_mark[0]?.type === 'coming_soon') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0].name | uppercase }} </span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n </button>}\r\n <!-- Caso 2: Contacto por WhatsApp -->\r\n @if (product.special_mark[0].type === 'whatsapp_contact') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\"\r\n (click)=\"openWhatsApp(product.special_mark[0]?.whatsappContact)\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0]?.name | uppercase }}</span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n\r\n </button>\r\n }\r\n <!-- Caso 3: Solicitar m\u00E1s informaci\u00F3n -->\r\n @if (product.special_mark[0]?.type === 'more_info') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0]?.name | uppercase }}</span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n</a>" }]
|
|
70
|
-
}], propDecorators: { product: [{
|
|
81
|
+
}], ctorParameters: () => [], propDecorators: { product: [{
|
|
71
82
|
type: Input,
|
|
72
83
|
args: [{
|
|
73
84
|
required: true
|
|
@@ -79,4 +90,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
79
90
|
}], isCollection: [{
|
|
80
91
|
type: Input
|
|
81
92
|
}] } });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9wcm9kdWN0LWVjL3Byb2R1Y3QtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1lYy9wcm9kdWN0LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUN0RDs7O0dBR0c7QUFRSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzlCOztPQUVHO0lBSUgsT0FBTyxDQUFXO0lBQ2xCOztPQUVHO0lBQ00sWUFBWSxHQUFXLElBQUksQ0FBQztJQUNyQzs7T0FFRztJQUNPLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRXJDLFlBQVksR0FBWSxLQUFLLENBQUM7SUFFdkMsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNPLE1BQU0sR0FBd0IsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDMUQsZ0JBQWdCLEdBQXFCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzdELE1BQU0sR0FBVSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdEM7O09BRUc7SUFDSSxRQUFRLEdBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMvQyxZQUFZLENBQUMsR0FBVztRQUNqQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7SUFDNUgsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbkYsQ0FBQztJQUVKLElBQUksa0JBQWtCO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUV4RSx1Q0FBdUM7UUFDdkMsSUFBSSxhQUFhLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksU0FBUyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3JFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxzRkFBc0Y7UUFDdEYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7UUFFckUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7d0dBNURRLGtCQUFrQjs0RkFBbEIsa0JBQWtCLHFNQ25CL0IsMDhIQW9GSSx5RERyRU8sWUFBWSwyVkFBRSxnQkFBZ0Isb1ZBQUUsVUFBVSxtT0FBRyxlQUFlOzs0RkFJMUQsa0JBQWtCO2tCQVA5QixTQUFTOytCQUNDLGdCQUFnQixjQUNkLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUcsZUFBZSxDQUFDOzhCQVd2RSxPQUFPO3NCQUhOLEtBQUs7dUJBQUM7d0JBQ04sUUFBUSxFQUFFLElBQUk7cUJBQ2Q7Z0JBS1EsWUFBWTtzQkFBcEIsS0FBSztnQkFJSSxNQUFNO3NCQUFmLE1BQU07Z0JBRUUsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcm9kdWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uLy4uL2VjLXNlcnZpY2VzJztcclxuaW1wb3J0IHsgUm91dGVyLCBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUHJpY2VFY0NvbXBvbmVudCB9IGZyb20gXCIuLi93aWRnZXRzLWVjL3ByaWNlLWVjL3ByaWNlLWVjLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuLyoqXHJcbiAqIENvbXBvbmVudGUgcXVlIHNlIGVuY2FyZ2EgZGUgbWFuZWphciB1biBwcm9kdWN0by5cclxuICogQGNsYXNzIFByb2R1Y3RFY0NvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdhcHAtcHJvZHVjdC1lYycsXHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBQcmljZUVjQ29tcG9uZW50LCBSb3V0ZXJMaW5rICwgVHJhbnNsYXRlTW9kdWxlXSxcclxuXHR0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1lYy5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmw6ICcuL3Byb2R1Y3QtZWMuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdC8qKlxyXG5cdCAqIERhdG9zIGRlbCBwcm9kdWN0by5cclxuXHQgKi9cclxuXHRASW5wdXQoe1xyXG5cdFx0cmVxdWlyZWQ6IHRydWVcclxuXHR9KVxyXG5cdHByb2R1Y3QhOiBQcm9kdWN0O1xyXG5cdC8qKlxyXG5cdCAqIFNlIHVzYSBwYXJhIHNhYmVyIHNpIGVsIHByb2R1Y3RvIGVzIGRlIHRpcG8gQm94IG8gbm8geSBkZWZpbmlyIGxhIHZpc3RhIGFkZWN1YWRhLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIGlzUHJvZHVjdEJveDpib29sZWFuID0gdHJ1ZTtcclxuXHQvKipcclxuXHQgKiBDb25zdGFudGVzIGRlbCBjb3JlXHJcblx0ICovXHJcblx0QE91dHB1dCgpIGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG5cclxuXHRASW5wdXQoKSBpc0NvbGxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0ICB0aGlzLmxvYWRlZC5lbWl0KHRoaXMucHJvZHVjdC5pZCk7XHJcblx0fVxyXG5cdHByaXZhdGUgY29uc3RzOkNvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKVxyXG5cdHByaXZhdGUgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKVxyXG5cdHByaXZhdGUgcm91dGVyOlJvdXRlciA9IGluamVjdChSb3V0ZXIpXHJcblx0LyoqXHJcblx0ICogVVJMIHBhcmEgbGFzIGltYWdlbmVzIGRlbCBwcm9kdWN0by5cclxuXHQgKi9cclxuXHRwdWJsaWMgbWVkaWFVcmw6c3RyaW5nID0gdGhpcy5jb25zdHMubWVkaWFVcmwoKVxyXG5cdG9wZW5XaGF0c0FwcCh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaG91bGRTaG93UHJpY2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnByb2R1Y3Q/LnNwZWNpYWxfbWFyayB8fCB0aGlzLnByb2R1Y3Quc3BlY2lhbF9tYXJrLmxlbmd0aCA9PT0gMCB8fCB0aGlzLnByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdPy5zaG93UHJpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGhhc0Rpc2NvdW50KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3Quc2FsZXByaWNlICYmIHRoaXMucHJvZHVjdC5zYWxlcHJpY2UgIT09IHRoaXMucHJvZHVjdC5wcmljZTtcclxuICAgIH1cclxuXHJcblx0Z2V0IGRpc2NvdW50UGVyY2VudGFnZSgpOiBudW1iZXIgfCBudWxsIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzRGlzY291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5hbFByaWNlID0gcGFyc2VGbG9hdCh0aGlzLnByb2R1Y3QucHJpY2U/LnRvU3RyaW5nKCkgfHwgJzAnKTtcclxuICAgICAgICBjb25zdCBzYWxlUHJpY2UgPSBwYXJzZUZsb2F0KHRoaXMucHJvZHVjdC5zYWxlcHJpY2U/LnRvU3RyaW5nKCkgfHwgJzAnKTtcclxuXHJcbiAgICAgICAgLy8gVmFsaWRhciBxdWUgbG9zIHByZWNpb3Mgc2VhbiB2w6FsaWRvc1xyXG4gICAgICAgIGlmIChvcmlnaW5hbFByaWNlIDw9IDAgfHwgc2FsZVByaWNlIDw9IDAgfHwgc2FsZVByaWNlID49IG9yaWdpbmFsUHJpY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhciBlbCBwb3JjZW50YWplOiAoKHByZWNpb19vcmlnaW5hbCAtIHByZWNpb19vZmVydGEpIC8gcHJlY2lvX29yaWdpbmFsKSAqIDEwMFxyXG4gICAgICAgIGNvbnN0IGRpc2NvdW50ID0gKChvcmlnaW5hbFByaWNlIC0gc2FsZVByaWNlKSAvIG9yaWdpbmFsUHJpY2UpICogMTAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGRpc2NvdW50KTtcclxuICAgIH1cclxufVxyXG4iLCI8YSBbcm91dGVyTGlua109XCJbJy9wcm9kdWN0JywgcHJvZHVjdC5pZF1cIiBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi1ub25lIHByb2R1Y3RvXCI+XHJcbiAgICA8IS0tIE1hcmNhIGVzcGVjaWFsIHkgZGVzY3VlbnRvIC0tPlxyXG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicHJvZHVjdC5zYWxlcHJpY2UgfHwgKHByb2R1Y3Quc3BlY2lhbF9tYXJrICYmIHByb2R1Y3Quc3BlY2lhbF9tYXJrICE9PSBudWxsICYmIHByb2R1Y3Quc3BlY2lhbF9tYXJrICE9PSB1bmRlZmluZWQgJiYgcHJvZHVjdC5zcGVjaWFsX21hcmsubGVuZ3RoID4wKVwiXHJcbiAgICAgICAgY2xhc3M9XCJtYXJjYXNcIj5cclxuICAgICAgICA8ZGl2ICplY1Byb2R1Y3RTdG9jaz1cInByb2R1Y3RcIiBbZWNQcm9kdWN0TWluaV09XCJwcm9kdWN0LnNwZWNpYWxfbWFya1wiPjwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG91bGRTaG93UHJpY2VcIj5cclxuICAgICAgICAgICAgPGRpdiAqZWNQcm9kdWN0U3RvY2s9XCJwcm9kdWN0XCIgW25nQ2xhc3NdPVwieyd0YWctZHNjIGZsb2F0LXJpZ2h0JzogcHJvZHVjdC5zYWxlcHJpY2V9XCJcclxuICAgICAgICAgICAgICAgIFtlY1Byb2R1Y3RPZmZdPVwicHJvZHVjdFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICA8IS0tIEltYWdlbiBkZWwgcHJvZHVjdG8gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm90b1wiPlxyXG4gICAgICAgIEBpZihwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdCl7XHJcbiAgICAgICAgQGlmIChwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdCAmJiBwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdC5sZW5ndGggPiAxICkge1xyXG4gICAgICAgIDxpbWcgW3NyY109XCJtZWRpYVVybCArIHByb2R1Y3QucGljdHVyZXNkZWZhdWx0WzBdXCIgYWx0PVwiSW1hZ2VuIHByaW5jaXBhbFwiIGNsYXNzPVwidy0xMDAgcGljMDFcIiAvPlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJtZWRpYVVybCArIHByb2R1Y3QucGljdHVyZXNkZWZhdWx0WzFdXCIgYWx0PVwiSW1hZ2VuIHNlY3VuZGFyaWFcIiBjbGFzcz1cInctMTAwIHBpYzAyXCIgLz5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8aW1nIFtzcmNdPVwibWVkaWFVcmwgKyBwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdFswXVwiIGFsdD1cIkltYWdlbiBwcmluY2lwYWxcIiBjbGFzcz1cInctMTAwIHBpYzAxXCIgLz5cclxuICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIFByZWNpbyAtLT5cclxuXHJcblxyXG4gICAgPCEtLSBOb21icmUgZGVsIHByb2R1Y3RvIC0tPlxyXG4gICAgPGg2IGNsYXNzPVwidGl0bGVcIj57eyBwcm9kdWN0Lm5hbWUgfCB0aXRsZWNhc2UgfX08L2g2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJza3VcIiBbaW5uZXJIVE1MXT1cInByb2R1Y3Quc2hvcnRkZXRhaWxzXCI+PC9kaXY+XHJcblxyXG4gICAgQGlmIChzaG91bGRTaG93UHJpY2UpIHtcclxuICAgIDxhcHAtcHJpY2UtZWMgW3ByaWNlXT1cInByb2R1Y3QucHJpY2VcIiBbc2FsZXByaWNlXT1cInByb2R1Y3Quc2FsZXByaWNlXCIgY2xhc3M9XCJcIiAvPlxyXG4gICAgfVxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmaXhCb3R0b21cIj5cclxuXHJcbiAgICAgICAgPCEtLSBCb3TDs24gZGUgYWNjaW9uZXMgLS0+XHJcbiAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICplY1Byb2R1Y3RTdG9jaz1cInByb2R1Y3Q7IGVsc2Ugbm9TdG9ja1wiPiAtLT5cclxuICAgICAgICA8IS0tIEN1YW5kbyBubyB0aWVuZSBtYXJjYSBlc3BlY2lhbCBvIGVzIGRlIHRpcG8gJ3N0YW5kYXJkJyAtLT5cclxuICAgICAgICBAaWYgKCFwcm9kdWN0LnNwZWNpYWxfbWFyayB8fCBwcm9kdWN0LnNwZWNpYWxfbWFyay5sZW5ndGggPT09IDAgfHwgcHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/LnR5cGUgPT09XHJcbiAgICAgICAgJ3N0YW5kYXJkJykge1xyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gc3RhbmRhcmRcIiBbbmdDbGFzc109XCJpc0NvbGxlY3Rpb24gPyAncHgtMiB3LTEwMCBkLXNtLWJsb2NrJyA6ICdweS0yIHB4LTQnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NvbGxlY3Rpb247IGVsc2Ugbm9ybWFsVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+IHt7KFwiYnV5XCIgfCB0cmFuc2xhdGUpIHwgdXBwZXJjYXNlfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxUZXh0PlxyXG4gICAgICAgICAgICAgICAge3soXCJidXlcIiB8IHRyYW5zbGF0ZSkgfCB1cHBlcmNhc2V9fVxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgPCEtLSBDYXNvIDE6IEFnb3RhZG8gbyBEaXNwb25pYmxlIG11eSBwcm9udG8gLS0+XHJcbiAgICAgICAgQGlmIChwcm9kdWN0LnNwZWNpYWxfbWFya1swXT8udHlwZSA9PT0gJ291dF9vZl9zdG9jaycgfHwgcHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/LnR5cGUgPT09ICdjb21pbmdfc29vbicpIHtcclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgW25nQ2xhc3NdPVwiaXNDb2xsZWN0aW9uID8gJ3B4LTIgdy0xMDAgZC1zbS1ibG9jaycgOiAncHktMiBweC00J1wiPlxyXG4gICAgICAgICAgICBAaWYoaXNDb2xsZWN0aW9uKXtcclxuICAgICAgICAgICAgPHNwYW4+e3sgcHJvZHVjdC5zcGVjaWFsX21hcmtbMF0ubmFtZSB8IHVwcGVyY2FzZSB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgIHt7IHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdPy5uYW1lIHwgdXBwZXJjYXNlIH19XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2J1dHRvbj59XHJcbiAgICAgICAgPCEtLSBDYXNvIDI6IENvbnRhY3RvIHBvciBXaGF0c0FwcCAtLT5cclxuICAgICAgICBAaWYgKHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdLnR5cGUgPT09ICd3aGF0c2FwcF9jb250YWN0Jykge1xyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiBbbmdDbGFzc109XCJpc0NvbGxlY3Rpb24gPyAncHgtMiB3LTEwMCBkLXNtLWJsb2NrJyA6ICdweS0yIHB4LTQnXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5XaGF0c0FwcChwcm9kdWN0LnNwZWNpYWxfbWFya1swXT8ud2hhdHNhcHBDb250YWN0KVwiPlxyXG4gICAgICAgICAgICBAaWYoaXNDb2xsZWN0aW9uKXtcclxuICAgICAgICAgICAgPHNwYW4+e3sgcHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/Lm5hbWUgfCB1cHBlcmNhc2UgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgIHt7IHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdPy5uYW1lIHwgdXBwZXJjYXNlIH19XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDwhLS0gQ2FzbyAzOiBTb2xpY2l0YXIgbcOhcyBpbmZvcm1hY2nDs24gLS0+XHJcbiAgICAgICAgQGlmIChwcm9kdWN0LnNwZWNpYWxfbWFya1swXT8udHlwZSA9PT0gJ21vcmVfaW5mbycpIHtcclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgW25nQ2xhc3NdPVwiaXNDb2xsZWN0aW9uID8gJ3B4LTIgdy0xMDAgZC1zbS1ibG9jaycgOiAncHktMiBweC00J1wiPlxyXG4gICAgICAgICAgICBAaWYoaXNDb2xsZWN0aW9uKXtcclxuICAgICAgICAgICAgPHNwYW4+e3sgcHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/Lm5hbWUgfCB1cHBlcmNhc2UgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgIHt7IHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdPy5uYW1lIHwgdXBwZXJjYXNlIH19XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuPC9hPiJdfQ==
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9wcm9kdWN0LWVjL3Byb2R1Y3QtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcHJvZHVjdC1lYy9wcm9kdWN0LWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUN0RDs7O0dBR0c7QUFRSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3ZCLFFBQVEsR0FBYSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFN0M7O09BRUc7SUFJSCxPQUFPLENBQVc7SUFDbEI7O09BRUc7SUFDTSxZQUFZLEdBQVksSUFBSSxDQUFDO0lBQ3RDOztPQUVHO0lBQ08sTUFBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFFckMsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUV2QyxRQUFRO1FBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVuQyxDQUFDO0lBQ00sMkJBQTJCLEdBQVksS0FBSyxDQUFDO0lBQzdDLFVBQVUsR0FBWSxLQUFLLENBQUM7SUFFM0IsWUFBWSxHQUFnQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDaEQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM5RDtRQUNDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUQsSUFBSSxDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUM7WUFDekUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFDTyxNQUFNLEdBQXlCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQzNELGdCQUFnQixHQUFxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUM3RCxNQUFNLEdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZDOztPQUVHO0lBQ0ksUUFBUSxHQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDaEQsWUFBWSxDQUFDLEdBQVc7UUFDdkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDRixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUN6SCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNoRixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7UUFDeEUsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRXhFLHVDQUF1QztRQUN2QyxJQUFJLGFBQWEsSUFBSSxDQUFDLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxTQUFTLElBQUksYUFBYSxFQUFFLENBQUM7WUFDeEUsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBRUQsc0ZBQXNGO1FBQ3RGLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRXJFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO3dHQTFFVyxrQkFBa0I7NEZBQWxCLGtCQUFrQixxTUNuQi9CLDA4SEFvRkkseUREckVPLFlBQVksMlZBQUUsZ0JBQWdCLG9WQUFFLFVBQVUsbU9BQUUsZUFBZTs7NEZBSXpELGtCQUFrQjtrQkFQOUIsU0FBUzsrQkFDQyxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQzt3REFhdEUsT0FBTztzQkFITixLQUFLO3VCQUFDO3dCQUNOLFFBQVEsRUFBRSxJQUFJO3FCQUNkO2dCQUtRLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUksTUFBTTtzQkFBZixNQUFNO2dCQUVFLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2R1Y3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlLCBDaGFubmVsU2VydmljZSwgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFByaWNlRWNDb21wb25lbnQgfSBmcm9tIFwiLi4vd2lkZ2V0cy1lYy9wcmljZS1lYy9wcmljZS1lYy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIHF1ZSBzZSBlbmNhcmdhIGRlIG1hbmVqYXIgdW4gcHJvZHVjdG8uXHJcbiAqIEBjbGFzcyBQcm9kdWN0RWNDb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLXByb2R1Y3QtZWMnLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUHJpY2VFY0NvbXBvbmVudCwgUm91dGVyTGluaywgVHJhbnNsYXRlTW9kdWxlXSxcclxuXHR0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1lYy5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmw6ICcuL3Byb2R1Y3QtZWMuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdHB1YmxpYyBpbmplY3RvcjogSW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xyXG5cclxuXHQvKipcclxuXHQgKiBEYXRvcyBkZWwgcHJvZHVjdG8uXHJcblx0ICovXHJcblx0QElucHV0KHtcclxuXHRcdHJlcXVpcmVkOiB0cnVlXHJcblx0fSlcclxuXHRwcm9kdWN0ITogUHJvZHVjdDtcclxuXHQvKipcclxuXHQgKiBTZSB1c2EgcGFyYSBzYWJlciBzaSBlbCBwcm9kdWN0byBlcyBkZSB0aXBvIEJveCBvIG5vIHkgZGVmaW5pciBsYSB2aXN0YSBhZGVjdWFkYS5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBpc1Byb2R1Y3RCb3g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdC8qKlxyXG5cdCAqIENvbnN0YW50ZXMgZGVsIGNvcmVcclxuXHQgKi9cclxuXHRAT3V0cHV0KCkgbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG5cdEBJbnB1dCgpIGlzQ29sbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMubG9hZGVkLmVtaXQodGhpcy5wcm9kdWN0LmlkKTtcclxuXHJcblx0fVxyXG5cdHB1YmxpYyBzaG93UHJpY2VzT25seVRvTG9nZ2VkVXNlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwdWJsaWMgaGlkZVByaWNlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpXHJcblx0cHVibGljIGlzQXV0aGVudGljYXRlZCQgPSB0aGlzLl9hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5uZWxTZXJ2aWNlKS5jaGFubmVsJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XHJcblx0XHRcdHRoaXMuc2hvd1ByaWNlc09ubHlUb0xvZ2dlZFVzZXJzID0gISFjaGFubmVsLnNob3dQcmljZXNPbmx5VG9Mb2dnZWRVc2VycztcclxuXHRcdFx0dGhpcy5oaWRlUHJpY2VzID0gISFjaGFubmVsLmhpZGVQcmljZXM7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjb25zdHM6IENvcmVDb25zdGFudHNTZXJ2aWNlID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKVxyXG5cdHByaXZhdGUgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKVxyXG5cdHByaXZhdGUgcm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKVxyXG5cdC8qKlxyXG5cdCAqIFVSTCBwYXJhIGxhcyBpbWFnZW5lcyBkZWwgcHJvZHVjdG8uXHJcblx0ICovXHJcblx0cHVibGljIG1lZGlhVXJsOiBzdHJpbmcgPSB0aGlzLmNvbnN0cy5tZWRpYVVybCgpXHJcblx0b3BlbldoYXRzQXBwKHVybDogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRpZiAodXJsKSB7XHJcblx0XHRcdHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0IHNob3VsZFNob3dQcmljZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAhdGhpcy5wcm9kdWN0Py5zcGVjaWFsX21hcmsgfHwgdGhpcy5wcm9kdWN0LnNwZWNpYWxfbWFyay5sZW5ndGggPT09IDAgfHwgdGhpcy5wcm9kdWN0LnNwZWNpYWxfbWFya1swXT8uc2hvd1ByaWNlO1xyXG5cdH1cclxuXHJcblx0Z2V0IGhhc0Rpc2NvdW50KCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvZHVjdC5zYWxlcHJpY2UgJiYgdGhpcy5wcm9kdWN0LnNhbGVwcmljZSAhPT0gdGhpcy5wcm9kdWN0LnByaWNlO1xyXG5cdH1cclxuXHJcblx0Z2V0IGRpc2NvdW50UGVyY2VudGFnZSgpOiBudW1iZXIgfCBudWxsIHtcclxuXHRcdGlmICghdGhpcy5oYXNEaXNjb3VudCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBvcmlnaW5hbFByaWNlID0gcGFyc2VGbG9hdCh0aGlzLnByb2R1Y3QucHJpY2U/LnRvU3RyaW5nKCkgfHwgJzAnKTtcclxuXHRcdGNvbnN0IHNhbGVQcmljZSA9IHBhcnNlRmxvYXQodGhpcy5wcm9kdWN0LnNhbGVwcmljZT8udG9TdHJpbmcoKSB8fCAnMCcpO1xyXG5cclxuXHRcdC8vIFZhbGlkYXIgcXVlIGxvcyBwcmVjaW9zIHNlYW4gdsOhbGlkb3NcclxuXHRcdGlmIChvcmlnaW5hbFByaWNlIDw9IDAgfHwgc2FsZVByaWNlIDw9IDAgfHwgc2FsZVByaWNlID49IG9yaWdpbmFsUHJpY2UpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FsY3VsYXIgZWwgcG9yY2VudGFqZTogKChwcmVjaW9fb3JpZ2luYWwgLSBwcmVjaW9fb2ZlcnRhKSAvIHByZWNpb19vcmlnaW5hbCkgKiAxMDBcclxuXHRcdGNvbnN0IGRpc2NvdW50ID0gKChvcmlnaW5hbFByaWNlIC0gc2FsZVByaWNlKSAvIG9yaWdpbmFsUHJpY2UpICogMTAwO1xyXG5cclxuXHRcdHJldHVybiBNYXRoLnJvdW5kKGRpc2NvdW50KTtcclxuXHR9XHJcbn1cclxuIiwiPGEgW3JvdXRlckxpbmtdPVwiWycvcHJvZHVjdCcsIHByb2R1Y3QuaWRdXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSBwcm9kdWN0b1wiPlxyXG4gICAgPCEtLSBNYXJjYSBlc3BlY2lhbCB5IGRlc2N1ZW50byAtLT5cclxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInByb2R1Y3Quc2FsZXByaWNlIHx8IChwcm9kdWN0LnNwZWNpYWxfbWFyayAmJiBwcm9kdWN0LnNwZWNpYWxfbWFyayAhPT0gbnVsbCAmJiBwcm9kdWN0LnNwZWNpYWxfbWFyayAhPT0gdW5kZWZpbmVkICYmIHByb2R1Y3Quc3BlY2lhbF9tYXJrLmxlbmd0aCA+MClcIlxyXG4gICAgICAgIGNsYXNzPVwibWFyY2FzXCI+XHJcbiAgICAgICAgPGRpdiAqZWNQcm9kdWN0U3RvY2s9XCJwcm9kdWN0XCIgW2VjUHJvZHVjdE1pbmldPVwicHJvZHVjdC5zcGVjaWFsX21hcmtcIj48L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvdWxkU2hvd1ByaWNlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKmVjUHJvZHVjdFN0b2NrPVwicHJvZHVjdFwiIFtuZ0NsYXNzXT1cInsndGFnLWRzYyBmbG9hdC1yaWdodCc6IHByb2R1Y3Quc2FsZXByaWNlfVwiXHJcbiAgICAgICAgICAgICAgICBbZWNQcm9kdWN0T2ZmXT1cInByb2R1Y3RcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgPCEtLSBJbWFnZW4gZGVsIHByb2R1Y3RvIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvdG9cIj5cclxuICAgICAgICBAaWYocHJvZHVjdC5waWN0dXJlc2RlZmF1bHQpe1xyXG4gICAgICAgIEBpZiAocHJvZHVjdC5waWN0dXJlc2RlZmF1bHQgJiYgcHJvZHVjdC5waWN0dXJlc2RlZmF1bHQubGVuZ3RoID4gMSApIHtcclxuICAgICAgICA8aW1nIFtzcmNdPVwibWVkaWFVcmwgKyBwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdFswXVwiIGFsdD1cIkltYWdlbiBwcmluY2lwYWxcIiBjbGFzcz1cInctMTAwIHBpYzAxXCIgLz5cclxuICAgICAgICA8aW1nIFtzcmNdPVwibWVkaWFVcmwgKyBwcm9kdWN0LnBpY3R1cmVzZGVmYXVsdFsxXVwiIGFsdD1cIkltYWdlbiBzZWN1bmRhcmlhXCIgY2xhc3M9XCJ3LTEwMCBwaWMwMlwiIC8+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPGltZyBbc3JjXT1cIm1lZGlhVXJsICsgcHJvZHVjdC5waWN0dXJlc2RlZmF1bHRbMF1cIiBhbHQ9XCJJbWFnZW4gcHJpbmNpcGFsXCIgY2xhc3M9XCJ3LTEwMCBwaWMwMVwiIC8+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBQcmVjaW8gLS0+XHJcblxyXG5cclxuICAgIDwhLS0gTm9tYnJlIGRlbCBwcm9kdWN0byAtLT5cclxuICAgIDxoNiBjbGFzcz1cInRpdGxlXCI+e3sgcHJvZHVjdC5uYW1lIHwgdGl0bGVjYXNlIH19PC9oNj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwic2t1XCIgW2lubmVySFRNTF09XCJwcm9kdWN0LnNob3J0ZGV0YWlsc1wiPjwvZGl2PlxyXG5cclxuICAgIEBpZiAoc2hvdWxkU2hvd1ByaWNlKSB7XHJcbiAgICA8YXBwLXByaWNlLWVjIFtwcmljZV09XCJwcm9kdWN0LnByaWNlXCIgW3NhbGVwcmljZV09XCJwcm9kdWN0LnNhbGVwcmljZVwiIGNsYXNzPVwiXCIgLz5cclxuICAgIH1cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZml4Qm90dG9tXCI+XHJcblxyXG4gICAgICAgIDwhLS0gQm90w7NuIGRlIGFjY2lvbmVzIC0tPlxyXG4gICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqZWNQcm9kdWN0U3RvY2s9XCJwcm9kdWN0OyBlbHNlIG5vU3RvY2tcIj4gLS0+XHJcbiAgICAgICAgPCEtLSBDdWFuZG8gbm8gdGllbmUgbWFyY2EgZXNwZWNpYWwgbyBlcyBkZSB0aXBvICdzdGFuZGFyZCcgLS0+XHJcbiAgICAgICAgQGlmICghcHJvZHVjdC5zcGVjaWFsX21hcmsgfHwgcHJvZHVjdC5zcGVjaWFsX21hcmsubGVuZ3RoID09PSAwIHx8IHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdPy50eXBlID09PVxyXG4gICAgICAgICdzdGFuZGFyZCcpIHtcclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHN0YW5kYXJkXCIgW25nQ2xhc3NdPVwiaXNDb2xsZWN0aW9uID8gJ3B4LTIgdy0xMDAgZC1zbS1ibG9jaycgOiAncHktMiBweC00J1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDb2xsZWN0aW9uOyBlbHNlIG5vcm1hbFRleHRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPiB7eyhcImJ1eVwiIHwgdHJhbnNsYXRlKSB8IHVwcGVyY2FzZX19IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsVGV4dD5cclxuICAgICAgICAgICAgICAgIHt7KFwiYnV5XCIgfCB0cmFuc2xhdGUpIHwgdXBwZXJjYXNlfX1cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgIDwhLS0gQ2FzbyAxOiBBZ290YWRvIG8gRGlzcG9uaWJsZSBtdXkgcHJvbnRvIC0tPlxyXG4gICAgICAgIEBpZiAocHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/LnR5cGUgPT09ICdvdXRfb2Zfc3RvY2snIHx8IHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdPy50eXBlID09PSAnY29taW5nX3Nvb24nKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIFtuZ0NsYXNzXT1cImlzQ29sbGVjdGlvbiA/ICdweC0yIHctMTAwIGQtc20tYmxvY2snIDogJ3B5LTIgcHgtNCdcIj5cclxuICAgICAgICAgICAgQGlmKGlzQ29sbGVjdGlvbil7XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdLm5hbWUgfCB1cHBlcmNhc2UgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICB7eyBwcm9kdWN0LnNwZWNpYWxfbWFya1swXT8ubmFtZSB8IHVwcGVyY2FzZSB9fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9idXR0b24+fVxyXG4gICAgICAgIDwhLS0gQ2FzbyAyOiBDb250YWN0byBwb3IgV2hhdHNBcHAgLS0+XHJcbiAgICAgICAgQGlmIChwcm9kdWN0LnNwZWNpYWxfbWFya1swXS50eXBlID09PSAnd2hhdHNhcHBfY29udGFjdCcpIHtcclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgW25nQ2xhc3NdPVwiaXNDb2xsZWN0aW9uID8gJ3B4LTIgdy0xMDAgZC1zbS1ibG9jaycgOiAncHktMiBweC00J1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuV2hhdHNBcHAocHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/LndoYXRzYXBwQ29udGFjdClcIj5cclxuICAgICAgICAgICAgQGlmKGlzQ29sbGVjdGlvbil7XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdPy5uYW1lIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICB7eyBwcm9kdWN0LnNwZWNpYWxfbWFya1swXT8ubmFtZSB8IHVwcGVyY2FzZSB9fVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8IS0tIENhc28gMzogU29saWNpdGFyIG3DoXMgaW5mb3JtYWNpw7NuIC0tPlxyXG4gICAgICAgIEBpZiAocHJvZHVjdC5zcGVjaWFsX21hcmtbMF0/LnR5cGUgPT09ICdtb3JlX2luZm8nKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIFtuZ0NsYXNzXT1cImlzQ29sbGVjdGlvbiA/ICdweC0yIHctMTAwIGQtc20tYmxvY2snIDogJ3B5LTIgcHgtNCdcIj5cclxuICAgICAgICAgICAgQGlmKGlzQ29sbGVjdGlvbil7XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHByb2R1Y3Quc3BlY2lhbF9tYXJrWzBdPy5uYW1lIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICB7eyBwcm9kdWN0LnNwZWNpYWxfbWFya1swXT8ubmFtZSB8IHVwcGVyY2FzZSB9fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbjwvYT4iXX0=
|
|
@@ -3,6 +3,7 @@ import { EcCurrencySymbolPipe } from "../../../ec-pipe/ec-currency-symbol.pipe";
|
|
|
3
3
|
import { ChannelService } from '../../../ec-services';
|
|
4
4
|
import { TranslateModule } from '@ngx-translate/core';
|
|
5
5
|
import { CommonModule } from '@angular/common';
|
|
6
|
+
import { AuthService } from '../../../ec-services';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "@angular/common";
|
|
8
9
|
import * as i2 from "@ngx-translate/core";
|
|
@@ -28,13 +29,20 @@ export class PriceEcComponent {
|
|
|
28
29
|
customTaxTemplate = null;
|
|
29
30
|
customOnlyTaxLabelTemplate = null;
|
|
30
31
|
_channelService = inject(ChannelService);
|
|
32
|
+
_authService = inject(AuthService);
|
|
31
33
|
showTaxLegend = false;
|
|
32
34
|
hideTaxes = false;
|
|
35
|
+
showPricesOnlyToLoggedUsers = false;
|
|
36
|
+
logged = false;
|
|
37
|
+
hidePrices = false;
|
|
33
38
|
ngOnInit() {
|
|
34
39
|
this._channelService.channel$.subscribe(cfg => {
|
|
35
40
|
this.showTaxLegend = !!cfg.showTaxLegend;
|
|
36
41
|
this.hideTaxes = !!cfg.hideTaxes;
|
|
42
|
+
this.showPricesOnlyToLoggedUsers = !!cfg.showPricesOnlyToLoggedUsers;
|
|
43
|
+
this.hidePrices = !!cfg.hidePrices;
|
|
37
44
|
});
|
|
45
|
+
this.logged = this._authService.isAuthenticated();
|
|
38
46
|
}
|
|
39
47
|
/** Determina si mostrar la sección de impuestos */
|
|
40
48
|
get shouldShowTaxes() {
|
|
@@ -53,11 +61,11 @@ export class PriceEcComponent {
|
|
|
53
61
|
return !!value && value.split(' - ').length === 2;
|
|
54
62
|
}
|
|
55
63
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PriceEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
56
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
64
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PriceEcComponent, isStandalone: true, selector: "app-price-ec", inputs: { price: "price", saleprice: "saleprice", basePrice: "basePrice", taxeAmount: "taxeAmount", taxes: "taxes", priceSize: "priceSize", showTaxLegendOnly: "showTaxLegendOnly", disableTaxInfo: "disableTaxInfo", customPriceTemplate: "customPriceTemplate", customSalePriceTemplate: "customSalePriceTemplate", customSimplePriceTemplate: "customSimplePriceTemplate", customSimpleSalePriceTemplate: "customSimpleSalePriceTemplate", customTaxTemplate: "customTaxTemplate", customOnlyTaxLabelTemplate: "customOnlyTaxLabelTemplate" }, ngImport: i0, template: "@if (!showPricesOnlyToLoggedUsers || logged) {\r\n<ng-container *ngIf=\"customSalePriceTemplate || customPriceTemplate; else defaultPriceBlock\">\r\n <ng-container *ngTemplateOutlet=\"customSalePriceTemplate || customPriceTemplate\">\r\n </ng-container>\r\n</ng-container>\r\n\r\n<ng-template #defaultPriceBlock>\r\n <div class=\"price\">\r\n <!-- Con precio de oferta -->\r\n <div *ngIf=\"saleprice; else onlyPriceBlock\" class=\"line-height-custom\">\r\n\r\n <!-- Precio original como rango o tachado simple -->\r\n <div *ngIf=\"hasRange(price); else simplePriceDel\" class=\"price-whithSaleprice\">\r\n <del class=\"\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </del>\r\n </div>\r\n\r\n <!-- Oferta como rango o simple -->\r\n <div *ngIf=\"hasRange(saleprice); else simpleSalePrice\" class=\"\">\r\n {{\r\n saleprice!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n saleprice!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00F3lo precio sin oferta -->\r\n <ng-template #onlyPriceBlock>\r\n <div *ngIf=\"hasRange(price); else simplePrice\" class=\"price-onlyPrice\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }} -\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price -->\r\n <ng-template #simplePrice>\r\n <ng-container *ngIf=\"customSimplePriceTemplate; else fallbackSimplePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimplePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimplePrice>\r\n <del> </del>\r\n <div class=\"price-simplePrice\">\r\n {{ price | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price-del -->\r\n <ng-template #simplePriceDel>\r\n <div class=\"price-simpleDel\">\r\n <del class=\"\">{{ price | ecCurrencySymbol }}</del>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple saleprice -->\r\n <ng-template #simpleSalePrice>\r\n <ng-container *ngIf=\"customSimpleSalePriceTemplate; else fallbackSimpleSalePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimpleSalePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimpleSalePrice>\r\n <div class=\"price-simpleSaleprice\">\r\n {{ saleprice | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Secci\u00F3n de impuestos -->\r\n<ng-container *ngIf=\"shouldShowTaxes\">\r\n <!-- S\u00F3lo leyenda -->\r\n <ng-container *ngIf=\"showTaxLegendOnly; else detailedTaxBlock\">\r\n <ng-container *ngIf=\"customOnlyTaxLabelTemplate; else defaultOnlyTaxLabel\">\r\n <ng-container *ngTemplateOutlet=\"customOnlyTaxLabelTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-template #defaultOnlyTaxLabel>\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- Detalle impuestos -->\r\n <ng-template #detailedTaxBlock>\r\n <ng-container *ngIf=\"customTaxTemplate; else defaultTaxBlock\">\r\n <ng-container *ngTemplateOutlet=\"customTaxTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n\r\n<ng-template #defaultTaxBlock>\r\n <div class=\"taxes-section\">\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n <ul class=\"taxes-list\">\r\n <li>\r\n {{ taxes.Name }}: {{ taxeAmount | ecCurrencySymbol }}\r\n </li>\r\n </ul>\r\n </div>\r\n</ng-template>\r\n}", styles: [".price-sm{font-size:13px}.price{font-size:18px}.line-height-custom{line-height:1.2}.lnth{text-decoration:line-through;color:gray}.taxes-section{margin-top:.5rem;border-radius:.5rem;font-size:.95rem;color:#333;line-height:1.4;max-width:400px}.taxes-title{font-weight:500;margin-bottom:.2rem;font-size:.7rem;color:#222}.taxes-list{list-style:none;padding:0;margin:0}.taxes-list li{display:flex;justify-content:space-between;margin-bottom:.1rem;font-size:.65rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: EcCurrencySymbolPipe, name: "ecCurrencySymbol" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
57
65
|
}
|
|
58
66
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PriceEcComponent, decorators: [{
|
|
59
67
|
type: Component,
|
|
60
|
-
args: [{ selector: 'app-price-ec', standalone: true, imports: [CommonModule, EcCurrencySymbolPipe, TranslateModule], template: "<ng-container *ngIf=\"customSalePriceTemplate || customPriceTemplate; else defaultPriceBlock\">\r\n <ng-container *ngTemplateOutlet=\"customSalePriceTemplate || customPriceTemplate\">\r\n </ng-container>\r\n</ng-container>\r\n\r\n<ng-template #defaultPriceBlock>\r\n <div class=\"price\">\r\n <!-- Con precio de oferta -->\r\n <div *ngIf=\"saleprice; else onlyPriceBlock\" class=\"line-height-custom\">\r\n\r\n <!-- Precio original como rango o tachado simple -->\r\n <div *ngIf=\"hasRange(price); else simplePriceDel\" class=\"price-whithSaleprice\">\r\n <del class=\"\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </del>\r\n </div>\r\n\r\n <!-- Oferta como rango o simple -->\r\n <div *ngIf=\"hasRange(saleprice); else simpleSalePrice\" class=\"\">\r\n {{\r\n saleprice!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n saleprice!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00F3lo precio sin oferta -->\r\n <ng-template #onlyPriceBlock>\r\n <div *ngIf=\"hasRange(price); else simplePrice\" class=\"price-onlyPrice\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }} -\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price -->\r\n <ng-template #simplePrice>\r\n <ng-container *ngIf=\"customSimplePriceTemplate; else fallbackSimplePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimplePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimplePrice>\r\n <del> </del>\r\n <div class=\"price-simplePrice\">\r\n {{ price | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price-del -->\r\n <ng-template #simplePriceDel>\r\n <div class=\"price-simpleDel\">\r\n <del class=\"\">{{ price | ecCurrencySymbol }}</del>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple saleprice -->\r\n <ng-template #simpleSalePrice>\r\n <ng-container *ngIf=\"customSimpleSalePriceTemplate; else fallbackSimpleSalePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimpleSalePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimpleSalePrice>\r\n <div class=\"price-simpleSaleprice\">\r\n {{ saleprice | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Secci\u00F3n de impuestos -->\r\n<ng-container *ngIf=\"shouldShowTaxes\">\r\n <!-- S\u00F3lo leyenda -->\r\n <ng-container *ngIf=\"showTaxLegendOnly; else detailedTaxBlock\">\r\n <ng-container *ngIf=\"customOnlyTaxLabelTemplate; else defaultOnlyTaxLabel\">\r\n <ng-container *ngTemplateOutlet=\"customOnlyTaxLabelTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-template #defaultOnlyTaxLabel>\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- Detalle impuestos -->\r\n <ng-template #detailedTaxBlock>\r\n <ng-container *ngIf=\"customTaxTemplate; else defaultTaxBlock\">\r\n <ng-container *ngTemplateOutlet=\"customTaxTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n\r\n<ng-template #defaultTaxBlock>\r\n <div class=\"taxes-section\">\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n <ul class=\"taxes-list\">\r\n <li>\r\n {{ taxes.Name }}: {{ taxeAmount | ecCurrencySymbol }}\r\n </li>\r\n </ul>\r\n </div>\r\n</ng-template
|
|
68
|
+
args: [{ selector: 'app-price-ec', standalone: true, imports: [CommonModule, EcCurrencySymbolPipe, TranslateModule], template: "@if (!showPricesOnlyToLoggedUsers || logged) {\r\n<ng-container *ngIf=\"customSalePriceTemplate || customPriceTemplate; else defaultPriceBlock\">\r\n <ng-container *ngTemplateOutlet=\"customSalePriceTemplate || customPriceTemplate\">\r\n </ng-container>\r\n</ng-container>\r\n\r\n<ng-template #defaultPriceBlock>\r\n <div class=\"price\">\r\n <!-- Con precio de oferta -->\r\n <div *ngIf=\"saleprice; else onlyPriceBlock\" class=\"line-height-custom\">\r\n\r\n <!-- Precio original como rango o tachado simple -->\r\n <div *ngIf=\"hasRange(price); else simplePriceDel\" class=\"price-whithSaleprice\">\r\n <del class=\"\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </del>\r\n </div>\r\n\r\n <!-- Oferta como rango o simple -->\r\n <div *ngIf=\"hasRange(saleprice); else simpleSalePrice\" class=\"\">\r\n {{\r\n saleprice!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n saleprice!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00F3lo precio sin oferta -->\r\n <ng-template #onlyPriceBlock>\r\n <div *ngIf=\"hasRange(price); else simplePrice\" class=\"price-onlyPrice\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }} -\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price -->\r\n <ng-template #simplePrice>\r\n <ng-container *ngIf=\"customSimplePriceTemplate; else fallbackSimplePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimplePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimplePrice>\r\n <del> </del>\r\n <div class=\"price-simplePrice\">\r\n {{ price | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price-del -->\r\n <ng-template #simplePriceDel>\r\n <div class=\"price-simpleDel\">\r\n <del class=\"\">{{ price | ecCurrencySymbol }}</del>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple saleprice -->\r\n <ng-template #simpleSalePrice>\r\n <ng-container *ngIf=\"customSimpleSalePriceTemplate; else fallbackSimpleSalePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimpleSalePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimpleSalePrice>\r\n <div class=\"price-simpleSaleprice\">\r\n {{ saleprice | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Secci\u00F3n de impuestos -->\r\n<ng-container *ngIf=\"shouldShowTaxes\">\r\n <!-- S\u00F3lo leyenda -->\r\n <ng-container *ngIf=\"showTaxLegendOnly; else detailedTaxBlock\">\r\n <ng-container *ngIf=\"customOnlyTaxLabelTemplate; else defaultOnlyTaxLabel\">\r\n <ng-container *ngTemplateOutlet=\"customOnlyTaxLabelTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-template #defaultOnlyTaxLabel>\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- Detalle impuestos -->\r\n <ng-template #detailedTaxBlock>\r\n <ng-container *ngIf=\"customTaxTemplate; else defaultTaxBlock\">\r\n <ng-container *ngTemplateOutlet=\"customTaxTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n\r\n<ng-template #defaultTaxBlock>\r\n <div class=\"taxes-section\">\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n <ul class=\"taxes-list\">\r\n <li>\r\n {{ taxes.Name }}: {{ taxeAmount | ecCurrencySymbol }}\r\n </li>\r\n </ul>\r\n </div>\r\n</ng-template>\r\n}", styles: [".price-sm{font-size:13px}.price{font-size:18px}.line-height-custom{line-height:1.2}.lnth{text-decoration:line-through;color:gray}.taxes-section{margin-top:.5rem;border-radius:.5rem;font-size:.95rem;color:#333;line-height:1.4;max-width:400px}.taxes-title{font-weight:500;margin-bottom:.2rem;font-size:.7rem;color:#222}.taxes-list{list-style:none;padding:0;margin:0}.taxes-list li{display:flex;justify-content:space-between;margin-bottom:.1rem;font-size:.65rem}\n"] }]
|
|
61
69
|
}], propDecorators: { price: [{
|
|
62
70
|
type: Input
|
|
63
71
|
}], saleprice: [{
|
|
@@ -87,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
87
95
|
}], customOnlyTaxLabelTemplate: [{
|
|
88
96
|
type: Input
|
|
89
97
|
}] } });
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvd2lkZ2V0cy1lYy9wcmljZS1lYy9wcmljZS1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy93aWRnZXRzLWVjL3ByaWNlLWVjL3ByaWNlLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFDL0M7O0dBRUc7QUFRSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFVBQVU7SUFDRCxLQUFLLENBQVU7SUFDZixTQUFTLENBQVU7SUFDbkIsU0FBUyxDQUFVO0lBQ25CLFVBQVUsQ0FBVTtJQUNwQixLQUFLLEdBQXlDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFFbkYsV0FBVztJQUNGLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsaUJBQWlCLEdBQVksS0FBSyxDQUFDO0lBQ25DLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFekMsd0NBQXdDO0lBQy9CLG1CQUFtQixHQUFzQyxJQUFJLENBQUM7SUFDOUQsdUJBQXVCLEdBQWtDLElBQUksQ0FBQztJQUM5RCx5QkFBeUIsR0FBZ0MsSUFBSSxDQUFDO0lBQzlELDZCQUE2QixHQUE0QixJQUFJLENBQUM7SUFDOUQsaUJBQWlCLEdBQXdDLElBQUksQ0FBQztJQUM5RCwwQkFBMEIsR0FBK0IsSUFBSSxDQUFDO0lBRS9ELGVBQWUsR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFELGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUV6QixRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFNBQVMsR0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYztlQUNwQixJQUFJLENBQUMsYUFBYTtlQUNsQixDQUFDLElBQUksQ0FBQyxTQUFTO2VBQ2YsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTO2VBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUMvQyxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLFFBQVEsQ0FBQyxLQUFjO1FBQ3JCLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQzt3R0FqRFUsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsMGxCQ2Y3QiwrK0lBa0hjLHNnQkR2R0YsWUFBWSxxU0FBRSxvQkFBb0Isd0RBQUUsZUFBZTs7NEZBSWxELGdCQUFnQjtrQkFQNUIsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsQ0FBQzs4QkFNckQsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVjQ3VycmVuY3lTeW1ib2xQaXBlIH0gZnJvbSBcIi4uLy4uLy4uL2VjLXBpcGUvZWMtY3VycmVuY3ktc3ltYm9sLnBpcGVcIjtcclxuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG4vKipcclxuICogQ29tcG9uZW50ZSBwYXJhIG1hbmVqYXIgbGEgdmlzdGEgZGVsIHByZWNpbyBkZSB1biBwcm9kdWN0by5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXByaWNlLWVjJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEVjQ3VycmVuY3lTeW1ib2xQaXBlLCBUcmFuc2xhdGVNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcmljZS1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3ByaWNlLWVjLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJpY2VFY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8gUHJlY2lvc1xyXG4gIEBJbnB1dCgpIHByaWNlITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNhbGVwcmljZT86IHN0cmluZztcclxuICBASW5wdXQoKSBiYXNlUHJpY2U/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdGF4ZUFtb3VudD86IG51bWJlcjtcclxuICBASW5wdXQoKSB0YXhlczogeyBOYW1lOiBzdHJpbmc7IHRheGVBbW91bnQ6IG51bWJlciB9ID0geyBOYW1lOiAnJywgdGF4ZUFtb3VudDogMCB9O1xyXG5cclxuICAvLyBPcGNpb25lc1xyXG4gIEBJbnB1dCgpIHByaWNlU2l6ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dUYXhMZWdlbmRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGlzYWJsZVRheEluZm86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gVGVtcGxhdGVzIHBlcnNvbmFsaXphZG9zIChwcm95ZWNjacOzbilcclxuICBASW5wdXQoKSBjdXN0b21QcmljZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCAgICAgICAgICAgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGN1c3RvbVNhbGVQcmljZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCAgICAgICA9IG51bGw7XHJcbiAgQElucHV0KCkgY3VzdG9tU2ltcGxlUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgICAgID0gbnVsbDtcclxuICBASW5wdXQoKSBjdXN0b21TaW1wbGVTYWxlUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGN1c3RvbVRheFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCAgICAgICAgICAgICA9IG51bGw7XHJcbiAgQElucHV0KCkgY3VzdG9tT25seVRheExhYmVsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsICAgID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlID0gaW5qZWN0KENoYW5uZWxTZXJ2aWNlKTtcclxuICBwdWJsaWMgc2hvd1RheExlZ2VuZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBoaWRlVGF4ZXMgPSBmYWxzZTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLl9jaGFubmVsU2VydmljZS5jaGFubmVsJC5zdWJzY3JpYmUoY2ZnID0+IHtcclxuICAgICAgdGhpcy5zaG93VGF4TGVnZW5kID0gISFjZmcuc2hvd1RheExlZ2VuZDtcclxuICAgICAgdGhpcy5oaWRlVGF4ZXMgICAgID0gISFjZmcuaGlkZVRheGVzO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogRGV0ZXJtaW5hIHNpIG1vc3RyYXIgbGEgc2VjY2nDs24gZGUgaW1wdWVzdG9zICovXHJcbiAgZ2V0IHNob3VsZFNob3dUYXhlcygpOiBib29sZWFuIHsgICAgXHJcbiAgICByZXR1cm4gIXRoaXMuZGlzYWJsZVRheEluZm9cclxuICAgICAgICAmJiB0aGlzLnNob3dUYXhMZWdlbmRcclxuICAgICAgICAmJiAhdGhpcy5oaWRlVGF4ZXNcclxuICAgICAgICAmJiAhIXRoaXMuYmFzZVByaWNlXHJcbiAgICAgICAgJiYgISF0aGlzLnRheGVBbW91bnQ7XHJcbiAgfVxyXG5cclxuICAvKiogQ2xhc2UgQ1NTIGJhc2Ugc2Vnw7puIHRhbWHDsW8gKi9cclxuICBnZXQgcHJpY2VDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJpY2VTaXplID8gJ3ByaWNlLXNtJyA6ICdwcmljZSc7XHJcbiAgfVxyXG5cclxuICAvKiogSGVscGVyIHBhcmEgZGV0ZWN0YXIgcmFuZ29zICovXHJcbiAgaGFzUmFuZ2UodmFsdWU/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXZhbHVlICYmIHZhbHVlLnNwbGl0KCcgLSAnKS5sZW5ndGggPT09IDI7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21TYWxlUHJpY2VUZW1wbGF0ZSB8fCBjdXN0b21QcmljZVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRQcmljZUJsb2NrXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU2FsZVByaWNlVGVtcGxhdGUgfHwgY3VzdG9tUHJpY2VUZW1wbGF0ZVwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UHJpY2VCbG9jaz5cclxuICAgIDxkaXYgY2xhc3M9XCJwcmljZVwiPlxyXG4gICAgICAgIDwhLS0gQ29uIHByZWNpbyBkZSBvZmVydGEgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNhbGVwcmljZTsgZWxzZSBvbmx5UHJpY2VCbG9ja1wiIGNsYXNzPVwibGluZS1oZWlnaHQtY3VzdG9tXCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFByZWNpbyBvcmlnaW5hbCBjb21vIHJhbmdvIG8gdGFjaGFkbyBzaW1wbGUgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNSYW5nZShwcmljZSk7IGVsc2Ugc2ltcGxlUHJpY2VEZWxcIiBjbGFzcz1cInByaWNlLXdoaXRoU2FsZXByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGVsIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICBwcmljZSEuc3BsaXQoJyAtICcpWzBdIHwgZWNDdXJyZW5jeVN5bWJvbFxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICBwcmljZSEuc3BsaXQoJyAtICcpWzFdIHwgZWNDdXJyZW5jeVN5bWJvbFxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L2RlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIE9mZXJ0YSBjb21vIHJhbmdvIG8gc2ltcGxlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzUmFuZ2Uoc2FsZXByaWNlKTsgZWxzZSBzaW1wbGVTYWxlUHJpY2VcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgIHNhbGVwcmljZSEuc3BsaXQoJyAtICcpWzBdIHwgZWNDdXJyZW5jeVN5bWJvbFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICBzYWxlcHJpY2UhLnNwbGl0KCcgLSAnKVsxXSB8IGVjQ3VycmVuY3lTeW1ib2xcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFPDs2xvIHByZWNpbyBzaW4gb2ZlcnRhIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjb25seVByaWNlQmxvY2s+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNSYW5nZShwcmljZSk7IGVsc2Ugc2ltcGxlUHJpY2VcIiBjbGFzcz1cInByaWNlLW9ubHlQcmljZVwiPlxyXG4gICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgIHByaWNlIS5zcGxpdCgnIC0gJylbMF0gfCBlY0N1cnJlbmN5U3ltYm9sXHJcbiAgICAgICAgICAgICAgICB9fSAtXHJcbiAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgcHJpY2UhLnNwbGl0KCcgLSAnKVsxXSB8IGVjQ3VycmVuY3lTeW1ib2xcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gRmFsbGJhY2sgc2ltcGxlIHByaWNlIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2ltcGxlUHJpY2U+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21TaW1wbGVQcmljZVRlbXBsYXRlOyBlbHNlIGZhbGxiYWNrU2ltcGxlUHJpY2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21TaW1wbGVQcmljZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNmYWxsYmFja1NpbXBsZVByaWNlPlxyXG4gICAgICAgICAgICA8ZGVsPiZuYnNwOzwvZGVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJpY2Utc2ltcGxlUHJpY2VcIj5cclxuICAgICAgICAgICAgICAgIHt7IHByaWNlIHwgZWNDdXJyZW5jeVN5bWJvbCB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIEZhbGxiYWNrIHNpbXBsZSBwcmljZS1kZWwgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaW1wbGVQcmljZURlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlLXNpbXBsZURlbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRlbCBjbGFzcz1cIlwiPnt7IHByaWNlIHwgZWNDdXJyZW5jeVN5bWJvbCB9fTwvZGVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIEZhbGxiYWNrIHNpbXBsZSBzYWxlcHJpY2UgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaW1wbGVTYWxlUHJpY2U+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21TaW1wbGVTYWxlUHJpY2VUZW1wbGF0ZTsgZWxzZSBmYWxsYmFja1NpbXBsZVNhbGVQcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVNpbXBsZVNhbGVQcmljZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNmYWxsYmFja1NpbXBsZVNhbGVQcmljZT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlLXNpbXBsZVNhbGVwcmljZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgc2FsZXByaWNlIHwgZWNDdXJyZW5jeVN5bWJvbCB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFNlY2Npw7NuIGRlIGltcHVlc3RvcyAtLT5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZFNob3dUYXhlc1wiPlxyXG4gICAgPCEtLSBTw7NsbyBsZXllbmRhIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUYXhMZWdlbmRPbmx5OyBlbHNlIGRldGFpbGVkVGF4QmxvY2tcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tT25seVRheExhYmVsVGVtcGxhdGU7IGVsc2UgZGVmYXVsdE9ubHlUYXhMYWJlbFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tT25seVRheExhYmVsVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRPbmx5VGF4TGFiZWw+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGF4ZXMtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdwcmljZS13aXRob3V0LW5hdGlvbmFsLXRheGVzJyB8IHRyYW5zbGF0ZSB9fTpcclxuICAgICAgICAgICAgICAgIHt7IGJhc2VQcmljZSEgfCBlY0N1cnJlbmN5U3ltYm9sIH19XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBEZXRhbGxlIGltcHVlc3RvcyAtLT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZGV0YWlsZWRUYXhCbG9jaz5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tVGF4VGVtcGxhdGU7IGVsc2UgZGVmYXVsdFRheEJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21UYXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUYXhCbG9jaz5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YXhlcy1zZWN0aW9uXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0YXhlcy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyAncHJpY2Utd2l0aG91dC1uYXRpb25hbC10YXhlcycgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgICAgIHt7IGJhc2VQcmljZSEgfCBlY0N1cnJlbmN5U3ltYm9sIH19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cInRheGVzLWxpc3RcIj5cclxuICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAge3sgdGF4ZXMuTmFtZSB9fToge3sgdGF4ZUFtb3VudCB8IGVjQ3VycmVuY3lTeW1ib2wgfX1cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvd2lkZ2V0cy1lYy9wcmljZS1lYy9wcmljZS1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy93aWRnZXRzLWVjL3ByaWNlLWVjL3ByaWNlLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBQ25EOztHQUVHO0FBUUgsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixVQUFVO0lBQ0QsS0FBSyxDQUFVO0lBQ2YsU0FBUyxDQUFVO0lBQ25CLFNBQVMsQ0FBVTtJQUNuQixVQUFVLENBQVU7SUFDcEIsS0FBSyxHQUF5QyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBRW5GLFdBQVc7SUFDRixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLGlCQUFpQixHQUFZLEtBQUssQ0FBQztJQUNuQyxjQUFjLEdBQVksS0FBSyxDQUFDO0lBRXpDLHdDQUF3QztJQUMvQixtQkFBbUIsR0FBc0MsSUFBSSxDQUFDO0lBQzlELHVCQUF1QixHQUFrQyxJQUFJLENBQUM7SUFDOUQseUJBQXlCLEdBQWdDLElBQUksQ0FBQztJQUM5RCw2QkFBNkIsR0FBNEIsSUFBSSxDQUFDO0lBQzlELGlCQUFpQixHQUF3QyxJQUFJLENBQUM7SUFDOUQsMEJBQTBCLEdBQStCLElBQUksQ0FBQztJQUUvRCxlQUFlLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RCxZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqRCxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0lBQ3BDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDZixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTFCLFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQ3JDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO1lBQ3JFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsTUFBTSxHQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjO2VBQ3BCLElBQUksQ0FBQyxhQUFhO2VBQ2xCLENBQUMsSUFBSSxDQUFDLFNBQVM7ZUFDZixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7ZUFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQy9DLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsUUFBUSxDQUFDLEtBQWM7UUFDckIsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO3dHQXhEVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQiwwbEJDaEI3QixzaUpBb0hDLHNnQkR4R1csWUFBWSxxU0FBRSxvQkFBb0Isd0RBQUUsZUFBZTs7NEZBSWxELGdCQUFnQjtrQkFQNUIsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsQ0FBQzs4QkFNckQsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVjQ3VycmVuY3lTeW1ib2xQaXBlIH0gZnJvbSBcIi4uLy4uLy4uL2VjLXBpcGUvZWMtY3VycmVuY3ktc3ltYm9sLnBpcGVcIjtcclxuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2VjLXNlcnZpY2VzJztcclxuLyoqXHJcbiAqIENvbXBvbmVudGUgcGFyYSBtYW5lamFyIGxhIHZpc3RhIGRlbCBwcmVjaW8gZGUgdW4gcHJvZHVjdG8uXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1wcmljZS1lYycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBFY0N1cnJlbmN5U3ltYm9sUGlwZSwgVHJhbnNsYXRlTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcHJpY2UtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9wcmljZS1lYy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFByaWNlRWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vIFByZWNpb3NcclxuICBASW5wdXQoKSBwcmljZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBzYWxlcHJpY2U/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYmFzZVByaWNlPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRheGVBbW91bnQ/OiBudW1iZXI7XHJcbiAgQElucHV0KCkgdGF4ZXM6IHsgTmFtZTogc3RyaW5nOyB0YXhlQW1vdW50OiBudW1iZXIgfSA9IHsgTmFtZTogJycsIHRheGVBbW91bnQ6IDAgfTtcclxuXHJcbiAgLy8gT3BjaW9uZXNcclxuICBASW5wdXQoKSBwcmljZVNpemU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93VGF4TGVnZW5kT25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVUYXhJbmZvOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFRlbXBsYXRlcyBwZXJzb25hbGl6YWRvcyAocHJveWVjY2nDs24pXHJcbiAgQElucHV0KCkgY3VzdG9tUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgICAgICAgICAgID0gbnVsbDtcclxuICBASW5wdXQoKSBjdXN0b21TYWxlUHJpY2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgICAgICAgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGN1c3RvbVNpbXBsZVByaWNlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsICAgICA9IG51bGw7XHJcbiAgQElucHV0KCkgY3VzdG9tU2ltcGxlU2FsZVByaWNlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBjdXN0b21UYXhUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgICAgICAgICAgICAgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGN1c3RvbU9ubHlUYXhMYWJlbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCAgICA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX2NoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcclxuICBwdWJsaWMgc2hvd1RheExlZ2VuZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBoaWRlVGF4ZXMgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1ByaWNlc09ubHlUb0xvZ2dlZFVzZXJzID0gZmFsc2U7XHJcbiAgcHVibGljIGxvZ2dlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBoaWRlUHJpY2VzID0gZmFsc2U7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5fY2hhbm5lbFNlcnZpY2UuY2hhbm5lbCQuc3Vic2NyaWJlKGNmZyA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9ICEhY2ZnLnNob3dUYXhMZWdlbmQ7XHJcbiAgICAgIHRoaXMuaGlkZVRheGVzICAgICA9ICEhY2ZnLmhpZGVUYXhlcztcclxuICAgICAgdGhpcy5zaG93UHJpY2VzT25seVRvTG9nZ2VkVXNlcnMgPSAhIWNmZy5zaG93UHJpY2VzT25seVRvTG9nZ2VkVXNlcnM7XHJcbiAgICAgIHRoaXMuaGlkZVByaWNlcyA9ICEhY2ZnLmhpZGVQcmljZXM7XHJcbiAgICB9KTtcclxuICAgdGhpcy5sb2dnZWQ9IHRoaXMuX2F1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIERldGVybWluYSBzaSBtb3N0cmFyIGxhIHNlY2Npw7NuIGRlIGltcHVlc3RvcyAqL1xyXG4gIGdldCBzaG91bGRTaG93VGF4ZXMoKTogYm9vbGVhbiB7ICAgIFxyXG4gICAgcmV0dXJuICF0aGlzLmRpc2FibGVUYXhJbmZvXHJcbiAgICAgICAgJiYgdGhpcy5zaG93VGF4TGVnZW5kXHJcbiAgICAgICAgJiYgIXRoaXMuaGlkZVRheGVzXHJcbiAgICAgICAgJiYgISF0aGlzLmJhc2VQcmljZVxyXG4gICAgICAgICYmICEhdGhpcy50YXhlQW1vdW50O1xyXG4gIH1cclxuXHJcbiAgLyoqIENsYXNlIENTUyBiYXNlIHNlZ8O6biB0YW1hw7FvICovXHJcbiAgZ2V0IHByaWNlQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByaWNlU2l6ZSA/ICdwcmljZS1zbScgOiAncHJpY2UnO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhlbHBlciBwYXJhIGRldGVjdGFyIHJhbmdvcyAqL1xyXG4gIGhhc1JhbmdlKHZhbHVlPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZS5zcGxpdCgnIC0gJykubGVuZ3RoID09PSAyO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKCFzaG93UHJpY2VzT25seVRvTG9nZ2VkVXNlcnMgfHwgbG9nZ2VkKSB7XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21TYWxlUHJpY2VUZW1wbGF0ZSB8fCBjdXN0b21QcmljZVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRQcmljZUJsb2NrXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU2FsZVByaWNlVGVtcGxhdGUgfHwgY3VzdG9tUHJpY2VUZW1wbGF0ZVwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0UHJpY2VCbG9jaz5cclxuICAgIDxkaXYgY2xhc3M9XCJwcmljZVwiPlxyXG4gICAgICAgIDwhLS0gQ29uIHByZWNpbyBkZSBvZmVydGEgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNhbGVwcmljZTsgZWxzZSBvbmx5UHJpY2VCbG9ja1wiIGNsYXNzPVwibGluZS1oZWlnaHQtY3VzdG9tXCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFByZWNpbyBvcmlnaW5hbCBjb21vIHJhbmdvIG8gdGFjaGFkbyBzaW1wbGUgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNSYW5nZShwcmljZSk7IGVsc2Ugc2ltcGxlUHJpY2VEZWxcIiBjbGFzcz1cInByaWNlLXdoaXRoU2FsZXByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGVsIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICBwcmljZSEuc3BsaXQoJyAtICcpWzBdIHwgZWNDdXJyZW5jeVN5bWJvbFxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICBwcmljZSEuc3BsaXQoJyAtICcpWzFdIHwgZWNDdXJyZW5jeVN5bWJvbFxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L2RlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIE9mZXJ0YSBjb21vIHJhbmdvIG8gc2ltcGxlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzUmFuZ2Uoc2FsZXByaWNlKTsgZWxzZSBzaW1wbGVTYWxlUHJpY2VcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgIHNhbGVwcmljZSEuc3BsaXQoJyAtICcpWzBdIHwgZWNDdXJyZW5jeVN5bWJvbFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICBzYWxlcHJpY2UhLnNwbGl0KCcgLSAnKVsxXSB8IGVjQ3VycmVuY3lTeW1ib2xcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFPDs2xvIHByZWNpbyBzaW4gb2ZlcnRhIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjb25seVByaWNlQmxvY2s+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNSYW5nZShwcmljZSk7IGVsc2Ugc2ltcGxlUHJpY2VcIiBjbGFzcz1cInByaWNlLW9ubHlQcmljZVwiPlxyXG4gICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgIHByaWNlIS5zcGxpdCgnIC0gJylbMF0gfCBlY0N1cnJlbmN5U3ltYm9sXHJcbiAgICAgICAgICAgICAgICB9fSAtXHJcbiAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgcHJpY2UhLnNwbGl0KCcgLSAnKVsxXSB8IGVjQ3VycmVuY3lTeW1ib2xcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gRmFsbGJhY2sgc2ltcGxlIHByaWNlIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2ltcGxlUHJpY2U+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21TaW1wbGVQcmljZVRlbXBsYXRlOyBlbHNlIGZhbGxiYWNrU2ltcGxlUHJpY2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21TaW1wbGVQcmljZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNmYWxsYmFja1NpbXBsZVByaWNlPlxyXG4gICAgICAgICAgICA8ZGVsPiZuYnNwOzwvZGVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJpY2Utc2ltcGxlUHJpY2VcIj5cclxuICAgICAgICAgICAgICAgIHt7IHByaWNlIHwgZWNDdXJyZW5jeVN5bWJvbCB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIEZhbGxiYWNrIHNpbXBsZSBwcmljZS1kZWwgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaW1wbGVQcmljZURlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlLXNpbXBsZURlbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRlbCBjbGFzcz1cIlwiPnt7IHByaWNlIHwgZWNDdXJyZW5jeVN5bWJvbCB9fTwvZGVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIEZhbGxiYWNrIHNpbXBsZSBzYWxlcHJpY2UgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaW1wbGVTYWxlUHJpY2U+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21TaW1wbGVTYWxlUHJpY2VUZW1wbGF0ZTsgZWxzZSBmYWxsYmFja1NpbXBsZVNhbGVQcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVNpbXBsZVNhbGVQcmljZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNmYWxsYmFja1NpbXBsZVNhbGVQcmljZT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlLXNpbXBsZVNhbGVwcmljZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgc2FsZXByaWNlIHwgZWNDdXJyZW5jeVN5bWJvbCB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFNlY2Npw7NuIGRlIGltcHVlc3RvcyAtLT5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZFNob3dUYXhlc1wiPlxyXG4gICAgPCEtLSBTw7NsbyBsZXllbmRhIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUYXhMZWdlbmRPbmx5OyBlbHNlIGRldGFpbGVkVGF4QmxvY2tcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tT25seVRheExhYmVsVGVtcGxhdGU7IGVsc2UgZGVmYXVsdE9ubHlUYXhMYWJlbFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tT25seVRheExhYmVsVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRPbmx5VGF4TGFiZWw+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGF4ZXMtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdwcmljZS13aXRob3V0LW5hdGlvbmFsLXRheGVzJyB8IHRyYW5zbGF0ZSB9fTpcclxuICAgICAgICAgICAgICAgIHt7IGJhc2VQcmljZSEgfCBlY0N1cnJlbmN5U3ltYm9sIH19XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBEZXRhbGxlIGltcHVlc3RvcyAtLT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZGV0YWlsZWRUYXhCbG9jaz5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tVGF4VGVtcGxhdGU7IGVsc2UgZGVmYXVsdFRheEJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21UYXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUYXhCbG9jaz5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YXhlcy1zZWN0aW9uXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0YXhlcy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyAncHJpY2Utd2l0aG91dC1uYXRpb25hbC10YXhlcycgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgICAgIHt7IGJhc2VQcmljZSEgfCBlY0N1cnJlbmN5U3ltYm9sIH19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cInRheGVzLWxpc3RcIj5cclxuICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAge3sgdGF4ZXMuTmFtZSB9fToge3sgdGF4ZUFtb3VudCB8IGVjQ3VycmVuY3lTeW1ib2wgfX1cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbn0iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, makeEnvironmentProviders, inject, Injectable, PLATFORM_ID, RendererFactory2, afterNextRender, signal, EnvironmentInjector, runInInjectionContext, Component, ChangeDetectorRef, HostListener, CUSTOM_ELEMENTS_SCHEMA, Input, Pipe, EventEmitter, Output, forwardRef, afterRender, ViewChild,
|
|
2
|
+
import { InjectionToken, makeEnvironmentProviders, inject, Injectable, PLATFORM_ID, RendererFactory2, afterNextRender, signal, EnvironmentInjector, runInInjectionContext, Component, ChangeDetectorRef, HostListener, CUSTOM_ELEMENTS_SCHEMA, Input, Pipe, Injector, EventEmitter, Output, forwardRef, afterRender, ViewChild, computed, Renderer2, ChangeDetectionStrategy, Directive, Inject } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { isPlatformBrowser, DOCUMENT, AsyncPipe, CommonModule, TitleCasePipe, JsonPipe, UpperCasePipe, Location } from '@angular/common';
|
|
5
5
|
import { take, BehaviorSubject, shareReplay, map, catchError, of, filter, ReplaySubject, firstValueFrom, concatMap, throwError, switchMap, combineLatest } from 'rxjs';
|
|
@@ -5874,6 +5874,20 @@ class HeaderEcComponent extends MenuEcComponent {
|
|
|
5874
5874
|
transparent = false;
|
|
5875
5875
|
isHome = false; // Nueva variable para verificar si estamos en /home
|
|
5876
5876
|
isScrolled = false;
|
|
5877
|
+
showPricesOnlyToLoggedUsers = false;
|
|
5878
|
+
hidePrices = false;
|
|
5879
|
+
__authService = inject(AuthService);
|
|
5880
|
+
_channelService = inject(ChannelService);
|
|
5881
|
+
isAuthenticated$ = this.__authService.isAuthenticated();
|
|
5882
|
+
constructor() {
|
|
5883
|
+
super();
|
|
5884
|
+
this._channelService.channel$.subscribe(cfg => {
|
|
5885
|
+
console.log('Channel configuration:', cfg);
|
|
5886
|
+
this.showPricesOnlyToLoggedUsers = !!cfg.showPricesOnlyToLoggedUsers;
|
|
5887
|
+
this.hidePrices = !!cfg.hidePrices;
|
|
5888
|
+
console.log('hidePrices:', this.hidePrices);
|
|
5889
|
+
});
|
|
5890
|
+
}
|
|
5877
5891
|
coreConstantsService = inject(CoreConstantsService);
|
|
5878
5892
|
router = inject(Router);
|
|
5879
5893
|
cdr = inject(ChangeDetectorRef); // Inyectamos ChangeDetectorRef para forzar la actualización
|
|
@@ -6017,13 +6031,13 @@ class HeaderEcComponent extends MenuEcComponent {
|
|
|
6017
6031
|
});
|
|
6018
6032
|
});
|
|
6019
6033
|
}
|
|
6020
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderEcComponent, deps:
|
|
6034
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6021
6035
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HeaderEcComponent, isStandalone: true, selector: "lib-header-ec", host: { listeners: { "window:scroll": "onWindowScroll()" } }, usesInheritance: true, ngImport: i0, template: "<p>header-ec works!</p>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
6022
6036
|
}
|
|
6023
6037
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderEcComponent, decorators: [{
|
|
6024
6038
|
type: Component,
|
|
6025
6039
|
args: [{ selector: 'lib-header-ec', standalone: true, imports: [CommonModule, TitleCasePipe, AsyncPipe, JsonPipe, RouterLink, RouterLinkActive], template: "<p>header-ec works!</p>\r\n" }]
|
|
6026
|
-
}], propDecorators: { onWindowScroll: [{
|
|
6040
|
+
}], ctorParameters: () => [], propDecorators: { onWindowScroll: [{
|
|
6027
6041
|
type: HostListener,
|
|
6028
6042
|
args: ['window:scroll', []]
|
|
6029
6043
|
}] } });
|
|
@@ -6510,13 +6524,20 @@ class PriceEcComponent {
|
|
|
6510
6524
|
customTaxTemplate = null;
|
|
6511
6525
|
customOnlyTaxLabelTemplate = null;
|
|
6512
6526
|
_channelService = inject(ChannelService);
|
|
6527
|
+
_authService = inject(AuthService);
|
|
6513
6528
|
showTaxLegend = false;
|
|
6514
6529
|
hideTaxes = false;
|
|
6530
|
+
showPricesOnlyToLoggedUsers = false;
|
|
6531
|
+
logged = false;
|
|
6532
|
+
hidePrices = false;
|
|
6515
6533
|
ngOnInit() {
|
|
6516
6534
|
this._channelService.channel$.subscribe(cfg => {
|
|
6517
6535
|
this.showTaxLegend = !!cfg.showTaxLegend;
|
|
6518
6536
|
this.hideTaxes = !!cfg.hideTaxes;
|
|
6537
|
+
this.showPricesOnlyToLoggedUsers = !!cfg.showPricesOnlyToLoggedUsers;
|
|
6538
|
+
this.hidePrices = !!cfg.hidePrices;
|
|
6519
6539
|
});
|
|
6540
|
+
this.logged = this._authService.isAuthenticated();
|
|
6520
6541
|
}
|
|
6521
6542
|
/** Determina si mostrar la sección de impuestos */
|
|
6522
6543
|
get shouldShowTaxes() {
|
|
@@ -6535,11 +6556,11 @@ class PriceEcComponent {
|
|
|
6535
6556
|
return !!value && value.split(' - ').length === 2;
|
|
6536
6557
|
}
|
|
6537
6558
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PriceEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6538
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
6559
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PriceEcComponent, isStandalone: true, selector: "app-price-ec", inputs: { price: "price", saleprice: "saleprice", basePrice: "basePrice", taxeAmount: "taxeAmount", taxes: "taxes", priceSize: "priceSize", showTaxLegendOnly: "showTaxLegendOnly", disableTaxInfo: "disableTaxInfo", customPriceTemplate: "customPriceTemplate", customSalePriceTemplate: "customSalePriceTemplate", customSimplePriceTemplate: "customSimplePriceTemplate", customSimpleSalePriceTemplate: "customSimpleSalePriceTemplate", customTaxTemplate: "customTaxTemplate", customOnlyTaxLabelTemplate: "customOnlyTaxLabelTemplate" }, ngImport: i0, template: "@if (!showPricesOnlyToLoggedUsers || logged) {\r\n<ng-container *ngIf=\"customSalePriceTemplate || customPriceTemplate; else defaultPriceBlock\">\r\n <ng-container *ngTemplateOutlet=\"customSalePriceTemplate || customPriceTemplate\">\r\n </ng-container>\r\n</ng-container>\r\n\r\n<ng-template #defaultPriceBlock>\r\n <div class=\"price\">\r\n <!-- Con precio de oferta -->\r\n <div *ngIf=\"saleprice; else onlyPriceBlock\" class=\"line-height-custom\">\r\n\r\n <!-- Precio original como rango o tachado simple -->\r\n <div *ngIf=\"hasRange(price); else simplePriceDel\" class=\"price-whithSaleprice\">\r\n <del class=\"\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </del>\r\n </div>\r\n\r\n <!-- Oferta como rango o simple -->\r\n <div *ngIf=\"hasRange(saleprice); else simpleSalePrice\" class=\"\">\r\n {{\r\n saleprice!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n saleprice!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00F3lo precio sin oferta -->\r\n <ng-template #onlyPriceBlock>\r\n <div *ngIf=\"hasRange(price); else simplePrice\" class=\"price-onlyPrice\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }} -\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price -->\r\n <ng-template #simplePrice>\r\n <ng-container *ngIf=\"customSimplePriceTemplate; else fallbackSimplePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimplePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimplePrice>\r\n <del> </del>\r\n <div class=\"price-simplePrice\">\r\n {{ price | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price-del -->\r\n <ng-template #simplePriceDel>\r\n <div class=\"price-simpleDel\">\r\n <del class=\"\">{{ price | ecCurrencySymbol }}</del>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple saleprice -->\r\n <ng-template #simpleSalePrice>\r\n <ng-container *ngIf=\"customSimpleSalePriceTemplate; else fallbackSimpleSalePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimpleSalePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimpleSalePrice>\r\n <div class=\"price-simpleSaleprice\">\r\n {{ saleprice | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Secci\u00F3n de impuestos -->\r\n<ng-container *ngIf=\"shouldShowTaxes\">\r\n <!-- S\u00F3lo leyenda -->\r\n <ng-container *ngIf=\"showTaxLegendOnly; else detailedTaxBlock\">\r\n <ng-container *ngIf=\"customOnlyTaxLabelTemplate; else defaultOnlyTaxLabel\">\r\n <ng-container *ngTemplateOutlet=\"customOnlyTaxLabelTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-template #defaultOnlyTaxLabel>\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- Detalle impuestos -->\r\n <ng-template #detailedTaxBlock>\r\n <ng-container *ngIf=\"customTaxTemplate; else defaultTaxBlock\">\r\n <ng-container *ngTemplateOutlet=\"customTaxTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n\r\n<ng-template #defaultTaxBlock>\r\n <div class=\"taxes-section\">\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n <ul class=\"taxes-list\">\r\n <li>\r\n {{ taxes.Name }}: {{ taxeAmount | ecCurrencySymbol }}\r\n </li>\r\n </ul>\r\n </div>\r\n</ng-template>\r\n}", styles: [".price-sm{font-size:13px}.price{font-size:18px}.line-height-custom{line-height:1.2}.lnth{text-decoration:line-through;color:gray}.taxes-section{margin-top:.5rem;border-radius:.5rem;font-size:.95rem;color:#333;line-height:1.4;max-width:400px}.taxes-title{font-weight:500;margin-bottom:.2rem;font-size:.7rem;color:#222}.taxes-list{list-style:none;padding:0;margin:0}.taxes-list li{display:flex;justify-content:space-between;margin-bottom:.1rem;font-size:.65rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: EcCurrencySymbolPipe, name: "ecCurrencySymbol" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
|
|
6539
6560
|
}
|
|
6540
6561
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PriceEcComponent, decorators: [{
|
|
6541
6562
|
type: Component,
|
|
6542
|
-
args: [{ selector: 'app-price-ec', standalone: true, imports: [CommonModule, EcCurrencySymbolPipe, TranslateModule], template: "<ng-container *ngIf=\"customSalePriceTemplate || customPriceTemplate; else defaultPriceBlock\">\r\n <ng-container *ngTemplateOutlet=\"customSalePriceTemplate || customPriceTemplate\">\r\n </ng-container>\r\n</ng-container>\r\n\r\n<ng-template #defaultPriceBlock>\r\n <div class=\"price\">\r\n <!-- Con precio de oferta -->\r\n <div *ngIf=\"saleprice; else onlyPriceBlock\" class=\"line-height-custom\">\r\n\r\n <!-- Precio original como rango o tachado simple -->\r\n <div *ngIf=\"hasRange(price); else simplePriceDel\" class=\"price-whithSaleprice\">\r\n <del class=\"\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </del>\r\n </div>\r\n\r\n <!-- Oferta como rango o simple -->\r\n <div *ngIf=\"hasRange(saleprice); else simpleSalePrice\" class=\"\">\r\n {{\r\n saleprice!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n saleprice!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00F3lo precio sin oferta -->\r\n <ng-template #onlyPriceBlock>\r\n <div *ngIf=\"hasRange(price); else simplePrice\" class=\"price-onlyPrice\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }} -\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price -->\r\n <ng-template #simplePrice>\r\n <ng-container *ngIf=\"customSimplePriceTemplate; else fallbackSimplePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimplePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimplePrice>\r\n <del> </del>\r\n <div class=\"price-simplePrice\">\r\n {{ price | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price-del -->\r\n <ng-template #simplePriceDel>\r\n <div class=\"price-simpleDel\">\r\n <del class=\"\">{{ price | ecCurrencySymbol }}</del>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple saleprice -->\r\n <ng-template #simpleSalePrice>\r\n <ng-container *ngIf=\"customSimpleSalePriceTemplate; else fallbackSimpleSalePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimpleSalePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimpleSalePrice>\r\n <div class=\"price-simpleSaleprice\">\r\n {{ saleprice | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Secci\u00F3n de impuestos -->\r\n<ng-container *ngIf=\"shouldShowTaxes\">\r\n <!-- S\u00F3lo leyenda -->\r\n <ng-container *ngIf=\"showTaxLegendOnly; else detailedTaxBlock\">\r\n <ng-container *ngIf=\"customOnlyTaxLabelTemplate; else defaultOnlyTaxLabel\">\r\n <ng-container *ngTemplateOutlet=\"customOnlyTaxLabelTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-template #defaultOnlyTaxLabel>\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- Detalle impuestos -->\r\n <ng-template #detailedTaxBlock>\r\n <ng-container *ngIf=\"customTaxTemplate; else defaultTaxBlock\">\r\n <ng-container *ngTemplateOutlet=\"customTaxTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n\r\n<ng-template #defaultTaxBlock>\r\n <div class=\"taxes-section\">\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n <ul class=\"taxes-list\">\r\n <li>\r\n {{ taxes.Name }}: {{ taxeAmount | ecCurrencySymbol }}\r\n </li>\r\n </ul>\r\n </div>\r\n</ng-template
|
|
6563
|
+
args: [{ selector: 'app-price-ec', standalone: true, imports: [CommonModule, EcCurrencySymbolPipe, TranslateModule], template: "@if (!showPricesOnlyToLoggedUsers || logged) {\r\n<ng-container *ngIf=\"customSalePriceTemplate || customPriceTemplate; else defaultPriceBlock\">\r\n <ng-container *ngTemplateOutlet=\"customSalePriceTemplate || customPriceTemplate\">\r\n </ng-container>\r\n</ng-container>\r\n\r\n<ng-template #defaultPriceBlock>\r\n <div class=\"price\">\r\n <!-- Con precio de oferta -->\r\n <div *ngIf=\"saleprice; else onlyPriceBlock\" class=\"line-height-custom\">\r\n\r\n <!-- Precio original como rango o tachado simple -->\r\n <div *ngIf=\"hasRange(price); else simplePriceDel\" class=\"price-whithSaleprice\">\r\n <del class=\"\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </del>\r\n </div>\r\n\r\n <!-- Oferta como rango o simple -->\r\n <div *ngIf=\"hasRange(saleprice); else simpleSalePrice\" class=\"\">\r\n {{\r\n saleprice!.split(' - ')[0] | ecCurrencySymbol\r\n }}\r\n {{\r\n saleprice!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00F3lo precio sin oferta -->\r\n <ng-template #onlyPriceBlock>\r\n <div *ngIf=\"hasRange(price); else simplePrice\" class=\"price-onlyPrice\">\r\n {{\r\n price!.split(' - ')[0] | ecCurrencySymbol\r\n }} -\r\n {{\r\n price!.split(' - ')[1] | ecCurrencySymbol\r\n }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price -->\r\n <ng-template #simplePrice>\r\n <ng-container *ngIf=\"customSimplePriceTemplate; else fallbackSimplePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimplePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimplePrice>\r\n <del> </del>\r\n <div class=\"price-simplePrice\">\r\n {{ price | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple price-del -->\r\n <ng-template #simplePriceDel>\r\n <div class=\"price-simpleDel\">\r\n <del class=\"\">{{ price | ecCurrencySymbol }}</del>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Fallback simple saleprice -->\r\n <ng-template #simpleSalePrice>\r\n <ng-container *ngIf=\"customSimpleSalePriceTemplate; else fallbackSimpleSalePrice\">\r\n <ng-container *ngTemplateOutlet=\"customSimpleSalePriceTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #fallbackSimpleSalePrice>\r\n <div class=\"price-simpleSaleprice\">\r\n {{ saleprice | ecCurrencySymbol }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Secci\u00F3n de impuestos -->\r\n<ng-container *ngIf=\"shouldShowTaxes\">\r\n <!-- S\u00F3lo leyenda -->\r\n <ng-container *ngIf=\"showTaxLegendOnly; else detailedTaxBlock\">\r\n <ng-container *ngIf=\"customOnlyTaxLabelTemplate; else defaultOnlyTaxLabel\">\r\n <ng-container *ngTemplateOutlet=\"customOnlyTaxLabelTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-template #defaultOnlyTaxLabel>\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- Detalle impuestos -->\r\n <ng-template #detailedTaxBlock>\r\n <ng-container *ngIf=\"customTaxTemplate; else defaultTaxBlock\">\r\n <ng-container *ngTemplateOutlet=\"customTaxTemplate\"></ng-container>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n\r\n<ng-template #defaultTaxBlock>\r\n <div class=\"taxes-section\">\r\n <p class=\"taxes-title\">\r\n {{ 'price-without-national-taxes' | translate }}:\r\n {{ basePrice! | ecCurrencySymbol }}\r\n </p>\r\n <ul class=\"taxes-list\">\r\n <li>\r\n {{ taxes.Name }}: {{ taxeAmount | ecCurrencySymbol }}\r\n </li>\r\n </ul>\r\n </div>\r\n</ng-template>\r\n}", styles: [".price-sm{font-size:13px}.price{font-size:18px}.line-height-custom{line-height:1.2}.lnth{text-decoration:line-through;color:gray}.taxes-section{margin-top:.5rem;border-radius:.5rem;font-size:.95rem;color:#333;line-height:1.4;max-width:400px}.taxes-title{font-weight:500;margin-bottom:.2rem;font-size:.7rem;color:#222}.taxes-list{list-style:none;padding:0;margin:0}.taxes-list li{display:flex;justify-content:space-between;margin-bottom:.1rem;font-size:.65rem}\n"] }]
|
|
6543
6564
|
}], propDecorators: { price: [{
|
|
6544
6565
|
type: Input
|
|
6545
6566
|
}], saleprice: [{
|
|
@@ -6575,6 +6596,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
6575
6596
|
* @class ProductEcComponent
|
|
6576
6597
|
*/
|
|
6577
6598
|
class ProductEcComponent {
|
|
6599
|
+
injector = inject(Injector);
|
|
6578
6600
|
/**
|
|
6579
6601
|
* Datos del producto.
|
|
6580
6602
|
*/
|
|
@@ -6591,6 +6613,16 @@ class ProductEcComponent {
|
|
|
6591
6613
|
ngOnInit() {
|
|
6592
6614
|
this.loaded.emit(this.product.id);
|
|
6593
6615
|
}
|
|
6616
|
+
showPricesOnlyToLoggedUsers = false;
|
|
6617
|
+
hidePrices = false;
|
|
6618
|
+
_authService = inject(AuthService);
|
|
6619
|
+
isAuthenticated$ = this._authService.isAuthenticated();
|
|
6620
|
+
constructor() {
|
|
6621
|
+
this.injector.get(ChannelService).channel$.subscribe(channel => {
|
|
6622
|
+
this.showPricesOnlyToLoggedUsers = !!channel.showPricesOnlyToLoggedUsers;
|
|
6623
|
+
this.hidePrices = !!channel.hidePrices;
|
|
6624
|
+
});
|
|
6625
|
+
}
|
|
6594
6626
|
consts = inject(CoreConstantsService);
|
|
6595
6627
|
analyticsService = inject(AnalyticsService);
|
|
6596
6628
|
router = inject(Router);
|
|
@@ -6629,7 +6661,7 @@ class ProductEcComponent {
|
|
|
6629
6661
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductEcComponent, decorators: [{
|
|
6630
6662
|
type: Component,
|
|
6631
6663
|
args: [{ selector: 'app-product-ec', standalone: true, imports: [CommonModule, PriceEcComponent, RouterLink, TranslateModule], template: "<a [routerLink]=\"['/product', product.id]\" class=\"text-decoration-none producto\">\r\n <!-- Marca especial y descuento -->\r\n <!-- <div *ngIf=\"product.saleprice || (product.special_mark && product.special_mark !== null && product.special_mark !== undefined && product.special_mark.length >0)\"\r\n class=\"marcas\">\r\n <div *ecProductStock=\"product\" [ecProductMini]=\"product.special_mark\"></div>\r\n <ng-container *ngIf=\"shouldShowPrice\">\r\n <div *ecProductStock=\"product\" [ngClass]=\"{'tag-dsc float-right': product.saleprice}\"\r\n [ecProductOff]=\"product\">\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n\r\n <!-- Imagen del producto -->\r\n <div class=\"foto\">\r\n @if(product.picturesdefault){\r\n @if (product.picturesdefault && product.picturesdefault.length > 1 ) {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n <img [src]=\"mediaUrl + product.picturesdefault[1]\" alt=\"Imagen secundaria\" class=\"w-100 pic02\" />\r\n } @else {\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"Imagen principal\" class=\"w-100 pic01\" />\r\n }\r\n }\r\n </div>\r\n <!-- Precio -->\r\n\r\n\r\n <!-- Nombre del producto -->\r\n <h6 class=\"title\">{{ product.name | titlecase }}</h6>\r\n\r\n <div class=\"sku\" [innerHTML]=\"product.shortdetails\"></div>\r\n\r\n @if (shouldShowPrice) {\r\n <app-price-ec [price]=\"product.price\" [saleprice]=\"product.saleprice\" class=\"\" />\r\n }\r\n\r\n <div class=\"fixBottom\">\r\n\r\n <!-- Bot\u00F3n de acciones -->\r\n <!-- <ng-container *ecProductStock=\"product; else noStock\"> -->\r\n <!-- Cuando no tiene marca especial o es de tipo 'standard' -->\r\n @if (!product.special_mark || product.special_mark.length === 0 || product.special_mark[0]?.type ===\r\n 'standard') {\r\n <button class=\"btn standard\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n <ng-container *ngIf=\"isCollection; else normalText\">\r\n <span> {{(\"buy\" | translate) | uppercase}} </span>\r\n </ng-container>\r\n <ng-template #normalText>\r\n {{(\"buy\" | translate) | uppercase}}\r\n </ng-template>\r\n </button>\r\n }@else {\r\n <!-- Caso 1: Agotado o Disponible muy pronto -->\r\n @if (product.special_mark[0]?.type === 'out_of_stock' || product.special_mark[0]?.type === 'coming_soon') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0].name | uppercase }} </span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n </button>}\r\n <!-- Caso 2: Contacto por WhatsApp -->\r\n @if (product.special_mark[0].type === 'whatsapp_contact') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\"\r\n (click)=\"openWhatsApp(product.special_mark[0]?.whatsappContact)\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0]?.name | uppercase }}</span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n\r\n </button>\r\n }\r\n <!-- Caso 3: Solicitar m\u00E1s informaci\u00F3n -->\r\n @if (product.special_mark[0]?.type === 'more_info') {\r\n <button class=\"btn\" [ngClass]=\"isCollection ? 'px-2 w-100 d-sm-block' : 'py-2 px-4'\">\r\n @if(isCollection){\r\n <span>{{ product.special_mark[0]?.name | uppercase }}</span>\r\n }@else {\r\n {{ product.special_mark[0]?.name | uppercase }}\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n</a>" }]
|
|
6632
|
-
}], propDecorators: { product: [{
|
|
6664
|
+
}], ctorParameters: () => [], propDecorators: { product: [{
|
|
6633
6665
|
type: Input,
|
|
6634
6666
|
args: [{
|
|
6635
6667
|
required: true
|
|
@@ -8137,6 +8169,8 @@ class ProductDetailEcComponent {
|
|
|
8137
8169
|
reset = false;
|
|
8138
8170
|
success = false;
|
|
8139
8171
|
categories = [];
|
|
8172
|
+
showPricesOnlyToLoggedUsers = false;
|
|
8173
|
+
hidePrices = false;
|
|
8140
8174
|
quantity = signal(1);
|
|
8141
8175
|
isAddingToCart = signal(false);
|
|
8142
8176
|
parameters$ = this.parametersService.getParameters();
|
|
@@ -8155,6 +8189,8 @@ class ProductDetailEcComponent {
|
|
|
8155
8189
|
});
|
|
8156
8190
|
this.injector.get(ChannelService).channel$.subscribe(channel => {
|
|
8157
8191
|
this.showReviews = channel.showReviews;
|
|
8192
|
+
this.showPricesOnlyToLoggedUsers = !!channel.showPricesOnlyToLoggedUsers;
|
|
8193
|
+
this.hidePrices = !!channel.hidePrices;
|
|
8158
8194
|
});
|
|
8159
8195
|
this._optionsService.getCategories().subscribe(res => {
|
|
8160
8196
|
this.categories = res;
|
|
@@ -8478,11 +8514,11 @@ class CartItemEcComponent {
|
|
|
8478
8514
|
return false; // Solo se ejecuta si no se cumple la condición
|
|
8479
8515
|
}
|
|
8480
8516
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CartItemEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8481
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CartItemEcComponent, isStandalone: true, selector: "app-cart-item-ec", inputs: { item: "item", inSidebar: "inSidebar" }, ngImport: i0, template: "@if(!inSidebar){\r\n<p>cart-item-ec works!</p>\r\n}@else{\r\n\r\n<div class=\"row\">\r\n <div class=\"col-3\">\r\n @let product= item.product;\r\n @if(item.variant_id && product.variants.length>0){\r\n <img [src]=\"mediaUrl + product.variants[0].images[0]\" alt=\"\" class=\"img-fluid\">\r\n }@else{\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"\" class=\"img-fluid\">\r\n }\r\n </div>\r\n <div class=\"col-7\">\r\n <div class=\"info d-flex flex-column align-items-start\">\r\n <a class=\"title text-dark text-decoration-none m-0 p-0 h6 mb-0\"\r\n [routerLink]=\"['/product', item.variant_id]\">{{\r\n item.product.name | titlecase\r\n }}</a>\r\n <div class=\"qty1\">\r\n <span>{{ item.product.id}}</span>\r\n </div>\r\n <div class=\"price h6 fw-bold mb-0 pb-0\">{{ item.product.price | ecCurrencySymbol\r\n }}</div>\r\n @if(getVariants(item); as options){\r\n <div class=\"d-flex align-items-center p-0\">\r\n @for(option of options; track $index){\r\n <span class=\"me-1\"> {{option.name | titlecase}}:</span>\r\n @if(option.name == 'COLOR'){\r\n <div class=\"p-2 rounded\" [style.background]=\"'#' + option.value\"></div>\r\n }@else{\r\n <b>{{option.value}}</b>\r\n }\r\n }\r\n </div>\r\n }\r\n <div class=\"campoCantidad mt-2\">\r\n <div class=\"numero\">\r\n <button (click)=\"less(item.product.variants[0]?.stock)\" class=\"btn btn-outline-secondary\"\r\n type=\"button\" id=\"button-addon1\">\r\n <i class=\"fa fa-minus\" aria-hidden=\"true\"></i>\r\n </button>\r\n <input type=\"text\" class=\"form-control text-center\" placeholder=\"\"\r\n aria-label=\"Example text with button addon\" aria-describedby=\"button-addon1\"\r\n [value]=\"item.quantity\" min=\"1\" step=\"1\" [(ngModel)]=\"quantity\"\r\n (change)=\"updateQuantity(item.product.variants[0]?.stock)\">\r\n <button (click)=\"plus(item.product.variants[0]?.stock)\" class=\"btn btn-outline-secondary\"\r\n type=\"button\" id=\"button-addon1\">\r\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-2\">\r\n <a (click)=\"deleteCartItem()\" class=\"btn botBorrar\"><i class=\"fa fa-trash\" aria-hidden=\"true\"></i></a>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n}", styles: [""], dependencies: [{ kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: EcCurrencySymbolPipe, name: "ecCurrencySymbol" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
8517
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CartItemEcComponent, isStandalone: true, selector: "app-cart-item-ec", inputs: { item: "item", inSidebar: "inSidebar" }, ngImport: i0, template: "@if(!inSidebar){\r\n<p>cart-item-ec works!</p>\r\n}@else{\r\n\r\n<div class=\"row\">\r\n <div class=\"col-3\">\r\n @let product= item.product;\r\n @if(item.variant_id && product.variants.length>0){\r\n <img [src]=\"mediaUrl + product.variants[0].images[0]\" alt=\"\" class=\"img-fluid\">\r\n }@else{\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"\" class=\"img-fluid\">\r\n }\r\n </div>\r\n <div class=\"col-7\">\r\n <div class=\"info d-flex flex-column align-items-start\">\r\n @if (item.product.special_mark?.length > 0 || item.product.saleprice) {\r\n <div class=\"marcas\">\r\n <img [src]=\"mediaUrl + (item.product.special_mark?.[0]?.images[0] || '')\" alt=\"\">\r\n\r\n @if (item.product.saleprice) {\r\n <div class=\"tag-dsc\">\r\n {{\r\n createDiscountMessage(item.product.saleprice,\r\n item.product.price)\r\n }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n <a class=\"title text-dark text-decoration-none m-0 p-0 h6 mb-0\"\r\n [routerLink]=\"['/product', item.variant_id]\">{{\r\n item.product.name | titlecase\r\n }}</a>\r\n <div class=\"qty1\">\r\n <span>{{ item.product.id}}</span>\r\n </div>\r\n <div class=\"price h6 fw-bold mb-0 pb-0\">{{ item.product.price | ecCurrencySymbol\r\n }}</div>\r\n @if(getVariants(item); as options){\r\n <div class=\"d-flex align-items-center p-0\">\r\n @for(option of options; track $index){\r\n <span class=\"me-1\"> {{option.name | titlecase}}:</span>\r\n @if(option.name == 'COLOR'){\r\n <div class=\"p-2 rounded\" [style.background]=\"'#' + option.value\"></div>\r\n }@else{\r\n <b>{{option.value}}</b>\r\n }\r\n }\r\n </div>\r\n }\r\n <div class=\"campoCantidad mt-2\">\r\n <div class=\"numero\">\r\n <button (click)=\"less(item.product.variants[0]?.stock)\" class=\"btn btn-outline-secondary\"\r\n type=\"button\" id=\"button-addon1\">\r\n <i class=\"fa fa-minus\" aria-hidden=\"true\"></i>\r\n </button>\r\n <input type=\"text\" class=\"form-control text-center\" placeholder=\"\"\r\n aria-label=\"Example text with button addon\" aria-describedby=\"button-addon1\"\r\n [value]=\"item.quantity\" min=\"1\" step=\"1\" [(ngModel)]=\"quantity\"\r\n (change)=\"updateQuantity(item.product.variants[0]?.stock)\">\r\n <button (click)=\"plus(item.product.variants[0]?.stock)\" class=\"btn btn-outline-secondary\"\r\n type=\"button\" id=\"button-addon1\">\r\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-2\">\r\n <a (click)=\"deleteCartItem()\" class=\"btn botBorrar\"><i class=\"fa fa-trash\" aria-hidden=\"true\"></i></a>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n}", styles: [""], dependencies: [{ kind: "pipe", type: TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: EcCurrencySymbolPipe, name: "ecCurrencySymbol" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
8482
8518
|
}
|
|
8483
8519
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CartItemEcComponent, decorators: [{
|
|
8484
8520
|
type: Component,
|
|
8485
|
-
args: [{ selector: 'app-cart-item-ec', standalone: true, imports: [TitleCasePipe, EcCurrencySymbolPipe, RouterLink, FormsModule], template: "@if(!inSidebar){\r\n<p>cart-item-ec works!</p>\r\n}@else{\r\n\r\n<div class=\"row\">\r\n <div class=\"col-3\">\r\n @let product= item.product;\r\n @if(item.variant_id && product.variants.length>0){\r\n <img [src]=\"mediaUrl + product.variants[0].images[0]\" alt=\"\" class=\"img-fluid\">\r\n }@else{\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"\" class=\"img-fluid\">\r\n }\r\n </div>\r\n <div class=\"col-7\">\r\n <div class=\"info d-flex flex-column align-items-start\">\r\n <a class=\"title text-dark text-decoration-none m-0 p-0 h6 mb-0\"\r\n [routerLink]=\"['/product', item.variant_id]\">{{\r\n item.product.name | titlecase\r\n }}</a>\r\n <div class=\"qty1\">\r\n <span>{{ item.product.id}}</span>\r\n </div>\r\n <div class=\"price h6 fw-bold mb-0 pb-0\">{{ item.product.price | ecCurrencySymbol\r\n }}</div>\r\n @if(getVariants(item); as options){\r\n <div class=\"d-flex align-items-center p-0\">\r\n @for(option of options; track $index){\r\n <span class=\"me-1\"> {{option.name | titlecase}}:</span>\r\n @if(option.name == 'COLOR'){\r\n <div class=\"p-2 rounded\" [style.background]=\"'#' + option.value\"></div>\r\n }@else{\r\n <b>{{option.value}}</b>\r\n }\r\n }\r\n </div>\r\n }\r\n <div class=\"campoCantidad mt-2\">\r\n <div class=\"numero\">\r\n <button (click)=\"less(item.product.variants[0]?.stock)\" class=\"btn btn-outline-secondary\"\r\n type=\"button\" id=\"button-addon1\">\r\n <i class=\"fa fa-minus\" aria-hidden=\"true\"></i>\r\n </button>\r\n <input type=\"text\" class=\"form-control text-center\" placeholder=\"\"\r\n aria-label=\"Example text with button addon\" aria-describedby=\"button-addon1\"\r\n [value]=\"item.quantity\" min=\"1\" step=\"1\" [(ngModel)]=\"quantity\"\r\n (change)=\"updateQuantity(item.product.variants[0]?.stock)\">\r\n <button (click)=\"plus(item.product.variants[0]?.stock)\" class=\"btn btn-outline-secondary\"\r\n type=\"button\" id=\"button-addon1\">\r\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-2\">\r\n <a (click)=\"deleteCartItem()\" class=\"btn botBorrar\"><i class=\"fa fa-trash\" aria-hidden=\"true\"></i></a>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n}" }]
|
|
8521
|
+
args: [{ selector: 'app-cart-item-ec', standalone: true, imports: [TitleCasePipe, EcCurrencySymbolPipe, RouterLink, FormsModule], template: "@if(!inSidebar){\r\n<p>cart-item-ec works!</p>\r\n}@else{\r\n\r\n<div class=\"row\">\r\n <div class=\"col-3\">\r\n @let product= item.product;\r\n @if(item.variant_id && product.variants.length>0){\r\n <img [src]=\"mediaUrl + product.variants[0].images[0]\" alt=\"\" class=\"img-fluid\">\r\n }@else{\r\n <img [src]=\"mediaUrl + product.picturesdefault[0]\" alt=\"\" class=\"img-fluid\">\r\n }\r\n </div>\r\n <div class=\"col-7\">\r\n <div class=\"info d-flex flex-column align-items-start\">\r\n @if (item.product.special_mark?.length > 0 || item.product.saleprice) {\r\n <div class=\"marcas\">\r\n <img [src]=\"mediaUrl + (item.product.special_mark?.[0]?.images[0] || '')\" alt=\"\">\r\n\r\n @if (item.product.saleprice) {\r\n <div class=\"tag-dsc\">\r\n {{\r\n createDiscountMessage(item.product.saleprice,\r\n item.product.price)\r\n }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n <a class=\"title text-dark text-decoration-none m-0 p-0 h6 mb-0\"\r\n [routerLink]=\"['/product', item.variant_id]\">{{\r\n item.product.name | titlecase\r\n }}</a>\r\n <div class=\"qty1\">\r\n <span>{{ item.product.id}}</span>\r\n </div>\r\n <div class=\"price h6 fw-bold mb-0 pb-0\">{{ item.product.price | ecCurrencySymbol\r\n }}</div>\r\n @if(getVariants(item); as options){\r\n <div class=\"d-flex align-items-center p-0\">\r\n @for(option of options; track $index){\r\n <span class=\"me-1\"> {{option.name | titlecase}}:</span>\r\n @if(option.name == 'COLOR'){\r\n <div class=\"p-2 rounded\" [style.background]=\"'#' + option.value\"></div>\r\n }@else{\r\n <b>{{option.value}}</b>\r\n }\r\n }\r\n </div>\r\n }\r\n <div class=\"campoCantidad mt-2\">\r\n <div class=\"numero\">\r\n <button (click)=\"less(item.product.variants[0]?.stock)\" class=\"btn btn-outline-secondary\"\r\n type=\"button\" id=\"button-addon1\">\r\n <i class=\"fa fa-minus\" aria-hidden=\"true\"></i>\r\n </button>\r\n <input type=\"text\" class=\"form-control text-center\" placeholder=\"\"\r\n aria-label=\"Example text with button addon\" aria-describedby=\"button-addon1\"\r\n [value]=\"item.quantity\" min=\"1\" step=\"1\" [(ngModel)]=\"quantity\"\r\n (change)=\"updateQuantity(item.product.variants[0]?.stock)\">\r\n <button (click)=\"plus(item.product.variants[0]?.stock)\" class=\"btn btn-outline-secondary\"\r\n type=\"button\" id=\"button-addon1\">\r\n <i class=\"fa fa-plus\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-2\">\r\n <a (click)=\"deleteCartItem()\" class=\"btn botBorrar\"><i class=\"fa fa-trash\" aria-hidden=\"true\"></i></a>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n}" }]
|
|
8486
8522
|
}], propDecorators: { item: [{
|
|
8487
8523
|
type: Input,
|
|
8488
8524
|
args: [{
|
|
@@ -8832,7 +8868,7 @@ class ShipmentEcComponent {
|
|
|
8832
8868
|
state$ = this._shipmentService.state$;
|
|
8833
8869
|
_hiddenMethods = ['UPS'];
|
|
8834
8870
|
buttonsDisabled = false;
|
|
8835
|
-
methodSelect;
|
|
8871
|
+
methodSelect; // Este guardará el objeto completo del método
|
|
8836
8872
|
loadingInternal = false;
|
|
8837
8873
|
moreInfoInMethod = false;
|
|
8838
8874
|
costos = null;
|
|
@@ -8847,12 +8883,21 @@ class ShipmentEcComponent {
|
|
|
8847
8883
|
this._checkoutService.associatedData$.subscribe(data => {
|
|
8848
8884
|
this.costos = data && data.find((value) => value.type == "shipment") || null;
|
|
8849
8885
|
});
|
|
8886
|
+
// Suscripción al estado para obtener el método seleccionado
|
|
8850
8887
|
this.state$.subscribe(res => {
|
|
8851
|
-
if (res.data) {
|
|
8852
|
-
|
|
8888
|
+
if (res.data && res.data.method) {
|
|
8889
|
+
// Obtener el objeto completo del método basado en el código
|
|
8890
|
+
this.methods$.subscribe(methods => {
|
|
8891
|
+
if (methods && methods.length > 0) {
|
|
8892
|
+
const foundMethod = methods.find((method) => method.code === res.data.method);
|
|
8893
|
+
if (foundMethod) {
|
|
8894
|
+
this.methodSelect = foundMethod;
|
|
8895
|
+
}
|
|
8896
|
+
}
|
|
8897
|
+
});
|
|
8853
8898
|
}
|
|
8854
8899
|
});
|
|
8855
|
-
this.moreInfoInMethod = true;
|
|
8900
|
+
this.moreInfoInMethod = true;
|
|
8856
8901
|
}
|
|
8857
8902
|
filterMethods(methods) {
|
|
8858
8903
|
return methods.filter((method) => !this._hiddenMethods.includes(method.name));
|
|
@@ -8863,17 +8908,13 @@ class ShipmentEcComponent {
|
|
|
8863
8908
|
// Deshabilitar todos los botones
|
|
8864
8909
|
this.buttonsDisabled = true;
|
|
8865
8910
|
this.enabledConfirmButton = false;
|
|
8866
|
-
// setTimeout(() => {
|
|
8867
8911
|
this._shipmentService.setMethod(method.code).then(res => {
|
|
8868
8912
|
this.loadingInternal = false;
|
|
8869
8913
|
this.enabledConfirmButton = true;
|
|
8870
|
-
// Habilitar todos los botones
|
|
8871
8914
|
this.buttonsDisabled = false;
|
|
8872
8915
|
}).catch(error => {
|
|
8873
|
-
// En caso de error, también habilitar los botones
|
|
8874
8916
|
this.loadingInternal = false;
|
|
8875
8917
|
this.buttonsDisabled = false;
|
|
8876
|
-
console.error("Error:", error);
|
|
8877
8918
|
});
|
|
8878
8919
|
}
|
|
8879
8920
|
validName(name) {
|
|
@@ -8885,7 +8926,6 @@ class ShipmentEcComponent {
|
|
|
8885
8926
|
shipping_method_contract: method_name + '_' + contract_data.name,
|
|
8886
8927
|
shipping_method_branch_code: method_name == "branch_delivery" ? contract_data.sucursal_id : contract_data.name,
|
|
8887
8928
|
};
|
|
8888
|
-
//console.log("emitResult", contract_data);
|
|
8889
8929
|
this._shipmentService.setContract(contract_data);
|
|
8890
8930
|
};
|
|
8891
8931
|
verifyValidate(costs, contract, data) {
|