lib-common-angular 0.0.15 → 0.0.16
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/fesm2022/lib-common-angular.mjs +193 -76
- package/fesm2022/lib-common-angular.mjs.map +1 -1
- package/index.d.ts +32 -10
- package/package.json +1 -1
|
@@ -18,9 +18,9 @@ import { EditorModule } from 'primeng/editor';
|
|
|
18
18
|
import { MenuModule } from 'primeng/menu';
|
|
19
19
|
import * as i2$3 from 'primeng/paginator';
|
|
20
20
|
import { PaginatorModule } from 'primeng/paginator';
|
|
21
|
-
import * as i3$
|
|
21
|
+
import * as i3$4 from 'primeng/password';
|
|
22
22
|
import { PasswordModule } from 'primeng/password';
|
|
23
|
-
import * as
|
|
23
|
+
import * as i4$1 from 'primeng/ripple';
|
|
24
24
|
import { RippleModule } from 'primeng/ripple';
|
|
25
25
|
import { ToastModule } from 'primeng/toast';
|
|
26
26
|
import * as i2$2 from 'primeng/toolbar';
|
|
@@ -28,7 +28,7 @@ import { ToolbarModule } from 'primeng/toolbar';
|
|
|
28
28
|
import { RatingModule } from 'primeng/rating';
|
|
29
29
|
import * as i2$5 from 'primeng/inputtext';
|
|
30
30
|
import { InputTextModule } from 'primeng/inputtext';
|
|
31
|
-
import * as i3$
|
|
31
|
+
import * as i3$3 from 'primeng/textarea';
|
|
32
32
|
import { TextareaModule } from 'primeng/textarea';
|
|
33
33
|
import * as i6 from 'primeng/select';
|
|
34
34
|
import { SelectModule } from 'primeng/select';
|
|
@@ -74,14 +74,14 @@ import { MatGridListModule } from '@angular/material/grid-list';
|
|
|
74
74
|
import { MatTableModule } from '@angular/material/table';
|
|
75
75
|
import { MatSelectModule } from '@angular/material/select';
|
|
76
76
|
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
77
|
-
import * as i3$
|
|
77
|
+
import * as i3$2 from '@angular/material/sidenav';
|
|
78
78
|
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
79
|
-
import * as i4$
|
|
79
|
+
import * as i4$2 from '@angular/material/toolbar';
|
|
80
80
|
import { MatToolbarModule } from '@angular/material/toolbar';
|
|
81
81
|
import * as i5$1 from '@angular/material/list';
|
|
82
82
|
import { MatListModule } from '@angular/material/list';
|
|
83
83
|
import { MatCardModule } from '@angular/material/card';
|
|
84
|
-
import * as i4$
|
|
84
|
+
import * as i4$4 from '@ngxs/store';
|
|
85
85
|
import { NgxsModule, createSelector, Action, Selector, State } from '@ngxs/store';
|
|
86
86
|
import * as i1$5 from '@ngx-translate/core';
|
|
87
87
|
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
|
|
@@ -90,7 +90,7 @@ import { NgxsReduxDevtoolsPluginModule } from '@ngxs/devtools-plugin';
|
|
|
90
90
|
import { NgxsLoggerPluginModule } from '@ngxs/logger-plugin';
|
|
91
91
|
import * as i1$8 from '@angular/router';
|
|
92
92
|
import { RouterOutlet, RouterModule, Router, NavigationEnd } from '@angular/router';
|
|
93
|
-
import * as i4$
|
|
93
|
+
import * as i4$3 from 'primeng/styleclass';
|
|
94
94
|
import { StyleClassModule } from 'primeng/styleclass';
|
|
95
95
|
import { updatePreset, updateSurfacePalette, $t } from '@primeng/themes';
|
|
96
96
|
import Aura from '@primeng/themes/aura';
|
|
@@ -108,6 +108,37 @@ import { trigger, state, transition, style, animate } from '@angular/animations'
|
|
|
108
108
|
import { filter as filter$1 } from 'rxjs/operators';
|
|
109
109
|
import { __decorate } from 'tslib';
|
|
110
110
|
|
|
111
|
+
class GoogleService {
|
|
112
|
+
reportConversion(sendTo, url) {
|
|
113
|
+
const callback = () => {
|
|
114
|
+
if (typeof url !== 'undefined') {
|
|
115
|
+
window.location.href = url;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
if (typeof window.gtag === 'function') {
|
|
119
|
+
window.gtag('event', 'conversion', {
|
|
120
|
+
send_to: sendTo,
|
|
121
|
+
event_callback: callback
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Si gtag no está disponible, solo redirige
|
|
126
|
+
callback();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
reportAnalyticsEvent(eventName, params) {
|
|
130
|
+
if (typeof window.gtag === 'function') {
|
|
131
|
+
window.gtag('event', eventName, params || {});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: GoogleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
135
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: GoogleService, providedIn: 'root' });
|
|
136
|
+
}
|
|
137
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: GoogleService, decorators: [{
|
|
138
|
+
type: Injectable,
|
|
139
|
+
args: [{ providedIn: 'root' }]
|
|
140
|
+
}] });
|
|
141
|
+
|
|
111
142
|
class CommonLibService {
|
|
112
143
|
constructor() { }
|
|
113
144
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CommonLibService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -1630,6 +1661,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
1630
1661
|
}] } });
|
|
1631
1662
|
|
|
1632
1663
|
class Carruselt1 {
|
|
1664
|
+
googleService;
|
|
1665
|
+
DatosNegocio = null;
|
|
1666
|
+
constructor(googleService) {
|
|
1667
|
+
this.googleService = googleService;
|
|
1668
|
+
}
|
|
1633
1669
|
slides = [{
|
|
1634
1670
|
id: 1,
|
|
1635
1671
|
tag: 'Fabricación de Inflables Publicitarios',
|
|
@@ -1734,16 +1770,29 @@ class Carruselt1 {
|
|
|
1734
1770
|
navigateToWhatsapp(slide) {
|
|
1735
1771
|
const currentUrl = window.location.href;
|
|
1736
1772
|
const message = `Hola, estoy en tu página ${currentUrl} y me interesa ${slide.title}`;
|
|
1737
|
-
const
|
|
1738
|
-
|
|
1773
|
+
const whatsappNumber = this.DatosNegocio?.telefono || '+573118025433';
|
|
1774
|
+
const whatsappUrl = `https://wa.me/${whatsappNumber}?text=${encodeURIComponent(message)}`;
|
|
1775
|
+
// Google Ads Conversion
|
|
1776
|
+
if (this.DatosNegocio?.googleAdsConversionId) {
|
|
1777
|
+
this.googleService.reportConversion(this.DatosNegocio.googleAdsConversionId, whatsappUrl);
|
|
1778
|
+
}
|
|
1779
|
+
else {
|
|
1780
|
+
window.open(whatsappUrl, '_blank');
|
|
1781
|
+
}
|
|
1782
|
+
// Google Analytics Event
|
|
1783
|
+
if (this.DatosNegocio?.googleAnalyticsEvent) {
|
|
1784
|
+
this.googleService.reportAnalyticsEvent(this.DatosNegocio.googleAnalyticsEvent, { slide: slide.title });
|
|
1785
|
+
}
|
|
1739
1786
|
}
|
|
1740
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Carruselt1, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1741
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: Carruselt1, isStandalone: true, selector: "lib-carruselt-1", ngImport: i0, template: "\n\n<section aria-label=\"Carrusel de productos inflables recreativos y publicitarios\" class=\"carrusel-bg p-3 flex flex-column align-items-center justify-content-center w-full\" aria-label=\"Carrusel de productos inflables y recreativos\" itemscope itemtype=\"https://schema.org/ItemList\">\n <div class=\"relative w-full max-w-6xl h-30rem bg-white-alpha-10 border-1 border-white-alpha-30 border-round-3xl shadow-4 overflow-hidden flex flex-column justify-content-center\">\n <div class=\"w-full h-full relative\">\n @for (slide of slides; track $index) {\n <div class=\"slide flex flex-column md:flex-row h-full absolute w-full transition-all duration-800\"\n [class.active]=\"$index === currentSlide\"\n itemprop=\"itemListElement\" itemscope itemtype=\"https://schema.org/Product\">\n <meta itemprop=\"position\" [content]=\"$index + 1\">\n <!-- Texto -->\n <div class=\"flex-1 flex align-items-center justify-content-center p-4 md:pl-8 order-2 md:order-1\">\n <div class=\"content-box text-white md:ml-4\">\n <span class=\"p-tag mb-3\" [ngClass]=\"slide.tagClass\">{{slide.tag}}</span>\n <h2 class=\"text-3xl md:text-5xl font-bold mb-3\" itemprop=\"name\">{{slide.title}}</h2>\n <p class=\"mb-4 text-secondary\" itemprop=\"description\">{{slide.description}}</p>\n @if (slide.button) {\n <a pButton pRipple (click)=\"navigateToWhatsapp(slide)\" class=\"cursor-pointer\" [ngClass]=\"slide.button.class\" [title]=\"'M\u00E1s informaci\u00F3n sobre ' + slide.title\">{{slide.button.text}}</a>\n }\n </div>\n </div>\n <!-- Imagen -->\n <div class=\"flex-1 flex align-items-center justify-content-center order-1 md:order-2 image-box p-0 overflow-hidden\">\n <img [ngSrc]=\"slide.image\" \n [alt]=\"slide.alt\"\n [priority]=\"$index === 0\"\n width=\"600\" height=\"400\"\n class=\"w-full h-full object-cover md:w-auto md:h-auto md:border-round-xl shadow-2\" \n itemprop=\"image\">\n </div>\n </div>\n }\n </div>\n <!-- Controles de Navegaci\u00F3n (Flechas laterales) -->\n <button class=\"absolute nav-btn-pos left-0 ml-2 md:ml-3 border-circle border-none bg-white-alpha-20 text-white w-3rem h-3rem flex align-items-center justify-content-center hover:bg-white-alpha-40 transition-colors cursor-pointer p-0\" style=\"transform: translateY(-50%); z-index: 20;\" aria-label=\"Anterior\" (click)=\"prevSlide()\">\n <i class=\"fas fa-chevron-left text-xl\"></i>\n </button>\n <button class=\"absolute nav-btn-pos right-0 mr-2 md:mr-3 border-circle border-none bg-white-alpha-20 text-white w-3rem h-3rem flex align-items-center justify-content-center hover:bg-white-alpha-40 transition-colors cursor-pointer p-0\" style=\"transform: translateY(-50%); z-index: 20;\" aria-label=\"Siguiente\" (click)=\"nextSlide()\">\n <i class=\"fas fa-chevron-right text-xl\"></i>\n </button>\n\n <!-- Indicadores (Puntos abajo al centro) -->\n <div class=\"absolute bottom-0 left-0 w-full flex justify-content-center gap-2 pb-3\" style=\"z-index: 20;\">\n @for (slide of slides; track $index) {\n <button class=\"nav-dot border-circle p-0\" [class.active]=\"$index === currentSlide\" (click)=\"goToSlide($index)\" [attr.aria-label]=\"'Ir a diapositiva ' + ($index + 1)\"></button>\n }\n </div>\n </div>\n</section>\n", styles: [".carrusel-bg{min-height:10vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(-45deg,#6a1b9a,#fbc02d,#0288d1,#6a1b9a);background-size:400% 400%;animation:gradient 15s ease infinite}@keyframes gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.slide{opacity:0;pointer-events:none;z-index:1;transition:opacity .8s cubic-bezier(.4,0,.2,1),transform .8s cubic-bezier(.4,0,.2,1);transform:translate(100px) scale(.95);position:absolute;top:0;left:0;width:100%;height:100%}.slide.active{opacity:1;pointer-events:all;z-index:10;transform:translate(0) scale(1)}.slide .content-box{transform:translateY(30px);opacity:0;transition:all .6s ease .3s}.slide.active .content-box{transform:translateY(0);opacity:1}.slide .image-box{transform:scale(1.1);opacity:0;transition:all .8s ease .1s}.slide.active .image-box{transform:scale(1);opacity:1}.nav-dot{transition:all .3s ease;width:.75rem;height:.75rem;background:#ffffff80;border:none;outline:none;cursor:pointer}.nav-dot.active{width:2rem;background:#fff}.nav-btn-pos{top:55%!important}@media (min-width: 768px){.nav-btn-pos{top:50%!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: PrimegModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "directive", type:
|
|
1787
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Carruselt1, deps: [{ token: GoogleService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1788
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: Carruselt1, isStandalone: true, selector: "lib-carruselt-1", inputs: { DatosNegocio: "DatosNegocio" }, ngImport: i0, template: "\n\n<section aria-label=\"Carrusel de productos inflables recreativos y publicitarios\" class=\"carrusel-bg p-3 flex flex-column align-items-center justify-content-center w-full\" aria-label=\"Carrusel de productos inflables y recreativos\" itemscope itemtype=\"https://schema.org/ItemList\">\n <div class=\"relative w-full max-w-6xl h-30rem bg-white-alpha-10 border-1 border-white-alpha-30 border-round-3xl shadow-4 overflow-hidden flex flex-column justify-content-center\">\n <div class=\"w-full h-full relative\">\n @for (slide of slides; track $index) {\n <div class=\"slide flex flex-column md:flex-row h-full absolute w-full transition-all duration-800\"\n [class.active]=\"$index === currentSlide\"\n itemprop=\"itemListElement\" itemscope itemtype=\"https://schema.org/Product\">\n <meta itemprop=\"position\" [content]=\"$index + 1\">\n <!-- Texto -->\n <div class=\"flex-1 flex align-items-center justify-content-center p-4 md:pl-8 order-2 md:order-1\">\n <div class=\"content-box text-white md:ml-4\">\n <span class=\"p-tag mb-3\" [ngClass]=\"slide.tagClass\">{{slide.tag}}</span>\n <h2 class=\"text-3xl md:text-5xl font-bold mb-3\" itemprop=\"name\">{{slide.title}}</h2>\n <p class=\"mb-4 text-secondary\" itemprop=\"description\">{{slide.description}}</p>\n @if (slide.button) {\n <a pButton pRipple (click)=\"navigateToWhatsapp(slide)\" class=\"cursor-pointer\" [ngClass]=\"slide.button.class\" [title]=\"'M\u00E1s informaci\u00F3n sobre ' + slide.title\">{{slide.button.text}}</a>\n }\n </div>\n </div>\n <!-- Imagen -->\n <div class=\"flex-1 flex align-items-center justify-content-center order-1 md:order-2 image-box p-0 overflow-hidden\">\n <img [ngSrc]=\"slide.image\" \n [alt]=\"slide.alt\"\n [priority]=\"$index === 0\"\n width=\"600\" height=\"400\"\n class=\"w-full h-full object-cover md:w-auto md:h-auto md:border-round-xl shadow-2\" \n itemprop=\"image\">\n </div>\n </div>\n }\n </div>\n <!-- Controles de Navegaci\u00F3n (Flechas laterales) -->\n <button class=\"absolute nav-btn-pos left-0 ml-2 md:ml-3 border-circle border-none bg-white-alpha-20 text-white w-3rem h-3rem flex align-items-center justify-content-center hover:bg-white-alpha-40 transition-colors cursor-pointer p-0\" style=\"transform: translateY(-50%); z-index: 20;\" aria-label=\"Anterior\" (click)=\"prevSlide()\">\n <i class=\"fas fa-chevron-left text-xl\"></i>\n </button>\n <button class=\"absolute nav-btn-pos right-0 mr-2 md:mr-3 border-circle border-none bg-white-alpha-20 text-white w-3rem h-3rem flex align-items-center justify-content-center hover:bg-white-alpha-40 transition-colors cursor-pointer p-0\" style=\"transform: translateY(-50%); z-index: 20;\" aria-label=\"Siguiente\" (click)=\"nextSlide()\">\n <i class=\"fas fa-chevron-right text-xl\"></i>\n </button>\n\n <!-- Indicadores (Puntos abajo al centro) -->\n <div class=\"absolute bottom-0 left-0 w-full flex justify-content-center gap-2 pb-3\" style=\"z-index: 20;\">\n @for (slide of slides; track $index) {\n <button class=\"nav-dot border-circle p-0\" [class.active]=\"$index === currentSlide\" (click)=\"goToSlide($index)\" [attr.aria-label]=\"'Ir a diapositiva ' + ($index + 1)\"></button>\n }\n </div>\n </div>\n</section>\n", styles: [".carrusel-bg{min-height:10vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(-45deg,#6a1b9a,#fbc02d,#0288d1,#6a1b9a);background-size:400% 400%;animation:gradient 15s ease infinite}@keyframes gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.slide{opacity:0;pointer-events:none;z-index:1;transition:opacity .8s cubic-bezier(.4,0,.2,1),transform .8s cubic-bezier(.4,0,.2,1);transform:translate(100px) scale(.95);position:absolute;top:0;left:0;width:100%;height:100%}.slide.active{opacity:1;pointer-events:all;z-index:10;transform:translate(0) scale(1)}.slide .content-box{transform:translateY(30px);opacity:0;transition:all .6s ease .3s}.slide.active .content-box{transform:translateY(0);opacity:1}.slide .image-box{transform:scale(1.1);opacity:0;transition:all .8s ease .1s}.slide.active .image-box{transform:scale(1);opacity:1}.nav-dot{transition:all .3s ease;width:.75rem;height:.75rem;background:#ffffff80;border:none;outline:none;cursor:pointer}.nav-dot.active{width:2rem;background:#fff}.nav-btn-pos{top:55%!important}@media (min-width: 768px){.nav-btn-pos{top:50%!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: PrimegModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "directive", type: i4$1.Ripple, selector: "[pRipple]" }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "decoding", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }] });
|
|
1742
1789
|
}
|
|
1743
1790
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Carruselt1, decorators: [{
|
|
1744
1791
|
type: Component,
|
|
1745
1792
|
args: [{ selector: 'lib-carruselt-1', imports: [CommonModule, PrimegModule, NgOptimizedImage], template: "\n\n<section aria-label=\"Carrusel de productos inflables recreativos y publicitarios\" class=\"carrusel-bg p-3 flex flex-column align-items-center justify-content-center w-full\" aria-label=\"Carrusel de productos inflables y recreativos\" itemscope itemtype=\"https://schema.org/ItemList\">\n <div class=\"relative w-full max-w-6xl h-30rem bg-white-alpha-10 border-1 border-white-alpha-30 border-round-3xl shadow-4 overflow-hidden flex flex-column justify-content-center\">\n <div class=\"w-full h-full relative\">\n @for (slide of slides; track $index) {\n <div class=\"slide flex flex-column md:flex-row h-full absolute w-full transition-all duration-800\"\n [class.active]=\"$index === currentSlide\"\n itemprop=\"itemListElement\" itemscope itemtype=\"https://schema.org/Product\">\n <meta itemprop=\"position\" [content]=\"$index + 1\">\n <!-- Texto -->\n <div class=\"flex-1 flex align-items-center justify-content-center p-4 md:pl-8 order-2 md:order-1\">\n <div class=\"content-box text-white md:ml-4\">\n <span class=\"p-tag mb-3\" [ngClass]=\"slide.tagClass\">{{slide.tag}}</span>\n <h2 class=\"text-3xl md:text-5xl font-bold mb-3\" itemprop=\"name\">{{slide.title}}</h2>\n <p class=\"mb-4 text-secondary\" itemprop=\"description\">{{slide.description}}</p>\n @if (slide.button) {\n <a pButton pRipple (click)=\"navigateToWhatsapp(slide)\" class=\"cursor-pointer\" [ngClass]=\"slide.button.class\" [title]=\"'M\u00E1s informaci\u00F3n sobre ' + slide.title\">{{slide.button.text}}</a>\n }\n </div>\n </div>\n <!-- Imagen -->\n <div class=\"flex-1 flex align-items-center justify-content-center order-1 md:order-2 image-box p-0 overflow-hidden\">\n <img [ngSrc]=\"slide.image\" \n [alt]=\"slide.alt\"\n [priority]=\"$index === 0\"\n width=\"600\" height=\"400\"\n class=\"w-full h-full object-cover md:w-auto md:h-auto md:border-round-xl shadow-2\" \n itemprop=\"image\">\n </div>\n </div>\n }\n </div>\n <!-- Controles de Navegaci\u00F3n (Flechas laterales) -->\n <button class=\"absolute nav-btn-pos left-0 ml-2 md:ml-3 border-circle border-none bg-white-alpha-20 text-white w-3rem h-3rem flex align-items-center justify-content-center hover:bg-white-alpha-40 transition-colors cursor-pointer p-0\" style=\"transform: translateY(-50%); z-index: 20;\" aria-label=\"Anterior\" (click)=\"prevSlide()\">\n <i class=\"fas fa-chevron-left text-xl\"></i>\n </button>\n <button class=\"absolute nav-btn-pos right-0 mr-2 md:mr-3 border-circle border-none bg-white-alpha-20 text-white w-3rem h-3rem flex align-items-center justify-content-center hover:bg-white-alpha-40 transition-colors cursor-pointer p-0\" style=\"transform: translateY(-50%); z-index: 20;\" aria-label=\"Siguiente\" (click)=\"nextSlide()\">\n <i class=\"fas fa-chevron-right text-xl\"></i>\n </button>\n\n <!-- Indicadores (Puntos abajo al centro) -->\n <div class=\"absolute bottom-0 left-0 w-full flex justify-content-center gap-2 pb-3\" style=\"z-index: 20;\">\n @for (slide of slides; track $index) {\n <button class=\"nav-dot border-circle p-0\" [class.active]=\"$index === currentSlide\" (click)=\"goToSlide($index)\" [attr.aria-label]=\"'Ir a diapositiva ' + ($index + 1)\"></button>\n }\n </div>\n </div>\n</section>\n", styles: [".carrusel-bg{min-height:10vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(-45deg,#6a1b9a,#fbc02d,#0288d1,#6a1b9a);background-size:400% 400%;animation:gradient 15s ease infinite}@keyframes gradient{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.slide{opacity:0;pointer-events:none;z-index:1;transition:opacity .8s cubic-bezier(.4,0,.2,1),transform .8s cubic-bezier(.4,0,.2,1);transform:translate(100px) scale(.95);position:absolute;top:0;left:0;width:100%;height:100%}.slide.active{opacity:1;pointer-events:all;z-index:10;transform:translate(0) scale(1)}.slide .content-box{transform:translateY(30px);opacity:0;transition:all .6s ease .3s}.slide.active .content-box{transform:translateY(0);opacity:1}.slide .image-box{transform:scale(1.1);opacity:0;transition:all .8s ease .1s}.slide.active .image-box{transform:scale(1);opacity:1}.nav-dot{transition:all .3s ease;width:.75rem;height:.75rem;background:#ffffff80;border:none;outline:none;cursor:pointer}.nav-dot.active{width:2rem;background:#fff}.nav-btn-pos{top:55%!important}@media (min-width: 768px){.nav-btn-pos{top:50%!important}}\n"] }]
|
|
1746
|
-
}] }
|
|
1793
|
+
}], ctorParameters: () => [{ type: GoogleService }], propDecorators: { DatosNegocio: [{
|
|
1794
|
+
type: Input
|
|
1795
|
+
}] } });
|
|
1747
1796
|
|
|
1748
1797
|
class PaginatorPgComponent {
|
|
1749
1798
|
componente = {
|
|
@@ -3940,26 +3989,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
3940
3989
|
|
|
3941
3990
|
class ShWatsButtonCard {
|
|
3942
3991
|
productSvc;
|
|
3992
|
+
googleService;
|
|
3943
3993
|
// producto a compartir
|
|
3944
3994
|
product = {};
|
|
3995
|
+
DatosNegocio = null;
|
|
3945
3996
|
// indica si el usuario está logueado
|
|
3946
3997
|
isLogin = false;
|
|
3947
3998
|
// descuento del producto
|
|
3948
3999
|
discount = 0;
|
|
3949
|
-
constructor(productSvc) {
|
|
4000
|
+
constructor(productSvc, googleService) {
|
|
3950
4001
|
this.productSvc = productSvc;
|
|
4002
|
+
this.googleService = googleService;
|
|
3951
4003
|
}
|
|
3952
4004
|
shareProductOnWhatsapp() {
|
|
3953
|
-
const
|
|
3954
|
-
this.
|
|
4005
|
+
const whatsappNumber = this.DatosNegocio?.telefono || '+573118025433';
|
|
4006
|
+
const text = `Mira este producto: ${this.product?.name ?? ''} - ${window.location.href}`;
|
|
4007
|
+
const whatsappUrl = `https://wa.me/${whatsappNumber}?text=${encodeURIComponent(text)}`;
|
|
4008
|
+
if (this.DatosNegocio?.googleAdsConversionId) {
|
|
4009
|
+
this.googleService.reportConversion(this.DatosNegocio.googleAdsConversionId, whatsappUrl);
|
|
4010
|
+
}
|
|
4011
|
+
else {
|
|
4012
|
+
window.open(whatsappUrl, '_blank');
|
|
4013
|
+
}
|
|
4014
|
+
if (this.DatosNegocio?.googleAnalyticsEvent) {
|
|
4015
|
+
this.googleService.reportAnalyticsEvent(this.DatosNegocio.googleAnalyticsEvent, { producto: this.product?.name });
|
|
4016
|
+
}
|
|
3955
4017
|
}
|
|
3956
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ShWatsButtonCard, deps: [{ token: ProductService }], target: i0.ɵɵFactoryTarget.Component });
|
|
3957
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: ShWatsButtonCard, isStandalone: true, selector: "lib-sh-wats-button-card", inputs: { product: "product", isLogin: "isLogin", discount: "discount" }, ngImport: i0, template: " <p-button\n (click)=\"shareProductOnWhatsapp()\"\n pTooltip=\"Cotizar\"\n tooltipPosition=\"top\"\n icon=\"pi pi-whatsapp\"\n label=\"Cotizar\"\n styleClass=\"w-full font-bold border-round-lg shadow-3 hover-zoom\"\n class=\"w-full\"\n >\n </p-button>", styles: [""], dependencies: [{ kind: "ngmodule", type: PrimegModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }] });
|
|
4018
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ShWatsButtonCard, deps: [{ token: ProductService }, { token: GoogleService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4019
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: ShWatsButtonCard, isStandalone: true, selector: "lib-sh-wats-button-card", inputs: { product: "product", DatosNegocio: "DatosNegocio", isLogin: "isLogin", discount: "discount" }, ngImport: i0, template: " <p-button\n (click)=\"shareProductOnWhatsapp()\"\n pTooltip=\"Cotizar\"\n tooltipPosition=\"top\"\n icon=\"pi pi-whatsapp\"\n label=\"Cotizar\"\n styleClass=\"w-full font-bold border-round-lg shadow-3 hover-zoom\"\n class=\"w-full\"\n >\n </p-button>", styles: [""], dependencies: [{ kind: "ngmodule", type: PrimegModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }] });
|
|
3958
4020
|
}
|
|
3959
4021
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ShWatsButtonCard, decorators: [{
|
|
3960
4022
|
type: Component,
|
|
3961
4023
|
args: [{ selector: 'lib-sh-wats-button-card', imports: [PrimegModule], template: " <p-button\n (click)=\"shareProductOnWhatsapp()\"\n pTooltip=\"Cotizar\"\n tooltipPosition=\"top\"\n icon=\"pi pi-whatsapp\"\n label=\"Cotizar\"\n styleClass=\"w-full font-bold border-round-lg shadow-3 hover-zoom\"\n class=\"w-full\"\n >\n </p-button>" }]
|
|
3962
|
-
}], ctorParameters: () => [{ type: ProductService }], propDecorators: { product: [{
|
|
4024
|
+
}], ctorParameters: () => [{ type: ProductService }, { type: GoogleService }], propDecorators: { product: [{
|
|
4025
|
+
type: Input
|
|
4026
|
+
}], DatosNegocio: [{
|
|
3963
4027
|
type: Input
|
|
3964
4028
|
}], isLogin: [{
|
|
3965
4029
|
type: Input
|
|
@@ -4159,7 +4223,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
4159
4223
|
|
|
4160
4224
|
class Header2Component {
|
|
4161
4225
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Header2Component, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4162
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: Header2Component, isStandalone: true, selector: "lib-header2", ngImport: i0, template: "<header class=\"header_section\">\n <div class=\"container-fluid\">\n <mat-toolbar color=\"primary\">\n <a mat-button routerLink=\"/index\">\n <img src=\"assets/images/logo.png\" alt=\"\" style=\"height: 40px;\">\n <span style=\"color: #F25D27; margin-left: 10px;\">\n Dog Paradice\n </span>\n </a>\n <span class=\"spacer\"></span>\n <button mat-icon-button class=\"example-icon\" aria-label=\"Toggle sidenav\" (click)=\"sidenav.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n </mat-toolbar>\n \n <mat-sidenav-container class=\"example-container\">\n <mat-sidenav #sidenav mode=\"side\" opened>\n <mat-nav-list>\n <a mat-list-item routerLink=\"/index\">Lare</a>\n <a mat-list-item routerLink=\"/service\">Servi\u00E7os</a>\n <a mat-list-item href=\"https://w.app/DOGPARADICE\" target=\"_blank\">Contato</a>\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content>\n <!-- This is where your main content goes -->\n </mat-sidenav-content>\n </mat-sidenav-container>\n </div>\n </header>\n \n", styles: [".header_section{background:#fff}.container-fluid{padding:0}.spacer{flex:1 1 auto}.example-container{height:100%;width:100%}.example-icon{display:none}@media (max-width: 600px){.example-icon{display:block}mat-toolbar{flex-direction:row}.spacer{display:none}mat-sidenav{width:250px}}\n"], dependencies: [{ kind: "ngmodule", type: CoreModuleLib }, { kind: "component", type: i1$7.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$7.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$
|
|
4226
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: Header2Component, isStandalone: true, selector: "lib-header2", ngImport: i0, template: "<header class=\"header_section\">\n <div class=\"container-fluid\">\n <mat-toolbar color=\"primary\">\n <a mat-button routerLink=\"/index\">\n <img src=\"assets/images/logo.png\" alt=\"\" style=\"height: 40px;\">\n <span style=\"color: #F25D27; margin-left: 10px;\">\n Dog Paradice\n </span>\n </a>\n <span class=\"spacer\"></span>\n <button mat-icon-button class=\"example-icon\" aria-label=\"Toggle sidenav\" (click)=\"sidenav.toggle()\">\n <mat-icon>menu</mat-icon>\n </button>\n </mat-toolbar>\n \n <mat-sidenav-container class=\"example-container\">\n <mat-sidenav #sidenav mode=\"side\" opened>\n <mat-nav-list>\n <a mat-list-item routerLink=\"/index\">Lare</a>\n <a mat-list-item routerLink=\"/service\">Servi\u00E7os</a>\n <a mat-list-item href=\"https://w.app/DOGPARADICE\" target=\"_blank\">Contato</a>\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content>\n <!-- This is where your main content goes -->\n </mat-sidenav-content>\n </mat-sidenav-container>\n </div>\n </header>\n \n", styles: [".header_section{background:#fff}.container-fluid{padding:0}.spacer{flex:1 1 auto}.example-container{height:100%;width:100%}.example-icon{display:none}@media (max-width: 600px){.example-icon{display:block}mat-toolbar{flex-direction:row}.spacer{display:none}mat-sidenav{width:250px}}\n"], dependencies: [{ kind: "ngmodule", type: CoreModuleLib }, { kind: "component", type: i1$7.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$7.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$2.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$2.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i3$2.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: i4$2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i5$1.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i5$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }] });
|
|
4163
4227
|
}
|
|
4164
4228
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Header2Component, decorators: [{
|
|
4165
4229
|
type: Component,
|
|
@@ -4482,7 +4546,7 @@ class ProductDialog1Component {
|
|
|
4482
4546
|
}
|
|
4483
4547
|
}
|
|
4484
4548
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ProductDialog1Component, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4485
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ProductDialog1Component, isStandalone: true, selector: "lib-product-dialog1", inputs: { productDialog: "productDialog", product: "product", statuses: "statuses", triggerSave: "triggerSave" }, outputs: { productDialogChange: "productDialogChange", onSave: "onSave", onCancel: "onCancel" }, usesOnChanges: true, ngImport: i0, template: "\n <div class=\"flex flex-col gap-6\">\n @if (product['image']) {\n <img\n [src]=\"product['image']\"\n [alt]=\"product['image']\"\n class=\"block m-auto pb-4\"\n />\n }\n <div>\n <label for=\"name\" class=\"block font-bold mb-3\">Name</label>\n <input\n type=\"text\"\n pInputText\n id=\"name\"\n [(ngModel)]=\"product['name']\"\n required\n autofocus\n fluid\n />\n @if (submitted && !product['name']) {\n <small class=\"text-red-500\">Name is required.</small>\n }\n </div>\n <div>\n <label for=\"description\" class=\"block font-bold mb-3\"\n >Description</label\n >\n <textarea\n id=\"description\"\n pTextarea\n [(ngModel)]=\"product['description']\"\n required\n rows=\"3\"\n cols=\"20\"\n fluid\n ></textarea>\n </div>\n\n <div>\n <label for=\"inventoryStatus\" class=\"block font-bold mb-3\"\n >Inventory Status</label\n >\n <p-select\n [(ngModel)]=\"product['inventoryStatus']\"\n inputId=\"inventoryStatus\"\n [options]=\"statuses\"\n placeholder=\"Select a Status\"\n fluid\n />\n </div>\n\n <div>\n <span class=\"block font-bold mb-4\">Category</span>\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"flex items-center gap-2 col-span-6\">\n <p-radiobutton\n id=\"category1\"\n name=\"category\"\n value=\"Accessories\"\n [(ngModel)]=\"product['category']\"\n />\n <label for=\"category1\">Accessories</label>\n </div>\n <div class=\"flex items-center gap-2 col-span-6\">\n <p-radiobutton\n id=\"category2\"\n name=\"category\"\n value=\"Clothing\"\n [(ngModel)]=\"product['category']\"\n />\n <label for=\"category2\">Clothing</label>\n </div>\n <div class=\"flex items-center gap-2 col-span-6\">\n <p-radiobutton\n id=\"category3\"\n name=\"category\"\n value=\"Electronics\"\n [(ngModel)]=\"product['category']\"\n />\n <label for=\"category3\">Electronics</label>\n </div>\n <div class=\"flex items-center gap-2 col-span-6\">\n <p-radiobutton\n id=\"category4\"\n name=\"category\"\n value=\"Fitness\"\n [(ngModel)]=\"product['category']\"\n />\n <label for=\"category4\">Fitness</label>\n </div>\n </div>\n </div>\n\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"col-span-6\">\n <label for=\"price\" class=\"block font-bold mb-3\">Price</label>\n <p-inputnumber\n id=\"price\"\n [(ngModel)]=\"product['price']\"\n mode=\"currency\"\n currency=\"USD\"\n locale=\"en-US\"\n fluid\n />\n </div>\n <div class=\"col-span-6\">\n <label for=\"quantity\" class=\"block font-bold mb-3\">Quantity</label>\n <p-inputnumber id=\"quantity\" [(ngModel)]=\"product['quantity']\" fluid />\n </div>\n </div>\n </div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: PrimegModule }, { kind: "directive", type: i2$5.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "directive", type: i3$
|
|
4549
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ProductDialog1Component, isStandalone: true, selector: "lib-product-dialog1", inputs: { productDialog: "productDialog", product: "product", statuses: "statuses", triggerSave: "triggerSave" }, outputs: { productDialogChange: "productDialogChange", onSave: "onSave", onCancel: "onCancel" }, usesOnChanges: true, ngImport: i0, template: "\n <div class=\"flex flex-col gap-6\">\n @if (product['image']) {\n <img\n [src]=\"product['image']\"\n [alt]=\"product['image']\"\n class=\"block m-auto pb-4\"\n />\n }\n <div>\n <label for=\"name\" class=\"block font-bold mb-3\">Name</label>\n <input\n type=\"text\"\n pInputText\n id=\"name\"\n [(ngModel)]=\"product['name']\"\n required\n autofocus\n fluid\n />\n @if (submitted && !product['name']) {\n <small class=\"text-red-500\">Name is required.</small>\n }\n </div>\n <div>\n <label for=\"description\" class=\"block font-bold mb-3\"\n >Description</label\n >\n <textarea\n id=\"description\"\n pTextarea\n [(ngModel)]=\"product['description']\"\n required\n rows=\"3\"\n cols=\"20\"\n fluid\n ></textarea>\n </div>\n\n <div>\n <label for=\"inventoryStatus\" class=\"block font-bold mb-3\"\n >Inventory Status</label\n >\n <p-select\n [(ngModel)]=\"product['inventoryStatus']\"\n inputId=\"inventoryStatus\"\n [options]=\"statuses\"\n placeholder=\"Select a Status\"\n fluid\n />\n </div>\n\n <div>\n <span class=\"block font-bold mb-4\">Category</span>\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"flex items-center gap-2 col-span-6\">\n <p-radiobutton\n id=\"category1\"\n name=\"category\"\n value=\"Accessories\"\n [(ngModel)]=\"product['category']\"\n />\n <label for=\"category1\">Accessories</label>\n </div>\n <div class=\"flex items-center gap-2 col-span-6\">\n <p-radiobutton\n id=\"category2\"\n name=\"category\"\n value=\"Clothing\"\n [(ngModel)]=\"product['category']\"\n />\n <label for=\"category2\">Clothing</label>\n </div>\n <div class=\"flex items-center gap-2 col-span-6\">\n <p-radiobutton\n id=\"category3\"\n name=\"category\"\n value=\"Electronics\"\n [(ngModel)]=\"product['category']\"\n />\n <label for=\"category3\">Electronics</label>\n </div>\n <div class=\"flex items-center gap-2 col-span-6\">\n <p-radiobutton\n id=\"category4\"\n name=\"category\"\n value=\"Fitness\"\n [(ngModel)]=\"product['category']\"\n />\n <label for=\"category4\">Fitness</label>\n </div>\n </div>\n </div>\n\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"col-span-6\">\n <label for=\"price\" class=\"block font-bold mb-3\">Price</label>\n <p-inputnumber\n id=\"price\"\n [(ngModel)]=\"product['price']\"\n mode=\"currency\"\n currency=\"USD\"\n locale=\"en-US\"\n fluid\n />\n </div>\n <div class=\"col-span-6\">\n <label for=\"quantity\" class=\"block font-bold mb-3\">Quantity</label>\n <p-inputnumber id=\"quantity\" [(ngModel)]=\"product['quantity']\" fluid />\n </div>\n </div>\n </div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: PrimegModule }, { kind: "directive", type: i2$5.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "directive", type: i3$3.Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }, { kind: "component", type: i6.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i5$2.RadioButton, selector: "p-radioButton, p-radiobutton, p-radio-button", inputs: ["value", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "styleClass", "autofocus", "binary", "variant", "size"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i7.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "autocomplete", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }] });
|
|
4486
4550
|
}
|
|
4487
4551
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ProductDialog1Component, decorators: [{
|
|
4488
4552
|
type: Component,
|
|
@@ -6358,7 +6422,7 @@ class AppTopbar {
|
|
|
6358
6422
|
</div>
|
|
6359
6423
|
</div>
|
|
6360
6424
|
</div>
|
|
6361
|
-
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i4$
|
|
6425
|
+
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i4$3.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "component", type: AppConfigurator, selector: "app-configurator" }] });
|
|
6362
6426
|
}
|
|
6363
6427
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AppTopbar, decorators: [{
|
|
6364
6428
|
type: Component,
|
|
@@ -7339,7 +7403,7 @@ class SectionAddCardsButtons {
|
|
|
7339
7403
|
console.log('Producto agregado al carrito:', event);
|
|
7340
7404
|
}
|
|
7341
7405
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SectionAddCardsButtons, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7342
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SectionAddCardsButtons, isStandalone: true, selector: "lib-section-add-cards-buttons", inputs: { product: "product", isLogin: "isLogin" }, ngImport: i0, template: "@if (isLogin) {\n <lib-button-add-to-card1 [product]=\"product\" (addToCart)=\"onAddToCart($event)\">\n </lib-button-add-to-card1>\n} @else {\n <lib-sh-wats-button-card [product]=\"product\" [isLogin]=\"isLogin\">\n </lib-sh-wats-button-card>\n}\n", styles: [""], dependencies: [{ kind: "component", type: ShWatsButtonCard, selector: "lib-sh-wats-button-card", inputs: ["product", "isLogin", "discount"] }, { kind: "component", type: ButtonAddToCard1, selector: "lib-button-add-to-card1", inputs: ["product"], outputs: ["addToCart"] }] });
|
|
7406
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: SectionAddCardsButtons, isStandalone: true, selector: "lib-section-add-cards-buttons", inputs: { product: "product", isLogin: "isLogin" }, ngImport: i0, template: "@if (isLogin) {\n <lib-button-add-to-card1 [product]=\"product\" (addToCart)=\"onAddToCart($event)\">\n </lib-button-add-to-card1>\n} @else {\n <lib-sh-wats-button-card [product]=\"product\" [isLogin]=\"isLogin\">\n </lib-sh-wats-button-card>\n}\n", styles: [""], dependencies: [{ kind: "component", type: ShWatsButtonCard, selector: "lib-sh-wats-button-card", inputs: ["product", "DatosNegocio", "isLogin", "discount"] }, { kind: "component", type: ButtonAddToCard1, selector: "lib-button-add-to-card1", inputs: ["product"], outputs: ["addToCart"] }] });
|
|
7343
7407
|
}
|
|
7344
7408
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SectionAddCardsButtons, decorators: [{
|
|
7345
7409
|
type: Component,
|
|
@@ -7352,6 +7416,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
7352
7416
|
|
|
7353
7417
|
class DetalleCarrito1Component {
|
|
7354
7418
|
productService;
|
|
7419
|
+
googleService;
|
|
7355
7420
|
addToCart = new EventEmitter();
|
|
7356
7421
|
// Metadata del componente
|
|
7357
7422
|
componente = {
|
|
@@ -7378,8 +7443,19 @@ class DetalleCarrito1Component {
|
|
|
7378
7443
|
isPersonalizable = false;
|
|
7379
7444
|
// Variable para controlar la visibilidad del menú de compartir
|
|
7380
7445
|
shareMenuOpen = false;
|
|
7381
|
-
|
|
7446
|
+
DatosNegocio = {
|
|
7447
|
+
nombreNegocio: 'Zigma Inflables',
|
|
7448
|
+
logo: '../../../assets/imagenes/logoZigmaInflables.svg',
|
|
7449
|
+
urlWhatssapp: 'https://tinyurl.com/zigmainflables',
|
|
7450
|
+
email: 'zigmainflables.com',
|
|
7451
|
+
googleAnalyticsEvent: "cotizar",
|
|
7452
|
+
googleAdsConversionId: "AW-17894779083",
|
|
7453
|
+
businessModule: [],
|
|
7454
|
+
telefono: '+573118025433'
|
|
7455
|
+
};
|
|
7456
|
+
constructor(productService, googleService) {
|
|
7382
7457
|
this.productService = productService;
|
|
7458
|
+
this.googleService = googleService;
|
|
7383
7459
|
}
|
|
7384
7460
|
ngOnInit() {
|
|
7385
7461
|
this.checkIsProductExists();
|
|
@@ -7408,9 +7484,18 @@ class DetalleCarrito1Component {
|
|
|
7408
7484
|
this.isFavorite = !this.isFavorite;
|
|
7409
7485
|
}
|
|
7410
7486
|
shareProductOnWhatsapp() {
|
|
7411
|
-
const
|
|
7412
|
-
|
|
7413
|
-
|
|
7487
|
+
const whatsappNumber = this.DatosNegocio?.telefono || '+573118025433';
|
|
7488
|
+
const text = `Mira este producto: ${this.product?.name ?? ''} - ${window.location.href}`;
|
|
7489
|
+
const whatsappUrl = `https://wa.me/${whatsappNumber}?text=${encodeURIComponent(text)}`;
|
|
7490
|
+
if (this.DatosNegocio?.googleAdsConversionId) {
|
|
7491
|
+
this.googleService.reportConversion(this.DatosNegocio.googleAdsConversionId, whatsappUrl);
|
|
7492
|
+
}
|
|
7493
|
+
else {
|
|
7494
|
+
window.open(whatsappUrl, '_blank');
|
|
7495
|
+
}
|
|
7496
|
+
if (this.DatosNegocio?.googleAnalyticsEvent) {
|
|
7497
|
+
this.googleService.reportAnalyticsEvent(this.DatosNegocio.googleAnalyticsEvent, { producto: this.product?.name });
|
|
7498
|
+
}
|
|
7414
7499
|
}
|
|
7415
7500
|
toggleShareMenu() {
|
|
7416
7501
|
this.shareMenuOpen = !this.shareMenuOpen;
|
|
@@ -7445,13 +7530,13 @@ class DetalleCarrito1Component {
|
|
|
7445
7530
|
navigateToProductDetail() {
|
|
7446
7531
|
console.log('Navegando a la página de detalle del producto...');
|
|
7447
7532
|
}
|
|
7448
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DetalleCarrito1Component, deps: [{ token: ProductService }], target: i0.ɵɵFactoryTarget.Component });
|
|
7449
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DetalleCarrito1Component, isStandalone: true, selector: "lib-detalle-carrito-1", inputs: { product: "product", isLogin: "isLogin", isPersonalizable: "isPersonalizable" }, outputs: { addToCart: "addToCart" }, ngImport: i0, template: "@if (product) {\n<div id=\"product-container\" class=\"shadow-2 border-round-2xl p-3 md:p-5 lg:p-6\">\n <!-- Contenedor principal de la p\u00E1gina de detalle -->\n <div class=\"grid\">\n <!-- Bloque de imagen principal -->\n <div class=\"flex flex-column col-12 lg:col-6\">\n <div class=\"main-image-frame bg-gray-100 border-round-xl flex justify-content-center align-items-center\">\n <img\n [src]=\"selectedImageUrl\"\n [alt]=\"product.imagen[0].alt || product.name\"\n loading=\"lazy\" width=\"1024\" height=\"520\"\n class=\"main-image border-round-xl\" />\n </div>\n\n <!-- Miniaturas debajo en m\u00F3vil y tablet -->\n @if (product.imagen && product.imagen.length > 0) {\n <div class=\"flex flex-row gap-2 overflow-x-auto pt-2\">\n @for (imagen of product.imagen; track $index) {\n <button type=\"button\" class=\"thumbnail-container border-round-lg cursor-pointer\" (click)=\"updateMainImage(imagen.url)\">\n <div class=\"thumbnail\" [class.thumbnail-active]=\"isActiveThumbnail(imagen.url)\">\n <img [src]=\"imagen.url\" alt=\"Miniatura {{ imagen.alt }}\" loading=\"lazy\" width=\"88\" height=\"88\" />\n </div>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Columna de informaci\u00F3n del producto -->\n <div class=\"flex flex-column justify-content-between col-12 lg:col-6\">\n <div class=\"flex flex-column gap-3\">\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <h1 class=\"text-3xl font-bold text-900\">{{ product.name }}</h1>\n <p-button \n [text]=\"true\" \n [rounded]=\"true\"\n (onClick)=\"toggleFavorite()\"\n [icon]=\"isFavorite ? 'pi pi-heart-fill' : 'pi pi-heart'\"\n [class]=\"isFavorite ? 'text-red-500' : 'text-500'\"\n class=\"hover:text-red-500\">\n </p-button>\n </div>\n\n \n\n <!-- Bloque descripci\u00F3n con fondo gris como card -->\n <div class=\"surface-ground p-3 border-round-xl border-1 surface-border\">\n <p class=\"text-700 line-height-3 m-0 font-bold\">Descripci\u00F3n</p>\n <p class=\"text-700 line-height-3 m-0\">{{ product.descripcion }}</p>\n </div>\n\n <div class=\"flex align-items-center gap-3\">\n @if(isLogin){\n @if(product.descuento != undefined && product.descuento > 0) {\n <span class=\"old-price\">{{ product.precios[0].precio | currency:product.precios[0].codigo_iso :'code' }}</span>\n <span class=\"discount-label\">{{ product.descuento}}% OFF</span>\n }\n <span class=\"current-price\">{{ discount | currency:product.precios[0].codigo_iso :'code'}}</span>\n } @else {\n <a\n class=\"contact-btn\"\n (click)=\"shareProductOnWhatsapp()\"\n aria-label=\"Contactar por WhatsApp\">\n <i class=\"pi pi-whatsapp\"></i>\n <span>Contactar</span>\n </a>\n }\n </div>\n\n <!-- Info b\u00E1sica: categor\u00EDa y disponibles -->\n <div class=\"surface-ground p-3 border-round-xl border-1 surface-border text-sm\">\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <strong class=\"font-bold text-700\">Categor\u00EDa:</strong>\n <span class=\"text-600 text-right overflow-hidden text-overflow-ellipsis\" style=\"max-width: 60%;\">\n {{ product.nombreCategoria || 'Sin categor\u00EDa' }}\n </span>\n </div>\n <div class=\"flex justify-content-between align-items-center\">\n <strong class=\"font-bold text-700\">Disponibles:</strong>\n <span class=\"text-600 font-medium\">{{ product.cantidad }}</span>\n </div>\n </div>\n\n <!-- Badges informativos -->\n <div class=\"info-badges mb-4\">\n <div class=\"badge\"><i class=\"pi pi-shield\"></i><span>Compra protegida</span></div>\n <div class=\"badge\"><i class=\"pi pi-truck\"></i><span>Entrega r\u00E1pida</span></div>\n </div>\n </div>\n\n <div class=\"cta-card\">\n <!-- Botones de acci\u00F3n: Personalizar y Compartir -->\n <div class=\"flex gap-2 mb-3\">\n @if (isPersonalizable) {\n <p-button \n (click)=\"navigateToProductDetail()\" \n pTooltip=\"Personalizar\"\n icon=\"pi pi-pencil\"\n tooltipPosition=\"top\"\n styleClass=\"bg-900 text-white w-2rem h-2rem border-circle border-none flex align-items-center justify-content-center cursor-pointer hover:bg-700 transition-colors shadow-1\">\n </p-button>\n }\n \n <!-- Men\u00FA flotante de redes estilo PrimeNG -->\n <div class=\"relative inline-block ml-2 align-middle\">\n <button (click)=\"toggleShareMenu()\"\n pTooltip=\"Compartir\" tooltipPosition=\"top\"\n aria-label=\"Compartir en redes sociales\"\n class=\"surface-100 text-900 w-2rem h-2rem border-circle border-none flex align-items-center justify-content-center cursor-pointer hover:bg-200 transition-colors shadow-1\">\n <i class=\"pi\" [ngClass]=\"{'pi-times': shareMenuOpen, 'pi-share-alt': !shareMenuOpen}\"></i>\n </button>\n\n @if (shareMenuOpen) {\n <div class=\"flex gap-2 absolute z-5 mt-2 shadow-2 p-2 border-round surface-0\" style=\"left: 0; min-width: 120px;\">\n <button (click)=\"touchRedes('whatsapp')\" \n class=\"p-button-rounded p-button-success p-button-text flex align-items-center gap-2 w-full border-none bg-transparent hover:surface-100 cursor-pointer p-2 mb-1\">\n <i class=\"pi pi-whatsapp text-xl text-green-500\"></i>\n <span class=\"text-700 font-medium\">WhatsApp</span>\n </button>\n <button (click)=\"touchRedes('facebook')\" \n class=\"p-button-rounded p-button-info p-button-text flex align-items-center gap-2 w-full border-none bg-transparent hover:surface-100 cursor-pointer p-2\">\n <i class=\"pi pi-facebook text-xl text-blue-500\"></i>\n <span class=\"text-700 font-medium\">Facebook</span>\n </button>\n </div>\n }\n </div>\n </div>\n \n\n <lib-section-add-cards-buttons \n [product]=\"product\" \n [isLogin]=\"isLogin\">\n </lib-section-add-cards-buttons>\n\n @if (showCartMessage) {\n <div class=\"mt-3 text-center text-sm font-semibold text-green-600\">\n Producto a\u00F1adido al carrito.\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n} @else {\n <div class=\"surface-card shadow-2 border-round-2xl p-3 md:p-5 lg:p-6 w-full\">\n <div class=\"flex justify-content-center align-items-center\" style=\"height: 16rem;\">\n <p class=\"text-500 text-lg\">Cargando producto...</p>\n </div>\n </div>\n}", styles: ["#product-container{background:#fff;box-shadow:0 12px 32px #00000014,0 2px 12px #0000000a;border-radius:1rem}.main-image-frame{min-height:420px;height:520px;display:flex;align-items:center;justify-content:center;background:#fff;box-shadow:0 8px 24px #00000014}.main-image{width:100%;max-width:640px;height:100%;object-fit:contain}@media (min-width: 1024px){.main-image-frame{height:600px;box-shadow:0 14px 40px #0000001a}.main-image{max-width:860px}}.thumbnail-container{transition:transform .2s ease-in-out}.thumbnail-container:hover{transform:scale(1.05)}.thumbnail{border:2px solid transparent;border-radius:8px;overflow:hidden;transition:border-color .2s ease-in-out}.thumbnail img{width:100%;height:88px;object-fit:cover;display:block}.thumbnail.thumbnail-active{border-color:#3b82f6}.thumbnails-rail{max-height:520px;overflow:auto;padding-right:4px;border-right:1px solid rgba(0,0,0,.06)}.old-price{text-decoration:line-through;color:#9ca3af;font-size:1.125rem}.current-price{color:#1f2937;font-size:2rem;font-weight:700}.discount-label{background-color:#dc2626;color:#fff;padding:.25rem .5rem;border-radius:.375rem;font-size:.875rem;font-weight:600}.info-badges{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem}.info-badges .badge{display:inline-flex;align-items:center;gap:.5rem;background:#f8fafc;border:1px solid #e2e8f0;color:#334155;padding:.5rem .75rem;border-radius:.5rem;font-weight:600}.info-badges .badge i{font-size:1rem}.quantity-btn{width:2.5rem;height:2.5rem;border:1px solid #d1d5db;border-radius:.375rem;background-color:#f9fafb;transition:all .2s ease-in-out}.quantity-btn:hover{background-color:#f3f4f6;border-color:#9ca3af}.quantity-btn:active{transform:scale(.95)}:host ::ng-deep .p-rating .p-rating-icon{color:#fbbf24;font-size:1.25rem}:host ::ng-deep .p-button.w-full{width:100%!important;justify-content:center;padding:1rem 1.5rem;font-size:1.125rem;font-weight:700}:host ::ng-deep .p-image .p-image-preview-indicator{background-color:#00000080;border-radius:50%}:host ::ng-deep .contact-btn{display:inline-flex;align-items:center;gap:.5rem;background-color:#25d366;color:#fff;padding:.75rem 1.25rem;border-radius:.5rem;font-weight:700;box-shadow:0 2px 6px #0000001a;transition:transform .15s ease,box-shadow .15s ease}:host ::ng-deep .contact-btn:hover{transform:translateY(-1px);box-shadow:0 4px 10px #00000026;text-decoration:none}:host ::ng-deep .contact-btn i.pi.pi-whatsapp{font-size:1.25rem}:host ::ng-deep .cta-card{margin-top:1rem;padding:1rem;border:1px solid #e5e7eb;border-radius:.75rem;background:#fff;box-shadow:0 10px 25px #0000000d}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: PrimegModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: SectionAddCardsButtons, selector: "lib-section-add-cards-buttons", inputs: ["product", "isLogin"] }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }] });
|
|
7533
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DetalleCarrito1Component, deps: [{ token: ProductService }, { token: GoogleService }], target: i0.ɵɵFactoryTarget.Component });
|
|
7534
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DetalleCarrito1Component, isStandalone: true, selector: "lib-detalle-carrito-1", inputs: { product: "product", isLogin: "isLogin", isPersonalizable: "isPersonalizable", DatosNegocio: "DatosNegocio" }, outputs: { addToCart: "addToCart" }, ngImport: i0, template: "@if (product) {\n<div id=\"product-container\" class=\"shadow-2 border-round-2xl p-3 md:p-5 lg:p-6\">\n <!-- Contenedor principal de la p\u00E1gina de detalle -->\n <div class=\"grid\">\n <!-- Bloque de imagen principal -->\n <div class=\"flex flex-column col-12 lg:col-6\">\n <div class=\"main-image-frame bg-gray-100 border-round-xl flex justify-content-center align-items-center\">\n <img\n [src]=\"selectedImageUrl\"\n [alt]=\"product.imagen[0].alt || product.name\"\n loading=\"lazy\" width=\"1024\" height=\"520\"\n class=\"main-image border-round-xl\" />\n </div>\n\n <!-- Miniaturas debajo en m\u00F3vil y tablet -->\n @if (product.imagen && product.imagen.length > 0) {\n <div class=\"flex flex-row gap-2 overflow-x-auto pt-2\">\n @for (imagen of product.imagen; track $index) {\n <button type=\"button\" class=\"thumbnail-container border-round-lg cursor-pointer\" (click)=\"updateMainImage(imagen.url)\">\n <div class=\"thumbnail\" [class.thumbnail-active]=\"isActiveThumbnail(imagen.url)\">\n <img [src]=\"imagen.url\" alt=\"Miniatura {{ imagen.alt }}\" loading=\"lazy\" width=\"88\" height=\"88\" />\n </div>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Columna de informaci\u00F3n del producto -->\n <div class=\"flex flex-column justify-content-between col-12 lg:col-6\">\n <div class=\"flex flex-column gap-3\">\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <h1 class=\"text-3xl font-bold text-900\">{{ product.name }}</h1>\n <p-button \n [text]=\"true\" \n [rounded]=\"true\"\n (onClick)=\"toggleFavorite()\"\n [icon]=\"isFavorite ? 'pi pi-heart-fill' : 'pi pi-heart'\"\n [class]=\"isFavorite ? 'text-red-500' : 'text-500'\"\n class=\"hover:text-red-500\">\n </p-button>\n </div>\n\n \n\n <!-- Bloque descripci\u00F3n con fondo gris como card -->\n <div class=\"surface-ground p-3 border-round-xl border-1 surface-border\">\n <p class=\"text-700 line-height-3 m-0 font-bold\">Descripci\u00F3n</p>\n <p class=\"text-700 line-height-3 m-0\">{{ product.descripcion }}</p>\n </div>\n\n <div class=\"flex align-items-center gap-3\">\n @if(isLogin){\n @if(product.descuento != undefined && product.descuento > 0) {\n <span class=\"old-price\">{{ product.precios[0].precio | currency:product.precios[0].codigo_iso :'code' }}</span>\n <span class=\"discount-label\">{{ product.descuento}}% OFF</span>\n }\n <span class=\"current-price\">{{ discount | currency:product.precios[0].codigo_iso :'code'}}</span>\n } @else {\n <a\n class=\"contact-btn\"\n (click)=\"shareProductOnWhatsapp()\"\n aria-label=\"Contactar por WhatsApp\">\n <i class=\"pi pi-whatsapp\"></i>\n <span>Contactar</span>\n </a>\n }\n </div>\n\n <!-- Info b\u00E1sica: categor\u00EDa y disponibles -->\n <div class=\"surface-ground p-3 border-round-xl border-1 surface-border text-sm\">\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <strong class=\"font-bold text-700\">Categor\u00EDa:</strong>\n <span class=\"text-600 text-right overflow-hidden text-overflow-ellipsis\" style=\"max-width: 60%;\">\n {{ product.nombreCategoria || 'Sin categor\u00EDa' }}\n </span>\n </div>\n <div class=\"flex justify-content-between align-items-center\">\n <strong class=\"font-bold text-700\">Disponibles:</strong>\n <span class=\"text-600 font-medium\">{{ product.cantidad }}</span>\n </div>\n </div>\n\n <!-- Badges informativos -->\n <div class=\"info-badges mb-4\">\n <div class=\"badge\"><i class=\"pi pi-shield\"></i><span>Compra protegida</span></div>\n <div class=\"badge\"><i class=\"pi pi-truck\"></i><span>Entrega r\u00E1pida</span></div>\n </div>\n </div>\n\n <div class=\"cta-card\">\n <!-- Botones de acci\u00F3n: Personalizar y Compartir -->\n <div class=\"flex gap-2 mb-3\">\n @if (isPersonalizable) {\n <p-button \n (click)=\"navigateToProductDetail()\" \n pTooltip=\"Personalizar\"\n icon=\"pi pi-pencil\"\n tooltipPosition=\"top\"\n styleClass=\"bg-900 text-white w-2rem h-2rem border-circle border-none flex align-items-center justify-content-center cursor-pointer hover:bg-700 transition-colors shadow-1\">\n </p-button>\n }\n \n <!-- Men\u00FA flotante de redes estilo PrimeNG -->\n <div class=\"relative inline-block ml-2 align-middle\">\n <button (click)=\"toggleShareMenu()\"\n pTooltip=\"Compartir\" tooltipPosition=\"top\"\n aria-label=\"Compartir en redes sociales\"\n class=\"surface-100 text-900 w-2rem h-2rem border-circle border-none flex align-items-center justify-content-center cursor-pointer hover:bg-200 transition-colors shadow-1\">\n <i class=\"pi\" [ngClass]=\"{'pi-times': shareMenuOpen, 'pi-share-alt': !shareMenuOpen}\"></i>\n </button>\n\n @if (shareMenuOpen) {\n <div class=\"flex gap-2 absolute z-5 mt-2 shadow-2 p-2 border-round surface-0\" style=\"left: 0; min-width: 120px;\">\n <button (click)=\"touchRedes('whatsapp')\" \n class=\"p-button-rounded p-button-success p-button-text flex align-items-center gap-2 w-full border-none bg-transparent hover:surface-100 cursor-pointer p-2 mb-1\">\n <i class=\"pi pi-whatsapp text-xl text-green-500\"></i>\n <span class=\"text-700 font-medium\">WhatsApp</span>\n </button>\n <button (click)=\"touchRedes('facebook')\" \n class=\"p-button-rounded p-button-info p-button-text flex align-items-center gap-2 w-full border-none bg-transparent hover:surface-100 cursor-pointer p-2\">\n <i class=\"pi pi-facebook text-xl text-blue-500\"></i>\n <span class=\"text-700 font-medium\">Facebook</span>\n </button>\n </div>\n }\n </div>\n </div>\n \n\n <lib-section-add-cards-buttons \n [product]=\"product\" \n [isLogin]=\"isLogin\">\n </lib-section-add-cards-buttons>\n\n @if (showCartMessage) {\n <div class=\"mt-3 text-center text-sm font-semibold text-green-600\">\n Producto a\u00F1adido al carrito.\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n} @else {\n <div class=\"surface-card shadow-2 border-round-2xl p-3 md:p-5 lg:p-6 w-full\">\n <div class=\"flex justify-content-center align-items-center\" style=\"height: 16rem;\">\n <p class=\"text-500 text-lg\">Cargando producto...</p>\n </div>\n </div>\n}", styles: ["#product-container{background:#fff;box-shadow:0 12px 32px #00000014,0 2px 12px #0000000a;border-radius:1rem}.main-image-frame{min-height:420px;height:520px;display:flex;align-items:center;justify-content:center;background:#fff;box-shadow:0 8px 24px #00000014}.main-image{width:100%;max-width:640px;height:100%;object-fit:contain}@media (min-width: 1024px){.main-image-frame{height:600px;box-shadow:0 14px 40px #0000001a}.main-image{max-width:860px}}.thumbnail-container{transition:transform .2s ease-in-out}.thumbnail-container:hover{transform:scale(1.05)}.thumbnail{border:2px solid transparent;border-radius:8px;overflow:hidden;transition:border-color .2s ease-in-out}.thumbnail img{width:100%;height:88px;object-fit:cover;display:block}.thumbnail.thumbnail-active{border-color:#3b82f6}.thumbnails-rail{max-height:520px;overflow:auto;padding-right:4px;border-right:1px solid rgba(0,0,0,.06)}.old-price{text-decoration:line-through;color:#9ca3af;font-size:1.125rem}.current-price{color:#1f2937;font-size:2rem;font-weight:700}.discount-label{background-color:#dc2626;color:#fff;padding:.25rem .5rem;border-radius:.375rem;font-size:.875rem;font-weight:600}.info-badges{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem}.info-badges .badge{display:inline-flex;align-items:center;gap:.5rem;background:#f8fafc;border:1px solid #e2e8f0;color:#334155;padding:.5rem .75rem;border-radius:.5rem;font-weight:600}.info-badges .badge i{font-size:1rem}.quantity-btn{width:2.5rem;height:2.5rem;border:1px solid #d1d5db;border-radius:.375rem;background-color:#f9fafb;transition:all .2s ease-in-out}.quantity-btn:hover{background-color:#f3f4f6;border-color:#9ca3af}.quantity-btn:active{transform:scale(.95)}:host ::ng-deep .p-rating .p-rating-icon{color:#fbbf24;font-size:1.25rem}:host ::ng-deep .p-button.w-full{width:100%!important;justify-content:center;padding:1rem 1.5rem;font-size:1.125rem;font-weight:700}:host ::ng-deep .p-image .p-image-preview-indicator{background-color:#00000080;border-radius:50%}:host ::ng-deep .contact-btn{display:inline-flex;align-items:center;gap:.5rem;background-color:#25d366;color:#fff;padding:.75rem 1.25rem;border-radius:.5rem;font-weight:700;box-shadow:0 2px 6px #0000001a;transition:transform .15s ease,box-shadow .15s ease}:host ::ng-deep .contact-btn:hover{transform:translateY(-1px);box-shadow:0 4px 10px #00000026;text-decoration:none}:host ::ng-deep .contact-btn i.pi.pi-whatsapp{font-size:1.25rem}:host ::ng-deep .cta-card{margin-top:1rem;padding:1rem;border:1px solid #e5e7eb;border-radius:.75rem;background:#fff;box-shadow:0 10px 25px #0000000d}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: PrimegModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: SectionAddCardsButtons, selector: "lib-section-add-cards-buttons", inputs: ["product", "isLogin"] }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }] });
|
|
7450
7535
|
}
|
|
7451
7536
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DetalleCarrito1Component, decorators: [{
|
|
7452
7537
|
type: Component,
|
|
7453
7538
|
args: [{ selector: 'lib-detalle-carrito-1', imports: [CommonModule, PrimegModule, FormsModule, SectionAddCardsButtons], standalone: true, template: "@if (product) {\n<div id=\"product-container\" class=\"shadow-2 border-round-2xl p-3 md:p-5 lg:p-6\">\n <!-- Contenedor principal de la p\u00E1gina de detalle -->\n <div class=\"grid\">\n <!-- Bloque de imagen principal -->\n <div class=\"flex flex-column col-12 lg:col-6\">\n <div class=\"main-image-frame bg-gray-100 border-round-xl flex justify-content-center align-items-center\">\n <img\n [src]=\"selectedImageUrl\"\n [alt]=\"product.imagen[0].alt || product.name\"\n loading=\"lazy\" width=\"1024\" height=\"520\"\n class=\"main-image border-round-xl\" />\n </div>\n\n <!-- Miniaturas debajo en m\u00F3vil y tablet -->\n @if (product.imagen && product.imagen.length > 0) {\n <div class=\"flex flex-row gap-2 overflow-x-auto pt-2\">\n @for (imagen of product.imagen; track $index) {\n <button type=\"button\" class=\"thumbnail-container border-round-lg cursor-pointer\" (click)=\"updateMainImage(imagen.url)\">\n <div class=\"thumbnail\" [class.thumbnail-active]=\"isActiveThumbnail(imagen.url)\">\n <img [src]=\"imagen.url\" alt=\"Miniatura {{ imagen.alt }}\" loading=\"lazy\" width=\"88\" height=\"88\" />\n </div>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Columna de informaci\u00F3n del producto -->\n <div class=\"flex flex-column justify-content-between col-12 lg:col-6\">\n <div class=\"flex flex-column gap-3\">\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <h1 class=\"text-3xl font-bold text-900\">{{ product.name }}</h1>\n <p-button \n [text]=\"true\" \n [rounded]=\"true\"\n (onClick)=\"toggleFavorite()\"\n [icon]=\"isFavorite ? 'pi pi-heart-fill' : 'pi pi-heart'\"\n [class]=\"isFavorite ? 'text-red-500' : 'text-500'\"\n class=\"hover:text-red-500\">\n </p-button>\n </div>\n\n \n\n <!-- Bloque descripci\u00F3n con fondo gris como card -->\n <div class=\"surface-ground p-3 border-round-xl border-1 surface-border\">\n <p class=\"text-700 line-height-3 m-0 font-bold\">Descripci\u00F3n</p>\n <p class=\"text-700 line-height-3 m-0\">{{ product.descripcion }}</p>\n </div>\n\n <div class=\"flex align-items-center gap-3\">\n @if(isLogin){\n @if(product.descuento != undefined && product.descuento > 0) {\n <span class=\"old-price\">{{ product.precios[0].precio | currency:product.precios[0].codigo_iso :'code' }}</span>\n <span class=\"discount-label\">{{ product.descuento}}% OFF</span>\n }\n <span class=\"current-price\">{{ discount | currency:product.precios[0].codigo_iso :'code'}}</span>\n } @else {\n <a\n class=\"contact-btn\"\n (click)=\"shareProductOnWhatsapp()\"\n aria-label=\"Contactar por WhatsApp\">\n <i class=\"pi pi-whatsapp\"></i>\n <span>Contactar</span>\n </a>\n }\n </div>\n\n <!-- Info b\u00E1sica: categor\u00EDa y disponibles -->\n <div class=\"surface-ground p-3 border-round-xl border-1 surface-border text-sm\">\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <strong class=\"font-bold text-700\">Categor\u00EDa:</strong>\n <span class=\"text-600 text-right overflow-hidden text-overflow-ellipsis\" style=\"max-width: 60%;\">\n {{ product.nombreCategoria || 'Sin categor\u00EDa' }}\n </span>\n </div>\n <div class=\"flex justify-content-between align-items-center\">\n <strong class=\"font-bold text-700\">Disponibles:</strong>\n <span class=\"text-600 font-medium\">{{ product.cantidad }}</span>\n </div>\n </div>\n\n <!-- Badges informativos -->\n <div class=\"info-badges mb-4\">\n <div class=\"badge\"><i class=\"pi pi-shield\"></i><span>Compra protegida</span></div>\n <div class=\"badge\"><i class=\"pi pi-truck\"></i><span>Entrega r\u00E1pida</span></div>\n </div>\n </div>\n\n <div class=\"cta-card\">\n <!-- Botones de acci\u00F3n: Personalizar y Compartir -->\n <div class=\"flex gap-2 mb-3\">\n @if (isPersonalizable) {\n <p-button \n (click)=\"navigateToProductDetail()\" \n pTooltip=\"Personalizar\"\n icon=\"pi pi-pencil\"\n tooltipPosition=\"top\"\n styleClass=\"bg-900 text-white w-2rem h-2rem border-circle border-none flex align-items-center justify-content-center cursor-pointer hover:bg-700 transition-colors shadow-1\">\n </p-button>\n }\n \n <!-- Men\u00FA flotante de redes estilo PrimeNG -->\n <div class=\"relative inline-block ml-2 align-middle\">\n <button (click)=\"toggleShareMenu()\"\n pTooltip=\"Compartir\" tooltipPosition=\"top\"\n aria-label=\"Compartir en redes sociales\"\n class=\"surface-100 text-900 w-2rem h-2rem border-circle border-none flex align-items-center justify-content-center cursor-pointer hover:bg-200 transition-colors shadow-1\">\n <i class=\"pi\" [ngClass]=\"{'pi-times': shareMenuOpen, 'pi-share-alt': !shareMenuOpen}\"></i>\n </button>\n\n @if (shareMenuOpen) {\n <div class=\"flex gap-2 absolute z-5 mt-2 shadow-2 p-2 border-round surface-0\" style=\"left: 0; min-width: 120px;\">\n <button (click)=\"touchRedes('whatsapp')\" \n class=\"p-button-rounded p-button-success p-button-text flex align-items-center gap-2 w-full border-none bg-transparent hover:surface-100 cursor-pointer p-2 mb-1\">\n <i class=\"pi pi-whatsapp text-xl text-green-500\"></i>\n <span class=\"text-700 font-medium\">WhatsApp</span>\n </button>\n <button (click)=\"touchRedes('facebook')\" \n class=\"p-button-rounded p-button-info p-button-text flex align-items-center gap-2 w-full border-none bg-transparent hover:surface-100 cursor-pointer p-2\">\n <i class=\"pi pi-facebook text-xl text-blue-500\"></i>\n <span class=\"text-700 font-medium\">Facebook</span>\n </button>\n </div>\n }\n </div>\n </div>\n \n\n <lib-section-add-cards-buttons \n [product]=\"product\" \n [isLogin]=\"isLogin\">\n </lib-section-add-cards-buttons>\n\n @if (showCartMessage) {\n <div class=\"mt-3 text-center text-sm font-semibold text-green-600\">\n Producto a\u00F1adido al carrito.\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n} @else {\n <div class=\"surface-card shadow-2 border-round-2xl p-3 md:p-5 lg:p-6 w-full\">\n <div class=\"flex justify-content-center align-items-center\" style=\"height: 16rem;\">\n <p class=\"text-500 text-lg\">Cargando producto...</p>\n </div>\n </div>\n}", styles: ["#product-container{background:#fff;box-shadow:0 12px 32px #00000014,0 2px 12px #0000000a;border-radius:1rem}.main-image-frame{min-height:420px;height:520px;display:flex;align-items:center;justify-content:center;background:#fff;box-shadow:0 8px 24px #00000014}.main-image{width:100%;max-width:640px;height:100%;object-fit:contain}@media (min-width: 1024px){.main-image-frame{height:600px;box-shadow:0 14px 40px #0000001a}.main-image{max-width:860px}}.thumbnail-container{transition:transform .2s ease-in-out}.thumbnail-container:hover{transform:scale(1.05)}.thumbnail{border:2px solid transparent;border-radius:8px;overflow:hidden;transition:border-color .2s ease-in-out}.thumbnail img{width:100%;height:88px;object-fit:cover;display:block}.thumbnail.thumbnail-active{border-color:#3b82f6}.thumbnails-rail{max-height:520px;overflow:auto;padding-right:4px;border-right:1px solid rgba(0,0,0,.06)}.old-price{text-decoration:line-through;color:#9ca3af;font-size:1.125rem}.current-price{color:#1f2937;font-size:2rem;font-weight:700}.discount-label{background-color:#dc2626;color:#fff;padding:.25rem .5rem;border-radius:.375rem;font-size:.875rem;font-weight:600}.info-badges{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem}.info-badges .badge{display:inline-flex;align-items:center;gap:.5rem;background:#f8fafc;border:1px solid #e2e8f0;color:#334155;padding:.5rem .75rem;border-radius:.5rem;font-weight:600}.info-badges .badge i{font-size:1rem}.quantity-btn{width:2.5rem;height:2.5rem;border:1px solid #d1d5db;border-radius:.375rem;background-color:#f9fafb;transition:all .2s ease-in-out}.quantity-btn:hover{background-color:#f3f4f6;border-color:#9ca3af}.quantity-btn:active{transform:scale(.95)}:host ::ng-deep .p-rating .p-rating-icon{color:#fbbf24;font-size:1.25rem}:host ::ng-deep .p-button.w-full{width:100%!important;justify-content:center;padding:1rem 1.5rem;font-size:1.125rem;font-weight:700}:host ::ng-deep .p-image .p-image-preview-indicator{background-color:#00000080;border-radius:50%}:host ::ng-deep .contact-btn{display:inline-flex;align-items:center;gap:.5rem;background-color:#25d366;color:#fff;padding:.75rem 1.25rem;border-radius:.5rem;font-weight:700;box-shadow:0 2px 6px #0000001a;transition:transform .15s ease,box-shadow .15s ease}:host ::ng-deep .contact-btn:hover{transform:translateY(-1px);box-shadow:0 4px 10px #00000026;text-decoration:none}:host ::ng-deep .contact-btn i.pi.pi-whatsapp{font-size:1.25rem}:host ::ng-deep .cta-card{margin-top:1rem;padding:1rem;border:1px solid #e5e7eb;border-radius:.75rem;background:#fff;box-shadow:0 10px 25px #0000000d}\n"] }]
|
|
7454
|
-
}], ctorParameters: () => [{ type: ProductService }], propDecorators: { addToCart: [{
|
|
7539
|
+
}], ctorParameters: () => [{ type: ProductService }, { type: GoogleService }], propDecorators: { addToCart: [{
|
|
7455
7540
|
type: Output
|
|
7456
7541
|
}], product: [{
|
|
7457
7542
|
type: Input
|
|
@@ -7459,14 +7544,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
7459
7544
|
type: Input
|
|
7460
7545
|
}], isPersonalizable: [{
|
|
7461
7546
|
type: Input
|
|
7547
|
+
}], DatosNegocio: [{
|
|
7548
|
+
type: Input
|
|
7462
7549
|
}] } });
|
|
7463
7550
|
|
|
7464
7551
|
class CardProductos1Component {
|
|
7465
7552
|
productService;
|
|
7466
7553
|
router;
|
|
7554
|
+
googleService;
|
|
7467
7555
|
product;
|
|
7468
7556
|
addToCart = new EventEmitter();
|
|
7469
7557
|
isLogin = false;
|
|
7558
|
+
DatosNegocio = null;
|
|
7470
7559
|
// Ruta base configurable desde el frontal para navegar al detalle
|
|
7471
7560
|
detailRouteBase = ['productos'];
|
|
7472
7561
|
discount = 0;
|
|
@@ -7477,9 +7566,10 @@ class CardProductos1Component {
|
|
|
7477
7566
|
autoSlideInterval;
|
|
7478
7567
|
constructor(
|
|
7479
7568
|
// private currencyPipe: CurrencyPipe,
|
|
7480
|
-
productService, router) {
|
|
7569
|
+
productService, router, googleService) {
|
|
7481
7570
|
this.productService = productService;
|
|
7482
7571
|
this.router = router;
|
|
7572
|
+
this.googleService = googleService;
|
|
7483
7573
|
}
|
|
7484
7574
|
/**
|
|
7485
7575
|
* Inicializa el componente calculando el descuento y
|
|
@@ -7586,15 +7676,36 @@ class CardProductos1Component {
|
|
|
7586
7676
|
* basado en si el usuario tiene sesión iniciada.
|
|
7587
7677
|
*/
|
|
7588
7678
|
shareProductOnWhatsapp() {
|
|
7589
|
-
|
|
7679
|
+
const whatsappNumber = this.DatosNegocio?.telefono || '+573118025433';
|
|
7680
|
+
const text = `Mira este producto: ${this.product?.name ?? ''} - ${this.shareBaseUrl}`;
|
|
7681
|
+
const whatsappUrl = `https://wa.me/${whatsappNumber}?text=${encodeURIComponent(text)}`;
|
|
7682
|
+
if (this.DatosNegocio?.googleAdsConversionId) {
|
|
7683
|
+
this.googleService.reportConversion(this.DatosNegocio.googleAdsConversionId, whatsappUrl);
|
|
7684
|
+
}
|
|
7685
|
+
else {
|
|
7686
|
+
window.open(whatsappUrl, '_blank');
|
|
7687
|
+
}
|
|
7688
|
+
if (this.DatosNegocio?.googleAnalyticsEvent) {
|
|
7689
|
+
this.googleService.reportAnalyticsEvent(this.DatosNegocio.googleAnalyticsEvent, { producto: this.product?.name });
|
|
7690
|
+
}
|
|
7590
7691
|
}
|
|
7591
7692
|
/**
|
|
7592
7693
|
* Abre WhatsApp para contactar directamente a un número predefinido
|
|
7593
7694
|
* con un mensaje basado en si el usuario tiene sesión iniciada.
|
|
7594
7695
|
*/
|
|
7595
7696
|
contactWhatsapp() {
|
|
7596
|
-
const whatsappNumber = '+573118025433';
|
|
7597
|
-
|
|
7697
|
+
const whatsappNumber = this.DatosNegocio?.telefono || '+573118025433';
|
|
7698
|
+
const text = `Mira este producto: ${this.product?.name ?? ''} - ${this.shareBaseUrl}`;
|
|
7699
|
+
const whatsappUrl = `https://wa.me/${whatsappNumber}?text=${encodeURIComponent(text)}`;
|
|
7700
|
+
if (this.DatosNegocio?.googleAdsConversionId) {
|
|
7701
|
+
this.googleService.reportConversion(this.DatosNegocio.googleAdsConversionId, whatsappUrl);
|
|
7702
|
+
}
|
|
7703
|
+
else {
|
|
7704
|
+
window.open(whatsappUrl, '_blank');
|
|
7705
|
+
}
|
|
7706
|
+
if (this.DatosNegocio?.googleAnalyticsEvent) {
|
|
7707
|
+
this.googleService.reportAnalyticsEvent(this.DatosNegocio.googleAnalyticsEvent, { producto: this.product?.name });
|
|
7708
|
+
}
|
|
7598
7709
|
}
|
|
7599
7710
|
/**
|
|
7600
7711
|
* Alterna la visibilidad del menú flotante de compartir en redes.
|
|
@@ -7608,28 +7719,28 @@ class CardProductos1Component {
|
|
|
7608
7719
|
*/
|
|
7609
7720
|
touchRedes(red) {
|
|
7610
7721
|
const url = this.shareBaseUrl;
|
|
7611
|
-
const name = this.product?.name ?? '';
|
|
7612
7722
|
if (red === 'whatsapp') {
|
|
7613
|
-
|
|
7614
|
-
window.open(`https://api.whatsapp.com/send?text=${encodeURIComponent(text)}`, '_blank');
|
|
7723
|
+
this.shareProductOnWhatsapp();
|
|
7615
7724
|
}
|
|
7616
7725
|
if (red === 'facebook') {
|
|
7617
7726
|
const fbUrl = `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(url)}`;
|
|
7618
7727
|
window.open(fbUrl, '_blank', 'noopener');
|
|
7619
7728
|
}
|
|
7620
7729
|
}
|
|
7621
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CardProductos1Component, deps: [{ token: ProductService }, { token: i1$8.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
7622
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CardProductos1Component, isStandalone: true, selector: "lib-card-productos1", inputs: { product: "product", isLogin: "isLogin", detailRouteBase: "detailRouteBase" }, outputs: { addToCart: "addToCart" }, ngImport: i0, template: "<div aria-label=\"tarjetas de productos inflables\" class=\"surface-card shadow-3 border-round-xl overflow-visible relative transition-all transition-duration-300 hover:shadow-6 flex flex-column h-full hover-effect\"\n style=\"min-height: 520px; max-width: 400px; margin: 0 auto\">\n @if (product) {\n <div class=\"relative surface-ground flex align-items-center justify-content-center overflow-hidden p-3 image-hover-container\"\n style=\"height: 280px\">\n <img [src]=\"currentImageUrl || product.imagen[0]?.url\" [alt]=\"product.imagen[0]?.alt\" itemprop=\"image\"\n loading=\"lazy\" width=\"400\" height=\"280\"\n class=\"max-w-full max-h-full object-contain cursor-pointer transition-transform transition-duration-300 hover-zoom\"\n (click)=\"navigateToProductDetail()\" />\n\n <!-- Overlay con icono de ojo al hover -->\n <div class=\"image-overlay\">\n <button pButton type=\"button\" class=\"p-button-rounded p-button-info p-button-lg shadow-4\"\n (click)=\"navigateToProductDetail()\" [attr.aria-label]=\"'Ver detalle de ' + product.name\" pTooltip=\"Ver detalles\" tooltipPosition=\"top\">\n <i class=\"pi pi-eye text-xl\"></i>\n </button>\n </div>\n\n <button (click)=\"contactWhatsapp()\"\n aria-label=\"Contactar por WhatsApp\"\n class=\"absolute bottom-0 right-0 m-3 bg-green-500 border-none text-white w-3rem h-3rem border-circle shadow-4 flex align-items-center justify-content-center cursor-pointer transition-colors transition-duration-200 hover:bg-green-600 z-2\">\n <i class=\"pi pi-whatsapp text-2xl\"></i>\n </button>\n </div>\n\n <div class=\"p-3 flex flex-column flex-grow-1\">\n <div class=\"flex gap-2 overflow-x-auto pb-2 mb-3 z-1\">\n @for (image of product.imagen; track $index) {\n <img [src]=\"image.url\" [alt]=\"image.alt\" (click)=\"selectImage($index)\"\n loading=\"lazy\" width=\"48\" height=\"48\"\n class=\"w-3rem h-3rem border-round border-2 cursor-pointer flex-shrink-0 transition-all transition-duration-200 object-cover\"\n [class.border-900]=\"isActiveThumbnail($index)\" [class.border-transparent]=\"!isActiveThumbnail($index)\"\n [class.opacity-60]=\"!isActiveThumbnail($index)\" />\n }\n </div>\n\n <div class=\"surface-border border-top-1 w-full mb-3\"></div>\n\n <div class=\"flex justify-content-between align-items-start gap-2 mb-3\">\n <h3 class=\"text-xl font-semibold text-900 m-0 line-height-3 flex-grow-1 cursor-pointer hover:text-700 transition-colors\"\n (click)=\"navigateToProductDetail()\" style=\"word-break: break-word\">\n {{ product.name }}\n </h3>\n\n <div class=\"flex gap-2 flex-shrink-0 mt-1\" style=\"position: relative;\">\n @if (isLogin) {\n <p-button (click)=\"navigateToProductDetail()\" pTooltip=\"Personalizar\" icon=\"pi pi-pencil\"\n tooltipPosition=\"top\"\n styleClass=\"bg-900 text-white w-2rem h-2rem border-circle border-none flex align-items-center justify-content-center cursor-pointer hover:bg-700 transition-colors shadow-1\">\n </p-button>\n }\n <!-- Men\u00FA flotante de redes estilo PrimeNG -->\n <div class=\"relative\" style=\"position: absolute; right: -0.75rem; top: -0.75rem; z-index: 10;\">\n <button (click)=\"toggleShareMenu()\"\n aria-label=\"Compartir en redes sociales\"\n class=\"bg-green-500 border-none text-white w-2rem h-2rem border-circle shadow-2 flex align-items-center justify-content-center cursor-pointer transition-colors transition-duration-200 hover:bg-green-600\">\n <i class=\"pi\" [ngClass]=\"{'pi-times': shareMenuOpen, 'pi-share-alt': !shareMenuOpen}\"></i>\n </button>\n @if (shareMenuOpen) {\n <div class=\"flex gap-2 absolute\" style=\"right: 0; top: 2.6rem;\">\n <button (click)=\"touchRedes('whatsapp')\" aria-label=\"Compartir en WhatsApp\" class=\"border-none w-2rem h-2rem border-circle flex align-items-center justify-content-center cursor-pointer shadow-1\" style=\"background:#25D366;color:#fff\">\n <i class=\"pi pi-whatsapp\"></i>\n </button>\n <button (click)=\"touchRedes('facebook')\" aria-label=\"Compartir en Facebook\" class=\"border-none w-2rem h-2rem border-circle flex align-items-center justify-content-center cursor-pointer shadow-1\" style=\"background:#1877F2;color:#fff\">\n <i class=\"pi pi-facebook\"></i>\n </button>\n \n </div>\n }\n </div>\n </div>\n </div>\n\n <div class=\"surface-ground p-3 border-round-xl border-1 surface-border text-sm mb-4\">\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <strong class=\"font-bold text-700\">Categor\u00EDa:</strong>\n <span class=\"text-600 text-right overflow-hidden text-overflow-ellipsis\" style=\"max-width: 60%\">\n {{ product.nombreCategoria || 'Sin categor\u00EDa' }}\n </span>\n </div>\n <div class=\"flex justify-content-between align-items-center\">\n <strong class=\"font-bold text-700\">Disponibles:</strong>\n <span class=\"text-600 font-medium\">{{ product.cantidad }}</span>\n </div>\n </div>\n\n <div class=\"mt-auto\">\n\n\n <div class=\"flex align-items-end gap-2 mb-3 flex-wrap\">\n @if(isLogin){\n @if (product.descuento && product.descuento > 0) {\n <span class=\"text-500 line-through text-sm mb-1\">\n {{ product.precios[0].precio | currency: product.precios[0].codigo_iso : \"code\" }}\n </span>\n }\n\n <span class=\"text-2xl font-bold text-900\">\n {{ discount | currency: product.precios[0].codigo_iso : \"code\" }}\n </span>\n\n @if (product.descuento && product.descuento > 0) {\n <div class=\"bg-green-100 text-green-700 px-2 py-1 text-xs font-bold border-round mb-1 ml-auto\">\n {{ product.descuento }}% OFF\n </div>\n }\n } \n </div>\n\n <lib-section-add-cards-buttons
|
|
7730
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CardProductos1Component, deps: [{ token: ProductService }, { token: i1$8.Router }, { token: GoogleService }], target: i0.ɵɵFactoryTarget.Component });
|
|
7731
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CardProductos1Component, isStandalone: true, selector: "lib-card-productos1", inputs: { product: "product", isLogin: "isLogin", DatosNegocio: "DatosNegocio", detailRouteBase: "detailRouteBase" }, outputs: { addToCart: "addToCart" }, ngImport: i0, template: "<div aria-label=\"tarjetas de productos inflables\" class=\"surface-card shadow-3 border-round-xl overflow-visible relative transition-all transition-duration-300 hover:shadow-6 flex flex-column h-full hover-effect\"\n style=\"min-height: 520px; max-width: 400px; margin: 0 auto\">\n @if (product) {\n <div class=\"relative surface-ground flex align-items-center justify-content-center overflow-hidden p-3 image-hover-container\"\n style=\"height: 280px\">\n <img [src]=\"currentImageUrl || product.imagen[0]?.url\" [alt]=\"product.imagen[0]?.alt\" itemprop=\"image\"\n loading=\"lazy\" width=\"400\" height=\"280\"\n class=\"max-w-full max-h-full object-contain cursor-pointer transition-transform transition-duration-300 hover-zoom\"\n (click)=\"navigateToProductDetail()\" />\n\n <!-- Overlay con icono de ojo al hover -->\n <div class=\"image-overlay\">\n <button pButton type=\"button\" class=\"p-button-rounded p-button-info p-button-lg shadow-4\"\n (click)=\"navigateToProductDetail()\" [attr.aria-label]=\"'Ver detalle de ' + product.name\" pTooltip=\"Ver detalles\" tooltipPosition=\"top\">\n <i class=\"pi pi-eye text-xl\"></i>\n </button>\n </div>\n\n <button (click)=\"contactWhatsapp()\"\n aria-label=\"Contactar por WhatsApp\"\n class=\"absolute bottom-0 right-0 m-3 bg-green-500 border-none text-white w-3rem h-3rem border-circle shadow-4 flex align-items-center justify-content-center cursor-pointer transition-colors transition-duration-200 hover:bg-green-600 z-2\">\n <i class=\"pi pi-whatsapp text-2xl\"></i>\n </button>\n </div>\n\n <div class=\"p-3 flex flex-column flex-grow-1\">\n <div class=\"flex gap-2 overflow-x-auto pb-2 mb-3 z-1\">\n @for (image of product.imagen; track $index) {\n <img [src]=\"image.url\" [alt]=\"image.alt\" (click)=\"selectImage($index)\"\n loading=\"lazy\" width=\"48\" height=\"48\"\n class=\"w-3rem h-3rem border-round border-2 cursor-pointer flex-shrink-0 transition-all transition-duration-200 object-cover\"\n [class.border-900]=\"isActiveThumbnail($index)\" [class.border-transparent]=\"!isActiveThumbnail($index)\"\n [class.opacity-60]=\"!isActiveThumbnail($index)\" />\n }\n </div>\n\n <div class=\"surface-border border-top-1 w-full mb-3\"></div>\n\n <div class=\"flex justify-content-between align-items-start gap-2 mb-3\">\n <h3 class=\"text-xl font-semibold text-900 m-0 line-height-3 flex-grow-1 cursor-pointer hover:text-700 transition-colors\"\n (click)=\"navigateToProductDetail()\" style=\"word-break: break-word\">\n {{ product.name }}\n </h3>\n\n <div class=\"flex gap-2 flex-shrink-0 mt-1\" style=\"position: relative;\">\n @if (isLogin) {\n <p-button (click)=\"navigateToProductDetail()\" pTooltip=\"Personalizar\" icon=\"pi pi-pencil\"\n tooltipPosition=\"top\"\n styleClass=\"bg-900 text-white w-2rem h-2rem border-circle border-none flex align-items-center justify-content-center cursor-pointer hover:bg-700 transition-colors shadow-1\">\n </p-button>\n }\n <!-- Men\u00FA flotante de redes estilo PrimeNG -->\n <div class=\"relative\" style=\"position: absolute; right: -0.75rem; top: -0.75rem; z-index: 10;\">\n <button (click)=\"toggleShareMenu()\"\n aria-label=\"Compartir en redes sociales\"\n class=\"bg-green-500 border-none text-white w-2rem h-2rem border-circle shadow-2 flex align-items-center justify-content-center cursor-pointer transition-colors transition-duration-200 hover:bg-green-600\">\n <i class=\"pi\" [ngClass]=\"{'pi-times': shareMenuOpen, 'pi-share-alt': !shareMenuOpen}\"></i>\n </button>\n @if (shareMenuOpen) {\n <div class=\"flex gap-2 absolute\" style=\"right: 0; top: 2.6rem;\">\n <button (click)=\"touchRedes('whatsapp')\" aria-label=\"Compartir en WhatsApp\" class=\"border-none w-2rem h-2rem border-circle flex align-items-center justify-content-center cursor-pointer shadow-1\" style=\"background:#25D366;color:#fff\">\n <i class=\"pi pi-whatsapp\"></i>\n </button>\n <button (click)=\"touchRedes('facebook')\" aria-label=\"Compartir en Facebook\" class=\"border-none w-2rem h-2rem border-circle flex align-items-center justify-content-center cursor-pointer shadow-1\" style=\"background:#1877F2;color:#fff\">\n <i class=\"pi pi-facebook\"></i>\n </button>\n \n </div>\n }\n </div>\n </div>\n </div>\n\n <div class=\"surface-ground p-3 border-round-xl border-1 surface-border text-sm mb-4\">\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <strong class=\"font-bold text-700\">Categor\u00EDa:</strong>\n <span class=\"text-600 text-right overflow-hidden text-overflow-ellipsis\" style=\"max-width: 60%\">\n {{ product.nombreCategoria || 'Sin categor\u00EDa' }}\n </span>\n </div>\n <div class=\"flex justify-content-between align-items-center\">\n <strong class=\"font-bold text-700\">Disponibles:</strong>\n <span class=\"text-600 font-medium\">{{ product.cantidad }}</span>\n </div>\n </div>\n\n <div class=\"mt-auto\">\n\n\n <div class=\"flex align-items-end gap-2 mb-3 flex-wrap\">\n @if(isLogin){\n @if (product.descuento && product.descuento > 0) {\n <span class=\"text-500 line-through text-sm mb-1\">\n {{ product.precios[0].precio | currency: product.precios[0].codigo_iso : \"code\" }}\n </span>\n }\n\n <span class=\"text-2xl font-bold text-900\">\n {{ discount | currency: product.precios[0].codigo_iso : \"code\" }}\n </span>\n\n @if (product.descuento && product.descuento > 0) {\n <div class=\"bg-green-100 text-green-700 px-2 py-1 text-xs font-bold border-round mb-1 ml-auto\">\n {{ product.descuento }}% OFF\n </div>\n }\n } \n </div>\n\n <lib-section-add-cards-buttons [product]=\"product\" [isLogin]=\"isLogin\">\n </lib-section-add-cards-buttons>\n\n </div>\n </div>\n } @else {\n <div class=\"flex align-items-center justify-content-center h-full text-500\">\n Producto no disponible\n </div>\n }\n</div>", styles: [".hover-effect{transition:transform .3s ease,box-shadow .3s ease}.hover-effect:hover{transform:translateY(-4px)}.hover-zoom{transition:transform .35s ease}.hover-zoom:hover{transform:scale(1.05)}.overflow-x-auto{scrollbar-width:none}.overflow-x-auto::-webkit-scrollbar{display:none}.image-hover-container{position:relative}.image-hover-container .image-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#0000002e;opacity:0;pointer-events:none;transition:opacity .25s ease}.image-hover-container:hover .image-overlay{opacity:1;pointer-events:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: PrimegModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: SectionAddCardsButtons, selector: "lib-section-add-cards-buttons", inputs: ["product", "isLogin"] }, { kind: "ngmodule", type: IonicModule }, { kind: "pipe", type: i1$1.CurrencyPipe, name: "currency" }] });
|
|
7623
7732
|
}
|
|
7624
7733
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CardProductos1Component, decorators: [{
|
|
7625
7734
|
type: Component,
|
|
7626
|
-
args: [{ selector: 'lib-card-productos1', standalone: true, imports: [CommonModule, PrimegModule, SectionAddCardsButtons, IonicModule], template: "<div aria-label=\"tarjetas de productos inflables\" class=\"surface-card shadow-3 border-round-xl overflow-visible relative transition-all transition-duration-300 hover:shadow-6 flex flex-column h-full hover-effect\"\n style=\"min-height: 520px; max-width: 400px; margin: 0 auto\">\n @if (product) {\n <div class=\"relative surface-ground flex align-items-center justify-content-center overflow-hidden p-3 image-hover-container\"\n style=\"height: 280px\">\n <img [src]=\"currentImageUrl || product.imagen[0]?.url\" [alt]=\"product.imagen[0]?.alt\" itemprop=\"image\"\n loading=\"lazy\" width=\"400\" height=\"280\"\n class=\"max-w-full max-h-full object-contain cursor-pointer transition-transform transition-duration-300 hover-zoom\"\n (click)=\"navigateToProductDetail()\" />\n\n <!-- Overlay con icono de ojo al hover -->\n <div class=\"image-overlay\">\n <button pButton type=\"button\" class=\"p-button-rounded p-button-info p-button-lg shadow-4\"\n (click)=\"navigateToProductDetail()\" [attr.aria-label]=\"'Ver detalle de ' + product.name\" pTooltip=\"Ver detalles\" tooltipPosition=\"top\">\n <i class=\"pi pi-eye text-xl\"></i>\n </button>\n </div>\n\n <button (click)=\"contactWhatsapp()\"\n aria-label=\"Contactar por WhatsApp\"\n class=\"absolute bottom-0 right-0 m-3 bg-green-500 border-none text-white w-3rem h-3rem border-circle shadow-4 flex align-items-center justify-content-center cursor-pointer transition-colors transition-duration-200 hover:bg-green-600 z-2\">\n <i class=\"pi pi-whatsapp text-2xl\"></i>\n </button>\n </div>\n\n <div class=\"p-3 flex flex-column flex-grow-1\">\n <div class=\"flex gap-2 overflow-x-auto pb-2 mb-3 z-1\">\n @for (image of product.imagen; track $index) {\n <img [src]=\"image.url\" [alt]=\"image.alt\" (click)=\"selectImage($index)\"\n loading=\"lazy\" width=\"48\" height=\"48\"\n class=\"w-3rem h-3rem border-round border-2 cursor-pointer flex-shrink-0 transition-all transition-duration-200 object-cover\"\n [class.border-900]=\"isActiveThumbnail($index)\" [class.border-transparent]=\"!isActiveThumbnail($index)\"\n [class.opacity-60]=\"!isActiveThumbnail($index)\" />\n }\n </div>\n\n <div class=\"surface-border border-top-1 w-full mb-3\"></div>\n\n <div class=\"flex justify-content-between align-items-start gap-2 mb-3\">\n <h3 class=\"text-xl font-semibold text-900 m-0 line-height-3 flex-grow-1 cursor-pointer hover:text-700 transition-colors\"\n (click)=\"navigateToProductDetail()\" style=\"word-break: break-word\">\n {{ product.name }}\n </h3>\n\n <div class=\"flex gap-2 flex-shrink-0 mt-1\" style=\"position: relative;\">\n @if (isLogin) {\n <p-button (click)=\"navigateToProductDetail()\" pTooltip=\"Personalizar\" icon=\"pi pi-pencil\"\n tooltipPosition=\"top\"\n styleClass=\"bg-900 text-white w-2rem h-2rem border-circle border-none flex align-items-center justify-content-center cursor-pointer hover:bg-700 transition-colors shadow-1\">\n </p-button>\n }\n <!-- Men\u00FA flotante de redes estilo PrimeNG -->\n <div class=\"relative\" style=\"position: absolute; right: -0.75rem; top: -0.75rem; z-index: 10;\">\n <button (click)=\"toggleShareMenu()\"\n aria-label=\"Compartir en redes sociales\"\n class=\"bg-green-500 border-none text-white w-2rem h-2rem border-circle shadow-2 flex align-items-center justify-content-center cursor-pointer transition-colors transition-duration-200 hover:bg-green-600\">\n <i class=\"pi\" [ngClass]=\"{'pi-times': shareMenuOpen, 'pi-share-alt': !shareMenuOpen}\"></i>\n </button>\n @if (shareMenuOpen) {\n <div class=\"flex gap-2 absolute\" style=\"right: 0; top: 2.6rem;\">\n <button (click)=\"touchRedes('whatsapp')\" aria-label=\"Compartir en WhatsApp\" class=\"border-none w-2rem h-2rem border-circle flex align-items-center justify-content-center cursor-pointer shadow-1\" style=\"background:#25D366;color:#fff\">\n <i class=\"pi pi-whatsapp\"></i>\n </button>\n <button (click)=\"touchRedes('facebook')\" aria-label=\"Compartir en Facebook\" class=\"border-none w-2rem h-2rem border-circle flex align-items-center justify-content-center cursor-pointer shadow-1\" style=\"background:#1877F2;color:#fff\">\n <i class=\"pi pi-facebook\"></i>\n </button>\n \n </div>\n }\n </div>\n </div>\n </div>\n\n <div class=\"surface-ground p-3 border-round-xl border-1 surface-border text-sm mb-4\">\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <strong class=\"font-bold text-700\">Categor\u00EDa:</strong>\n <span class=\"text-600 text-right overflow-hidden text-overflow-ellipsis\" style=\"max-width: 60%\">\n {{ product.nombreCategoria || 'Sin categor\u00EDa' }}\n </span>\n </div>\n <div class=\"flex justify-content-between align-items-center\">\n <strong class=\"font-bold text-700\">Disponibles:</strong>\n <span class=\"text-600 font-medium\">{{ product.cantidad }}</span>\n </div>\n </div>\n\n <div class=\"mt-auto\">\n\n\n <div class=\"flex align-items-end gap-2 mb-3 flex-wrap\">\n @if(isLogin){\n @if (product.descuento && product.descuento > 0) {\n <span class=\"text-500 line-through text-sm mb-1\">\n {{ product.precios[0].precio | currency: product.precios[0].codigo_iso : \"code\" }}\n </span>\n }\n\n <span class=\"text-2xl font-bold text-900\">\n {{ discount | currency: product.precios[0].codigo_iso : \"code\" }}\n </span>\n\n @if (product.descuento && product.descuento > 0) {\n <div class=\"bg-green-100 text-green-700 px-2 py-1 text-xs font-bold border-round mb-1 ml-auto\">\n {{ product.descuento }}% OFF\n </div>\n }\n } \n </div>\n\n <lib-section-add-cards-buttons
|
|
7627
|
-
}], ctorParameters: () => [{ type: ProductService }, { type: i1$8.Router }], propDecorators: { product: [{
|
|
7735
|
+
args: [{ selector: 'lib-card-productos1', standalone: true, imports: [CommonModule, PrimegModule, SectionAddCardsButtons, IonicModule], template: "<div aria-label=\"tarjetas de productos inflables\" class=\"surface-card shadow-3 border-round-xl overflow-visible relative transition-all transition-duration-300 hover:shadow-6 flex flex-column h-full hover-effect\"\n style=\"min-height: 520px; max-width: 400px; margin: 0 auto\">\n @if (product) {\n <div class=\"relative surface-ground flex align-items-center justify-content-center overflow-hidden p-3 image-hover-container\"\n style=\"height: 280px\">\n <img [src]=\"currentImageUrl || product.imagen[0]?.url\" [alt]=\"product.imagen[0]?.alt\" itemprop=\"image\"\n loading=\"lazy\" width=\"400\" height=\"280\"\n class=\"max-w-full max-h-full object-contain cursor-pointer transition-transform transition-duration-300 hover-zoom\"\n (click)=\"navigateToProductDetail()\" />\n\n <!-- Overlay con icono de ojo al hover -->\n <div class=\"image-overlay\">\n <button pButton type=\"button\" class=\"p-button-rounded p-button-info p-button-lg shadow-4\"\n (click)=\"navigateToProductDetail()\" [attr.aria-label]=\"'Ver detalle de ' + product.name\" pTooltip=\"Ver detalles\" tooltipPosition=\"top\">\n <i class=\"pi pi-eye text-xl\"></i>\n </button>\n </div>\n\n <button (click)=\"contactWhatsapp()\"\n aria-label=\"Contactar por WhatsApp\"\n class=\"absolute bottom-0 right-0 m-3 bg-green-500 border-none text-white w-3rem h-3rem border-circle shadow-4 flex align-items-center justify-content-center cursor-pointer transition-colors transition-duration-200 hover:bg-green-600 z-2\">\n <i class=\"pi pi-whatsapp text-2xl\"></i>\n </button>\n </div>\n\n <div class=\"p-3 flex flex-column flex-grow-1\">\n <div class=\"flex gap-2 overflow-x-auto pb-2 mb-3 z-1\">\n @for (image of product.imagen; track $index) {\n <img [src]=\"image.url\" [alt]=\"image.alt\" (click)=\"selectImage($index)\"\n loading=\"lazy\" width=\"48\" height=\"48\"\n class=\"w-3rem h-3rem border-round border-2 cursor-pointer flex-shrink-0 transition-all transition-duration-200 object-cover\"\n [class.border-900]=\"isActiveThumbnail($index)\" [class.border-transparent]=\"!isActiveThumbnail($index)\"\n [class.opacity-60]=\"!isActiveThumbnail($index)\" />\n }\n </div>\n\n <div class=\"surface-border border-top-1 w-full mb-3\"></div>\n\n <div class=\"flex justify-content-between align-items-start gap-2 mb-3\">\n <h3 class=\"text-xl font-semibold text-900 m-0 line-height-3 flex-grow-1 cursor-pointer hover:text-700 transition-colors\"\n (click)=\"navigateToProductDetail()\" style=\"word-break: break-word\">\n {{ product.name }}\n </h3>\n\n <div class=\"flex gap-2 flex-shrink-0 mt-1\" style=\"position: relative;\">\n @if (isLogin) {\n <p-button (click)=\"navigateToProductDetail()\" pTooltip=\"Personalizar\" icon=\"pi pi-pencil\"\n tooltipPosition=\"top\"\n styleClass=\"bg-900 text-white w-2rem h-2rem border-circle border-none flex align-items-center justify-content-center cursor-pointer hover:bg-700 transition-colors shadow-1\">\n </p-button>\n }\n <!-- Men\u00FA flotante de redes estilo PrimeNG -->\n <div class=\"relative\" style=\"position: absolute; right: -0.75rem; top: -0.75rem; z-index: 10;\">\n <button (click)=\"toggleShareMenu()\"\n aria-label=\"Compartir en redes sociales\"\n class=\"bg-green-500 border-none text-white w-2rem h-2rem border-circle shadow-2 flex align-items-center justify-content-center cursor-pointer transition-colors transition-duration-200 hover:bg-green-600\">\n <i class=\"pi\" [ngClass]=\"{'pi-times': shareMenuOpen, 'pi-share-alt': !shareMenuOpen}\"></i>\n </button>\n @if (shareMenuOpen) {\n <div class=\"flex gap-2 absolute\" style=\"right: 0; top: 2.6rem;\">\n <button (click)=\"touchRedes('whatsapp')\" aria-label=\"Compartir en WhatsApp\" class=\"border-none w-2rem h-2rem border-circle flex align-items-center justify-content-center cursor-pointer shadow-1\" style=\"background:#25D366;color:#fff\">\n <i class=\"pi pi-whatsapp\"></i>\n </button>\n <button (click)=\"touchRedes('facebook')\" aria-label=\"Compartir en Facebook\" class=\"border-none w-2rem h-2rem border-circle flex align-items-center justify-content-center cursor-pointer shadow-1\" style=\"background:#1877F2;color:#fff\">\n <i class=\"pi pi-facebook\"></i>\n </button>\n \n </div>\n }\n </div>\n </div>\n </div>\n\n <div class=\"surface-ground p-3 border-round-xl border-1 surface-border text-sm mb-4\">\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <strong class=\"font-bold text-700\">Categor\u00EDa:</strong>\n <span class=\"text-600 text-right overflow-hidden text-overflow-ellipsis\" style=\"max-width: 60%\">\n {{ product.nombreCategoria || 'Sin categor\u00EDa' }}\n </span>\n </div>\n <div class=\"flex justify-content-between align-items-center\">\n <strong class=\"font-bold text-700\">Disponibles:</strong>\n <span class=\"text-600 font-medium\">{{ product.cantidad }}</span>\n </div>\n </div>\n\n <div class=\"mt-auto\">\n\n\n <div class=\"flex align-items-end gap-2 mb-3 flex-wrap\">\n @if(isLogin){\n @if (product.descuento && product.descuento > 0) {\n <span class=\"text-500 line-through text-sm mb-1\">\n {{ product.precios[0].precio | currency: product.precios[0].codigo_iso : \"code\" }}\n </span>\n }\n\n <span class=\"text-2xl font-bold text-900\">\n {{ discount | currency: product.precios[0].codigo_iso : \"code\" }}\n </span>\n\n @if (product.descuento && product.descuento > 0) {\n <div class=\"bg-green-100 text-green-700 px-2 py-1 text-xs font-bold border-round mb-1 ml-auto\">\n {{ product.descuento }}% OFF\n </div>\n }\n } \n </div>\n\n <lib-section-add-cards-buttons [product]=\"product\" [isLogin]=\"isLogin\">\n </lib-section-add-cards-buttons>\n\n </div>\n </div>\n } @else {\n <div class=\"flex align-items-center justify-content-center h-full text-500\">\n Producto no disponible\n </div>\n }\n</div>", styles: [".hover-effect{transition:transform .3s ease,box-shadow .3s ease}.hover-effect:hover{transform:translateY(-4px)}.hover-zoom{transition:transform .35s ease}.hover-zoom:hover{transform:scale(1.05)}.overflow-x-auto{scrollbar-width:none}.overflow-x-auto::-webkit-scrollbar{display:none}.image-hover-container{position:relative}.image-hover-container .image-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#0000002e;opacity:0;pointer-events:none;transition:opacity .25s ease}.image-hover-container:hover .image-overlay{opacity:1;pointer-events:auto}\n"] }]
|
|
7736
|
+
}], ctorParameters: () => [{ type: ProductService }, { type: i1$8.Router }, { type: GoogleService }], propDecorators: { product: [{
|
|
7628
7737
|
type: Input
|
|
7629
7738
|
}], addToCart: [{
|
|
7630
7739
|
type: Output
|
|
7631
7740
|
}], isLogin: [{
|
|
7632
7741
|
type: Input
|
|
7742
|
+
}], DatosNegocio: [{
|
|
7743
|
+
type: Input
|
|
7633
7744
|
}], detailRouteBase: [{
|
|
7634
7745
|
type: Input
|
|
7635
7746
|
}] } });
|
|
@@ -8122,21 +8233,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
8122
8233
|
args: ['document:touchmove', ['$event']]
|
|
8123
8234
|
}] } });
|
|
8124
8235
|
|
|
8125
|
-
class BarFloatEcommerce1 {
|
|
8126
|
-
componente = {
|
|
8127
|
-
id: 33,
|
|
8128
|
-
nombreComponente: 'lib-bar-float-ecommerce1',
|
|
8129
|
-
version: '1.0',
|
|
8130
|
-
descripcion: 'Componente para mostrar una barra flotante en la página de ecommerce1'
|
|
8131
|
-
};
|
|
8132
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BarFloatEcommerce1, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8133
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: BarFloatEcommerce1, isStandalone: true, selector: "lib-bar-float-ecommerce1", ngImport: i0, template: "<section aria-label=\"Secci\u00F3n principal de la f\u00E1brica de inflables\" class=\"bar-hero animate-hero-section\" style=\"background-image: url('../../../../../assets/imagenes/bannerInflables.png');\">\n <div class=\"bar-hero-inner\">\n <div class=\"bar-hero-card\">\n <p class=\"hero-subtitle\">\u00A1Bienvenido a Zigma Inflables!</p>\n <h1 aria-label=\"T\u00EDtulo principal: F\u00E1brica de inflables\" class=\"hero-title\">F\u00E1brica de inflables</h1>\n <p-button label=\"Ver cat\u00E1logo\" class=\"p-button-warning hero-cta\"></p-button>\n </div>\n </div>\n</section>", styles: [".bar-hero{background-size:cover;background-position:center;min-height:500px;position:relative}.bar-hero-inner{display:flex;align-items:center;justify-content:center;height:100%;padding:4rem 1rem}.bar-hero-card{background:#ffffffe6;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);padding:2rem;border-radius:1rem;max-width:900px;text-align:center;box-shadow:0 10px 30px #00000014}.hero-subtitle{margin:0 0 .5rem;color:#6b7280;font-size:1rem}.hero-title{margin:0 0 1rem;font-size:2rem;font-weight:800;color:#111827}.hero-cta{border-radius:999px;padding:.75rem 1.25rem}@media (min-width: 768px){.hero-title{font-size:2.5rem}.bar-hero-inner{padding-top:6rem}}.animate-hero-section{opacity:0;transform:translateY(50px);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.animate-hero-section.is-visible{opacity:1;transform:translateY(0)}\n"], dependencies: [{ kind: "ngmodule", type: PrimegModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
8134
|
-
}
|
|
8135
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BarFloatEcommerce1, decorators: [{
|
|
8136
|
-
type: Component,
|
|
8137
|
-
args: [{ selector: 'lib-bar-float-ecommerce1', imports: [PrimegModule], encapsulation: ViewEncapsulation.None, template: "<section aria-label=\"Secci\u00F3n principal de la f\u00E1brica de inflables\" class=\"bar-hero animate-hero-section\" style=\"background-image: url('../../../../../assets/imagenes/bannerInflables.png');\">\n <div class=\"bar-hero-inner\">\n <div class=\"bar-hero-card\">\n <p class=\"hero-subtitle\">\u00A1Bienvenido a Zigma Inflables!</p>\n <h1 aria-label=\"T\u00EDtulo principal: F\u00E1brica de inflables\" class=\"hero-title\">F\u00E1brica de inflables</h1>\n <p-button label=\"Ver cat\u00E1logo\" class=\"p-button-warning hero-cta\"></p-button>\n </div>\n </div>\n</section>", styles: [".bar-hero{background-size:cover;background-position:center;min-height:500px;position:relative}.bar-hero-inner{display:flex;align-items:center;justify-content:center;height:100%;padding:4rem 1rem}.bar-hero-card{background:#ffffffe6;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);padding:2rem;border-radius:1rem;max-width:900px;text-align:center;box-shadow:0 10px 30px #00000014}.hero-subtitle{margin:0 0 .5rem;color:#6b7280;font-size:1rem}.hero-title{margin:0 0 1rem;font-size:2rem;font-weight:800;color:#111827}.hero-cta{border-radius:999px;padding:.75rem 1.25rem}@media (min-width: 768px){.hero-title{font-size:2.5rem}.bar-hero-inner{padding-top:6rem}}.animate-hero-section{opacity:0;transform:translateY(50px);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.animate-hero-section.is-visible{opacity:1;transform:translateY(0)}\n"] }]
|
|
8138
|
-
}] });
|
|
8139
|
-
|
|
8140
8236
|
class FooterEcommerce1 {
|
|
8141
8237
|
componente = {
|
|
8142
8238
|
id: 32,
|
|
@@ -8159,6 +8255,7 @@ class Ecommerce1 {
|
|
|
8159
8255
|
router;
|
|
8160
8256
|
route;
|
|
8161
8257
|
renderer;
|
|
8258
|
+
googleService;
|
|
8162
8259
|
platformId;
|
|
8163
8260
|
// El usuario inicio sesion o no
|
|
8164
8261
|
isLogin = false;
|
|
@@ -8189,12 +8286,14 @@ class Ecommerce1 {
|
|
|
8189
8286
|
mouseOutListener;
|
|
8190
8287
|
beforeUnloadListener;
|
|
8191
8288
|
intersectionObserver;
|
|
8192
|
-
|
|
8289
|
+
// eslint-disable-next-line max-params
|
|
8290
|
+
constructor(router, route, renderer, googleService,
|
|
8193
8291
|
// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types
|
|
8194
8292
|
platformId) {
|
|
8195
8293
|
this.router = router;
|
|
8196
8294
|
this.route = route;
|
|
8197
8295
|
this.renderer = renderer;
|
|
8296
|
+
this.googleService = googleService;
|
|
8198
8297
|
this.platformId = platformId;
|
|
8199
8298
|
}
|
|
8200
8299
|
ngOnInit() {
|
|
@@ -8300,10 +8399,18 @@ class Ecommerce1 {
|
|
|
8300
8399
|
}
|
|
8301
8400
|
openWhatsappChat(message) {
|
|
8302
8401
|
const defaultMessage = 'Hola, estoy interesado en los productos de Zigma Inflables.';
|
|
8303
|
-
const whatsappNumber = this.DatosNegocio?.telefono || '+573118025433';
|
|
8402
|
+
const whatsappNumber = this.DatosNegocio?.telefono || '+573118025433';
|
|
8304
8403
|
const finalMessage = message || defaultMessage;
|
|
8305
8404
|
const whatsappUrl = `https://wa.me/${whatsappNumber}?text=${encodeURIComponent(finalMessage)}`;
|
|
8306
|
-
|
|
8405
|
+
if (this.DatosNegocio?.googleAdsConversionId) {
|
|
8406
|
+
this.googleService.reportConversion(this.DatosNegocio.googleAdsConversionId, whatsappUrl);
|
|
8407
|
+
}
|
|
8408
|
+
else {
|
|
8409
|
+
window.open(whatsappUrl, '_blank');
|
|
8410
|
+
}
|
|
8411
|
+
if (this.DatosNegocio?.googleAnalyticsEvent) {
|
|
8412
|
+
this.googleService.reportAnalyticsEvent(this.DatosNegocio.googleAnalyticsEvent, { page: 'ecommerce1' });
|
|
8413
|
+
}
|
|
8307
8414
|
}
|
|
8308
8415
|
// ===== NEWSLETTER =====
|
|
8309
8416
|
onNewsletterSubmit(email) {
|
|
@@ -8443,13 +8550,13 @@ class Ecommerce1 {
|
|
|
8443
8550
|
console.log('Social login with:', provider);
|
|
8444
8551
|
// Implementar login social
|
|
8445
8552
|
}
|
|
8446
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Ecommerce1, deps: [{ token: i1$8.Router }, { token: i1$8.ActivatedRoute }, { token: i0.Renderer2 }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
|
|
8447
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: Ecommerce1, isStandalone: true, selector: "lib-ecommerce1", inputs: { isLogin: "isLogin", DatosNegocio: "DatosNegocio", Categorias: "Categorias", routePaths: "routePaths" }, viewQueries: [{ propertyName: "whatsappButton", first: true, predicate: ["whatsappButton"], descendants: true }, { propertyName: "productGrid", first: true, predicate: ["productGrid"], descendants: true }, { propertyName: "mobileMenu", first: true, predicate: ["mobileMenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: " <button id=\"whatsapp-button\"\n pButton\n type=\"button\"\n class=\"whatsapp-float p-button-rounded p-button-lg\"\n [ngClass]=\"{ 'p-button-success': showWhatsappButton, 'p-button-secondary': !showWhatsappButton }\"\n (click)=\"showWhatsappModalDialog()\"\n aria-label=\"Cont\u00E1ctanos por WhatsApp\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\" style=\"vertical-align:middle\">\n <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0020.885 3.488\"/>\n </svg>\n </button>\n\n <!-- WhatsApp Modal reemplazado por PrimeNG Dialog -->\n <p-dialog [(visible)]=\"showWhatsappModal\"\n modal=\"true\"\n [blockScroll]=\"true\"\n [closable]=\"true\"\n [draggable]=\"false\"\n [focusOnShow]=\"false\"\n [keepInViewport]=\"true\"\n [position]=\"'top'\"\n [style]=\"{ width: '360px', height: '400px' }\"\n [dismissableMask]=\"false\"\n [closeOnEscape]=\"false\"\n appendTo=\"body\">\n <div class=\"p-text-center\" style=\"display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0.75rem;\">\n <div style=\"background:#25d366;color:white;width:72px;height:72px;border-radius:36px;display:inline-flex;align-items:center;justify-content:center;margin-bottom:1rem;\">\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0020.885 3.488\"/>\n </svg>\n </div>\n <h3 class=\"p-text-center\">\u00A1No te vayas a\u00FAn!</h3>\n <p class=\"text-center\">Si tienes alguna pregunta, puedes chatear con nosotros directamente por WhatsApp.</p>\n <div style=\"margin-top:1rem\">\n <button pButton type=\"button\" label=\"Chatear en WhatsApp\" class=\"p-button-success\" (click)=\"openWhatsappChat()\"></button>\n </div>\n </div>\n </p-dialog>\n\n <lib-header-ecommerce1 [menuConfig]=\"headerMenuConfig\" [DatosNegocio]=\"DatosNegocio\"></lib-header-ecommerce1>\n <lib-carruselt-1></lib-carruselt-1>\n \n <router-outlet></router-outlet>\n\n <!-- Footer Section -->\n <lib-footer-ecommerce1 [DatosNegocio]=\"DatosNegocio\"></lib-footer-ecommerce1>\n \n ", styles: ["@charset \"UTF-8\";.whatsapp-float{position:fixed;bottom:1.5rem;right:1.5rem;z-index:999;opacity:0;visibility:hidden;transition:opacity .5s ease-in-out,visibility .5s ease-in-out}.whatsapp-float.show{opacity:1;visibility:visible}.whatsapp-float a{display:block;background-color:#25d366;color:#fff;padding:1rem;border-radius:9999px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1-px #0000000f;transition:transform .2s ease-in-out}.whatsapp-float a:hover{transform:scale(1.1)}.whatsapp-float .fa-whatsapp{font-size:2.5rem}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#0009;display:none;justify-content:center;align-items:center;z-index:1000}.modal-overlay.show{display:flex}.modal-content{background-color:#fff;padding:2rem;border-radius:1rem;text-align:center;box-shadow:0 10px 25px #0003;max-width:90%;width:400px;animation:fadeIn .5s ease-out}@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.modal-close-button{position:absolute;top:10px;right:10px;font-size:1.5rem;color:#aaa;cursor:pointer}.modal-close-button:hover{color:#666}.auth-page{min-height:100vh;display:flex;justify-content:center;align-items:center;flex-direction:column;padding:2rem 0}.auth-section{background-color:#fff;padding:4rem 2rem;border-radius:1rem;box-shadow:0 10px 25px #0003;max-width:90%;width:500px;margin:4rem auto;animation:fadeIn .5s ease-out}.animate-scroll{opacity:0;transform:translateY(50px);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.animate-scroll.is-visible{opacity:1;transform:translateY(0)}.animate-title-initial{opacity:0;transform:translate(-100px)}.animate-title-final{transition:opacity 1s ease-out,transform 1s ease-out}.animate-title-initial.is-visible{opacity:1;transform:translate(0);animation:rotate360 1s ease-out forwards;animation-iteration-count:2}@keyframes rotate360{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.category-card-animation{opacity:0;transform:scale(.8);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.category-card-animation.is-visible{opacity:1;transform:scale(1)}.animate-history-section{opacity:0;transform:translateY(100px);transition:opacity 2s ease-out,transform 2s ease-out}.animate-history-section.is-visible{opacity:1;transform:translateY(0)}.animate-newsletter-section{opacity:0;transform:scale(.95);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.animate-newsletter-section.is-visible{opacity:1;transform:scale(1)}.header-top{background-color:#fbc30d;color:#000}.header-top a{color:#000;transition:color .3s}.header-top a:hover{color:#4a4a4a}.main-nav{background-color:#0093e9;padding:1.5rem;border-radius:2rem;box-shadow:0 10px 25px #0000001a;position:relative;margin-top:2rem;margin-left:auto;margin-right:auto;max-width:90%;width:1000px}.main-nav-ul{list-style:none;display:flex;justify-content:center;align-items:center;flex-grow:1;gap:2rem}.main-nav-link{font-size:1.125rem;font-weight:600;color:#fff;transition:color .3s}.main-nav-link:hover{color:#fbc30d}.logo-center{font-size:2.5rem;font-weight:700;color:#000;text-shadow:1px 1px 2px #fbc30d}.logo-rotate{animation:rotate360 2s ease-out}.hamburger-menu{display:none;cursor:pointer;z-index:50}@media (max-width: 767px){.hamburger-menu{display:block}}.mobile-header{background-color:#0093e9;padding:1rem;border-radius:1rem;box-shadow:0 5px 15px #0000001a}.mobile-header .logo-center{font-size:2rem}.footer-top{color:#000}.whatsapp-float svg{display:block;width:2.5rem;height:2.5rem}.modal-content svg{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i8.Dialog, selector: "p-dialog", inputs: ["hostName", "header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "component", type: FooterEcommerce1, selector: "lib-footer-ecommerce1", inputs: ["DatosNegocio"] }, { kind: "component", type: HeaderEcommerce1Component, selector: "lib-header-ecommerce1", inputs: ["DatosNegocio", "logoText", "logoUrl", "logoAlt", "menuConfig", "islogin"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: Carruselt1, selector: "lib-carruselt-1" }] });
|
|
8553
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Ecommerce1, deps: [{ token: i1$8.Router }, { token: i1$8.ActivatedRoute }, { token: i0.Renderer2 }, { token: GoogleService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
|
|
8554
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: Ecommerce1, isStandalone: true, selector: "lib-ecommerce1", inputs: { isLogin: "isLogin", DatosNegocio: "DatosNegocio", Categorias: "Categorias", routePaths: "routePaths" }, viewQueries: [{ propertyName: "whatsappButton", first: true, predicate: ["whatsappButton"], descendants: true }, { propertyName: "productGrid", first: true, predicate: ["productGrid"], descendants: true }, { propertyName: "mobileMenu", first: true, predicate: ["mobileMenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: " <button id=\"whatsapp-button\"\n pButton\n type=\"button\"\n class=\"whatsapp-float p-button-rounded p-button-lg\"\n [ngClass]=\"{ 'p-button-success': showWhatsappButton, 'p-button-secondary': !showWhatsappButton }\"\n (click)=\"showWhatsappModalDialog()\"\n aria-label=\"Cont\u00E1ctanos por WhatsApp\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\" style=\"vertical-align:middle\">\n <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0020.885 3.488\"/>\n </svg>\n </button>\n\n <!-- WhatsApp Modal reemplazado por PrimeNG Dialog -->\n <p-dialog [(visible)]=\"showWhatsappModal\"\n modal=\"true\"\n [blockScroll]=\"true\"\n [closable]=\"true\"\n [draggable]=\"false\"\n [focusOnShow]=\"false\"\n [keepInViewport]=\"true\"\n [position]=\"'top'\"\n [style]=\"{ width: '360px', height: '400px' }\"\n [dismissableMask]=\"false\"\n [closeOnEscape]=\"false\"\n appendTo=\"body\">\n <div class=\"p-text-center\" style=\"display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0.75rem;\">\n <div style=\"background:#25d366;color:white;width:72px;height:72px;border-radius:36px;display:inline-flex;align-items:center;justify-content:center;margin-bottom:1rem;\">\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0020.885 3.488\"/>\n </svg>\n </div>\n <h3 class=\"p-text-center\">\u00A1No te vayas a\u00FAn!</h3>\n <p class=\"text-center\">Si tienes alguna pregunta, puedes chatear con nosotros directamente por WhatsApp.</p>\n <div style=\"margin-top:1rem\">\n <button pButton type=\"button\" label=\"Chatear en WhatsApp\" class=\"p-button-success\" (click)=\"openWhatsappChat()\"></button>\n </div>\n </div>\n </p-dialog>\n\n <lib-header-ecommerce1 [menuConfig]=\"headerMenuConfig\" [DatosNegocio]=\"DatosNegocio\"></lib-header-ecommerce1>\n <lib-carruselt-1></lib-carruselt-1>\n \n <router-outlet></router-outlet>\n\n <!-- Footer Section -->\n <lib-footer-ecommerce1 [DatosNegocio]=\"DatosNegocio\"></lib-footer-ecommerce1>\n \n ", styles: ["@charset \"UTF-8\";.whatsapp-float{position:fixed;bottom:1.5rem;right:1.5rem;z-index:999;opacity:0;visibility:hidden;transition:opacity .5s ease-in-out,visibility .5s ease-in-out}.whatsapp-float.show{opacity:1;visibility:visible}.whatsapp-float a{display:block;background-color:#25d366;color:#fff;padding:1rem;border-radius:9999px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1-px #0000000f;transition:transform .2s ease-in-out}.whatsapp-float a:hover{transform:scale(1.1)}.whatsapp-float .fa-whatsapp{font-size:2.5rem}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#0009;display:none;justify-content:center;align-items:center;z-index:1000}.modal-overlay.show{display:flex}.modal-content{background-color:#fff;padding:2rem;border-radius:1rem;text-align:center;box-shadow:0 10px 25px #0003;max-width:90%;width:400px;animation:fadeIn .5s ease-out}@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.modal-close-button{position:absolute;top:10px;right:10px;font-size:1.5rem;color:#aaa;cursor:pointer}.modal-close-button:hover{color:#666}.auth-page{min-height:100vh;display:flex;justify-content:center;align-items:center;flex-direction:column;padding:2rem 0}.auth-section{background-color:#fff;padding:4rem 2rem;border-radius:1rem;box-shadow:0 10px 25px #0003;max-width:90%;width:500px;margin:4rem auto;animation:fadeIn .5s ease-out}.animate-scroll{opacity:0;transform:translateY(50px);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.animate-scroll.is-visible{opacity:1;transform:translateY(0)}.animate-title-initial{opacity:0;transform:translate(-100px)}.animate-title-final{transition:opacity 1s ease-out,transform 1s ease-out}.animate-title-initial.is-visible{opacity:1;transform:translate(0);animation:rotate360 1s ease-out forwards;animation-iteration-count:2}@keyframes rotate360{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.category-card-animation{opacity:0;transform:scale(.8);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.category-card-animation.is-visible{opacity:1;transform:scale(1)}.animate-history-section{opacity:0;transform:translateY(100px);transition:opacity 2s ease-out,transform 2s ease-out}.animate-history-section.is-visible{opacity:1;transform:translateY(0)}.animate-newsletter-section{opacity:0;transform:scale(.95);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.animate-newsletter-section.is-visible{opacity:1;transform:scale(1)}.header-top{background-color:#fbc30d;color:#000}.header-top a{color:#000;transition:color .3s}.header-top a:hover{color:#4a4a4a}.main-nav{background-color:#0093e9;padding:1.5rem;border-radius:2rem;box-shadow:0 10px 25px #0000001a;position:relative;margin-top:2rem;margin-left:auto;margin-right:auto;max-width:90%;width:1000px}.main-nav-ul{list-style:none;display:flex;justify-content:center;align-items:center;flex-grow:1;gap:2rem}.main-nav-link{font-size:1.125rem;font-weight:600;color:#fff;transition:color .3s}.main-nav-link:hover{color:#fbc30d}.logo-center{font-size:2.5rem;font-weight:700;color:#000;text-shadow:1px 1px 2px #fbc30d}.logo-rotate{animation:rotate360 2s ease-out}.hamburger-menu{display:none;cursor:pointer;z-index:50}@media (max-width: 767px){.hamburger-menu{display:block}}.mobile-header{background-color:#0093e9;padding:1rem;border-radius:1rem;box-shadow:0 5px 15px #0000001a}.mobile-header .logo-center{font-size:2rem}.footer-top{color:#000}.whatsapp-float svg{display:block;width:2.5rem;height:2.5rem}.modal-content svg{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i8.Dialog, selector: "p-dialog", inputs: ["hostName", "header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "component", type: FooterEcommerce1, selector: "lib-footer-ecommerce1", inputs: ["DatosNegocio"] }, { kind: "component", type: HeaderEcommerce1Component, selector: "lib-header-ecommerce1", inputs: ["DatosNegocio", "logoText", "logoUrl", "logoAlt", "menuConfig", "islogin"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: Carruselt1, selector: "lib-carruselt-1", inputs: ["DatosNegocio"] }] });
|
|
8448
8555
|
}
|
|
8449
8556
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: Ecommerce1, decorators: [{
|
|
8450
8557
|
type: Component,
|
|
8451
|
-
args: [{ selector: 'lib-ecommerce1', imports: [CommonModule, DialogModule, ButtonModule,
|
|
8452
|
-
}], ctorParameters: () => [{ type: i1$8.Router }, { type: i1$8.ActivatedRoute }, { type: i0.Renderer2 }, { type: Object, decorators: [{
|
|
8558
|
+
args: [{ selector: 'lib-ecommerce1', imports: [CommonModule, DialogModule, ButtonModule, FooterEcommerce1, HeaderEcommerce1Component, RouterOutlet, Carruselt1], template: " <button id=\"whatsapp-button\"\n pButton\n type=\"button\"\n class=\"whatsapp-float p-button-rounded p-button-lg\"\n [ngClass]=\"{ 'p-button-success': showWhatsappButton, 'p-button-secondary': !showWhatsappButton }\"\n (click)=\"showWhatsappModalDialog()\"\n aria-label=\"Cont\u00E1ctanos por WhatsApp\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\" style=\"vertical-align:middle\">\n <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0020.885 3.488\"/>\n </svg>\n </button>\n\n <!-- WhatsApp Modal reemplazado por PrimeNG Dialog -->\n <p-dialog [(visible)]=\"showWhatsappModal\"\n modal=\"true\"\n [blockScroll]=\"true\"\n [closable]=\"true\"\n [draggable]=\"false\"\n [focusOnShow]=\"false\"\n [keepInViewport]=\"true\"\n [position]=\"'top'\"\n [style]=\"{ width: '360px', height: '400px' }\"\n [dismissableMask]=\"false\"\n [closeOnEscape]=\"false\"\n appendTo=\"body\">\n <div class=\"p-text-center\" style=\"display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0.75rem;\">\n <div style=\"background:#25d366;color:white;width:72px;height:72px;border-radius:36px;display:inline-flex;align-items:center;justify-content:center;margin-bottom:1rem;\">\n <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893A11.821 11.821 0 0020.885 3.488\"/>\n </svg>\n </div>\n <h3 class=\"p-text-center\">\u00A1No te vayas a\u00FAn!</h3>\n <p class=\"text-center\">Si tienes alguna pregunta, puedes chatear con nosotros directamente por WhatsApp.</p>\n <div style=\"margin-top:1rem\">\n <button pButton type=\"button\" label=\"Chatear en WhatsApp\" class=\"p-button-success\" (click)=\"openWhatsappChat()\"></button>\n </div>\n </div>\n </p-dialog>\n\n <lib-header-ecommerce1 [menuConfig]=\"headerMenuConfig\" [DatosNegocio]=\"DatosNegocio\"></lib-header-ecommerce1>\n <lib-carruselt-1></lib-carruselt-1>\n \n <router-outlet></router-outlet>\n\n <!-- Footer Section -->\n <lib-footer-ecommerce1 [DatosNegocio]=\"DatosNegocio\"></lib-footer-ecommerce1>\n \n ", styles: ["@charset \"UTF-8\";.whatsapp-float{position:fixed;bottom:1.5rem;right:1.5rem;z-index:999;opacity:0;visibility:hidden;transition:opacity .5s ease-in-out,visibility .5s ease-in-out}.whatsapp-float.show{opacity:1;visibility:visible}.whatsapp-float a{display:block;background-color:#25d366;color:#fff;padding:1rem;border-radius:9999px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1-px #0000000f;transition:transform .2s ease-in-out}.whatsapp-float a:hover{transform:scale(1.1)}.whatsapp-float .fa-whatsapp{font-size:2.5rem}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#0009;display:none;justify-content:center;align-items:center;z-index:1000}.modal-overlay.show{display:flex}.modal-content{background-color:#fff;padding:2rem;border-radius:1rem;text-align:center;box-shadow:0 10px 25px #0003;max-width:90%;width:400px;animation:fadeIn .5s ease-out}@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.modal-close-button{position:absolute;top:10px;right:10px;font-size:1.5rem;color:#aaa;cursor:pointer}.modal-close-button:hover{color:#666}.auth-page{min-height:100vh;display:flex;justify-content:center;align-items:center;flex-direction:column;padding:2rem 0}.auth-section{background-color:#fff;padding:4rem 2rem;border-radius:1rem;box-shadow:0 10px 25px #0003;max-width:90%;width:500px;margin:4rem auto;animation:fadeIn .5s ease-out}.animate-scroll{opacity:0;transform:translateY(50px);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.animate-scroll.is-visible{opacity:1;transform:translateY(0)}.animate-title-initial{opacity:0;transform:translate(-100px)}.animate-title-final{transition:opacity 1s ease-out,transform 1s ease-out}.animate-title-initial.is-visible{opacity:1;transform:translate(0);animation:rotate360 1s ease-out forwards;animation-iteration-count:2}@keyframes rotate360{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.category-card-animation{opacity:0;transform:scale(.8);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.category-card-animation.is-visible{opacity:1;transform:scale(1)}.animate-history-section{opacity:0;transform:translateY(100px);transition:opacity 2s ease-out,transform 2s ease-out}.animate-history-section.is-visible{opacity:1;transform:translateY(0)}.animate-newsletter-section{opacity:0;transform:scale(.95);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.animate-newsletter-section.is-visible{opacity:1;transform:scale(1)}.header-top{background-color:#fbc30d;color:#000}.header-top a{color:#000;transition:color .3s}.header-top a:hover{color:#4a4a4a}.main-nav{background-color:#0093e9;padding:1.5rem;border-radius:2rem;box-shadow:0 10px 25px #0000001a;position:relative;margin-top:2rem;margin-left:auto;margin-right:auto;max-width:90%;width:1000px}.main-nav-ul{list-style:none;display:flex;justify-content:center;align-items:center;flex-grow:1;gap:2rem}.main-nav-link{font-size:1.125rem;font-weight:600;color:#fff;transition:color .3s}.main-nav-link:hover{color:#fbc30d}.logo-center{font-size:2.5rem;font-weight:700;color:#000;text-shadow:1px 1px 2px #fbc30d}.logo-rotate{animation:rotate360 2s ease-out}.hamburger-menu{display:none;cursor:pointer;z-index:50}@media (max-width: 767px){.hamburger-menu{display:block}}.mobile-header{background-color:#0093e9;padding:1rem;border-radius:1rem;box-shadow:0 5px 15px #0000001a}.mobile-header .logo-center{font-size:2rem}.footer-top{color:#000}.whatsapp-float svg{display:block;width:2.5rem;height:2.5rem}.modal-content svg{display:block}\n"] }]
|
|
8559
|
+
}], ctorParameters: () => [{ type: i1$8.Router }, { type: i1$8.ActivatedRoute }, { type: i0.Renderer2 }, { type: GoogleService }, { type: Object, decorators: [{
|
|
8453
8560
|
type: Inject,
|
|
8454
8561
|
args: [PLATFORM_ID]
|
|
8455
8562
|
}] }], propDecorators: { isLogin: [{
|
|
@@ -8604,7 +8711,7 @@ class AppMenuitem {
|
|
|
8604
8711
|
</ng-template>
|
|
8605
8712
|
</ul>
|
|
8606
8713
|
</ng-container>
|
|
8607
|
-
`, isInline: true, dependencies: [{ kind: "component", type: AppMenuitem, selector: "[app-menuitem]", inputs: ["item", "index", "root", "parentKey"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$8.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type:
|
|
8714
|
+
`, isInline: true, dependencies: [{ kind: "component", type: AppMenuitem, selector: "[app-menuitem]", inputs: ["item", "index", "root", "parentKey"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$8.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i4$1.Ripple, selector: "[pRipple]" }], animations: [
|
|
8608
8715
|
trigger('children', [
|
|
8609
8716
|
state('collapsed', style({
|
|
8610
8717
|
height: '0'
|
|
@@ -8893,7 +9000,7 @@ class HomeEcommerce1 {
|
|
|
8893
9000
|
: [];
|
|
8894
9001
|
}
|
|
8895
9002
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: HomeEcommerce1, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
8896
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: HomeEcommerce1, isStandalone: true, selector: "lib-home-ecommerce1", inputs: { isLogin: "isLogin", bussinesDTO: "bussinesDTO", categorias: "categorias", detailRouteBase: "detailRouteBase" }, outputs: { productClicked: "productClicked", categorySelected: "categorySelected" }, usesOnChanges: true, ngImport: i0, template: "\n<!-- Hero principal -->\n<section role=\"region\" aria-label=\"Banner principal Zigma Inflables\">\n <lib-hero-section-ecommerce1></lib-hero-section-ecommerce1>\n</section>\n\n<!-- Encabezado SEO principal -->\n<h1 class=\"text-center text-3xl md:text-4xl font-bold my-6\" style=\"color:#222\">Cat\u00E1logo de Inflables y Productos inflables</h1>\n\n<!-- Filtros de categor\u00EDas -->\n <section aria-label=\"Secci\u00F3n de filtros de categor\u00EDas inflables\">\n <lib-section-filters-categories-productos id=\"categorias\"\n [categorias]=\"categorias\"\n (categorySelected)=\"onCategoryFilter($event)\">\n </lib-section-filters-categories-productos>\n</section>\n\n<!-- Listado de productos -->\n<section aria-label=\"Listado de productos inflables\" role=\"main\">\n <ng-template #cards let-items>\n <div class=\"grid align-items-center justify-content-center\">\n @for (product of items; track $index) {\n <div class=\"col-12 md:col-6 p-5 lg:p-3 lg:col-4 product-card-animation\"\n [style.transition-delay]=\"($index * 30) + 'ms'\">\n <lib-card-productos1 [product]=\"product\" [detailRouteBase]=\"detailRouteBase\" (addToCart)=\"onAddToCart($event)\">\n </lib-card-productos1>\n </div>\n }\n </div>\n </ng-template>\n\n <lib-paginator-pg\n [data]=\"filteredProducts\"\n [rows]=\"9\"\n [rowsPerPageOptions]=\"[9,18,27,54,81]\"\n [showCurrentPageReport]=\"true\"\n [currentPageReportTemplate]=\"'Mostrando {first} a {last} de {totalRecords} \u00EDtems'\"\n [itemTemplate]=\"cards\">\n </lib-paginator-pg>\n</section>\n\n\n<section aria-label=\"Informacion Sobre la historia Zigma Inflables\" id=\"nosotros\" class=\"history-section\" style=\"background-image: url('https://placehold.co/1400x600/b0b0b0/ffffff?text=Our+Story+Background+Image');\">\n <div class=\"history-overlay\"></div>\n <div class=\"history-content\">\n <h2 class=\"history-title\">Conoce Nuestra Historia</h2>\n <p class=\"history-text\">\n No hay una f\u00F3rmula m\u00E1gica para escribir un texto publicitario perfecto; se basa en varios factores, incluyendo la ubicaci\u00F3n del anuncio, la demograf\u00EDa e incluso el estado de \u00E1nimo del consumidor.\n </p>\n <button pButton type=\"button\" class=\"p-button-rounded p-button-lg p-button-warning\" icon=\"pi pi-play\"\n aria-label=\"Ver video de la historia de Zigma Inflables\"></button>\n </div>\n</section>\n\n<!-- Nueva seccion de Instagram -->\n <section aria-label=\"Secci\u00F3n de redes sociales\">\n\n <lib-section-images-instagram-ecommerce1></lib-section-images-instagram-ecommerce1>\n </section>\n\n<!-- Newsletter (PrimeFlex + animaci\u00F3n on scroll) -->\n<section class=\"surface-section py-5 animate-newsletter-section\">\n <div class=\"mx-auto px-3 md:px-4\" style=\"max-width: 1100px;\">\n <div class=\"newsletter-card surface-card border-round-2xl shadow-2 p-4 md:p-5 flex flex-column md:flex-row align-items-center gap-3 md:gap-4\">\n <div class=\"newsletter-left flex align-items-center gap-3 md:gap-4\">\n <div class=\"newsletter-icon flex align-items-center justify-content-center border-round-3xl\" style=\"background:#fbc30d; width: 52px; height:52px;\">\n <svg class=\"newsletter-svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:28px;height:28px;color:#fff;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\"></path>\n </svg>\n </div>\n <div class=\"newsletter-text\">\n <h3 class=\"newsletter-title m-0 text-900 text-xl md:text-2xl\">Suscr\u00EDbete a nuestro bolet\u00EDn</h3>\n <p class=\"newsletter-subtitle m-0 text-600\">\u00A1y obt\u00E9n un 10% de descuento!</p>\n </div>\n </div>\n <div class=\"newsletter-right flex justify-content-center md:justify-content-end w-full md:w-auto\">\n <form id=\"newsletter-form\" class=\"newsletter-form flex gap-2 w-full md:w-auto\" style=\"max-width:520px;\">\n <input pInputText type=\"email\" id=\"email-input\" name=\"email\" class=\"flex-1 p-inputtext-sm md:p-inputtext\" placeholder=\"Ingresa tu correo electr\u00F3nico\" required />\n <button pButton type=\"submit\" label=\"Suscribirme\" class=\"p-button-warning\"></button>\n </form>\n </div>\n </div>\n </div>\n</section>\n\n", styles: ["@charset \"UTF-8\";.history-section{position:relative;background-size:cover;background-position:center;min-height:500px;display:flex;align-items:center;justify-content:center;margin:1.5rem 0}.history-overlay{position:absolute;inset:0;background:#00000080}.history-content{position:relative;z-index:2;max-width:800px;text-align:center;color:#fff;padding:2rem}.history-pretitle{font-size:1rem;font-weight:300;margin-bottom:.5rem}.history-title{font-size:2.25rem;margin:0 0 1rem;font-weight:700}.history-text{font-size:1rem;margin-bottom:1rem;font-weight:300}.animate-newsletter-section{opacity:0;background-color:var(--ion-background-color)!important}.animate-newsletter-section .newsletter-card{opacity:0;transform:translateY(24px);transition:opacity .6s ease-out,transform .6s ease-out}.animate-newsletter-section.is-visible{opacity:1}.animate-newsletter-section.is-visible .newsletter-card{opacity:1;transform:translateY(0)}@media screen and (min-width: 768px){.newsletter-card{flex-direction:row;justify-content:space-between;align-items:center}.newsletter-text{text-align:left}.newsletter-right{width:auto}}.product-card-animation{opacity:0;transform:translateY(50px);transition:opacity 1s ease-out,transform 1s ease-out;will-change:opacity,transform}.product-card-animation.is-visible{opacity:1;transform:translate(0)}@media screen and (min-width: 768px){.product-card-animation{transform:translate(-50px)}}@media screen and (min-width: 992px){.product-card-animation{transform:translate(-400px);transition:opacity 1s ease-out,transform 1s ease-out}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i2$5.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: HeroSectionEcommerce1, selector: "lib-hero-section-ecommerce1" }, { kind: "component", type: SectionFiltersCategoriesProductos, selector: "lib-section-filters-categories-productos", inputs: ["categorias", "titleComponent"], outputs: ["categorySelected"] }, { kind: "component", type: CardProductos1Component, selector: "lib-card-productos1", inputs: ["product", "isLogin", "detailRouteBase"], outputs: ["addToCart"] }, { kind: "component", type: SectionImagesInstagramEcommerce1, selector: "lib-section-images-instagram-ecommerce1" }, { kind: "component", type: PaginatorPgComponent, selector: "lib-paginator-pg", inputs: ["data", "rows", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "itemTemplate"] }] });
|
|
9003
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: HomeEcommerce1, isStandalone: true, selector: "lib-home-ecommerce1", inputs: { isLogin: "isLogin", bussinesDTO: "bussinesDTO", categorias: "categorias", detailRouteBase: "detailRouteBase" }, outputs: { productClicked: "productClicked", categorySelected: "categorySelected" }, usesOnChanges: true, ngImport: i0, template: "\n<!-- Hero principal -->\n<section role=\"region\" aria-label=\"Banner principal Zigma Inflables\">\n <lib-hero-section-ecommerce1></lib-hero-section-ecommerce1>\n</section>\n\n<!-- Encabezado SEO principal -->\n<h1 class=\"text-center text-3xl md:text-4xl font-bold my-6\" style=\"color:#222\">Cat\u00E1logo de Inflables y Productos inflables</h1>\n\n<!-- Filtros de categor\u00EDas -->\n <section aria-label=\"Secci\u00F3n de filtros de categor\u00EDas inflables\">\n <lib-section-filters-categories-productos id=\"categorias\"\n [categorias]=\"categorias\"\n (categorySelected)=\"onCategoryFilter($event)\">\n </lib-section-filters-categories-productos>\n</section>\n\n<!-- Listado de productos -->\n<section aria-label=\"Listado de productos inflables\" role=\"main\">\n <ng-template #cards let-items>\n <div class=\"grid align-items-center justify-content-center\">\n @for (product of items; track $index) {\n <div class=\"col-12 md:col-6 p-5 lg:p-3 lg:col-4 product-card-animation\"\n [style.transition-delay]=\"($index * 30) + 'ms'\">\n <lib-card-productos1 [DatosNegocio]=\"bussinesDTO\" [product]=\"product\" [detailRouteBase]=\"detailRouteBase\" (addToCart)=\"onAddToCart($event)\">\n </lib-card-productos1>\n </div>\n }\n </div>\n </ng-template>\n\n <lib-paginator-pg\n [data]=\"filteredProducts\"\n [rows]=\"9\"\n [rowsPerPageOptions]=\"[9,18,27,54,81]\"\n [showCurrentPageReport]=\"true\"\n [currentPageReportTemplate]=\"'Mostrando {first} a {last} de {totalRecords} \u00EDtems'\"\n [itemTemplate]=\"cards\">\n </lib-paginator-pg>\n</section>\n\n\n<section aria-label=\"Informacion Sobre la historia Zigma Inflables\" id=\"nosotros\" class=\"history-section\" style=\"background-image: url('https://placehold.co/1400x600/b0b0b0/ffffff?text=Our+Story+Background+Image');\">\n <div class=\"history-overlay\"></div>\n <div class=\"history-content\">\n <h2 class=\"history-title\">Conoce Nuestra Historia</h2>\n <p class=\"history-text\">\n No hay una f\u00F3rmula m\u00E1gica para escribir un texto publicitario perfecto; se basa en varios factores, incluyendo la ubicaci\u00F3n del anuncio, la demograf\u00EDa e incluso el estado de \u00E1nimo del consumidor.\n </p>\n <button pButton type=\"button\" class=\"p-button-rounded p-button-lg p-button-warning\" icon=\"pi pi-play\"\n aria-label=\"Ver video de la historia de Zigma Inflables\"></button>\n </div>\n</section>\n\n<!-- Nueva seccion de Instagram -->\n <section aria-label=\"Secci\u00F3n de redes sociales\">\n\n <lib-section-images-instagram-ecommerce1></lib-section-images-instagram-ecommerce1>\n </section>\n\n<!-- Newsletter (PrimeFlex + animaci\u00F3n on scroll) -->\n<section class=\"surface-section py-5 animate-newsletter-section\">\n <div class=\"mx-auto px-3 md:px-4\" style=\"max-width: 1100px;\">\n <div class=\"newsletter-card surface-card border-round-2xl shadow-2 p-4 md:p-5 flex flex-column md:flex-row align-items-center gap-3 md:gap-4\">\n <div class=\"newsletter-left flex align-items-center gap-3 md:gap-4\">\n <div class=\"newsletter-icon flex align-items-center justify-content-center border-round-3xl\" style=\"background:#fbc30d; width: 52px; height:52px;\">\n <svg class=\"newsletter-svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:28px;height:28px;color:#fff;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\"></path>\n </svg>\n </div>\n <div class=\"newsletter-text\">\n <h3 class=\"newsletter-title m-0 text-900 text-xl md:text-2xl\">Suscr\u00EDbete a nuestro bolet\u00EDn</h3>\n <p class=\"newsletter-subtitle m-0 text-600\">\u00A1y obt\u00E9n un 10% de descuento!</p>\n </div>\n </div>\n <div class=\"newsletter-right flex justify-content-center md:justify-content-end w-full md:w-auto\">\n <form id=\"newsletter-form\" class=\"newsletter-form flex gap-2 w-full md:w-auto\" style=\"max-width:520px;\">\n <input pInputText type=\"email\" id=\"email-input\" name=\"email\" class=\"flex-1 p-inputtext-sm md:p-inputtext\" placeholder=\"Ingresa tu correo electr\u00F3nico\" required />\n <button pButton type=\"submit\" label=\"Suscribirme\" class=\"p-button-warning\"></button>\n </form>\n </div>\n </div>\n </div>\n</section>\n\n", styles: ["@charset \"UTF-8\";.history-section{position:relative;background-size:cover;background-position:center;min-height:500px;display:flex;align-items:center;justify-content:center;margin:1.5rem 0}.history-overlay{position:absolute;inset:0;background:#00000080}.history-content{position:relative;z-index:2;max-width:800px;text-align:center;color:#fff;padding:2rem}.history-pretitle{font-size:1rem;font-weight:300;margin-bottom:.5rem}.history-title{font-size:2.25rem;margin:0 0 1rem;font-weight:700}.history-text{font-size:1rem;margin-bottom:1rem;font-weight:300}.animate-newsletter-section{opacity:0;background-color:var(--ion-background-color)!important}.animate-newsletter-section .newsletter-card{opacity:0;transform:translateY(24px);transition:opacity .6s ease-out,transform .6s ease-out}.animate-newsletter-section.is-visible{opacity:1}.animate-newsletter-section.is-visible .newsletter-card{opacity:1;transform:translateY(0)}@media screen and (min-width: 768px){.newsletter-card{flex-direction:row;justify-content:space-between;align-items:center}.newsletter-text{text-align:left}.newsletter-right{width:auto}}.product-card-animation{opacity:0;transform:translateY(50px);transition:opacity 1s ease-out,transform 1s ease-out;will-change:opacity,transform}.product-card-animation.is-visible{opacity:1;transform:translate(0)}@media screen and (min-width: 768px){.product-card-animation{transform:translate(-50px)}}@media screen and (min-width: 992px){.product-card-animation{transform:translate(-400px);transition:opacity 1s ease-out,transform 1s ease-out}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i2$5.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: HeroSectionEcommerce1, selector: "lib-hero-section-ecommerce1" }, { kind: "component", type: SectionFiltersCategoriesProductos, selector: "lib-section-filters-categories-productos", inputs: ["categorias", "titleComponent"], outputs: ["categorySelected"] }, { kind: "component", type: CardProductos1Component, selector: "lib-card-productos1", inputs: ["product", "isLogin", "DatosNegocio", "detailRouteBase"], outputs: ["addToCart"] }, { kind: "component", type: SectionImagesInstagramEcommerce1, selector: "lib-section-images-instagram-ecommerce1" }, { kind: "component", type: PaginatorPgComponent, selector: "lib-paginator-pg", inputs: ["data", "rows", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "itemTemplate"] }] });
|
|
8897
9004
|
}
|
|
8898
9005
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: HomeEcommerce1, decorators: [{
|
|
8899
9006
|
type: Component,
|
|
@@ -8906,8 +9013,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
8906
9013
|
CardProductos1Component,
|
|
8907
9014
|
SectionImagesInstagramEcommerce1,
|
|
8908
9015
|
PaginatorPgComponent,
|
|
8909
|
-
|
|
8910
|
-
], template: "\n<!-- Hero principal -->\n<section role=\"region\" aria-label=\"Banner principal Zigma Inflables\">\n <lib-hero-section-ecommerce1></lib-hero-section-ecommerce1>\n</section>\n\n<!-- Encabezado SEO principal -->\n<h1 class=\"text-center text-3xl md:text-4xl font-bold my-6\" style=\"color:#222\">Cat\u00E1logo de Inflables y Productos inflables</h1>\n\n<!-- Filtros de categor\u00EDas -->\n <section aria-label=\"Secci\u00F3n de filtros de categor\u00EDas inflables\">\n <lib-section-filters-categories-productos id=\"categorias\"\n [categorias]=\"categorias\"\n (categorySelected)=\"onCategoryFilter($event)\">\n </lib-section-filters-categories-productos>\n</section>\n\n<!-- Listado de productos -->\n<section aria-label=\"Listado de productos inflables\" role=\"main\">\n <ng-template #cards let-items>\n <div class=\"grid align-items-center justify-content-center\">\n @for (product of items; track $index) {\n <div class=\"col-12 md:col-6 p-5 lg:p-3 lg:col-4 product-card-animation\"\n [style.transition-delay]=\"($index * 30) + 'ms'\">\n <lib-card-productos1 [product]=\"product\" [detailRouteBase]=\"detailRouteBase\" (addToCart)=\"onAddToCart($event)\">\n </lib-card-productos1>\n </div>\n }\n </div>\n </ng-template>\n\n <lib-paginator-pg\n [data]=\"filteredProducts\"\n [rows]=\"9\"\n [rowsPerPageOptions]=\"[9,18,27,54,81]\"\n [showCurrentPageReport]=\"true\"\n [currentPageReportTemplate]=\"'Mostrando {first} a {last} de {totalRecords} \u00EDtems'\"\n [itemTemplate]=\"cards\">\n </lib-paginator-pg>\n</section>\n\n\n<section aria-label=\"Informacion Sobre la historia Zigma Inflables\" id=\"nosotros\" class=\"history-section\" style=\"background-image: url('https://placehold.co/1400x600/b0b0b0/ffffff?text=Our+Story+Background+Image');\">\n <div class=\"history-overlay\"></div>\n <div class=\"history-content\">\n <h2 class=\"history-title\">Conoce Nuestra Historia</h2>\n <p class=\"history-text\">\n No hay una f\u00F3rmula m\u00E1gica para escribir un texto publicitario perfecto; se basa en varios factores, incluyendo la ubicaci\u00F3n del anuncio, la demograf\u00EDa e incluso el estado de \u00E1nimo del consumidor.\n </p>\n <button pButton type=\"button\" class=\"p-button-rounded p-button-lg p-button-warning\" icon=\"pi pi-play\"\n aria-label=\"Ver video de la historia de Zigma Inflables\"></button>\n </div>\n</section>\n\n<!-- Nueva seccion de Instagram -->\n <section aria-label=\"Secci\u00F3n de redes sociales\">\n\n <lib-section-images-instagram-ecommerce1></lib-section-images-instagram-ecommerce1>\n </section>\n\n<!-- Newsletter (PrimeFlex + animaci\u00F3n on scroll) -->\n<section class=\"surface-section py-5 animate-newsletter-section\">\n <div class=\"mx-auto px-3 md:px-4\" style=\"max-width: 1100px;\">\n <div class=\"newsletter-card surface-card border-round-2xl shadow-2 p-4 md:p-5 flex flex-column md:flex-row align-items-center gap-3 md:gap-4\">\n <div class=\"newsletter-left flex align-items-center gap-3 md:gap-4\">\n <div class=\"newsletter-icon flex align-items-center justify-content-center border-round-3xl\" style=\"background:#fbc30d; width: 52px; height:52px;\">\n <svg class=\"newsletter-svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:28px;height:28px;color:#fff;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\"></path>\n </svg>\n </div>\n <div class=\"newsletter-text\">\n <h3 class=\"newsletter-title m-0 text-900 text-xl md:text-2xl\">Suscr\u00EDbete a nuestro bolet\u00EDn</h3>\n <p class=\"newsletter-subtitle m-0 text-600\">\u00A1y obt\u00E9n un 10% de descuento!</p>\n </div>\n </div>\n <div class=\"newsletter-right flex justify-content-center md:justify-content-end w-full md:w-auto\">\n <form id=\"newsletter-form\" class=\"newsletter-form flex gap-2 w-full md:w-auto\" style=\"max-width:520px;\">\n <input pInputText type=\"email\" id=\"email-input\" name=\"email\" class=\"flex-1 p-inputtext-sm md:p-inputtext\" placeholder=\"Ingresa tu correo electr\u00F3nico\" required />\n <button pButton type=\"submit\" label=\"Suscribirme\" class=\"p-button-warning\"></button>\n </form>\n </div>\n </div>\n </div>\n</section>\n\n", styles: ["@charset \"UTF-8\";.history-section{position:relative;background-size:cover;background-position:center;min-height:500px;display:flex;align-items:center;justify-content:center;margin:1.5rem 0}.history-overlay{position:absolute;inset:0;background:#00000080}.history-content{position:relative;z-index:2;max-width:800px;text-align:center;color:#fff;padding:2rem}.history-pretitle{font-size:1rem;font-weight:300;margin-bottom:.5rem}.history-title{font-size:2.25rem;margin:0 0 1rem;font-weight:700}.history-text{font-size:1rem;margin-bottom:1rem;font-weight:300}.animate-newsletter-section{opacity:0;background-color:var(--ion-background-color)!important}.animate-newsletter-section .newsletter-card{opacity:0;transform:translateY(24px);transition:opacity .6s ease-out,transform .6s ease-out}.animate-newsletter-section.is-visible{opacity:1}.animate-newsletter-section.is-visible .newsletter-card{opacity:1;transform:translateY(0)}@media screen and (min-width: 768px){.newsletter-card{flex-direction:row;justify-content:space-between;align-items:center}.newsletter-text{text-align:left}.newsletter-right{width:auto}}.product-card-animation{opacity:0;transform:translateY(50px);transition:opacity 1s ease-out,transform 1s ease-out;will-change:opacity,transform}.product-card-animation.is-visible{opacity:1;transform:translate(0)}@media screen and (min-width: 768px){.product-card-animation{transform:translate(-50px)}}@media screen and (min-width: 992px){.product-card-animation{transform:translate(-400px);transition:opacity 1s ease-out,transform 1s ease-out}}\n"] }]
|
|
9016
|
+
], template: "\n<!-- Hero principal -->\n<section role=\"region\" aria-label=\"Banner principal Zigma Inflables\">\n <lib-hero-section-ecommerce1></lib-hero-section-ecommerce1>\n</section>\n\n<!-- Encabezado SEO principal -->\n<h1 class=\"text-center text-3xl md:text-4xl font-bold my-6\" style=\"color:#222\">Cat\u00E1logo de Inflables y Productos inflables</h1>\n\n<!-- Filtros de categor\u00EDas -->\n <section aria-label=\"Secci\u00F3n de filtros de categor\u00EDas inflables\">\n <lib-section-filters-categories-productos id=\"categorias\"\n [categorias]=\"categorias\"\n (categorySelected)=\"onCategoryFilter($event)\">\n </lib-section-filters-categories-productos>\n</section>\n\n<!-- Listado de productos -->\n<section aria-label=\"Listado de productos inflables\" role=\"main\">\n <ng-template #cards let-items>\n <div class=\"grid align-items-center justify-content-center\">\n @for (product of items; track $index) {\n <div class=\"col-12 md:col-6 p-5 lg:p-3 lg:col-4 product-card-animation\"\n [style.transition-delay]=\"($index * 30) + 'ms'\">\n <lib-card-productos1 [DatosNegocio]=\"bussinesDTO\" [product]=\"product\" [detailRouteBase]=\"detailRouteBase\" (addToCart)=\"onAddToCart($event)\">\n </lib-card-productos1>\n </div>\n }\n </div>\n </ng-template>\n\n <lib-paginator-pg\n [data]=\"filteredProducts\"\n [rows]=\"9\"\n [rowsPerPageOptions]=\"[9,18,27,54,81]\"\n [showCurrentPageReport]=\"true\"\n [currentPageReportTemplate]=\"'Mostrando {first} a {last} de {totalRecords} \u00EDtems'\"\n [itemTemplate]=\"cards\">\n </lib-paginator-pg>\n</section>\n\n\n<section aria-label=\"Informacion Sobre la historia Zigma Inflables\" id=\"nosotros\" class=\"history-section\" style=\"background-image: url('https://placehold.co/1400x600/b0b0b0/ffffff?text=Our+Story+Background+Image');\">\n <div class=\"history-overlay\"></div>\n <div class=\"history-content\">\n <h2 class=\"history-title\">Conoce Nuestra Historia</h2>\n <p class=\"history-text\">\n No hay una f\u00F3rmula m\u00E1gica para escribir un texto publicitario perfecto; se basa en varios factores, incluyendo la ubicaci\u00F3n del anuncio, la demograf\u00EDa e incluso el estado de \u00E1nimo del consumidor.\n </p>\n <button pButton type=\"button\" class=\"p-button-rounded p-button-lg p-button-warning\" icon=\"pi pi-play\"\n aria-label=\"Ver video de la historia de Zigma Inflables\"></button>\n </div>\n</section>\n\n<!-- Nueva seccion de Instagram -->\n <section aria-label=\"Secci\u00F3n de redes sociales\">\n\n <lib-section-images-instagram-ecommerce1></lib-section-images-instagram-ecommerce1>\n </section>\n\n<!-- Newsletter (PrimeFlex + animaci\u00F3n on scroll) -->\n<section class=\"surface-section py-5 animate-newsletter-section\">\n <div class=\"mx-auto px-3 md:px-4\" style=\"max-width: 1100px;\">\n <div class=\"newsletter-card surface-card border-round-2xl shadow-2 p-4 md:p-5 flex flex-column md:flex-row align-items-center gap-3 md:gap-4\">\n <div class=\"newsletter-left flex align-items-center gap-3 md:gap-4\">\n <div class=\"newsletter-icon flex align-items-center justify-content-center border-round-3xl\" style=\"background:#fbc30d; width: 52px; height:52px;\">\n <svg class=\"newsletter-svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:28px;height:28px;color:#fff;\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\"></path>\n </svg>\n </div>\n <div class=\"newsletter-text\">\n <h3 class=\"newsletter-title m-0 text-900 text-xl md:text-2xl\">Suscr\u00EDbete a nuestro bolet\u00EDn</h3>\n <p class=\"newsletter-subtitle m-0 text-600\">\u00A1y obt\u00E9n un 10% de descuento!</p>\n </div>\n </div>\n <div class=\"newsletter-right flex justify-content-center md:justify-content-end w-full md:w-auto\">\n <form id=\"newsletter-form\" class=\"newsletter-form flex gap-2 w-full md:w-auto\" style=\"max-width:520px;\">\n <input pInputText type=\"email\" id=\"email-input\" name=\"email\" class=\"flex-1 p-inputtext-sm md:p-inputtext\" placeholder=\"Ingresa tu correo electr\u00F3nico\" required />\n <button pButton type=\"submit\" label=\"Suscribirme\" class=\"p-button-warning\"></button>\n </form>\n </div>\n </div>\n </div>\n</section>\n\n", styles: ["@charset \"UTF-8\";.history-section{position:relative;background-size:cover;background-position:center;min-height:500px;display:flex;align-items:center;justify-content:center;margin:1.5rem 0}.history-overlay{position:absolute;inset:0;background:#00000080}.history-content{position:relative;z-index:2;max-width:800px;text-align:center;color:#fff;padding:2rem}.history-pretitle{font-size:1rem;font-weight:300;margin-bottom:.5rem}.history-title{font-size:2.25rem;margin:0 0 1rem;font-weight:700}.history-text{font-size:1rem;margin-bottom:1rem;font-weight:300}.animate-newsletter-section{opacity:0;background-color:var(--ion-background-color)!important}.animate-newsletter-section .newsletter-card{opacity:0;transform:translateY(24px);transition:opacity .6s ease-out,transform .6s ease-out}.animate-newsletter-section.is-visible{opacity:1}.animate-newsletter-section.is-visible .newsletter-card{opacity:1;transform:translateY(0)}@media screen and (min-width: 768px){.newsletter-card{flex-direction:row;justify-content:space-between;align-items:center}.newsletter-text{text-align:left}.newsletter-right{width:auto}}.product-card-animation{opacity:0;transform:translateY(50px);transition:opacity 1s ease-out,transform 1s ease-out;will-change:opacity,transform}.product-card-animation.is-visible{opacity:1;transform:translate(0)}@media screen and (min-width: 768px){.product-card-animation{transform:translate(-50px)}}@media screen and (min-width: 992px){.product-card-animation{transform:translate(-400px);transition:opacity 1s ease-out,transform 1s ease-out}}\n"] }]
|
|
8911
9017
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { isLogin: [{
|
|
8912
9018
|
type: Input
|
|
8913
9019
|
}], bussinesDTO: [{
|
|
@@ -8953,7 +9059,7 @@ class InputsLoginEcommerce1 {
|
|
|
8953
9059
|
this.remember = !!event?.checked;
|
|
8954
9060
|
}
|
|
8955
9061
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: InputsLoginEcommerce1, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8956
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: InputsLoginEcommerce1, isStandalone: true, selector: "lib-inputs-login-ecommerce1", ngImport: i0, template: "<div class=\"input-group\">\n <label for=\"login-email\" class=\"input-label\">Email</label>\n <input pInputText id=\"login-email\" type=\"email\" class=\"input-field\" placeholder=\"ejemplo@correo.com\" required />\n</div>\n\n<div class=\"input-group\">\n <label for=\"login-password\" class=\"input-label\">Contrase\u00F1a</label>\n <p-password inputId=\"login-password\" placeholder=\"********\" [toggleMask]=\"true\" appendTo=\"body\" class=\"input-field\"></p-password>\n</div>\n\n<div class=\"form-row\">\n <div class=\"remember\">\n <p-checkbox inputId=\"remember-me\" binary=\"true\" (onChange)=\"onRememberChange($event)\"></p-checkbox>\n <label for=\"remember-me\" class=\"remember-label\">Recordarme</label>\n </div>\n <a href=\"#\" class=\"forgot-link\">\u00BFOlvidaste tu contrase\u00F1a?</a>\n</div>", styles: [".input-group{margin-bottom:1.5rem}.input-label{display:block;font-weight:700;margin-bottom:.5rem;color:#374151}.input-field{width:100%;padding:.75rem 1rem;border-radius:12px;border:1px solid #d1d5db}.form-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}.remember{display:flex;align-items:center;gap:.5rem}.remember-label{margin:0;font-size:.9rem;color:#111827}.forgot-link{color:#111827;font-weight:600;text-decoration:none}.forgot-link:hover{opacity:.85}:host ::ng-deep .p-password{width:100%}:host ::ng-deep .p-inputtext{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: PrimegModule }, { kind: "component", type: i3$1.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["hostName", "value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "styleClass", "inputClass", "indeterminate", "formControl", "checkboxIcon", "readonly", "autofocus", "trueValue", "falseValue", "variant", "size"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i2$5.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: i3$
|
|
9062
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: InputsLoginEcommerce1, isStandalone: true, selector: "lib-inputs-login-ecommerce1", ngImport: i0, template: "<div class=\"input-group\">\n <label for=\"login-email\" class=\"input-label\">Email</label>\n <input pInputText id=\"login-email\" type=\"email\" class=\"input-field\" placeholder=\"ejemplo@correo.com\" required />\n</div>\n\n<div class=\"input-group\">\n <label for=\"login-password\" class=\"input-label\">Contrase\u00F1a</label>\n <p-password inputId=\"login-password\" placeholder=\"********\" [toggleMask]=\"true\" appendTo=\"body\" class=\"input-field\"></p-password>\n</div>\n\n<div class=\"form-row\">\n <div class=\"remember\">\n <p-checkbox inputId=\"remember-me\" binary=\"true\" (onChange)=\"onRememberChange($event)\"></p-checkbox>\n <label for=\"remember-me\" class=\"remember-label\">Recordarme</label>\n </div>\n <a href=\"#\" class=\"forgot-link\">\u00BFOlvidaste tu contrase\u00F1a?</a>\n</div>", styles: [".input-group{margin-bottom:1.5rem}.input-label{display:block;font-weight:700;margin-bottom:.5rem;color:#374151}.input-field{width:100%;padding:.75rem 1rem;border-radius:12px;border:1px solid #d1d5db}.form-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}.remember{display:flex;align-items:center;gap:.5rem}.remember-label{margin:0;font-size:.9rem;color:#111827}.forgot-link{color:#111827;font-weight:600;text-decoration:none}.forgot-link:hover{opacity:.85}:host ::ng-deep .p-password{width:100%}:host ::ng-deep .p-inputtext{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: PrimegModule }, { kind: "component", type: i3$1.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["hostName", "value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "styleClass", "inputClass", "indeterminate", "formControl", "checkboxIcon", "readonly", "autofocus", "trueValue", "falseValue", "variant", "size"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i2$5.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: i3$4.Password, selector: "p-password", inputs: ["ariaLabel", "ariaLabelledBy", "label", "promptLabel", "mediumRegex", "strongRegex", "weakLabel", "mediumLabel", "maxLength", "strongLabel", "inputId", "feedback", "toggleMask", "inputStyleClass", "styleClass", "inputStyle", "showTransitionOptions", "hideTransitionOptions", "autocomplete", "placeholder", "showClear", "autofocus", "tabindex", "appendTo"], outputs: ["onFocus", "onBlur", "onClear"] }] });
|
|
8957
9063
|
}
|
|
8958
9064
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: InputsLoginEcommerce1, decorators: [{
|
|
8959
9065
|
type: Component,
|
|
@@ -8977,7 +9083,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
8977
9083
|
|
|
8978
9084
|
class InputsRegisterEcommerce1 {
|
|
8979
9085
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: InputsRegisterEcommerce1, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8980
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: InputsRegisterEcommerce1, isStandalone: true, selector: "lib-inputs-register-ecommerce1", ngImport: i0, template: "<div class=\"grid formgrid p-fluid\">\n <div class=\"col-12 field\">\n <label for=\"register-name\" class=\"input-label\">Nombre completo</label>\n <input id=\"register-name\" type=\"text\" pInputText placeholder=\"John Doe\" required />\n </div>\n\n <div class=\"col-12 field\">\n <label for=\"register-email\" class=\"input-label\">Email</label>\n <input id=\"register-email\" type=\"email\" pInputText placeholder=\"ejemplo@correo.com\" required />\n </div>\n\n <div class=\"col-12 field\">\n <label for=\"register-password\" class=\"input-label\">Contrase\u00F1a</label>\n <p-password inputId=\"register-password\" placeholder=\"********\" [toggleMask]=\"true\" appendTo=\"body\"></p-password>\n </div>\n\n <div class=\"col-12 field\">\n <label for=\"register-confirm-password\" class=\"input-label\">Confirmar Contrase\u00F1a</label>\n <p-password inputId=\"register-confirm-password\" [feedback]=\"false\" [toggleMask]=\"true\"></p-password>\n </div>\n</div>", styles: ["@charset \"UTF-8\";.input-label{display:block;font-weight:600;margin-bottom:.5rem;color:#374151}:host ::ng-deep .p-inputtext,:host ::ng-deep .p-password .p-inputtext{width:100%!important;border-radius:12px;padding:.75rem 1rem}:host ::ng-deep .p-password{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: PrimegModule }, { kind: "directive", type: i2$5.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: i3$
|
|
9086
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: InputsRegisterEcommerce1, isStandalone: true, selector: "lib-inputs-register-ecommerce1", ngImport: i0, template: "<div class=\"grid formgrid p-fluid\">\n <div class=\"col-12 field\">\n <label for=\"register-name\" class=\"input-label\">Nombre completo</label>\n <input id=\"register-name\" type=\"text\" pInputText placeholder=\"John Doe\" required />\n </div>\n\n <div class=\"col-12 field\">\n <label for=\"register-email\" class=\"input-label\">Email</label>\n <input id=\"register-email\" type=\"email\" pInputText placeholder=\"ejemplo@correo.com\" required />\n </div>\n\n <div class=\"col-12 field\">\n <label for=\"register-password\" class=\"input-label\">Contrase\u00F1a</label>\n <p-password inputId=\"register-password\" placeholder=\"********\" [toggleMask]=\"true\" appendTo=\"body\"></p-password>\n </div>\n\n <div class=\"col-12 field\">\n <label for=\"register-confirm-password\" class=\"input-label\">Confirmar Contrase\u00F1a</label>\n <p-password inputId=\"register-confirm-password\" [feedback]=\"false\" [toggleMask]=\"true\"></p-password>\n </div>\n</div>", styles: ["@charset \"UTF-8\";.input-label{display:block;font-weight:600;margin-bottom:.5rem;color:#374151}:host ::ng-deep .p-inputtext,:host ::ng-deep .p-password .p-inputtext{width:100%!important;border-radius:12px;padding:.75rem 1rem}:host ::ng-deep .p-password{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: PrimegModule }, { kind: "directive", type: i2$5.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "component", type: i3$4.Password, selector: "p-password", inputs: ["ariaLabel", "ariaLabelledBy", "label", "promptLabel", "mediumRegex", "strongRegex", "weakLabel", "mediumLabel", "maxLength", "strongLabel", "inputId", "feedback", "toggleMask", "inputStyleClass", "styleClass", "inputStyle", "showTransitionOptions", "hideTransitionOptions", "autocomplete", "placeholder", "showClear", "autofocus", "tabindex", "appendTo"], outputs: ["onFocus", "onBlur", "onClear"] }] });
|
|
8981
9087
|
}
|
|
8982
9088
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: InputsRegisterEcommerce1, decorators: [{
|
|
8983
9089
|
type: Component,
|
|
@@ -9558,13 +9664,13 @@ class DetalleProductoPageLib {
|
|
|
9558
9664
|
}
|
|
9559
9665
|
return this.productSvc.mockCategoriaInflablesDTO();
|
|
9560
9666
|
}
|
|
9561
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DetalleProductoPageLib, deps: [{ token: i1$8.ActivatedRoute }, { token: ProductService }, { token: MetaDataService }, { token: i4$
|
|
9562
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DetalleProductoPageLib, isStandalone: true, selector: "lib-product-detail-lib", inputs: { product: "product", isLogin: "isLogin", categorias: "categorias" }, ngImport: i0, template: "<div class=\"py-4 background-page mx-auto px-3\">\n <lib-detalle-carrito-1 [product]=\"product!\" [isLogin]=\"isLogin\"></lib-detalle-carrito-1>\n\n @if (products && products.length > 0) {\n <section class=\"mt-4 related-products\">\n <h3 class=\"text-white font-semibold mb-2\">Productos que te pueden gustar</h3>\n <swiper-container direction=\"horizontal\" navigation=\"true\" pagination=\"true\" pagination-clickable=\"true\" loop=\"true\" autoplay=\"true\"\n autoplay-delay=\"6000\" autoplay-disable-on-interaction=\"false\" speed=\"600\"\n [slidesPerView]=\"slidesPerViewBase\" [spaceBetween]=\"spaceBetweenBase\"\n [breakpoints]=\"breakpoints\"\n style=\"--swiper-navigation-color:#FFD600; --swiper-theme-color:#FFD600; --swiper-pagination-color:#FFD600; --swiper-pagination-bullet-inactive-color:#FFFFFF; --swiper-pagination-bullet-inactive-opacity:0.6; --swiper-pagination-bullet-size:8px; --swiper-pagination-bullet-horizontal-gap:6px;\">\n @for (p of products; track p.id) {\n <swiper-slide>\n <lib-card-productos1 [product]=\"p\" [isLogin]=\"isLogin\"></lib-card-productos1>\n </swiper-slide>\n }\n </swiper-container>\n </section>\n }\n</div>\n", styles: [":root{--button-colors: linear-gradient(50deg, rgba(2,0,36,1) 0%, rgba(6,68,160,1) 29%, rgba(0,212,255,1) 83%, rgba(7,44,144,1) 100%, rgba(9,9,121,1) 100%);--ion-color-primary: #3880ff;--ion-color-primary-rgb: 56, 128, 255;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #3171e0;--ion-color-primary-tint: #4c8dff;--ion-color-secondary: #3dc2ff;--ion-color-secondary-rgb: 61, 194, 255;--ion-color-secondary-contrast: #ffffff;--ion-color-secondary-contrast-rgb: 255, 255, 255;--ion-color-secondary-shade: #36abe0;--ion-color-secondary-tint: #50c8ff;--ion-color-tertiary: #5260ff;--ion-color-tertiary-rgb: 82, 96, 255;--ion-color-tertiary-contrast: #ffffff;--ion-color-tertiary-contrast-rgb: 255, 255, 255;--ion-color-tertiary-shade: #4854e0;--ion-color-tertiary-tint: #6370ff;--ion-color-success: #2dd36f;--ion-color-success-rgb: 45, 211, 111;--ion-color-success-contrast: #ffffff;--ion-color-success-contrast-rgb: 255, 255, 255;--ion-color-success-shade: #28ba62;--ion-color-success-tint: #42d77d;--ion-color-warning: #ffc409;--ion-color-warning-rgb: 255, 196, 9;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0ac08;--ion-color-warning-tint: #ffca22;--ion-color-danger: #eb445a;--ion-color-danger-rgb: 235, 68, 90;--ion-color-danger-contrast: #ffffff;--ion-color-danger-contrast-rgb: 255, 255, 255;--ion-color-danger-shade: #cf3c4f;--ion-color-danger-tint: #ed576b;--ion-color-dark: #222428;--ion-color-dark-rgb: 34, 36, 40;--ion-color-dark-contrast: #ffffff;--ion-color-dark-contrast-rgb: 255, 255, 255;--ion-color-dark-shade: #1e2023;--ion-color-dark-tint: #383a3e;--ion-color-medium: #92949c;--ion-color-medium-rgb: 146, 148, 156;--ion-color-medium-contrast: #ffffff;--ion-color-medium-contrast-rgb: 255, 255, 255;--ion-color-medium-shade: #808289;--ion-color-medium-tint: #9d9fa6;--ion-color-light: #f4f5f8;--ion-color-light-rgb: 244, 245, 248;--ion-color-light-contrast: #000000;--ion-color-light-contrast-rgb: 0, 0, 0;--ion-color-light-shade: #d7d8da;--ion-color-light-tint: #f5f6f9}@media (prefers-color-scheme: dark){body{--ion-color-primary: #428cff;--ion-color-primary-rgb: 66,140,255;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255,255,255;--ion-color-primary-shade: #3a7be0;--ion-color-primary-tint: #5598ff;--ion-color-secondary: #50c8ff;--ion-color-secondary-rgb: 80,200,255;--ion-color-secondary-contrast: #ffffff;--ion-color-secondary-contrast-rgb: 255,255,255;--ion-color-secondary-shade: #46b0e0;--ion-color-secondary-tint: #62ceff;--ion-color-tertiary: #6a64ff;--ion-color-tertiary-rgb: 106,100,255;--ion-color-tertiary-contrast: #ffffff;--ion-color-tertiary-contrast-rgb: 255,255,255;--ion-color-tertiary-shade: #5d58e0;--ion-color-tertiary-tint: #7974ff;--ion-color-success: #2fdf75;--ion-color-success-rgb: 47,223,117;--ion-color-success-contrast: #000000;--ion-color-success-contrast-rgb: 0,0,0;--ion-color-success-shade: #29c467;--ion-color-success-tint: #44e283;--ion-color-warning: #ffd534;--ion-color-warning-rgb: 255,213,52;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0,0,0;--ion-color-warning-shade: #e0bb2e;--ion-color-warning-tint: #ffd948;--ion-color-danger: #ff4961;--ion-color-danger-rgb: 255,73,97;--ion-color-danger-contrast: #ffffff;--ion-color-danger-contrast-rgb: 255,255,255;--ion-color-danger-shade: #e04055;--ion-color-danger-tint: #ff5b71;--ion-color-dark: #f4f5f8;--ion-color-dark-rgb: 244,245,248;--ion-color-dark-contrast: #000000;--ion-color-dark-contrast-rgb: 0,0,0;--ion-color-dark-shade: #d7d8da;--ion-color-dark-tint: #f5f6f9;--ion-color-medium: #989aa2;--ion-color-medium-rgb: 152,154,162;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0,0,0;--ion-color-medium-shade: #86888f;--ion-color-medium-tint: #a2a4ab;--ion-color-light: #222428;--ion-color-light-rgb: 34,36,40;--ion-color-light-contrast: #ffffff;--ion-color-light-contrast-rgb: 255,255,255;--ion-color-light-shade: #1e2023;--ion-color-light-tint: #383a3e}.ios body{--ion-background-color: #0b2f89;--ion-background-color-rgb: 11, 47, 137;--ion-text-color: #ffffff;--ion-text-color-rgb: 255,255,255;--ion-color-step-50: #2d2f34;--ion-color-step-100: #383a3e;--ion-color-step-150: #434549;--ion-color-step-200: #4e5055;--ion-color-step-250: #595b5f;--ion-color-step-300: #64666a;--ion-color-step-350: #6f7175;--ion-color-step-400: #7a7c80;--ion-color-step-450: #85878b;--ion-color-step-500: #909296;--ion-color-step-550: #9b9da1;--ion-color-step-600: #a6a8ac;--ion-color-step-650: #b1b3b7;--ion-color-step-700: #bcbec2;--ion-color-step-750: #c7c9cc;--ion-color-step-800: #d2d4d7;--ion-color-step-850: #dddfe2;--ion-color-step-900: #e8eaed;--ion-color-step-950: #f3f5f8;--ion-item-background: #2c2e33;--ion-card-background: #383a3e}.ios ion-modal{--ion-background-color: var(--ion-color-step-100);--ion-toolbar-background: var(--ion-color-step-150);--ion-toolbar-border-color: var(--ion-color-step-250)}.md body{--ion-background-color: #0b2f89;--ion-background-color-rgb: 11, 47, 137;--ion-text-color: #ffffff;--ion-text-color-rgb: 255,255,255;--ion-border-color: #3e4045;--ion-color-step-50: #2d2f34;--ion-color-step-100: #383a3e;--ion-color-step-150: #434549;--ion-color-step-200: #4e5055;--ion-color-step-250: #595b5f;--ion-color-step-300: #64666a;--ion-color-step-350: #6f7175;--ion-color-step-400: #7a7c80;--ion-color-step-450: #85878b;--ion-color-step-500: #909296;--ion-color-step-550: #9b9da1;--ion-color-step-600: #a6a8ac;--ion-color-step-650: #b1b3b7;--ion-color-step-700: #bcbec2;--ion-color-step-750: #c7c9cc;--ion-color-step-800: #d2d4d7;--ion-color-step-850: #dddfe2;--ion-color-step-900: #e8eaed;--ion-color-step-950: #f3f5f8;--ion-item-background: #2c2e33;--ion-toolbar-background: #2d2f34;--ion-tab-bar-background: #2d2f34;--ion-card-background: #383a3e}}.background-page{background-color:#0093e9!important}.related-products :host ::ng-deep lib-card-productos1 h3{text-align:center!important}.related-products :host ::ng-deep lib-card-productos1 .surface-ground,.related-products :host ::ng-deep lib-card-productos1 .info-badges{text-align:center!important;justify-content:center!important}.related-products :host ::ng-deep lib-card-productos1 .mt-auto .flex{justify-content:center!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DetalleCarrito1Component, selector: "lib-detalle-carrito-1", inputs: ["product", "isLogin", "isPersonalizable"], outputs: ["addToCart"] }, { kind: "component", type: CardProductos1Component, selector: "lib-card-productos1", inputs: ["product", "isLogin", "detailRouteBase"], outputs: ["addToCart"] }] });
|
|
9667
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DetalleProductoPageLib, deps: [{ token: i1$8.ActivatedRoute }, { token: ProductService }, { token: MetaDataService }, { token: i4$4.Store }], target: i0.ɵɵFactoryTarget.Component });
|
|
9668
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DetalleProductoPageLib, isStandalone: true, selector: "lib-product-detail-lib", inputs: { product: "product", isLogin: "isLogin", categorias: "categorias" }, ngImport: i0, template: "<div class=\"py-4 background-page mx-auto px-3\">\n <lib-detalle-carrito-1 [product]=\"product!\" [isLogin]=\"isLogin\"></lib-detalle-carrito-1>\n\n @if (products && products.length > 0) {\n <section class=\"mt-4 related-products\">\n <h3 class=\"text-white font-semibold mb-2\">Productos que te pueden gustar</h3>\n <swiper-container direction=\"horizontal\" navigation=\"true\" pagination=\"true\" pagination-clickable=\"true\" loop=\"true\" autoplay=\"true\"\n autoplay-delay=\"6000\" autoplay-disable-on-interaction=\"false\" speed=\"600\"\n [slidesPerView]=\"slidesPerViewBase\" [spaceBetween]=\"spaceBetweenBase\"\n [breakpoints]=\"breakpoints\"\n style=\"--swiper-navigation-color:#FFD600; --swiper-theme-color:#FFD600; --swiper-pagination-color:#FFD600; --swiper-pagination-bullet-inactive-color:#FFFFFF; --swiper-pagination-bullet-inactive-opacity:0.6; --swiper-pagination-bullet-size:8px; --swiper-pagination-bullet-horizontal-gap:6px;\">\n @for (p of products; track p.id) {\n <swiper-slide>\n <lib-card-productos1 [product]=\"p\" [isLogin]=\"isLogin\"></lib-card-productos1>\n </swiper-slide>\n }\n </swiper-container>\n </section>\n }\n</div>\n", styles: [":root{--button-colors: linear-gradient(50deg, rgba(2,0,36,1) 0%, rgba(6,68,160,1) 29%, rgba(0,212,255,1) 83%, rgba(7,44,144,1) 100%, rgba(9,9,121,1) 100%);--ion-color-primary: #3880ff;--ion-color-primary-rgb: 56, 128, 255;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #3171e0;--ion-color-primary-tint: #4c8dff;--ion-color-secondary: #3dc2ff;--ion-color-secondary-rgb: 61, 194, 255;--ion-color-secondary-contrast: #ffffff;--ion-color-secondary-contrast-rgb: 255, 255, 255;--ion-color-secondary-shade: #36abe0;--ion-color-secondary-tint: #50c8ff;--ion-color-tertiary: #5260ff;--ion-color-tertiary-rgb: 82, 96, 255;--ion-color-tertiary-contrast: #ffffff;--ion-color-tertiary-contrast-rgb: 255, 255, 255;--ion-color-tertiary-shade: #4854e0;--ion-color-tertiary-tint: #6370ff;--ion-color-success: #2dd36f;--ion-color-success-rgb: 45, 211, 111;--ion-color-success-contrast: #ffffff;--ion-color-success-contrast-rgb: 255, 255, 255;--ion-color-success-shade: #28ba62;--ion-color-success-tint: #42d77d;--ion-color-warning: #ffc409;--ion-color-warning-rgb: 255, 196, 9;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0ac08;--ion-color-warning-tint: #ffca22;--ion-color-danger: #eb445a;--ion-color-danger-rgb: 235, 68, 90;--ion-color-danger-contrast: #ffffff;--ion-color-danger-contrast-rgb: 255, 255, 255;--ion-color-danger-shade: #cf3c4f;--ion-color-danger-tint: #ed576b;--ion-color-dark: #222428;--ion-color-dark-rgb: 34, 36, 40;--ion-color-dark-contrast: #ffffff;--ion-color-dark-contrast-rgb: 255, 255, 255;--ion-color-dark-shade: #1e2023;--ion-color-dark-tint: #383a3e;--ion-color-medium: #92949c;--ion-color-medium-rgb: 146, 148, 156;--ion-color-medium-contrast: #ffffff;--ion-color-medium-contrast-rgb: 255, 255, 255;--ion-color-medium-shade: #808289;--ion-color-medium-tint: #9d9fa6;--ion-color-light: #f4f5f8;--ion-color-light-rgb: 244, 245, 248;--ion-color-light-contrast: #000000;--ion-color-light-contrast-rgb: 0, 0, 0;--ion-color-light-shade: #d7d8da;--ion-color-light-tint: #f5f6f9}@media (prefers-color-scheme: dark){body{--ion-color-primary: #428cff;--ion-color-primary-rgb: 66,140,255;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255,255,255;--ion-color-primary-shade: #3a7be0;--ion-color-primary-tint: #5598ff;--ion-color-secondary: #50c8ff;--ion-color-secondary-rgb: 80,200,255;--ion-color-secondary-contrast: #ffffff;--ion-color-secondary-contrast-rgb: 255,255,255;--ion-color-secondary-shade: #46b0e0;--ion-color-secondary-tint: #62ceff;--ion-color-tertiary: #6a64ff;--ion-color-tertiary-rgb: 106,100,255;--ion-color-tertiary-contrast: #ffffff;--ion-color-tertiary-contrast-rgb: 255,255,255;--ion-color-tertiary-shade: #5d58e0;--ion-color-tertiary-tint: #7974ff;--ion-color-success: #2fdf75;--ion-color-success-rgb: 47,223,117;--ion-color-success-contrast: #000000;--ion-color-success-contrast-rgb: 0,0,0;--ion-color-success-shade: #29c467;--ion-color-success-tint: #44e283;--ion-color-warning: #ffd534;--ion-color-warning-rgb: 255,213,52;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0,0,0;--ion-color-warning-shade: #e0bb2e;--ion-color-warning-tint: #ffd948;--ion-color-danger: #ff4961;--ion-color-danger-rgb: 255,73,97;--ion-color-danger-contrast: #ffffff;--ion-color-danger-contrast-rgb: 255,255,255;--ion-color-danger-shade: #e04055;--ion-color-danger-tint: #ff5b71;--ion-color-dark: #f4f5f8;--ion-color-dark-rgb: 244,245,248;--ion-color-dark-contrast: #000000;--ion-color-dark-contrast-rgb: 0,0,0;--ion-color-dark-shade: #d7d8da;--ion-color-dark-tint: #f5f6f9;--ion-color-medium: #989aa2;--ion-color-medium-rgb: 152,154,162;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0,0,0;--ion-color-medium-shade: #86888f;--ion-color-medium-tint: #a2a4ab;--ion-color-light: #222428;--ion-color-light-rgb: 34,36,40;--ion-color-light-contrast: #ffffff;--ion-color-light-contrast-rgb: 255,255,255;--ion-color-light-shade: #1e2023;--ion-color-light-tint: #383a3e}.ios body{--ion-background-color: #0b2f89;--ion-background-color-rgb: 11, 47, 137;--ion-text-color: #ffffff;--ion-text-color-rgb: 255,255,255;--ion-color-step-50: #2d2f34;--ion-color-step-100: #383a3e;--ion-color-step-150: #434549;--ion-color-step-200: #4e5055;--ion-color-step-250: #595b5f;--ion-color-step-300: #64666a;--ion-color-step-350: #6f7175;--ion-color-step-400: #7a7c80;--ion-color-step-450: #85878b;--ion-color-step-500: #909296;--ion-color-step-550: #9b9da1;--ion-color-step-600: #a6a8ac;--ion-color-step-650: #b1b3b7;--ion-color-step-700: #bcbec2;--ion-color-step-750: #c7c9cc;--ion-color-step-800: #d2d4d7;--ion-color-step-850: #dddfe2;--ion-color-step-900: #e8eaed;--ion-color-step-950: #f3f5f8;--ion-item-background: #2c2e33;--ion-card-background: #383a3e}.ios ion-modal{--ion-background-color: var(--ion-color-step-100);--ion-toolbar-background: var(--ion-color-step-150);--ion-toolbar-border-color: var(--ion-color-step-250)}.md body{--ion-background-color: #0b2f89;--ion-background-color-rgb: 11, 47, 137;--ion-text-color: #ffffff;--ion-text-color-rgb: 255,255,255;--ion-border-color: #3e4045;--ion-color-step-50: #2d2f34;--ion-color-step-100: #383a3e;--ion-color-step-150: #434549;--ion-color-step-200: #4e5055;--ion-color-step-250: #595b5f;--ion-color-step-300: #64666a;--ion-color-step-350: #6f7175;--ion-color-step-400: #7a7c80;--ion-color-step-450: #85878b;--ion-color-step-500: #909296;--ion-color-step-550: #9b9da1;--ion-color-step-600: #a6a8ac;--ion-color-step-650: #b1b3b7;--ion-color-step-700: #bcbec2;--ion-color-step-750: #c7c9cc;--ion-color-step-800: #d2d4d7;--ion-color-step-850: #dddfe2;--ion-color-step-900: #e8eaed;--ion-color-step-950: #f3f5f8;--ion-item-background: #2c2e33;--ion-toolbar-background: #2d2f34;--ion-tab-bar-background: #2d2f34;--ion-card-background: #383a3e}}.background-page{background-color:#0093e9!important}.related-products :host ::ng-deep lib-card-productos1 h3{text-align:center!important}.related-products :host ::ng-deep lib-card-productos1 .surface-ground,.related-products :host ::ng-deep lib-card-productos1 .info-badges{text-align:center!important;justify-content:center!important}.related-products :host ::ng-deep lib-card-productos1 .mt-auto .flex{justify-content:center!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DetalleCarrito1Component, selector: "lib-detalle-carrito-1", inputs: ["product", "isLogin", "isPersonalizable", "DatosNegocio"], outputs: ["addToCart"] }, { kind: "component", type: CardProductos1Component, selector: "lib-card-productos1", inputs: ["product", "isLogin", "DatosNegocio", "detailRouteBase"], outputs: ["addToCart"] }] });
|
|
9563
9669
|
}
|
|
9564
9670
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DetalleProductoPageLib, decorators: [{
|
|
9565
9671
|
type: Component,
|
|
9566
9672
|
args: [{ selector: 'lib-product-detail-lib', standalone: true, imports: [CommonModule, DetalleCarrito1Component, CardProductos1Component], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div class=\"py-4 background-page mx-auto px-3\">\n <lib-detalle-carrito-1 [product]=\"product!\" [isLogin]=\"isLogin\"></lib-detalle-carrito-1>\n\n @if (products && products.length > 0) {\n <section class=\"mt-4 related-products\">\n <h3 class=\"text-white font-semibold mb-2\">Productos que te pueden gustar</h3>\n <swiper-container direction=\"horizontal\" navigation=\"true\" pagination=\"true\" pagination-clickable=\"true\" loop=\"true\" autoplay=\"true\"\n autoplay-delay=\"6000\" autoplay-disable-on-interaction=\"false\" speed=\"600\"\n [slidesPerView]=\"slidesPerViewBase\" [spaceBetween]=\"spaceBetweenBase\"\n [breakpoints]=\"breakpoints\"\n style=\"--swiper-navigation-color:#FFD600; --swiper-theme-color:#FFD600; --swiper-pagination-color:#FFD600; --swiper-pagination-bullet-inactive-color:#FFFFFF; --swiper-pagination-bullet-inactive-opacity:0.6; --swiper-pagination-bullet-size:8px; --swiper-pagination-bullet-horizontal-gap:6px;\">\n @for (p of products; track p.id) {\n <swiper-slide>\n <lib-card-productos1 [product]=\"p\" [isLogin]=\"isLogin\"></lib-card-productos1>\n </swiper-slide>\n }\n </swiper-container>\n </section>\n }\n</div>\n", styles: [":root{--button-colors: linear-gradient(50deg, rgba(2,0,36,1) 0%, rgba(6,68,160,1) 29%, rgba(0,212,255,1) 83%, rgba(7,44,144,1) 100%, rgba(9,9,121,1) 100%);--ion-color-primary: #3880ff;--ion-color-primary-rgb: 56, 128, 255;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #3171e0;--ion-color-primary-tint: #4c8dff;--ion-color-secondary: #3dc2ff;--ion-color-secondary-rgb: 61, 194, 255;--ion-color-secondary-contrast: #ffffff;--ion-color-secondary-contrast-rgb: 255, 255, 255;--ion-color-secondary-shade: #36abe0;--ion-color-secondary-tint: #50c8ff;--ion-color-tertiary: #5260ff;--ion-color-tertiary-rgb: 82, 96, 255;--ion-color-tertiary-contrast: #ffffff;--ion-color-tertiary-contrast-rgb: 255, 255, 255;--ion-color-tertiary-shade: #4854e0;--ion-color-tertiary-tint: #6370ff;--ion-color-success: #2dd36f;--ion-color-success-rgb: 45, 211, 111;--ion-color-success-contrast: #ffffff;--ion-color-success-contrast-rgb: 255, 255, 255;--ion-color-success-shade: #28ba62;--ion-color-success-tint: #42d77d;--ion-color-warning: #ffc409;--ion-color-warning-rgb: 255, 196, 9;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0ac08;--ion-color-warning-tint: #ffca22;--ion-color-danger: #eb445a;--ion-color-danger-rgb: 235, 68, 90;--ion-color-danger-contrast: #ffffff;--ion-color-danger-contrast-rgb: 255, 255, 255;--ion-color-danger-shade: #cf3c4f;--ion-color-danger-tint: #ed576b;--ion-color-dark: #222428;--ion-color-dark-rgb: 34, 36, 40;--ion-color-dark-contrast: #ffffff;--ion-color-dark-contrast-rgb: 255, 255, 255;--ion-color-dark-shade: #1e2023;--ion-color-dark-tint: #383a3e;--ion-color-medium: #92949c;--ion-color-medium-rgb: 146, 148, 156;--ion-color-medium-contrast: #ffffff;--ion-color-medium-contrast-rgb: 255, 255, 255;--ion-color-medium-shade: #808289;--ion-color-medium-tint: #9d9fa6;--ion-color-light: #f4f5f8;--ion-color-light-rgb: 244, 245, 248;--ion-color-light-contrast: #000000;--ion-color-light-contrast-rgb: 0, 0, 0;--ion-color-light-shade: #d7d8da;--ion-color-light-tint: #f5f6f9}@media (prefers-color-scheme: dark){body{--ion-color-primary: #428cff;--ion-color-primary-rgb: 66,140,255;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255,255,255;--ion-color-primary-shade: #3a7be0;--ion-color-primary-tint: #5598ff;--ion-color-secondary: #50c8ff;--ion-color-secondary-rgb: 80,200,255;--ion-color-secondary-contrast: #ffffff;--ion-color-secondary-contrast-rgb: 255,255,255;--ion-color-secondary-shade: #46b0e0;--ion-color-secondary-tint: #62ceff;--ion-color-tertiary: #6a64ff;--ion-color-tertiary-rgb: 106,100,255;--ion-color-tertiary-contrast: #ffffff;--ion-color-tertiary-contrast-rgb: 255,255,255;--ion-color-tertiary-shade: #5d58e0;--ion-color-tertiary-tint: #7974ff;--ion-color-success: #2fdf75;--ion-color-success-rgb: 47,223,117;--ion-color-success-contrast: #000000;--ion-color-success-contrast-rgb: 0,0,0;--ion-color-success-shade: #29c467;--ion-color-success-tint: #44e283;--ion-color-warning: #ffd534;--ion-color-warning-rgb: 255,213,52;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0,0,0;--ion-color-warning-shade: #e0bb2e;--ion-color-warning-tint: #ffd948;--ion-color-danger: #ff4961;--ion-color-danger-rgb: 255,73,97;--ion-color-danger-contrast: #ffffff;--ion-color-danger-contrast-rgb: 255,255,255;--ion-color-danger-shade: #e04055;--ion-color-danger-tint: #ff5b71;--ion-color-dark: #f4f5f8;--ion-color-dark-rgb: 244,245,248;--ion-color-dark-contrast: #000000;--ion-color-dark-contrast-rgb: 0,0,0;--ion-color-dark-shade: #d7d8da;--ion-color-dark-tint: #f5f6f9;--ion-color-medium: #989aa2;--ion-color-medium-rgb: 152,154,162;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0,0,0;--ion-color-medium-shade: #86888f;--ion-color-medium-tint: #a2a4ab;--ion-color-light: #222428;--ion-color-light-rgb: 34,36,40;--ion-color-light-contrast: #ffffff;--ion-color-light-contrast-rgb: 255,255,255;--ion-color-light-shade: #1e2023;--ion-color-light-tint: #383a3e}.ios body{--ion-background-color: #0b2f89;--ion-background-color-rgb: 11, 47, 137;--ion-text-color: #ffffff;--ion-text-color-rgb: 255,255,255;--ion-color-step-50: #2d2f34;--ion-color-step-100: #383a3e;--ion-color-step-150: #434549;--ion-color-step-200: #4e5055;--ion-color-step-250: #595b5f;--ion-color-step-300: #64666a;--ion-color-step-350: #6f7175;--ion-color-step-400: #7a7c80;--ion-color-step-450: #85878b;--ion-color-step-500: #909296;--ion-color-step-550: #9b9da1;--ion-color-step-600: #a6a8ac;--ion-color-step-650: #b1b3b7;--ion-color-step-700: #bcbec2;--ion-color-step-750: #c7c9cc;--ion-color-step-800: #d2d4d7;--ion-color-step-850: #dddfe2;--ion-color-step-900: #e8eaed;--ion-color-step-950: #f3f5f8;--ion-item-background: #2c2e33;--ion-card-background: #383a3e}.ios ion-modal{--ion-background-color: var(--ion-color-step-100);--ion-toolbar-background: var(--ion-color-step-150);--ion-toolbar-border-color: var(--ion-color-step-250)}.md body{--ion-background-color: #0b2f89;--ion-background-color-rgb: 11, 47, 137;--ion-text-color: #ffffff;--ion-text-color-rgb: 255,255,255;--ion-border-color: #3e4045;--ion-color-step-50: #2d2f34;--ion-color-step-100: #383a3e;--ion-color-step-150: #434549;--ion-color-step-200: #4e5055;--ion-color-step-250: #595b5f;--ion-color-step-300: #64666a;--ion-color-step-350: #6f7175;--ion-color-step-400: #7a7c80;--ion-color-step-450: #85878b;--ion-color-step-500: #909296;--ion-color-step-550: #9b9da1;--ion-color-step-600: #a6a8ac;--ion-color-step-650: #b1b3b7;--ion-color-step-700: #bcbec2;--ion-color-step-750: #c7c9cc;--ion-color-step-800: #d2d4d7;--ion-color-step-850: #dddfe2;--ion-color-step-900: #e8eaed;--ion-color-step-950: #f3f5f8;--ion-item-background: #2c2e33;--ion-toolbar-background: #2d2f34;--ion-tab-bar-background: #2d2f34;--ion-card-background: #383a3e}}.background-page{background-color:#0093e9!important}.related-products :host ::ng-deep lib-card-productos1 h3{text-align:center!important}.related-products :host ::ng-deep lib-card-productos1 .surface-ground,.related-products :host ::ng-deep lib-card-productos1 .info-badges{text-align:center!important;justify-content:center!important}.related-products :host ::ng-deep lib-card-productos1 .mt-auto .flex{justify-content:center!important}\n"] }]
|
|
9567
|
-
}], ctorParameters: () => [{ type: i1$8.ActivatedRoute }, { type: ProductService }, { type: MetaDataService }, { type: i4$
|
|
9673
|
+
}], ctorParameters: () => [{ type: i1$8.ActivatedRoute }, { type: ProductService }, { type: MetaDataService }, { type: i4$4.Store }], propDecorators: { product: [{
|
|
9568
9674
|
type: Input
|
|
9569
9675
|
}], isLogin: [{
|
|
9570
9676
|
type: Input
|
|
@@ -9572,6 +9678,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
9572
9678
|
type: Input
|
|
9573
9679
|
}] } });
|
|
9574
9680
|
|
|
9681
|
+
class BarFloatEcommerce1 {
|
|
9682
|
+
componente = {
|
|
9683
|
+
id: 33,
|
|
9684
|
+
nombreComponente: 'lib-bar-float-ecommerce1',
|
|
9685
|
+
version: '1.0',
|
|
9686
|
+
descripcion: 'Componente para mostrar una barra flotante en la página de ecommerce1'
|
|
9687
|
+
};
|
|
9688
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BarFloatEcommerce1, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9689
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: BarFloatEcommerce1, isStandalone: true, selector: "lib-bar-float-ecommerce1", ngImport: i0, template: "<section aria-label=\"Secci\u00F3n principal de la f\u00E1brica de inflables\" class=\"bar-hero animate-hero-section\" style=\"background-image: url('../../../../../assets/imagenes/bannerInflables.png');\">\n <div class=\"bar-hero-inner\">\n <div class=\"bar-hero-card\">\n <p class=\"hero-subtitle\">\u00A1Bienvenido a Zigma Inflables!</p>\n <h1 aria-label=\"T\u00EDtulo principal: F\u00E1brica de inflables\" class=\"hero-title\">F\u00E1brica de inflables</h1>\n <p-button label=\"Ver cat\u00E1logo\" class=\"p-button-warning hero-cta\"></p-button>\n </div>\n </div>\n</section>", styles: [".bar-hero{background-size:cover;background-position:center;min-height:500px;position:relative}.bar-hero-inner{display:flex;align-items:center;justify-content:center;height:100%;padding:4rem 1rem}.bar-hero-card{background:#ffffffe6;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);padding:2rem;border-radius:1rem;max-width:900px;text-align:center;box-shadow:0 10px 30px #00000014}.hero-subtitle{margin:0 0 .5rem;color:#6b7280;font-size:1rem}.hero-title{margin:0 0 1rem;font-size:2rem;font-weight:800;color:#111827}.hero-cta{border-radius:999px;padding:.75rem 1.25rem}@media (min-width: 768px){.hero-title{font-size:2.5rem}.bar-hero-inner{padding-top:6rem}}.animate-hero-section{opacity:0;transform:translateY(50px);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.animate-hero-section.is-visible{opacity:1;transform:translateY(0)}\n"], dependencies: [{ kind: "ngmodule", type: PrimegModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
9690
|
+
}
|
|
9691
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: BarFloatEcommerce1, decorators: [{
|
|
9692
|
+
type: Component,
|
|
9693
|
+
args: [{ selector: 'lib-bar-float-ecommerce1', imports: [PrimegModule], encapsulation: ViewEncapsulation.None, template: "<section aria-label=\"Secci\u00F3n principal de la f\u00E1brica de inflables\" class=\"bar-hero animate-hero-section\" style=\"background-image: url('../../../../../assets/imagenes/bannerInflables.png');\">\n <div class=\"bar-hero-inner\">\n <div class=\"bar-hero-card\">\n <p class=\"hero-subtitle\">\u00A1Bienvenido a Zigma Inflables!</p>\n <h1 aria-label=\"T\u00EDtulo principal: F\u00E1brica de inflables\" class=\"hero-title\">F\u00E1brica de inflables</h1>\n <p-button label=\"Ver cat\u00E1logo\" class=\"p-button-warning hero-cta\"></p-button>\n </div>\n </div>\n</section>", styles: [".bar-hero{background-size:cover;background-position:center;min-height:500px;position:relative}.bar-hero-inner{display:flex;align-items:center;justify-content:center;height:100%;padding:4rem 1rem}.bar-hero-card{background:#ffffffe6;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);padding:2rem;border-radius:1rem;max-width:900px;text-align:center;box-shadow:0 10px 30px #00000014}.hero-subtitle{margin:0 0 .5rem;color:#6b7280;font-size:1rem}.hero-title{margin:0 0 1rem;font-size:2rem;font-weight:800;color:#111827}.hero-cta{border-radius:999px;padding:.75rem 1.25rem}@media (min-width: 768px){.hero-title{font-size:2.5rem}.bar-hero-inner{padding-top:6rem}}.animate-hero-section{opacity:0;transform:translateY(50px);transition:opacity 1.5s ease-out,transform 1.5s ease-out}.animate-hero-section.is-visible{opacity:1;transform:translateY(0)}\n"] }]
|
|
9694
|
+
}] });
|
|
9695
|
+
|
|
9575
9696
|
class LibConfigModule {
|
|
9576
9697
|
static forRoot(config) {
|
|
9577
9698
|
return {
|
|
@@ -9839,13 +9960,9 @@ const ecomerce1Routes = [
|
|
|
9839
9960
|
}
|
|
9840
9961
|
];
|
|
9841
9962
|
|
|
9842
|
-
/*
|
|
9843
|
-
* Public API Surface of common-lib
|
|
9844
|
-
*/
|
|
9845
|
-
|
|
9846
9963
|
/**
|
|
9847
9964
|
* Generated bundle index. Do not edit.
|
|
9848
9965
|
*/
|
|
9849
9966
|
|
|
9850
|
-
export { AddUser, AppFooter, AppTopbar, BarFloatEcommerce1, BusinessActions, BusinessState, ButtonActionDelete1Component, ButtonActionEdit1Component, ButtonAdd1Component, ButtonAddToCard1, ButtonsSocialmediaLogin, CardProductos1Component, Carruselt1, CategoriaProductoState, CategoriaproductoActions, CategoriasProductosService, CommonLibComponent, CommonLibService, CoreModuleLib, Crud, CrudDialog1Component, CrudDocComponent, CustomizerComponent, DASHBOARD3_MENU_CONFIG, DaskBoard3, DeleteUser, DetalleCarrito1Component, DetalleProductoPageLib, DynamicEntity, DynamicFieldService, DynamicMenu1Component, DynamicMenuService, Ecommerce1, FooterEcommerce1, FormAuthEccomerce1, GenericCrudState, HeaderEcommerce1Component, HeaderTopEcommerce1, HeroSectionEcommerce1, HomeEcommerce1, Index1Component, Index2Component, InputsLoginEcommerce1, InputsRegisterEcommerce1, LIB_COMMON_CONFIG, LibConfigModule, LibConfigService, LoadingZigma, LoginEcommerce1, MenuComponent, MenuItem1Component, MenuManager, MetaDataService, MonedaActions, MonedaState, Notfound, PaginatorPgComponent, PrimegModule, ProductDialog1Component, ProductService, ProductosActions, ProductosState, RegisterEcommerce1, SectionAddCardsButtons, SectionFiltersCategoriesProductos, SectionImagesInstagramEcommerce1, SelectInput1Component, ShWatsButtonCard, Tabla1Component, Terminal, UpdateUser, createTranslateLoader, ecomerce1Routes, getUsers };
|
|
9967
|
+
export { AddUser, AppFooter, AppTopbar, BarFloatEcommerce1, BusinessActions, BusinessState, ButtonActionDelete1Component, ButtonActionEdit1Component, ButtonAdd1Component, ButtonAddToCard1, ButtonsSocialmediaLogin, CardProductos1Component, Carruselt1, CategoriaProductoState, CategoriaproductoActions, CategoriasProductosService, CommonLibComponent, CommonLibService, CoreModuleLib, Crud, CrudDialog1Component, CrudDocComponent, CustomizerComponent, DASHBOARD3_MENU_CONFIG, DaskBoard3, DeleteUser, DetalleCarrito1Component, DetalleProductoPageLib, DynamicEntity, DynamicFieldService, DynamicMenu1Component, DynamicMenuService, Ecommerce1, FooterEcommerce1, FormAuthEccomerce1, GenericCrudState, GoogleService, HeaderEcommerce1Component, HeaderTopEcommerce1, HeroSectionEcommerce1, HomeEcommerce1, Index1Component, Index2Component, InputsLoginEcommerce1, InputsRegisterEcommerce1, LIB_COMMON_CONFIG, LibConfigModule, LibConfigService, LoadingZigma, LoginEcommerce1, MenuComponent, MenuItem1Component, MenuManager, MetaDataService, MonedaActions, MonedaState, Notfound, PaginatorPgComponent, PrimegModule, ProductDialog1Component, ProductService, ProductosActions, ProductosState, RegisterEcommerce1, SectionAddCardsButtons, SectionFiltersCategoriesProductos, SectionImagesInstagramEcommerce1, SelectInput1Component, ShWatsButtonCard, Tabla1Component, Terminal, UpdateUser, createTranslateLoader, ecomerce1Routes, getUsers };
|
|
9851
9968
|
//# sourceMappingURL=lib-common-angular.mjs.map
|