ng-easycommerce-v18 0.2.0 → 0.2.1

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.
@@ -397,6 +397,7 @@
397
397
  "product-review":"Reseña de Producto",
398
398
  "write-a-review": "Escribir una reseña",
399
399
  "submit-review": "Enviar reseña",
400
+ "thanks-send-review": "Gracias por enviar su reseña",
400
401
  "rating": "Calificación",
401
402
  "summary": "Resumen",
402
403
  "detail": "Detalle",
@@ -407,5 +408,9 @@
407
408
  "login-success": "Inicio de sesión exitoso",
408
409
  "logout-success": "Sesión cerrada exitosamente",
409
410
  "quantity-not-exceeded": "La cantidad mínima de compra es {{amount}}",
410
- "login-form-incomplete": "El formulario de inicio de sesión está incompleto o contiene datos inválidos."
411
+ "login-form-incomplete": "El formulario de inicio de sesión está incompleto o contiene datos inválidos.",
412
+ "maintenance":{
413
+ "message": "Estamos realizando tareas de mantenimiento. Pronto estaremos de vuelta.",
414
+ "contact": "Hasta regresar, puedes contactarnos vía correo electrónico:"
415
+ }
411
416
  }
@@ -1,11 +1,12 @@
1
- import { Component, inject, Input, CUSTOM_ELEMENTS_SCHEMA, signal, PLATFORM_ID, afterNextRender } from '@angular/core';
1
+ import { Component, inject, Input, CUSTOM_ELEMENTS_SCHEMA, signal, PLATFORM_ID } from '@angular/core';
2
2
  import { AnalyticsService, ProductsService } from '../../ec-services';
3
3
  import { Router } from '@angular/router';
4
4
  import { BehaviorSubject, take } from 'rxjs';
5
5
  import { AsyncPipe, CommonModule, isPlatformBrowser } from '@angular/common';
6
6
  import { ProductEcComponent } from '../product-ec/product-ec.component';
7
+ import { BlockEcComponent } from '../abstractions-components';
7
8
  import * as i0 from "@angular/core";
8
- export class RelatedProductsEcComponent {
9
+ export class RelatedProductsEcComponent extends BlockEcComponent {
9
10
  _productsService = inject(ProductsService);
10
11
  _analyticsService = inject(AnalyticsService);
11
12
  _router = inject(Router);
@@ -23,10 +24,12 @@ export class RelatedProductsEcComponent {
23
24
  _relatedProductsSubject = new BehaviorSubject([]);
24
25
  relatedProducts$ = this._relatedProductsSubject.asObservable();
25
26
  keywordsToCompare = ['compare', 'comparar', 'comparacion', 'comparación', 'compared'];
26
- swiperRelatedOptions = () => {
27
+ swiperOptions = () => {
27
28
  return {
28
29
  navigation: true,
29
30
  loop: true,
31
+ autoHeight: true,
32
+ autoplay: true,
30
33
  breakpoints: {
31
34
  0: {
32
35
  slidesPerView: 1
@@ -35,10 +38,10 @@ export class RelatedProductsEcComponent {
35
38
  slidesPerView: 2
36
39
  },
37
40
  768: {
38
- slidesPerView: 3,
41
+ slidesPerView: 2,
39
42
  },
40
43
  992: {
41
- slidesPerView: 4,
44
+ slidesPerView: 3,
42
45
  },
43
46
  1200: {
44
47
  slidesPerView: 4,
@@ -47,18 +50,11 @@ export class RelatedProductsEcComponent {
47
50
  };
48
51
  };
49
52
  constructor() {
53
+ super();
50
54
  if (isPlatformBrowser(this.platformId)) {
51
55
  this.document = document;
52
56
  }
53
- afterNextRender(() => {
54
- const swiperElemConstructor = this.document?.querySelector('#relatedProductsSwiper');
55
- console.log('swiperElemConstructor', swiperElemConstructor);
56
- if (swiperElemConstructor) {
57
- Object.assign(swiperElemConstructor, this.swiperRelatedOptions());
58
- this.swiperElement.set(swiperElemConstructor);
59
- this.swiperElement()?.initialize();
60
- }
61
- });
57
+ // Swiper initialization moved to initSwiper() method called after data loads
62
58
  }
63
59
  ngOnInit() {
64
60
  console.log(this.productID);
@@ -70,8 +66,23 @@ export class RelatedProductsEcComponent {
70
66
  const relatedProducts = res.filter((elem) => !this.includeKeyword(elem.title.toLowerCase()));
71
67
  this._relatedProductsSubject.next(relatedProducts);
72
68
  res.map((products) => this._analyticsService.callEvent('view_item_list', { products: products.items, item_list_name: products.title || 'Related Products', item_list_id: products.id || 'related-products' }));
69
+ // Inicializar swiper después de que los datos estén disponibles
70
+ setTimeout(() => {
71
+ this.initSwiper();
72
+ }, 100);
73
73
  });
74
74
  }
75
+ initSwiper() {
76
+ if (isPlatformBrowser(this.platformId)) {
77
+ const swiperElemConstructor = this.document?.querySelector('#relatedProductsSwiper');
78
+ console.log('swiperElemConstructor', swiperElemConstructor);
79
+ if (swiperElemConstructor) {
80
+ Object.assign(swiperElemConstructor, this.swiperOptions());
81
+ this.swiperElement.set(swiperElemConstructor);
82
+ this.swiperElement()?.initialize();
83
+ }
84
+ }
85
+ }
75
86
  includeKeyword = (word) => {
76
87
  let result = false;
77
88
  this.keywordsToCompare.forEach(keyword => {
@@ -80,7 +91,7 @@ export class RelatedProductsEcComponent {
80
91
  return result;
81
92
  };
82
93
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelatedProductsEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
83
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RelatedProductsEcComponent, isStandalone: true, selector: "app-related-products-ec", inputs: { appProduct: "appProduct", productID: "productID" }, ngImport: i0, template: "\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
94
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RelatedProductsEcComponent, isStandalone: true, selector: "app-related-products-ec", inputs: { appProduct: "appProduct", productID: "productID" }, usesInheritance: true, ngImport: i0, template: "\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
84
95
  }
85
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelatedProductsEcComponent, decorators: [{
86
97
  type: Component,
@@ -93,4 +104,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
93
104
  required: true
94
105
  }]
95
106
  }] } });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRlZC1wcm9kdWN0cy1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9yZWxhdGVkLXByb2R1Y3RzLWVjL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcmVsYXRlZC1wcm9kdWN0cy1lYy9yZWxhdGVkLXByb2R1Y3RzLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBWXhFLE1BQU0sT0FBTywwQkFBMEI7SUFDM0IsZ0JBQWdCLEdBQW9CLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUMzRCxpQkFBaUIsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDOUQsT0FBTyxHQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN2Qzs7R0FFRDtJQUNILGFBQWEsR0FBRyxN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LEtBQUssSUFBSSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUN0TixDQUFDLENBQ0osQ0FBQTtJQUNMLENBQUM7SUFFRCxjQUFjLEdBQUcsQ0FBQyxJQUFXLEVBQUUsRUFBRTtRQUM3QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBRSxPQUFPLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDakQsQ0FBQyxDQUFDLENBQUE7UUFDRixPQUFPLE1BQU0sQ0FBQTtJQUNqQixDQUFDLENBQUE7d0dBbEZRLDBCQUEwQjs0RkFBMUIsMEJBQTBCLGlKQ2xCdkMsTUFDQSx5RERZNkMsWUFBWTs7NEZBSzVDLDBCQUEwQjtrQkFSdEMsU0FBUzsrQkFDSSx5QkFBeUIsY0FDdkIsSUFBSSxXQUNQLENBQUMsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxXQUc3QyxDQUFDLHNCQUFzQixDQUFDO3dEQWF4QixVQUFVO3NCQUFsQixLQUFLO2dCQUdILFNBQVM7c0JBRlgsS0FBSzt1QkFBQzt3QkFDSCxRQUFRLEVBQUUsSUFBSTtxQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIFRlbXBsYXRlUmVmLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBzaWduYWwsIFBMQVRGT1JNX0lELCBhZnRlck5leHRSZW5kZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSwgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXN5bmNQaXBlLCBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBQcm9kdWN0RWNDb21wb25lbnQgfSBmcm9tICcuLi9wcm9kdWN0LWVjL3Byb2R1Y3QtZWMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3dpcGVyQ29udGFpbmVyIH0gZnJvbSAnc3dpcGVyL2VsZW1lbnQnO1xyXG5pbXBvcnQgeyBTd2lwZXJPcHRpb25zIH0gZnJvbSAnc3dpcGVyL3R5cGVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtcmVsYXRlZC1wcm9kdWN0cy1lYycsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0FzeW5jUGlwZSwgUHJvZHVjdEVjQ29tcG9uZW50LCBDb21tb25Nb2R1bGVdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50LnNjc3MnLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWxhdGVkUHJvZHVjdHNFY0NvbXBvbmVudCB7XHJcbiAgICBwcml2YXRlIF9wcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSA9IGluamVjdChQcm9kdWN0c1NlcnZpY2UpXHJcbiAgICBwcml2YXRlIF9hbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpXHJcbiAgICBcdC8qKlxyXG5cdCAqIFNpZ25hbCB1dGxpemFkbyBwYXJhIGd1YXJkYSBlbCBjb250ZW5lZG9yIGRlbCBjYXJydXNlbFxyXG5cdCAqL1xyXG5cdHN3aXBlckVsZW1lbnQgPSBzaWduYWw8U3dpcGVyQ29udGFpbmVyIHwgbnVsbD4obnVsbClcclxuICAgIC8qKlxyXG4gICAgICogSW5wdXQgcXVlIHJlY2liZSB1biB0ZW1wbGF0ZSBwYXJhIGVsIHByb2R1Y3RvLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBhcHBQcm9kdWN0OiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICAgQElucHV0KHtcclxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSkgcHJvZHVjdElEOiBhbnk7XHJcblxyXG4gICAgICAgIHByaXZhdGUgZG9jdW1lbnQ/OiBEb2N1bWVudDtcclxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSA9IGluamVjdChQTEFURk9STV9JRClcclxuICAgIFxyXG4gICAgcHJpdmF0ZSBfcmVsYXRlZFByb2R1Y3RzU3ViamVjdDpCZWhhdmlvclN1YmplY3Q8UHJvZHVjdFtdPiA9ICBuZXcgQmVoYXZpb3JTdWJqZWN0PFByb2R1Y3RbXT4oW10pXHJcbiAgICBwdWJsaWMgcmVsYXRlZFByb2R1Y3RzJDpPYnNlcnZhYmxlPGFueVtdPiA9IHRoaXMuX3JlbGF0ZWRQcm9kdWN0c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwcml2YXRlIGtleXdvcmRzVG9Db21wYXJlOnN0cmluZ1tdID0gWydjb21wYXJlJywgJ2NvbXBhcmFyJywgJ2NvbXBhcmFjaW9uJywgJ2NvbXBhcmFjacOzbicsICdjb21wYXJlZCddO1xyXG4gICAgc3dpcGVyUmVsYXRlZE9wdGlvbnMgPSAoKTogU3dpcGVyT3B0aW9ucyA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmF2aWdhdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgbG9vcDogdHJ1ZSxcclxuICAgICAgICAgICAgYnJlYWtwb2ludHM6IHtcclxuICAgICAgICAgICAgICAgIDA6IHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAxXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgNTc2OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIDc2ODoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDMsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgOTkyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAxMjAwOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNCxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudFxyXG4gICAgICAgIH1cclxuICAgICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzd2lwZXJFbGVtQ29uc3RydWN0b3IgPSB0aGlzLmRvY3VtZW50Py5xdWVyeVNlbGVjdG9yKCcjcmVsYXRlZFByb2R1Y3RzU3dpcGVyJylcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3N3aXBlckVsZW1Db25zdHJ1Y3RvcicsIHN3aXBlckVsZW1Db25zdHJ1Y3RvcilcclxuICAgICAgICAgICAgaWYgKHN3aXBlckVsZW1Db25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzd2lwZXJFbGVtQ29uc3RydWN0b3IhLCB0aGlzLnN3aXBlclJlbGF0ZWRPcHRpb25zKCkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN3aXBlckVsZW1lbnQuc2V0KHN3aXBlckVsZW1Db25zdHJ1Y3RvciBhcyBTd2lwZXJDb250YWluZXIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN3aXBlckVsZW1lbnQoKT8uaW5pdGlhbGl6ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnByb2R1Y3RJRClcclxuICAgICAgICB0aGlzLmxvYWQodGhpcy5wcm9kdWN0SUQpXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkKHByb2R1Y3RfaWQ6YW55KSB7XHJcbiAgICAgICAgdGhpcy5fcHJvZHVjdHNTZXJ2aWNlLmdldFJlbGF0ZWRQcm9kdWN0cyhwcm9kdWN0X2lkKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXNwb25zZScscmVzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRQcm9kdWN0czphbnkgPSByZXMuZmlsdGVyKChlbGVtOmFueSkgPT4gIXRoaXMuaW5jbHVkZUtleXdvcmQoZWxlbS50aXRsZS50b0xvd2VyQ2FzZSgpKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbGF0ZWRQcm9kdWN0c1N1YmplY3QubmV4dChyZWxhdGVkUHJvZHVjdHMpXHJcbiAgICAgICAgICAgICAgICByZXMubWFwKChwcm9kdWN0czphbnkpID0+IHRoaXMuX2FuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCd2aWV3X2l0ZW1fbGlzdCcsIHsgcHJvZHVjdHM6IHByb2R1Y3RzLml0ZW1zLCBpdGVtX2xpc3RfbmFtZTogcHJvZHVjdHMudGl0bGUgfHwgJ1JlbGF0ZWQgUHJvZHVjdHMnLCBpdGVtX2xpc3RfaWQ6IHByb2R1Y3RzLmlkIHx8ICdyZWxhdGVkLXByb2R1Y3RzJyB9KSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBpbmNsdWRlS2V5d29yZCA9ICh3b3JkOnN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMua2V5d29yZHNUb0NvbXBhcmUuZm9yRWFjaCgga2V5d29yZCA9PiB7XHJcbiAgICAgICAgICAgIHdvcmQuaW5jbHVkZXMoa2V5d29yZCkgPyByZXN1bHQgPSB0cnVlIDogbnVsbFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG59XHJcblxyXG4iLCJcclxuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRlZC1wcm9kdWN0cy1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9yZWxhdGVkLXByb2R1Y3RzLWVjL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvcmVsYXRlZC1wcm9kdWN0cy1lYy9yZWxhdGVkLXByb2R1Y3RzLWVjLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFtQixNQUFNLGVBQWUsQ0FBQztBQUNwSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBVTlELE1BQU0sT0FBTywwQkFBMkIsU0FBUSxnQkFBZ0I7SUFDcEQsZ0JBQWdCLEdBQW9CLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUMzRCxpQkFBaUIsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDOUQsT0FBTyxHQUFXLE1BQU0s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WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIFRlbXBsYXRlUmVmLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBzaWduYWwsIFBMQVRGT1JNX0lELCBhZnRlck5leHRSZW5kZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSwgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXN5bmNQaXBlLCBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBQcm9kdWN0RWNDb21wb25lbnQgfSBmcm9tICcuLi9wcm9kdWN0LWVjL3Byb2R1Y3QtZWMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3dpcGVyQ29udGFpbmVyIH0gZnJvbSAnc3dpcGVyL2VsZW1lbnQnO1xyXG5pbXBvcnQgeyBTd2lwZXJPcHRpb25zIH0gZnJvbSAnc3dpcGVyL3R5cGVzJztcclxuaW1wb3J0IHsgQmxvY2tFY0NvbXBvbmVudCB9IGZyb20gJy4uL2Fic3RyYWN0aW9ucy1jb21wb25lbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtcmVsYXRlZC1wcm9kdWN0cy1lYycsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0FzeW5jUGlwZSwgUHJvZHVjdEVjQ29tcG9uZW50LCBDb21tb25Nb2R1bGVdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL3JlbGF0ZWQtcHJvZHVjdHMtZWMuY29tcG9uZW50LnNjc3MnLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWxhdGVkUHJvZHVjdHNFY0NvbXBvbmVudCBleHRlbmRzIEJsb2NrRWNDb21wb25lbnR7XHJcbiAgICBwcml2YXRlIF9wcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSA9IGluamVjdChQcm9kdWN0c1NlcnZpY2UpXHJcbiAgICBwcml2YXRlIF9hbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpXHJcbiAgICBcdC8qKlxyXG5cdCAqIFNpZ25hbCB1dGxpemFkbyBwYXJhIGd1YXJkYSBlbCBjb250ZW5lZG9yIGRlbCBjYXJydXNlbFxyXG5cdCAqL1xyXG5cdHN3aXBlckVsZW1lbnQgPSBzaWduYWw8U3dpcGVyQ29udGFpbmVyIHwgbnVsbD4obnVsbClcclxuICAgIC8qKlxyXG4gICAgICogSW5wdXQgcXVlIHJlY2liZSB1biB0ZW1wbGF0ZSBwYXJhIGVsIHByb2R1Y3RvLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBhcHBQcm9kdWN0OiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICAgQElucHV0KHtcclxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSkgcHJvZHVjdElEOiBhbnk7XHJcblxyXG4gICAgICAgIHByaXZhdGUgZG9jdW1lbnQ/OiBEb2N1bWVudDtcclxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSA9IGluamVjdChQTEFURk9STV9JRClcclxuICAgIFxyXG4gICAgcHJpdmF0ZSBfcmVsYXRlZFByb2R1Y3RzU3ViamVjdDpCZWhhdmlvclN1YmplY3Q8UHJvZHVjdFtdPiA9ICBuZXcgQmVoYXZpb3JTdWJqZWN0PFByb2R1Y3RbXT4oW10pXHJcbiAgICBwdWJsaWMgcmVsYXRlZFByb2R1Y3RzJDpPYnNlcnZhYmxlPGFueVtdPiA9IHRoaXMuX3JlbGF0ZWRQcm9kdWN0c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwcml2YXRlIGtleXdvcmRzVG9Db21wYXJlOnN0cmluZ1tdID0gWydjb21wYXJlJywgJ2NvbXBhcmFyJywgJ2NvbXBhcmFjaW9uJywgJ2NvbXBhcmFjacOzbicsICdjb21wYXJlZCddO1xyXG4gICAgb3ZlcnJpZGUgc3dpcGVyT3B0aW9ucyA9ICgpOiBTd2lwZXJPcHRpb25zID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYXZpZ2F0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICBsb29wOiB0cnVlLFxyXG4gICAgICAgICAgICBhdXRvSGVpZ2h0OiB0cnVlLFxyXG4gICAgICAgICAgICBhdXRvcGxheTogdHJ1ZSxcclxuICAgICAgICAgICAgYnJlYWtwb2ludHM6IHtcclxuICAgICAgICAgICAgICAgIDA6IHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAxXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgNTc2OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIDc2ODoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgOTkyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAxMjAwOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNCxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKClcclxuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnRcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gU3dpcGVyIGluaXRpYWxpemF0aW9uIG1vdmVkIHRvIGluaXRTd2lwZXIoKSBtZXRob2QgY2FsbGVkIGFmdGVyIGRhdGEgbG9hZHNcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnByb2R1Y3RJRClcclxuICAgICAgICB0aGlzLmxvYWQodGhpcy5wcm9kdWN0SUQpXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkKHByb2R1Y3RfaWQ6YW55KSB7XHJcbiAgICAgICAgdGhpcy5fcHJvZHVjdHNTZXJ2aWNlLmdldFJlbGF0ZWRQcm9kdWN0cyhwcm9kdWN0X2lkKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXNwb25zZScscmVzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRQcm9kdWN0czphbnkgPSByZXMuZmlsdGVyKChlbGVtOmFueSkgPT4gIXRoaXMuaW5jbHVkZUtleXdvcmQoZWxlbS50aXRsZS50b0xvd2VyQ2FzZSgpKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlbGF0ZWRQcm9kdWN0c1N1YmplY3QubmV4dChyZWxhdGVkUHJvZHVjdHMpXHJcbiAgICAgICAgICAgICAgICByZXMubWFwKChwcm9kdWN0czphbnkpID0+IHRoaXMuX2FuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCd2aWV3X2l0ZW1fbGlzdCcsIHsgcHJvZHVjdHM6IHByb2R1Y3RzLml0ZW1zLCBpdGVtX2xpc3RfbmFtZTogcHJvZHVjdHMudGl0bGUgfHwgJ1JlbGF0ZWQgUHJvZHVjdHMnLCBpdGVtX2xpc3RfaWQ6IHByb2R1Y3RzLmlkIHx8ICdyZWxhdGVkLXByb2R1Y3RzJyB9KSlcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gSW5pY2lhbGl6YXIgc3dpcGVyIGRlc3B1w6lzIGRlIHF1ZSBsb3MgZGF0b3MgZXN0w6luIGRpc3BvbmlibGVzXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRTd2lwZXIoKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0U3dpcGVyKCkge1xyXG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN3aXBlckVsZW1Db25zdHJ1Y3RvciA9IHRoaXMuZG9jdW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJyNyZWxhdGVkUHJvZHVjdHNTd2lwZXInKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3dpcGVyRWxlbUNvbnN0cnVjdG9yJywgc3dpcGVyRWxlbUNvbnN0cnVjdG9yKVxyXG4gICAgICAgICAgICBpZiAoc3dpcGVyRWxlbUNvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN3aXBlckVsZW1Db25zdHJ1Y3RvciEsIHRoaXMuc3dpcGVyT3B0aW9ucygpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zd2lwZXJFbGVtZW50LnNldChzd2lwZXJFbGVtQ29uc3RydWN0b3IgYXMgU3dpcGVyQ29udGFpbmVyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zd2lwZXJFbGVtZW50KCk/LmluaXRpYWxpemUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbmNsdWRlS2V5d29yZCA9ICh3b3JkOnN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMua2V5d29yZHNUb0NvbXBhcmUuZm9yRWFjaCgga2V5d29yZCA9PiB7XHJcbiAgICAgICAgICAgIHdvcmQuaW5jbHVkZXMoa2V5d29yZCkgPyByZXN1bHQgPSB0cnVlIDogbnVsbFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG59XHJcblxyXG4iLCJcclxuIl19
@@ -9225,7 +9225,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
9225
9225
  args: [{ selector: 'app-sidebar-ec', standalone: true, imports: [RouterLink, AsyncPipe, CouponEcComponent, CartItemEcComponent, EcCurrencySymbolPipe, CouponEcComponent], template: "<div class=\"nav nav-sidebar py-4 mx-0 position-relative text-center shadow-sm border-bottom d-flex justify-content-center\">\r\n <h2 class=\"row text-center\">Mi pedido</h2>\r\n <div class=\" me-3 closeCart position-absolute end-0\" data-bs-dismiss=\"offcanvas\" aria-label=\"Close\">\r\n <i class=\"fa fa-times-circle fs-5\" aria-hidden=\"true\"></i>\r\n </div>\r\n</div>\r\n\r\n\r\n@if(cartItems$ | async; as items){\r\n @if(items.length > 0){\r\n <!-- PRODUCTO -->\r\n <div class=\"d-flex flex-column mb-4 items border-bottom\">\r\n @for(item of items; track $index; let i = $index){\r\n <div class=\"productoCarrito mt-1 mb-2 w-100\">\r\n <app-cart-item-ec [inSidebar]=\"true\" [item]=\"item\"></app-cart-item-ec>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"d-flex mx-4 justify-content-between mt-2 \">\r\n <p class=\"fw-bold\">Subtotal</p>\r\n <p class=\"fw-700\">{{ (subTotalAmount$ | async) | ecCurrencySymbol}}</p>\r\n </div>\r\n <div class=\"mx-4 bordeBot py-2\">\r\n <app-coupon-ec></app-coupon-ec>\r\n </div>\r\n <div class=\"d-flex mx-4 justify-content-between bordeBot2 mt-2\">\r\n <p class=\"fw-bold\">Descuentos:</p>\r\n <p>{{ (totalPromotionAmount$ | async) |ecCurrencySymbol }}</p>\r\n </div>\r\n\r\n <div class=\"d-flex mx-4 justify-content-between bordeBot2 pt-2\">\r\n <!-- @if(this._cartService.cart.source.value.couponCode){\r\n <a class=\"quitar-cupon text-dark\" role=\"button\"\r\n (click)=\"removeCoupon()\">(Quitar cup\u00F3n)</a>\r\n } -->\r\n </div>\r\n <div class=\"d-flex mx-4 justify-content-between mb-3 mt-2\">\r\n <p class=\"fw-bold h5\">TOTAL</p>\r\n <p class=\"fw-bold h5\">{{(totalAmount$ | async) | ecCurrencySymbol}}</p>\r\n </div>\r\n <div class=\"d-flex flex-column mx-4 justify-content-between mb-3\" data-bs-dismiss=\"offcanvas\" aria-label=\"Close\">\r\n <a [routerLink]=\"['/cart']\" class=\"btn btnPedido mb-2\">FINALIZAR PEDIDO</a>\r\n <a [routerLink]=\"['/collection']\" class=\"btn btnSeguir mb-3\">SEGUIR COMPRANDO</a>\r\n </div>\r\n\r\n\r\n } @else {\r\n <div class=\"container-lg px-lg-0 px-md-4 my-5\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <h5 class=\"text-center mb-sm-4 text-uppercase\"> \u00B7 Su carrito se\r\n encuentra vac\u00EDo \u00B7 </h5>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n}" }]
9226
9226
  }] });
9227
9227
 
9228
- class RelatedProductsEcComponent {
9228
+ class RelatedProductsEcComponent extends BlockEcComponent {
9229
9229
  _productsService = inject(ProductsService);
9230
9230
  _analyticsService = inject(AnalyticsService);
9231
9231
  _router = inject(Router);
@@ -9243,10 +9243,12 @@ class RelatedProductsEcComponent {
9243
9243
  _relatedProductsSubject = new BehaviorSubject([]);
9244
9244
  relatedProducts$ = this._relatedProductsSubject.asObservable();
9245
9245
  keywordsToCompare = ['compare', 'comparar', 'comparacion', 'comparación', 'compared'];
9246
- swiperRelatedOptions = () => {
9246
+ swiperOptions = () => {
9247
9247
  return {
9248
9248
  navigation: true,
9249
9249
  loop: true,
9250
+ autoHeight: true,
9251
+ autoplay: true,
9250
9252
  breakpoints: {
9251
9253
  0: {
9252
9254
  slidesPerView: 1
@@ -9255,10 +9257,10 @@ class RelatedProductsEcComponent {
9255
9257
  slidesPerView: 2
9256
9258
  },
9257
9259
  768: {
9258
- slidesPerView: 3,
9260
+ slidesPerView: 2,
9259
9261
  },
9260
9262
  992: {
9261
- slidesPerView: 4,
9263
+ slidesPerView: 3,
9262
9264
  },
9263
9265
  1200: {
9264
9266
  slidesPerView: 4,
@@ -9267,18 +9269,11 @@ class RelatedProductsEcComponent {
9267
9269
  };
9268
9270
  };
9269
9271
  constructor() {
9272
+ super();
9270
9273
  if (isPlatformBrowser(this.platformId)) {
9271
9274
  this.document = document;
9272
9275
  }
9273
- afterNextRender(() => {
9274
- const swiperElemConstructor = this.document?.querySelector('#relatedProductsSwiper');
9275
- console.log('swiperElemConstructor', swiperElemConstructor);
9276
- if (swiperElemConstructor) {
9277
- Object.assign(swiperElemConstructor, this.swiperRelatedOptions());
9278
- this.swiperElement.set(swiperElemConstructor);
9279
- this.swiperElement()?.initialize();
9280
- }
9281
- });
9276
+ // Swiper initialization moved to initSwiper() method called after data loads
9282
9277
  }
9283
9278
  ngOnInit() {
9284
9279
  console.log(this.productID);
@@ -9290,8 +9285,23 @@ class RelatedProductsEcComponent {
9290
9285
  const relatedProducts = res.filter((elem) => !this.includeKeyword(elem.title.toLowerCase()));
9291
9286
  this._relatedProductsSubject.next(relatedProducts);
9292
9287
  res.map((products) => this._analyticsService.callEvent('view_item_list', { products: products.items, item_list_name: products.title || 'Related Products', item_list_id: products.id || 'related-products' }));
9288
+ // Inicializar swiper después de que los datos estén disponibles
9289
+ setTimeout(() => {
9290
+ this.initSwiper();
9291
+ }, 100);
9293
9292
  });
9294
9293
  }
9294
+ initSwiper() {
9295
+ if (isPlatformBrowser(this.platformId)) {
9296
+ const swiperElemConstructor = this.document?.querySelector('#relatedProductsSwiper');
9297
+ console.log('swiperElemConstructor', swiperElemConstructor);
9298
+ if (swiperElemConstructor) {
9299
+ Object.assign(swiperElemConstructor, this.swiperOptions());
9300
+ this.swiperElement.set(swiperElemConstructor);
9301
+ this.swiperElement()?.initialize();
9302
+ }
9303
+ }
9304
+ }
9295
9305
  includeKeyword = (word) => {
9296
9306
  let result = false;
9297
9307
  this.keywordsToCompare.forEach(keyword => {
@@ -9300,7 +9310,7 @@ class RelatedProductsEcComponent {
9300
9310
  return result;
9301
9311
  };
9302
9312
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelatedProductsEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9303
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RelatedProductsEcComponent, isStandalone: true, selector: "app-related-products-ec", inputs: { appProduct: "appProduct", productID: "productID" }, ngImport: i0, template: "\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
9313
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RelatedProductsEcComponent, isStandalone: true, selector: "app-related-products-ec", inputs: { appProduct: "appProduct", productID: "productID" }, usesInheritance: true, ngImport: i0, template: "\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
9304
9314
  }
9305
9315
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelatedProductsEcComponent, decorators: [{
9306
9316
  type: Component,