ng-easycommerce-v18 0.2.10 → 0.2.12
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 +5 -1
- package/esm2022/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.mjs +146 -11
- package/esm2022/lib/ec-components/blocks-ec/blocks-ec.component.mjs +2 -2
- package/esm2022/lib/ec-components/widgets-ec/price-ec/price-ec.component.mjs +9 -3
- package/fesm2022/ng-easycommerce-v18.mjs +153 -13
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
- package/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.d.ts +41 -8
- package/lib/ec-components/widgets-ec/price-ec/price-ec.component.d.ts +3 -0
- package/package.json +1 -1
|
@@ -6056,12 +6056,26 @@ class BlockBannerFullEcComponent extends BlockEcComponent {
|
|
|
6056
6056
|
* Datos del bloque que contiene a los banners
|
|
6057
6057
|
*/
|
|
6058
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
|
+
// ====================================================================
|
|
6059
6073
|
/**
|
|
6060
6074
|
* Servicio para Analytics
|
|
6061
6075
|
*/
|
|
6062
6076
|
analyticsService = inject(AnalyticsService);
|
|
6063
6077
|
/**
|
|
6064
|
-
* Signal
|
|
6078
|
+
* Signal utilizado para guardar el contenedor del carrusel
|
|
6065
6079
|
*/
|
|
6066
6080
|
swiperElement = signal(null);
|
|
6067
6081
|
/**
|
|
@@ -6070,19 +6084,21 @@ class BlockBannerFullEcComponent extends BlockEcComponent {
|
|
|
6070
6084
|
* @returns
|
|
6071
6085
|
*/
|
|
6072
6086
|
getImage = (banner) => this.getBannerImage(banner);
|
|
6087
|
+
document;
|
|
6088
|
+
platformId = inject(PLATFORM_ID);
|
|
6073
6089
|
/**
|
|
6074
6090
|
* Se mappea los banners para sumarle el objeto de translations y que
|
|
6075
6091
|
* sean mas amigables para su uso.
|
|
6076
6092
|
*/
|
|
6077
6093
|
ngOnInit() {
|
|
6078
|
-
this.banners = this.banners.map((banner) => {
|
|
6094
|
+
this.banners = this.banners.map((banner) => {
|
|
6095
|
+
return { ...banner, ...banner.translations[this.apiConsts.LOCALE] };
|
|
6096
|
+
});
|
|
6079
6097
|
}
|
|
6080
|
-
document;
|
|
6081
|
-
platformId = inject(PLATFORM_ID);
|
|
6082
6098
|
/**
|
|
6083
|
-
* Ejecuta el método `afterNextRender`para cargar las configuraciones necesarias
|
|
6084
|
-
* para el carrusel
|
|
6085
|
-
* en el
|
|
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.
|
|
6086
6102
|
*/
|
|
6087
6103
|
constructor() {
|
|
6088
6104
|
super();
|
|
@@ -6090,21 +6106,130 @@ class BlockBannerFullEcComponent extends BlockEcComponent {
|
|
|
6090
6106
|
this.document = document;
|
|
6091
6107
|
}
|
|
6092
6108
|
afterNextRender(() => {
|
|
6093
|
-
|
|
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
|
|
6094
6119
|
Object.assign(swiperElemConstructor, this.swiperOptions());
|
|
6095
6120
|
this.swiperElement.set(swiperElemConstructor);
|
|
6096
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
|
+
}
|
|
6097
6197
|
});
|
|
6098
6198
|
}
|
|
6099
6199
|
/**
|
|
6100
|
-
* Aplica el evento `select_promotion` junto con el banner que
|
|
6200
|
+
* Aplica el evento `select_promotion` junto con el banner que interactúa.
|
|
6101
6201
|
* @param banner
|
|
6102
6202
|
*/
|
|
6103
6203
|
selectPromotion(banner) {
|
|
6104
6204
|
this.analyticsService.callEvent('select_promotion', banner);
|
|
6105
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
|
+
}
|
|
6106
6231
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlockBannerFullEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6107
|
-
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"] }] });
|
|
6108
6233
|
}
|
|
6109
6234
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlockBannerFullEcComponent, decorators: [{
|
|
6110
6235
|
type: Component,
|
|
@@ -6117,6 +6242,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
6117
6242
|
}], meta: [{
|
|
6118
6243
|
type: Input,
|
|
6119
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
|
|
6120
6255
|
}] } });
|
|
6121
6256
|
|
|
6122
6257
|
register$1();
|
|
@@ -6375,13 +6510,18 @@ class PriceEcComponent {
|
|
|
6375
6510
|
customTaxTemplate = null;
|
|
6376
6511
|
customOnlyTaxLabelTemplate = null;
|
|
6377
6512
|
_channelService = inject(ChannelService);
|
|
6513
|
+
_authService = inject(AuthService);
|
|
6378
6514
|
showTaxLegend = false;
|
|
6379
6515
|
hideTaxes = false;
|
|
6516
|
+
showPricesOnlyToLoggedUsers = false;
|
|
6517
|
+
logged = false;
|
|
6380
6518
|
ngOnInit() {
|
|
6381
6519
|
this._channelService.channel$.subscribe(cfg => {
|
|
6382
6520
|
this.showTaxLegend = !!cfg.showTaxLegend;
|
|
6383
6521
|
this.hideTaxes = !!cfg.hideTaxes;
|
|
6522
|
+
this.showPricesOnlyToLoggedUsers = !!cfg.showPricesOnlyToLoggedUsers;
|
|
6384
6523
|
});
|
|
6524
|
+
this.logged = this._authService.isAuthenticated();
|
|
6385
6525
|
}
|
|
6386
6526
|
/** Determina si mostrar la sección de impuestos */
|
|
6387
6527
|
get shouldShowTaxes() {
|
|
@@ -6400,11 +6540,11 @@ class PriceEcComponent {
|
|
|
6400
6540
|
return !!value && value.split(' - ').length === 2;
|
|
6401
6541
|
}
|
|
6402
6542
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PriceEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6403
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
6543
|
+
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" }] });
|
|
6404
6544
|
}
|
|
6405
6545
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PriceEcComponent, decorators: [{
|
|
6406
6546
|
type: Component,
|
|
6407
|
-
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
|
|
6547
|
+
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"] }]
|
|
6408
6548
|
}], propDecorators: { price: [{
|
|
6409
6549
|
type: Input
|
|
6410
6550
|
}], saleprice: [{
|
|
@@ -7210,7 +7350,7 @@ class BlocksEcComponent {
|
|
|
7210
7350
|
}
|
|
7211
7351
|
}
|
|
7212
7352
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlocksEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7213
|
-
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"] }] });
|
|
7353
|
+
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"] }] });
|
|
7214
7354
|
}
|
|
7215
7355
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlocksEcComponent, decorators: [{
|
|
7216
7356
|
type: Component,
|