ng-easycommerce-v18 0.2.9 → 0.2.11

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.
@@ -87,14 +87,8 @@ class ApiConstantsService {
87
87
  */
88
88
  CMS_URL = 'cms/';
89
89
  constructor() {
90
- console.log('🚀 ApiConstantsService inicializando...');
91
90
  this._channel = this.environment.channel;
92
91
  this.LOCALE = this.environment.locale;
93
- console.log('🌍 Environment:', this.environment);
94
- // Verificar si window.__env existe
95
- if (typeof window !== 'undefined') {
96
- console.log('🪟 window.__env:', window.__env);
97
- }
98
92
  }
99
93
  /**
100
94
  * URL del backend para realizar las peticiones
@@ -105,14 +99,11 @@ class ApiConstantsService {
105
99
  // Primero intenta leer de window.__env (configurado por Docker)
106
100
  const windowEnv = window.__env;
107
101
  if (windowEnv?.apiUrl) {
108
- console.log('🐳 API_URL desde Docker:', windowEnv.apiUrl);
109
102
  return windowEnv.apiUrl;
110
103
  }
111
104
  }
112
105
  // Fallback al environment (para SSR y como backup)
113
- const apiUrl = this.environment.apiUrl ?? '';
114
- console.log('📦 API_URL desde environment:', apiUrl);
115
- return apiUrl;
106
+ return this.environment.apiUrl ?? '';
116
107
  }
117
108
  /**
118
109
  * Retorna la url base
@@ -6065,12 +6056,26 @@ class BlockBannerFullEcComponent extends BlockEcComponent {
6065
6056
  * Datos del bloque que contiene a los banners
6066
6057
  */
6067
6058
  meta;
6059
+ // =================== PERSONALIZACIÓN DE NAVEGACIÓN ===================
6060
+ /**
6061
+ * Personalización de las flechas de navegación
6062
+ * Por defecto usa símbolos de texto, pero se pueden especificar imágenes
6063
+ */
6064
+ prevArrowImage; // undefined = usa símbolo de texto
6065
+ nextArrowImage; // undefined = usa símbolo de texto
6066
+ prevArrowText = '<';
6067
+ nextArrowText = '>';
6068
+ /**
6069
+ * Opción para habilitar/deshabilitar la navegación personalizada
6070
+ */
6071
+ enableCustomNavigation = true;
6072
+ // ====================================================================
6068
6073
  /**
6069
6074
  * Servicio para Analytics
6070
6075
  */
6071
6076
  analyticsService = inject(AnalyticsService);
6072
6077
  /**
6073
- * Signal utlizado para guarda el contenedor del carrusel
6078
+ * Signal utilizado para guardar el contenedor del carrusel
6074
6079
  */
6075
6080
  swiperElement = signal(null);
6076
6081
  /**
@@ -6079,19 +6084,21 @@ class BlockBannerFullEcComponent extends BlockEcComponent {
6079
6084
  * @returns
6080
6085
  */
6081
6086
  getImage = (banner) => this.getBannerImage(banner);
6087
+ document;
6088
+ platformId = inject(PLATFORM_ID);
6082
6089
  /**
6083
6090
  * Se mappea los banners para sumarle el objeto de translations y que
6084
6091
  * sean mas amigables para su uso.
6085
6092
  */
6086
6093
  ngOnInit() {
6087
- this.banners = this.banners.map((banner) => { return { ...banner, ...banner.translations[this.apiConsts.LOCALE] }; });
6094
+ this.banners = this.banners.map((banner) => {
6095
+ return { ...banner, ...banner.translations[this.apiConsts.LOCALE] };
6096
+ });
6088
6097
  }
6089
- document;
6090
- platformId = inject(PLATFORM_ID);
6091
6098
  /**
6092
- * Ejecuta el método `afterNextRender`para cargar las configuraciones necesarias
6093
- * para el carrusel del banners. Esto debe ser asi debido a que ya debe estar presente
6094
- * en el Dom el element `<swiper-container>` para poder configurarlo.
6099
+ * Ejecuta el método `afterNextRender` para cargar las configuraciones necesarias
6100
+ * para el carrusel de banners. Esto debe ser así debido a que ya debe estar presente
6101
+ * en el DOM el elemento `<swiper-container>` para poder configurarlo.
6095
6102
  */
6096
6103
  constructor() {
6097
6104
  super();
@@ -6099,21 +6106,130 @@ class BlockBannerFullEcComponent extends BlockEcComponent {
6099
6106
  this.document = document;
6100
6107
  }
6101
6108
  afterNextRender(() => {
6102
- const swiperElemConstructor = this.document?.querySelector('#' + this.meta?.code);
6109
+ this.initializeSwiperWithNavigation();
6110
+ });
6111
+ }
6112
+ /**
6113
+ * Inicializa el Swiper con navegación personalizada
6114
+ */
6115
+ initializeSwiperWithNavigation() {
6116
+ const swiperElemConstructor = this.document?.querySelector('#' + this.meta?.code);
6117
+ if (swiperElemConstructor) {
6118
+ // Configurar el Swiper con las opciones base
6103
6119
  Object.assign(swiperElemConstructor, this.swiperOptions());
6104
6120
  this.swiperElement.set(swiperElemConstructor);
6105
6121
  this.swiperElement()?.initialize();
6122
+ // Configurar navegación personalizada si está habilitada
6123
+ if (this.enableCustomNavigation) {
6124
+ setTimeout(() => {
6125
+ this.setupCustomNavigation();
6126
+ }, 200);
6127
+ }
6128
+ }
6129
+ }
6130
+ /**
6131
+ * Configura la navegación personalizada del Swiper para banners
6132
+ */
6133
+ setupCustomNavigation() {
6134
+ const prevButton = this.document?.getElementById(`${this.meta?.code}-prev`);
6135
+ const nextButton = this.document?.getElementById(`${this.meta?.code}-next`);
6136
+ const swiperElement = this.document?.getElementById(this.meta?.code);
6137
+ if (prevButton && nextButton && swiperElement) {
6138
+ console.log('Configurando navegación personalizada para banners:', this.meta?.code);
6139
+ // Actualizar configuración del Swiper existente
6140
+ this.updateSwiperForBanners(swiperElement);
6141
+ // Configurar los event listeners para los botones
6142
+ this.setupBannerNavigationEventListeners(prevButton, nextButton, swiperElement);
6143
+ console.log('Event listeners configurados para navegación de banners');
6144
+ }
6145
+ else {
6146
+ console.log('No se pudieron encontrar los elementos de navegación para banners:', {
6147
+ prevButton: !!prevButton,
6148
+ nextButton: !!nextButton,
6149
+ swiperElement: !!swiperElement
6150
+ });
6151
+ }
6152
+ }
6153
+ /**
6154
+ * Actualiza la configuración del Swiper específicamente para banners
6155
+ */
6156
+ updateSwiperForBanners(swiperElement) {
6157
+ if (swiperElement.swiper) {
6158
+ console.log('Actualizando configuración de Swiper para banners');
6159
+ // Configuración específica para banners
6160
+ swiperElement.swiper.params.slidesPerGroup = 1;
6161
+ swiperElement.swiper.allowSlideNext = true;
6162
+ swiperElement.swiper.allowSlidePrev = true;
6163
+ // Actualizar también los breakpoints si existen
6164
+ if (swiperElement.swiper.params.breakpoints) {
6165
+ Object.keys(swiperElement.swiper.params.breakpoints).forEach(key => {
6166
+ swiperElement.swiper.params.breakpoints[key].slidesPerGroup = 1;
6167
+ });
6168
+ }
6169
+ swiperElement.swiper.update();
6170
+ }
6171
+ }
6172
+ /**
6173
+ * Configura los event listeners para los botones de navegación de banners
6174
+ */
6175
+ setupBannerNavigationEventListeners(prevButton, nextButton, swiperElement) {
6176
+ // Remover event listeners existentes para evitar duplicados
6177
+ const prevClone = prevButton.cloneNode(true);
6178
+ const nextClone = nextButton.cloneNode(true);
6179
+ prevButton.parentNode?.replaceChild(prevClone, prevButton);
6180
+ nextButton.parentNode?.replaceChild(nextClone, nextButton);
6181
+ // Agregar nuevos event listeners
6182
+ prevClone.addEventListener('click', (e) => {
6183
+ e.preventDefault();
6184
+ e.stopPropagation();
6185
+ console.log('Click en botón anterior (banners)');
6186
+ if (swiperElement.swiper) {
6187
+ swiperElement.swiper.slidePrev();
6188
+ }
6189
+ });
6190
+ nextClone.addEventListener('click', (e) => {
6191
+ e.preventDefault();
6192
+ e.stopPropagation();
6193
+ console.log('Click en botón siguiente (banners)');
6194
+ if (swiperElement.swiper) {
6195
+ swiperElement.swiper.slideNext();
6196
+ }
6106
6197
  });
6107
6198
  }
6108
6199
  /**
6109
- * Aplica el evento `select_promotion` junto con el banner que interactua.
6200
+ * Aplica el evento `select_promotion` junto con el banner que interactúa.
6110
6201
  * @param banner
6111
6202
  */
6112
6203
  selectPromotion(banner) {
6113
6204
  this.analyticsService.callEvent('select_promotion', banner);
6114
6205
  }
6206
+ /**
6207
+ * Obtiene la configuración específica del Swiper para banners
6208
+ * Sobrescribe la configuración base si es necesario
6209
+ */
6210
+ getBannerSwiperConfiguration() {
6211
+ return {
6212
+ slidesPerView: 1,
6213
+ spaceBetween: 0,
6214
+ slidesPerGroup: 1,
6215
+ navigation: false, // Deshabilitamos la navegación por defecto
6216
+ pagination: {
6217
+ el: '.swiper-pagination',
6218
+ clickable: true,
6219
+ },
6220
+ loop: true,
6221
+ autoplay: {
6222
+ delay: 5000,
6223
+ disableOnInteraction: false,
6224
+ },
6225
+ effect: 'fade',
6226
+ fadeEffect: {
6227
+ crossFade: true
6228
+ }
6229
+ };
6230
+ }
6115
6231
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlockBannerFullEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6116
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BlockBannerFullEcComponent, isStandalone: true, selector: "app-block-banner-full-ec", inputs: { banners: "banners", meta: "meta" }, usesInheritance: true, ngImport: i0, template: "@if(banners.length > 0) {\r\n <section [ngClass]=\"trimClassBlock(meta?.code)+' container-fluid px-0'\"\r\n [style.background-color]=\"meta.styles?.backgroundColor\"\r\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\r\n\r\n @if (banners.length == 1) {\r\n <!-- si es formato fijo -->\r\n <div class=\"row justify-content-center\">\r\n @let banner = banners[0];\r\n @if(!banners.styles?.button?.text){\r\n <!-- banner sin boton -->\r\n <a [href]=\"banner.url\" >\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#fff' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </a>\r\n }@else {\r\n <!-- banner fijo con boton -->\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p \r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\"\r\n [class]=\"'item-button-full btn btn-light '\">\r\n {{banner.styles.button.text}}\r\n </a> \r\n }\r\n \r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }@else {\r\n <!-- si es carrousel -->\r\n <!-- @if(swiperElement() != null){ -->\r\n <swiper-container init=\"false\" [id]=\"meta?.code\">\r\n @for (banner of banners; track $index) {\r\n <swiper-slide>\r\n <div class=\"item\">\r\n @if (!banner.styles?.button?.text) {\r\n <!-- banner sin boton -->\r\n @if(banner.url){\r\n <a [href]=\"banner.url\" class=\"\">\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n </a>\r\n }@else {\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n }\r\n }@else {\r\n <!-- banner con boton -->\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" />\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\" [class]=\"'item-button-full btn btn-light'\">\r\n {{banner.styles.button.text}}\r\n </a>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </swiper-slide>\r\n }\r\n </swiper-container>\r\n <!-- } -->\r\n \r\n }\r\n </section>\r\n}", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
6232
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BlockBannerFullEcComponent, isStandalone: true, selector: "app-block-banner-full-ec", inputs: { banners: "banners", meta: "meta", prevArrowImage: "prevArrowImage", nextArrowImage: "nextArrowImage", prevArrowText: "prevArrowText", nextArrowText: "nextArrowText", enableCustomNavigation: "enableCustomNavigation" }, usesInheritance: true, ngImport: i0, template: "@if(banners.length > 0) {\r\n <section [ngClass]=\"trimClassBlock(meta?.code)+' container-fluid px-0'\"\r\n [style.background-color]=\"meta.styles?.backgroundColor\"\r\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\r\n\r\n @if (banners.length == 1) {\r\n <!-- si es formato fijo -->\r\n <div class=\"row justify-content-center\">\r\n @let banner = banners[0];\r\n @if(!banners.styles?.button?.text){\r\n <!-- banner sin boton -->\r\n <a [href]=\"banner.url\" >\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#fff' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </a>\r\n }@else {\r\n <!-- banner fijo con boton -->\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p \r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\"\r\n [class]=\"'item-button-full btn btn-light '\">\r\n {{banner.styles.button.text}}\r\n </a> \r\n }\r\n \r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }@else {\r\n <!-- si es carrousel -->\r\n <!-- @if(swiperElement() != null){ -->\r\n <swiper-container init=\"false\" [id]=\"meta?.code\">\r\n @for (banner of banners; track $index) {\r\n <swiper-slide>\r\n <div class=\"item\">\r\n @if (!banner.styles?.button?.text) {\r\n <!-- banner sin boton -->\r\n @if(banner.url){\r\n <a [href]=\"banner.url\" class=\"\">\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n </a>\r\n }@else {\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n }\r\n }@else {\r\n <!-- banner con boton -->\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" />\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\" [class]=\"'item-button-full btn btn-light'\">\r\n {{banner.styles.button.text}}\r\n </a>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </swiper-slide>\r\n }\r\n </swiper-container>\r\n <!-- } -->\r\n \r\n }\r\n </section>\r\n}", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
6117
6233
  }
6118
6234
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlockBannerFullEcComponent, decorators: [{
6119
6235
  type: Component,
@@ -6126,6 +6242,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
6126
6242
  }], meta: [{
6127
6243
  type: Input,
6128
6244
  args: [{ required: true }]
6245
+ }], prevArrowImage: [{
6246
+ type: Input
6247
+ }], nextArrowImage: [{
6248
+ type: Input
6249
+ }], prevArrowText: [{
6250
+ type: Input
6251
+ }], nextArrowText: [{
6252
+ type: Input
6253
+ }], enableCustomNavigation: [{
6254
+ type: Input
6129
6255
  }] } });
6130
6256
 
6131
6257
  register$1();
@@ -7219,7 +7345,7 @@ class BlocksEcComponent {
7219
7345
  }
7220
7346
  }
7221
7347
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlocksEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7222
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BlocksEcComponent, isStandalone: true, selector: "app-blocks-ec", inputs: { templates: "templates", show_loading: "show_loading", section: "section", blockFilters: "blockFilters" }, ngImport: i0, template: "@if(blocks$ | async; as blocks){\r\n @if(blocks.length > 0){\r\n <div class=\"container-fluid px-0\">\r\n <div class=\"row\">\r\n @for (block of blocks; track $index) {\r\n @switch (block.contentType) {\r\n @case ('banner') {\r\n @switch(block.design){\r\n @case ('full') {\r\n <app-block-banner-full-ec [banners]=\"block.banners\" [meta]=\"block\" />\r\n }\r\n @case ('boxes') {\r\n <app-block-banner-box-ec [banners]=\"block.banners\" [meta]=\"block\"/>\r\n }\r\n }\r\n }\r\n @case ('html') {\r\n @if(showBlock(block)){\r\n <app-block-html-ec [html_content]=\"getHTMLContent(block)\" />\r\n }\r\n }\r\n @case ('products') {\r\n <app-block-products-ec [products]=\"block.products?.items\" [meta]=\"block\" />\r\n }\r\n @case ('contact_form') {\r\n @if(isNewsletter(block)){\r\n <app-block-newsletter-ec [block]=\"block.contactForm\" />\r\n } @else {\r\n <app-block-form-contact-ec [block]=\"block.contactForm\" />\r\n }\r\n }\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n}", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BlockBannerFullEcComponent, selector: "app-block-banner-full-ec", inputs: ["banners", "meta"] }, { kind: "component", type: BlockBannerBoxEcComponent, selector: "app-block-banner-box-ec", inputs: ["banners", "meta"] }, { kind: "component", type: BlockHtmlEcComponent, selector: "app-block-html-ec", inputs: ["html_content"] }, { kind: "component", type: BlockProductsEcComponent, selector: "app-block-products-ec", inputs: ["prevArrowImage", "nextArrowImage", "prevArrowText", "nextArrowText", "appProduct", "products", "meta"] }, { kind: "component", type: BlockNewsletterEcComponent, selector: "app-block-newsletter-ec", inputs: ["block", "success_message", "subject"] }, { kind: "component", type: BlockFormContactEcComponent, selector: "app-block-form-contact-ec", inputs: ["block", "success_message", "redirect", "subject"] }] });
7348
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BlocksEcComponent, isStandalone: true, selector: "app-blocks-ec", inputs: { templates: "templates", show_loading: "show_loading", section: "section", blockFilters: "blockFilters" }, ngImport: i0, template: "@if(blocks$ | async; as blocks){\r\n @if(blocks.length > 0){\r\n <div class=\"container-fluid px-0\">\r\n <div class=\"row\">\r\n @for (block of blocks; track $index) {\r\n @switch (block.contentType) {\r\n @case ('banner') {\r\n @switch(block.design){\r\n @case ('full') {\r\n <app-block-banner-full-ec [banners]=\"block.banners\" [meta]=\"block\" />\r\n }\r\n @case ('boxes') {\r\n <app-block-banner-box-ec [banners]=\"block.banners\" [meta]=\"block\"/>\r\n }\r\n }\r\n }\r\n @case ('html') {\r\n @if(showBlock(block)){\r\n <app-block-html-ec [html_content]=\"getHTMLContent(block)\" />\r\n }\r\n }\r\n @case ('products') {\r\n <app-block-products-ec [products]=\"block.products?.items\" [meta]=\"block\" />\r\n }\r\n @case ('contact_form') {\r\n @if(isNewsletter(block)){\r\n <app-block-newsletter-ec [block]=\"block.contactForm\" />\r\n } @else {\r\n <app-block-form-contact-ec [block]=\"block.contactForm\" />\r\n }\r\n }\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n}", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BlockBannerFullEcComponent, selector: "app-block-banner-full-ec", inputs: ["banners", "meta", "prevArrowImage", "nextArrowImage", "prevArrowText", "nextArrowText", "enableCustomNavigation"] }, { kind: "component", type: BlockBannerBoxEcComponent, selector: "app-block-banner-box-ec", inputs: ["banners", "meta"] }, { kind: "component", type: BlockHtmlEcComponent, selector: "app-block-html-ec", inputs: ["html_content"] }, { kind: "component", type: BlockProductsEcComponent, selector: "app-block-products-ec", inputs: ["prevArrowImage", "nextArrowImage", "prevArrowText", "nextArrowText", "appProduct", "products", "meta"] }, { kind: "component", type: BlockNewsletterEcComponent, selector: "app-block-newsletter-ec", inputs: ["block", "success_message", "subject"] }, { kind: "component", type: BlockFormContactEcComponent, selector: "app-block-form-contact-ec", inputs: ["block", "success_message", "redirect", "subject"] }] });
7223
7349
  }
7224
7350
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlocksEcComponent, decorators: [{
7225
7351
  type: Component,