@eric-emg/symphiq-components 1.2.131 → 1.2.133

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.
@@ -25750,7 +25750,7 @@ class ConfidenceLevelCardComponent {
25750
25750
  i0.ɵɵelement(28, "div", 21);
25751
25751
  i0.ɵɵelementEnd()()()();
25752
25752
  } if (rf & 2) {
25753
- i0.ɵɵclassProp("animate-fade-in-up", ctx.hasAnimated());
25753
+ i0.ɵɵclassProp("confidence-card-animate", ctx.hasAnimated());
25754
25754
  i0.ɵɵproperty("ngClass", ctx.cardContainerClasses());
25755
25755
  i0.ɵɵadvance();
25756
25756
  i0.ɵɵproperty("ngClass", ctx.backgroundOverlayClasses());
@@ -25793,83 +25793,83 @@ class ConfidenceLevelCardComponent {
25793
25793
  i0.ɵɵadvance();
25794
25794
  i0.ɵɵstyleProp("width", ctx.animatedPercentage(), "%");
25795
25795
  i0.ɵɵproperty("ngClass", ctx.progressGlowClasses());
25796
- } }, dependencies: [CommonModule, i1$1.NgClass], styles: ["@keyframes _ngcontent-%COMP%_fade-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes _ngcontent-%COMP%_pulse-glow{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}@keyframes _ngcontent-%COMP%_shimmer{0%{background-position:-200% center}to{background-position:200% center}}.animate-fade-in-up[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_fade-in-up .6s ease-out}.animate-pulse-glow[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse-glow 2s ease-in-out infinite}@media (prefers-reduced-motion: reduce){.animate-fade-in-up[_ngcontent-%COMP%], .animate-pulse-glow[_ngcontent-%COMP%]{animation:none}}"], changeDetection: 0 }); }
25796
+ } }, dependencies: [CommonModule, i1$1.NgClass], styles: ["@keyframes _ngcontent-%COMP%_confidence-fade-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes _ngcontent-%COMP%_pulse-glow{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}@keyframes _ngcontent-%COMP%_shimmer{0%{background-position:-200% center}to{background-position:200% center}}.confidence-card-animate[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_confidence-fade-in-up .6s ease-out forwards}.animate-pulse-glow[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse-glow 2s ease-in-out infinite}@media (prefers-reduced-motion: reduce){.confidence-card-animate[_ngcontent-%COMP%], .animate-pulse-glow[_ngcontent-%COMP%]{animation:none;opacity:1}}"], changeDetection: 0 }); }
25797
25797
  }
25798
25798
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConfidenceLevelCardComponent, [{
25799
25799
  type: Component,
25800
- args: [{ selector: 'symphiq-confidence-level-card', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
25801
- <div
25802
- [ngClass]="cardContainerClasses()"
25803
- class="rounded-2xl p-6 transition-all duration-500 hover:scale-[1.02] relative overflow-hidden group"
25804
- [class.animate-fade-in-up]="hasAnimated()">
25805
-
25806
- <!-- Animated background gradient overlay -->
25807
- <div [ngClass]="backgroundOverlayClasses()" class="absolute inset-0 opacity-30 transition-opacity duration-500 group-hover:opacity-50"></div>
25808
-
25809
- <!-- Content -->
25810
- <div class="relative z-10">
25811
- <!-- Header with Title and Grade Badge -->
25812
- <div class="flex items-start justify-between gap-4 mb-4">
25813
- <div class="flex-1 min-w-0">
25814
- <h3 [ngClass]="titleClasses()" class="text-lg font-bold mb-1">
25815
- Confidence Level
25816
- </h3>
25817
- <p [ngClass]="subtitleClasses()" class="text-xs font-medium">
25818
- {{ confidenceData().qualitativeStatus }} + {{ confidenceData().quantitativeStatus }}
25819
- </p>
25820
- </div>
25821
-
25822
- <!-- Grade Badge with Glow -->
25823
- <div
25824
- [ngClass]="gradeBadgeContainerClasses()"
25825
- class="relative flex-shrink-0 transition-all duration-300 hover:scale-110"
25826
- [class.animate-pulse-glow]="shouldPulse()">
25827
- <!-- Glow effect -->
25828
- <div [ngClass]="glowEffectClasses()" class="absolute inset-0 rounded-xl blur-xl opacity-60 transition-opacity duration-300 group-hover:opacity-80"></div>
25829
- <!-- Badge content -->
25830
- <div [ngClass]="gradeBadgeClasses()" class="relative px-5 py-3 rounded-xl text-center backdrop-blur-sm">
25831
- <div [ngClass]="gradeLabelClasses()" class="text-[10px] font-bold uppercase tracking-wider mb-0.5">Grade</div>
25832
- <div [ngClass]="gradeValueClasses()" class="text-3xl font-bold">{{ confidenceData().grade }}</div>
25833
- </div>
25834
- </div>
25835
- </div>
25836
-
25837
- <!-- Description -->
25838
- <p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed mb-4">
25839
- {{ confidenceData().description }}
25840
- </p>
25841
-
25842
- <!-- Progress Bar -->
25843
- <div class="space-y-2">
25844
- <div class="flex items-center justify-between">
25845
- <span [ngClass]="progressLabelClasses()" class="text-xs font-semibold">Context Completeness</span>
25846
- <span [ngClass]="progressValueClasses()" class="text-xs font-bold">{{ animatedPercentage() }}%</span>
25847
- </div>
25848
-
25849
- <!-- Progress Track -->
25850
- <div class="relative">
25851
- <!-- Background track -->
25852
- <div [ngClass]="progressTrackClasses()" class="h-3 rounded-full overflow-hidden relative">
25853
- <!-- Progress bar with shimmer -->
25854
- <div
25855
- [style.width.%]="animatedPercentage()"
25856
- [ngClass]="progressBarClasses()"
25857
- class="h-full transition-all duration-1000 ease-out relative">
25858
- <!-- Shimmer effect -->
25859
- <div [ngClass]="shimmerClasses()" class="absolute inset-0 opacity-30"></div>
25860
- </div>
25861
- </div>
25862
- <!-- Glow underneath -->
25863
- <div
25864
- [style.width.%]="animatedPercentage()"
25865
- [ngClass]="progressGlowClasses()"
25866
- class="absolute top-0 left-0 h-3 rounded-full blur-md opacity-40 transition-all duration-1000 ease-out -z-10">
25867
- </div>
25868
- </div>
25869
- </div>
25870
- </div>
25871
- </div>
25872
- `, styles: ["@keyframes fade-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse-glow{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}@keyframes shimmer{0%{background-position:-200% center}to{background-position:200% center}}.animate-fade-in-up{animation:fade-in-up .6s ease-out}.animate-pulse-glow{animation:pulse-glow 2s ease-in-out infinite}@media (prefers-reduced-motion: reduce){.animate-fade-in-up,.animate-pulse-glow{animation:none}}\n"] }]
25800
+ args: [{ selector: 'symphiq-confidence-level-card', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
25801
+ <div
25802
+ [ngClass]="cardContainerClasses()"
25803
+ class="rounded-2xl p-6 transition-all duration-500 hover:scale-[1.02] relative overflow-hidden group"
25804
+ [class.confidence-card-animate]="hasAnimated()">
25805
+
25806
+ <!-- Animated background gradient overlay -->
25807
+ <div [ngClass]="backgroundOverlayClasses()" class="absolute inset-0 opacity-30 transition-opacity duration-500 group-hover:opacity-50"></div>
25808
+
25809
+ <!-- Content -->
25810
+ <div class="relative z-10">
25811
+ <!-- Header with Title and Grade Badge -->
25812
+ <div class="flex items-start justify-between gap-4 mb-4">
25813
+ <div class="flex-1 min-w-0">
25814
+ <h3 [ngClass]="titleClasses()" class="text-lg font-bold mb-1">
25815
+ Confidence Level
25816
+ </h3>
25817
+ <p [ngClass]="subtitleClasses()" class="text-xs font-medium">
25818
+ {{ confidenceData().qualitativeStatus }} + {{ confidenceData().quantitativeStatus }}
25819
+ </p>
25820
+ </div>
25821
+
25822
+ <!-- Grade Badge with Glow -->
25823
+ <div
25824
+ [ngClass]="gradeBadgeContainerClasses()"
25825
+ class="relative flex-shrink-0 transition-all duration-300 hover:scale-110"
25826
+ [class.animate-pulse-glow]="shouldPulse()">
25827
+ <!-- Glow effect -->
25828
+ <div [ngClass]="glowEffectClasses()" class="absolute inset-0 rounded-xl blur-xl opacity-60 transition-opacity duration-300 group-hover:opacity-80"></div>
25829
+ <!-- Badge content -->
25830
+ <div [ngClass]="gradeBadgeClasses()" class="relative px-5 py-3 rounded-xl text-center backdrop-blur-sm">
25831
+ <div [ngClass]="gradeLabelClasses()" class="text-[10px] font-bold uppercase tracking-wider mb-0.5">Grade</div>
25832
+ <div [ngClass]="gradeValueClasses()" class="text-3xl font-bold">{{ confidenceData().grade }}</div>
25833
+ </div>
25834
+ </div>
25835
+ </div>
25836
+
25837
+ <!-- Description -->
25838
+ <p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed mb-4">
25839
+ {{ confidenceData().description }}
25840
+ </p>
25841
+
25842
+ <!-- Progress Bar -->
25843
+ <div class="space-y-2">
25844
+ <div class="flex items-center justify-between">
25845
+ <span [ngClass]="progressLabelClasses()" class="text-xs font-semibold">Context Completeness</span>
25846
+ <span [ngClass]="progressValueClasses()" class="text-xs font-bold">{{ animatedPercentage() }}%</span>
25847
+ </div>
25848
+
25849
+ <!-- Progress Track -->
25850
+ <div class="relative">
25851
+ <!-- Background track -->
25852
+ <div [ngClass]="progressTrackClasses()" class="h-3 rounded-full overflow-hidden relative">
25853
+ <!-- Progress bar with shimmer -->
25854
+ <div
25855
+ [style.width.%]="animatedPercentage()"
25856
+ [ngClass]="progressBarClasses()"
25857
+ class="h-full transition-all duration-1000 ease-out relative">
25858
+ <!-- Shimmer effect -->
25859
+ <div [ngClass]="shimmerClasses()" class="absolute inset-0 opacity-30"></div>
25860
+ </div>
25861
+ </div>
25862
+ <!-- Glow underneath -->
25863
+ <div
25864
+ [style.width.%]="animatedPercentage()"
25865
+ [ngClass]="progressGlowClasses()"
25866
+ class="absolute top-0 left-0 h-3 rounded-full blur-md opacity-40 transition-all duration-1000 ease-out -z-10">
25867
+ </div>
25868
+ </div>
25869
+ </div>
25870
+ </div>
25871
+ </div>
25872
+ `, styles: ["@keyframes confidence-fade-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse-glow{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}@keyframes shimmer{0%{background-position:-200% center}to{background-position:200% center}}.confidence-card-animate{animation:confidence-fade-in-up .6s ease-out forwards}.animate-pulse-glow{animation:pulse-glow 2s ease-in-out infinite}@media (prefers-reduced-motion: reduce){.confidence-card-animate,.animate-pulse-glow{animation:none;opacity:1}}\n"] }]
25873
25873
  }], null, { viewMode: [{
25874
25874
  type: Input
25875
25875
  }], currentStepId: [{
@@ -25881,7 +25881,7 @@ class ConfidenceLevelCardComponent {
25881
25881
  }], currentMetric: [{
25882
25882
  type: Input
25883
25883
  }] }); })();
25884
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConfidenceLevelCardComponent, { className: "ConfidenceLevelCardComponent", filePath: "lib/components/shared/confidence-level-card.component.ts", lineNumber: 139 }); })();
25884
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConfidenceLevelCardComponent, { className: "ConfidenceLevelCardComponent", filePath: "lib/components/shared/confidence-level-card.component.ts", lineNumber: 140 }); })();
25885
25885
 
25886
25886
  function FunnelWelcomeBannerComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
25887
25887
  i0.ɵɵtext(0, " Your Funnel Analysis ");
@@ -36062,13 +36062,14 @@ class ViewportAnimationDirective {
36062
36062
  this.once = true;
36063
36063
  this.hasAnimated = false;
36064
36064
  this.isFirstObservation = true;
36065
- this.shouldSkipAnimation = false;
36066
36065
  }
36067
36066
  ngOnInit() {
36068
36067
  if (typeof window === 'undefined') {
36069
36068
  return;
36070
36069
  }
36071
- // Don't hide elements initially - let IntersectionObserver determine visibility
36070
+ // Set initial hidden state immediately before observer fires
36071
+ // This prevents the flash of visible content before fade-out in embedded contexts
36072
+ this.setupInitialState();
36072
36073
  this.setupObserver();
36073
36074
  }
36074
36075
  ngOnDestroy() {
@@ -36107,24 +36108,23 @@ class ViewportAnimationDirective {
36107
36108
  setupObserver() {
36108
36109
  this.observer = new IntersectionObserver((entries) => {
36109
36110
  entries.forEach((entry) => {
36110
- // First observation - determine if element is initially visible
36111
+ // First observation - if already visible, animate in immediately
36111
36112
  if (this.isFirstObservation) {
36112
36113
  this.isFirstObservation = false;
36113
36114
  if (entry.isIntersecting) {
36114
- // Element is initially visible - skip animation entirely
36115
- this.shouldSkipAnimation = true;
36116
- this.hasAnimated = true;
36117
- return; // Leave element visible as-is
36118
- }
36119
- else {
36120
- // Element is initially hidden (below fold) - set up for animation
36121
- this.setupInitialState();
36122
- return; // Don't animate yet, wait for scroll
36115
+ // Element is initially visible - animate in now
36116
+ this.animateIn();
36117
+ if (this.once) {
36118
+ this.hasAnimated = true;
36119
+ }
36120
+ return;
36123
36121
  }
36122
+ // Element not visible yet - wait for scroll
36123
+ return;
36124
36124
  }
36125
36125
  // Subsequent observations - normal animation logic
36126
36126
  if (entry.isIntersecting) {
36127
- if (!this.shouldSkipAnimation && (!this.hasAnimated || !this.once)) {
36127
+ if (!this.hasAnimated || !this.once) {
36128
36128
  this.animateIn();
36129
36129
  if (this.once) {
36130
36130
  this.hasAnimated = true;