@eric-emg/symphiq-components 1.2.161 → 1.2.162

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.
@@ -7,6 +7,7 @@ import { map, catchError, shareReplay, debounceTime, switchMap } from 'rxjs/oper
7
7
  import * as i1 from '@angular/common/http';
8
8
  import * as i2 from '@angular/platform-browser';
9
9
  import { DomSanitizer } from '@angular/platform-browser';
10
+ import confetti from 'canvas-confetti';
10
11
  import * as i1$1 from '@angular/common';
11
12
  import { NgClass, CommonModule, isPlatformBrowser, DOCUMENT } from '@angular/common';
12
13
  import * as i2$1 from '@angular/forms';
@@ -2436,6 +2437,103 @@ class CrossDashboardRelationshipsService {
2436
2437
  }]
2437
2438
  }], null, null); })();
2438
2439
 
2440
+ class ConfettiService {
2441
+ constructor() {
2442
+ this.lightModeColors = [
2443
+ '#3b82f6',
2444
+ '#06b6d4',
2445
+ '#a855f7',
2446
+ '#60a5fa',
2447
+ '#22d3ee'
2448
+ ];
2449
+ this.darkModeColors = [
2450
+ '#60a5fa',
2451
+ '#22d3ee',
2452
+ '#c084fc',
2453
+ '#93c5fd',
2454
+ '#67e8f9'
2455
+ ];
2456
+ }
2457
+ getColors(customColors) {
2458
+ if (customColors && customColors.length > 0) {
2459
+ return customColors;
2460
+ }
2461
+ const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
2462
+ return isDarkMode ? this.darkModeColors : this.lightModeColors;
2463
+ }
2464
+ getIntensityConfig(intensity) {
2465
+ switch (intensity) {
2466
+ case 'subtle':
2467
+ return {
2468
+ bursts: 2,
2469
+ particleCount: 30,
2470
+ spread: 45,
2471
+ startVelocity: 20,
2472
+ scalar: 0.7
2473
+ };
2474
+ case 'celebration':
2475
+ return {
2476
+ bursts: 4,
2477
+ particleCount: 100,
2478
+ spread: 80,
2479
+ startVelocity: 35,
2480
+ scalar: 1.2
2481
+ };
2482
+ case 'normal':
2483
+ default:
2484
+ return {
2485
+ bursts: 3,
2486
+ particleCount: 60,
2487
+ spread: 60,
2488
+ startVelocity: 25,
2489
+ scalar: 1.0
2490
+ };
2491
+ }
2492
+ }
2493
+ trigger(config = {}) {
2494
+ const { intensity = 'normal', colors: customColors, delay = 200 } = config;
2495
+ const intensityConfig = this.getIntensityConfig(intensity);
2496
+ const colors = this.getColors(customColors);
2497
+ setTimeout(() => {
2498
+ this.fireConfetti(intensityConfig, colors);
2499
+ }, delay);
2500
+ }
2501
+ fireConfetti(config, colors) {
2502
+ const { bursts, particleCount, spread, startVelocity, scalar } = config;
2503
+ let burstCount = 0;
2504
+ const burstInterval = setInterval(() => {
2505
+ if (burstCount >= bursts) {
2506
+ clearInterval(burstInterval);
2507
+ return;
2508
+ }
2509
+ const x = 0.5;
2510
+ const y = 0.5;
2511
+ confetti({
2512
+ particleCount,
2513
+ spread,
2514
+ startVelocity,
2515
+ origin: { x, y },
2516
+ colors,
2517
+ scalar,
2518
+ gravity: 1.2,
2519
+ decay: 0.94,
2520
+ ticks: 200,
2521
+ shapes: ['circle', 'square'],
2522
+ zIndex: 100
2523
+ });
2524
+ burstCount++;
2525
+ }, 150);
2526
+ }
2527
+ static { this.ɵfac = function ConfettiService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ConfettiService)(); }; }
2528
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ConfettiService, factory: ConfettiService.ɵfac, providedIn: 'root' }); }
2529
+ }
2530
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConfettiService, [{
2531
+ type: Injectable,
2532
+ args: [{
2533
+ providedIn: 'root'
2534
+ }]
2535
+ }], null, null); })();
2536
+
2439
2537
  const _c0$13 = a0 => ["skeleton-loader", "rounded-lg", "relative", "overflow-hidden", a0];
2440
2538
  const _c1$C = a0 => ["skeleton-shimmer-overlay", "absolute", "inset-0", "bg-gradient-to-r", a0];
2441
2539
  class SkeletonLoaderComponent {
@@ -57836,13 +57934,12 @@ class CollapsibleSectionGroupComponent {
57836
57934
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollapsibleSectionGroupComponent, { className: "CollapsibleSectionGroupComponent", filePath: "lib/components/business-analysis-dashboard/collapsible-section-group.component.ts", lineNumber: 100 }); })();
57837
57935
 
57838
57936
  function ContentGenerationProgressComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
57839
- i0.ɵɵelementStart(0, "div", 20)(1, "div", 21);
57840
- i0.ɵɵelement(2, "div", 22)(3, "div", 23)(4, "div", 24)(5, "div", 25)(6, "div", 26);
57841
- i0.ɵɵelementEnd()();
57937
+ i0.ɵɵelementStart(0, "div", 17);
57938
+ i0.ɵɵelement(1, "div", 20)(2, "div", 21)(3, "div", 22)(4, "div", 23)(5, "div", 24);
57939
+ i0.ɵɵelementEnd();
57842
57940
  } if (rf & 2) {
57843
57941
  const ctx_r0 = i0.ɵɵnextContext();
57844
- i0.ɵɵstyleProp("clip-path", "inset(0 0 0 " + ctx_r0.progressPercentage() + "%)");
57845
- i0.ɵɵadvance(2);
57942
+ i0.ɵɵadvance();
57846
57943
  i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
57847
57944
  i0.ɵɵproperty("ngClass", ctx_r0.dotClasses());
57848
57945
  i0.ɵɵadvance();
@@ -57859,7 +57956,7 @@ function ContentGenerationProgressComponent_Conditional_20_Template(rf, ctx) { i
57859
57956
  i0.ɵɵproperty("ngClass", ctx_r0.dotClasses());
57860
57957
  } }
57861
57958
  function ContentGenerationProgressComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
57862
- i0.ɵɵelement(0, "div", 27);
57959
+ i0.ɵɵelement(0, "div", 25);
57863
57960
  } if (rf & 2) {
57864
57961
  const ctx_r0 = i0.ɵɵnextContext();
57865
57962
  i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
@@ -57941,7 +58038,7 @@ class ContentGenerationProgressComponent {
57941
58038
  }, ...(ngDevMode ? [{ debugName: "percentageClasses" }] : []));
57942
58039
  }
57943
58040
  static { this.ɵfac = function ContentGenerationProgressComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ContentGenerationProgressComponent)(); }; }
57944
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContentGenerationProgressComponent, selectors: [["symphiq-content-generation-progress"]], inputs: { itemStatus: [1, "itemStatus"], title: [1, "title"], subtitle: [1, "subtitle"], viewMode: [1, "viewMode"], showIcon: [1, "showIcon"] }, decls: 25, vars: 17, consts: [[1, "min-h-[60vh]", "flex", "items-center", "justify-center", "px-4", "py-12", 3, "ngClass"], [1, "max-w-3xl", "w-full", "space-y-8"], [1, "text-center", "space-y-3"], [1, "flex", "items-center", "justify-center", "mb-4"], [1, "relative", "w-20", "h-20", "rounded-2xl", "flex", "items-center", "justify-center", "icon-pulse", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-10", "h-10"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 10V3L4 14h7v7l9-11h-7z"], [1, "absolute", "inset-0", "rounded-2xl", "icon-glow"], [1, "text-3xl", "sm:text-4xl", "font-bold", 3, "ngClass"], [1, "text-base", "sm:text-lg", "max-w-2xl", "mx-auto", 3, "ngClass"], [1, "space-y-4"], [1, "text-center"], [1, "text-lg", "sm:text-xl", "font-medium", "message-fade", 3, "ngClass"], [1, "relative", "h-3", "rounded-full", "overflow-visible", 3, "ngClass"], [1, "absolute", "inset-0", "rounded-full", 3, "ngClass"], [1, "absolute", "inset-y-0", "left-0", "rounded-full", "transition-all", "duration-700", "ease-out", "overflow-hidden", 3, "ngClass"], [1, "absolute", "inset-0", "shimmer-effect"], [1, "absolute", "inset-0", "overflow-hidden", "rounded-full", 3, "clip-path"], [1, "absolute", "top-1/2", "-translate-y-1/2", "w-4", "h-4", "rounded-full", "blur-md", "transition-all", "duration-700", "ease-out", 2, "margin-left", "-8px", 3, "ngClass", "left"], [1, "text-sm", "font-medium", "tabular-nums", 3, "ngClass"], [1, "absolute", "inset-0", "overflow-hidden", "rounded-full"], [1, "dots-container", "h-full"], [1, "dot", "dot-1", 3, "ngClass"], [1, "dot", "dot-2", 3, "ngClass"], [1, "dot", "dot-3", 3, "ngClass"], [1, "dot", "dot-4", 3, "ngClass"], [1, "dot", "dot-5", 3, "ngClass"], [1, "absolute", "top-1/2", "-translate-y-1/2", "w-4", "h-4", "rounded-full", "blur-md", "transition-all", "duration-700", "ease-out", 2, "margin-left", "-8px", 3, "ngClass"]], template: function ContentGenerationProgressComponent_Template(rf, ctx) { if (rf & 1) {
58041
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContentGenerationProgressComponent, selectors: [["symphiq-content-generation-progress"]], inputs: { itemStatus: [1, "itemStatus"], title: [1, "title"], subtitle: [1, "subtitle"], viewMode: [1, "viewMode"], showIcon: [1, "showIcon"] }, decls: 25, vars: 17, consts: [[1, "min-h-[60vh]", "flex", "items-center", "justify-center", "px-4", "py-12", 3, "ngClass"], [1, "max-w-3xl", "w-full", "space-y-8"], [1, "text-center", "space-y-3"], [1, "flex", "items-center", "justify-center", "mb-4"], [1, "relative", "w-20", "h-20", "rounded-2xl", "flex", "items-center", "justify-center", "icon-pulse", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-10", "h-10"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 10V3L4 14h7v7l9-11h-7z"], [1, "absolute", "inset-0", "rounded-2xl", "icon-glow"], [1, "text-3xl", "sm:text-4xl", "font-bold", 3, "ngClass"], [1, "text-base", "sm:text-lg", "max-w-2xl", "mx-auto", 3, "ngClass"], [1, "space-y-4"], [1, "text-center"], [1, "text-lg", "sm:text-xl", "font-medium", "message-fade", 3, "ngClass"], [1, "relative", "h-3", "rounded-full", "overflow-visible", 3, "ngClass"], [1, "absolute", "inset-0", "rounded-full", 3, "ngClass"], [1, "absolute", "inset-y-0", "left-0", "rounded-full", "transition-all", "duration-700", "ease-out", "overflow-hidden", 3, "ngClass"], [1, "absolute", "inset-0", "shimmer-effect"], [1, "absolute", "inset-0", "overflow-visible", "pointer-events-none"], [1, "absolute", "top-1/2", "-translate-y-1/2", "w-4", "h-4", "rounded-full", "blur-md", "transition-all", "duration-700", "ease-out", 2, "margin-left", "-8px", 3, "ngClass", "left"], [1, "text-sm", "font-medium", "tabular-nums", 3, "ngClass"], [1, "dot", "dot-1", 3, "ngClass"], [1, "dot", "dot-2", 3, "ngClass"], [1, "dot", "dot-3", 3, "ngClass"], [1, "dot", "dot-4", 3, "ngClass"], [1, "dot", "dot-5", 3, "ngClass"], [1, "absolute", "top-1/2", "-translate-y-1/2", "w-4", "h-4", "rounded-full", "blur-md", "transition-all", "duration-700", "ease-out", 2, "margin-left", "-8px", 3, "ngClass"]], template: function ContentGenerationProgressComponent_Template(rf, ctx) { if (rf & 1) {
57945
58042
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4);
57946
58043
  i0.ɵɵnamespaceSVG();
57947
58044
  i0.ɵɵelementStart(5, "svg", 5);
@@ -57964,7 +58061,7 @@ class ContentGenerationProgressComponent {
57964
58061
  i0.ɵɵelementStart(18, "div", 15);
57965
58062
  i0.ɵɵelement(19, "div", 16);
57966
58063
  i0.ɵɵelementEnd();
57967
- i0.ɵɵconditionalCreate(20, ContentGenerationProgressComponent_Conditional_20_Template, 7, 17, "div", 17);
58064
+ i0.ɵɵconditionalCreate(20, ContentGenerationProgressComponent_Conditional_20_Template, 6, 15, "div", 17);
57968
58065
  i0.ɵɵconditionalCreate(21, ContentGenerationProgressComponent_Conditional_21_Template, 1, 3, "div", 18);
57969
58066
  i0.ɵɵelementEnd();
57970
58067
  i0.ɵɵelementStart(22, "div", 11)(23, "span", 19);
@@ -58001,7 +58098,7 @@ class ContentGenerationProgressComponent {
58001
58098
  i0.ɵɵproperty("ngClass", ctx.percentageClasses());
58002
58099
  i0.ɵɵadvance();
58003
58100
  i0.ɵɵtextInterpolate1(" ", ctx.progressPercentage(), "% complete ");
58004
- } }, dependencies: [CommonModule, i1$1.NgClass], styles: ["@keyframes _ngcontent-%COMP%_icon-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.9}}@keyframes _ngcontent-%COMP%_icon-glow-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.6;transform:scale(1.2)}}@keyframes _ngcontent-%COMP%_shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes _ngcontent-%COMP%_dots-move{0%{transform:translate(0);opacity:0}10%{opacity:1}90%{opacity:1}to{transform:translate(200px);opacity:0}}@keyframes _ngcontent-%COMP%_message-fade{0%,to{opacity:1}50%{opacity:.7}}.icon-pulse[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_icon-pulse 2s ease-in-out infinite}.icon-glow[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_icon-glow-pulse 2s ease-in-out infinite}.shimmer-effect[_ngcontent-%COMP%]{background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.3) 50%,transparent 100%);animation:_ngcontent-%COMP%_shimmer 2s ease-in-out infinite}.message-fade[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_message-fade 3s ease-in-out infinite}.dots-container[_ngcontent-%COMP%]{position:relative;width:100%}.dot[_ngcontent-%COMP%]{position:absolute;top:50%;width:8px;height:8px;border-radius:50%;margin-top:-4px;animation:_ngcontent-%COMP%_dots-move 2.5s ease-out infinite}.dot-1[_ngcontent-%COMP%]{animation-delay:0s}.dot-2[_ngcontent-%COMP%]{animation-delay:.6s}.dot-3[_ngcontent-%COMP%]{animation-delay:1.2s}.dot-4[_ngcontent-%COMP%]{animation-delay:1.8s}.dot-5[_ngcontent-%COMP%]{animation-delay:2.4s}@media (prefers-reduced-motion: reduce){.icon-pulse[_ngcontent-%COMP%], .icon-glow[_ngcontent-%COMP%], .shimmer-effect[_ngcontent-%COMP%], .message-fade[_ngcontent-%COMP%], .dot[_ngcontent-%COMP%]{animation:none}}"], changeDetection: 0 }); }
58101
+ } }, dependencies: [CommonModule, i1$1.NgClass], styles: ["@keyframes _ngcontent-%COMP%_icon-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.9}}@keyframes _ngcontent-%COMP%_icon-glow-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.6;transform:scale(1.2)}}@keyframes _ngcontent-%COMP%_shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes _ngcontent-%COMP%_dots-move{0%{transform:translate(0) scale(.8);opacity:0}10%{opacity:1;transform:translate(10px) scale(1)}25%{transform:translate(30px) scale(1.2)}40%{transform:translate(50px) scale(1)}55%{transform:translate(70px) scale(1.2)}70%{transform:translate(90px) scale(1)}85%{transform:translate(110px) scale(1.2);opacity:1}to{transform:translate(130px) scale(.8);opacity:0}}@keyframes _ngcontent-%COMP%_message-fade{0%,to{opacity:1}50%{opacity:.7}}.icon-pulse[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_icon-pulse 2s ease-in-out infinite}.icon-glow[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_icon-glow-pulse 2s ease-in-out infinite}.shimmer-effect[_ngcontent-%COMP%]{background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.3) 50%,transparent 100%);animation:_ngcontent-%COMP%_shimmer 2s ease-in-out infinite}.message-fade[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_message-fade 3s ease-in-out infinite}.dot[_ngcontent-%COMP%]{position:absolute;top:50%;width:6px;height:6px;border-radius:50%;margin-top:-3px;margin-left:-3px;animation:_ngcontent-%COMP%_dots-move 3s ease-in-out infinite}.dot-1[_ngcontent-%COMP%]{animation-delay:0s}.dot-2[_ngcontent-%COMP%]{animation-delay:.5s}.dot-3[_ngcontent-%COMP%]{animation-delay:1s}.dot-4[_ngcontent-%COMP%]{animation-delay:1.5s}.dot-5[_ngcontent-%COMP%]{animation-delay:2s}@media (prefers-reduced-motion: reduce){.icon-pulse[_ngcontent-%COMP%], .icon-glow[_ngcontent-%COMP%], .shimmer-effect[_ngcontent-%COMP%], .message-fade[_ngcontent-%COMP%], .dot[_ngcontent-%COMP%]{animation:none}}"], changeDetection: 0 }); }
58005
58102
  }
58006
58103
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContentGenerationProgressComponent, [{
58007
58104
  type: Component,
@@ -58051,16 +58148,14 @@ class ContentGenerationProgressComponent {
58051
58148
  <div class="absolute inset-0 shimmer-effect"></div>
58052
58149
  </div>
58053
58150
 
58054
- <!-- Animated Dots Overlay (shows beyond the solid bar) -->
58151
+ <!-- Animated Dots Overlay (emerges from the solid bar edge) -->
58055
58152
  @if (progressPercentage() > 0 && progressPercentage() < 100) {
58056
- <div class="absolute inset-0 overflow-hidden rounded-full" [style.clip-path]="'inset(0 0 0 ' + progressPercentage() + '%)'">
58057
- <div class="dots-container h-full">
58058
- <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-1"></div>
58059
- <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-2"></div>
58060
- <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-3"></div>
58061
- <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-4"></div>
58062
- <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-5"></div>
58063
- </div>
58153
+ <div class="absolute inset-0 overflow-visible pointer-events-none">
58154
+ <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-1"></div>
58155
+ <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-2"></div>
58156
+ <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-3"></div>
58157
+ <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-4"></div>
58158
+ <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-5"></div>
58064
58159
  </div>
58065
58160
  }
58066
58161
 
@@ -58084,9 +58179,72 @@ class ContentGenerationProgressComponent {
58084
58179
  </div>
58085
58180
  </div>
58086
58181
  </div>
58087
- `, styles: ["@keyframes icon-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.9}}@keyframes icon-glow-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.6;transform:scale(1.2)}}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes dots-move{0%{transform:translate(0);opacity:0}10%{opacity:1}90%{opacity:1}to{transform:translate(200px);opacity:0}}@keyframes message-fade{0%,to{opacity:1}50%{opacity:.7}}.icon-pulse{animation:icon-pulse 2s ease-in-out infinite}.icon-glow{animation:icon-glow-pulse 2s ease-in-out infinite}.shimmer-effect{background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.3) 50%,transparent 100%);animation:shimmer 2s ease-in-out infinite}.message-fade{animation:message-fade 3s ease-in-out infinite}.dots-container{position:relative;width:100%}.dot{position:absolute;top:50%;width:8px;height:8px;border-radius:50%;margin-top:-4px;animation:dots-move 2.5s ease-out infinite}.dot-1{animation-delay:0s}.dot-2{animation-delay:.6s}.dot-3{animation-delay:1.2s}.dot-4{animation-delay:1.8s}.dot-5{animation-delay:2.4s}@media (prefers-reduced-motion: reduce){.icon-pulse,.icon-glow,.shimmer-effect,.message-fade,.dot{animation:none}}\n"] }]
58182
+ `, styles: ["@keyframes icon-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.9}}@keyframes icon-glow-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.6;transform:scale(1.2)}}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes dots-move{0%{transform:translate(0) scale(.8);opacity:0}10%{opacity:1;transform:translate(10px) scale(1)}25%{transform:translate(30px) scale(1.2)}40%{transform:translate(50px) scale(1)}55%{transform:translate(70px) scale(1.2)}70%{transform:translate(90px) scale(1)}85%{transform:translate(110px) scale(1.2);opacity:1}to{transform:translate(130px) scale(.8);opacity:0}}@keyframes message-fade{0%,to{opacity:1}50%{opacity:.7}}.icon-pulse{animation:icon-pulse 2s ease-in-out infinite}.icon-glow{animation:icon-glow-pulse 2s ease-in-out infinite}.shimmer-effect{background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.3) 50%,transparent 100%);animation:shimmer 2s ease-in-out infinite}.message-fade{animation:message-fade 3s ease-in-out infinite}.dot{position:absolute;top:50%;width:6px;height:6px;border-radius:50%;margin-top:-3px;margin-left:-3px;animation:dots-move 3s ease-in-out infinite}.dot-1{animation-delay:0s}.dot-2{animation-delay:.5s}.dot-3{animation-delay:1s}.dot-4{animation-delay:1.5s}.dot-5{animation-delay:2s}@media (prefers-reduced-motion: reduce){.icon-pulse,.icon-glow,.shimmer-effect,.message-fade,.dot{animation:none}}\n"] }]
58088
58183
  }], null, { itemStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemStatus", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }] }); })();
58089
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ContentGenerationProgressComponent, { className: "ContentGenerationProgressComponent", filePath: "lib/components/shared/content-generation-progress.component.ts", lineNumber: 216 }); })();
58184
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ContentGenerationProgressComponent, { className: "ContentGenerationProgressComponent", filePath: "lib/components/shared/content-generation-progress.component.ts", lineNumber: 224 }); })();
58185
+
58186
+ class ContentGenerationProgressWithConfettiComponent {
58187
+ constructor() {
58188
+ this.itemStatus = input(...(ngDevMode ? [undefined, { debugName: "itemStatus" }] : []));
58189
+ this.title = input('Generating Your Analysis', ...(ngDevMode ? [{ debugName: "title" }] : []));
58190
+ this.subtitle = input('This will appear when ready. You can check back later as this will take a few minutes to complete.', ...(ngDevMode ? [{ debugName: "subtitle" }] : []));
58191
+ this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
58192
+ this.showIcon = input(true, ...(ngDevMode ? [{ debugName: "showIcon" }] : []));
58193
+ this.profile = input(...(ngDevMode ? [undefined, { debugName: "profile" }] : []));
58194
+ this.confettiIntensity = input('normal', ...(ngDevMode ? [{ debugName: "confettiIntensity" }] : []));
58195
+ this.enableConfetti = input(true, ...(ngDevMode ? [{ debugName: "enableConfetti" }] : []));
58196
+ this.confettiDelay = input(200, ...(ngDevMode ? [{ debugName: "confettiDelay" }] : []));
58197
+ this.confettiService = inject(ConfettiService);
58198
+ this.hasCelebrated = signal(false, ...(ngDevMode ? [{ debugName: "hasCelebrated" }] : []));
58199
+ effect(() => {
58200
+ const currentProfile = this.profile();
58201
+ const currentStatus = currentProfile?.selfContentStatus;
58202
+ if (!this.enableConfetti()) {
58203
+ return;
58204
+ }
58205
+ if (currentStatus === AiDynamicContentStatusEnum.GENERATED && !this.hasCelebrated()) {
58206
+ untracked(() => {
58207
+ this.confettiService.trigger({
58208
+ intensity: this.confettiIntensity(),
58209
+ delay: this.confettiDelay()
58210
+ });
58211
+ this.hasCelebrated.set(true);
58212
+ });
58213
+ }
58214
+ if (currentStatus === AiDynamicContentStatusEnum.REQUESTED ||
58215
+ currentStatus === AiDynamicContentStatusEnum.GENERATING) {
58216
+ untracked(() => {
58217
+ this.hasCelebrated.set(false);
58218
+ });
58219
+ }
58220
+ });
58221
+ }
58222
+ static { this.ɵfac = function ContentGenerationProgressWithConfettiComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ContentGenerationProgressWithConfettiComponent)(); }; }
58223
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContentGenerationProgressWithConfettiComponent, selectors: [["symphiq-content-generation-progress-with-confetti"]], inputs: { itemStatus: [1, "itemStatus"], title: [1, "title"], subtitle: [1, "subtitle"], viewMode: [1, "viewMode"], showIcon: [1, "showIcon"], profile: [1, "profile"], confettiIntensity: [1, "confettiIntensity"], enableConfetti: [1, "enableConfetti"], confettiDelay: [1, "confettiDelay"] }, decls: 1, vars: 5, consts: [[3, "itemStatus", "title", "subtitle", "viewMode", "showIcon"]], template: function ContentGenerationProgressWithConfettiComponent_Template(rf, ctx) { if (rf & 1) {
58224
+ i0.ɵɵelement(0, "symphiq-content-generation-progress", 0);
58225
+ } if (rf & 2) {
58226
+ i0.ɵɵproperty("itemStatus", ctx.itemStatus())("title", ctx.title())("subtitle", ctx.subtitle())("viewMode", ctx.viewMode())("showIcon", ctx.showIcon());
58227
+ } }, dependencies: [ContentGenerationProgressComponent], encapsulation: 2, changeDetection: 0 }); }
58228
+ }
58229
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContentGenerationProgressWithConfettiComponent, [{
58230
+ type: Component,
58231
+ args: [{
58232
+ selector: 'symphiq-content-generation-progress-with-confetti',
58233
+ standalone: true,
58234
+ imports: [ContentGenerationProgressComponent],
58235
+ changeDetection: ChangeDetectionStrategy.OnPush,
58236
+ template: `
58237
+ <symphiq-content-generation-progress
58238
+ [itemStatus]="itemStatus()"
58239
+ [title]="title()"
58240
+ [subtitle]="subtitle()"
58241
+ [viewMode]="viewMode()"
58242
+ [showIcon]="showIcon()"
58243
+ />
58244
+ `
58245
+ }]
58246
+ }], () => [], { itemStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemStatus", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }], profile: [{ type: i0.Input, args: [{ isSignal: true, alias: "profile", required: false }] }], confettiIntensity: [{ type: i0.Input, args: [{ isSignal: true, alias: "confettiIntensity", required: false }] }], enableConfetti: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableConfetti", required: false }] }], confettiDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "confettiDelay", required: false }] }] }); })();
58247
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ContentGenerationProgressWithConfettiComponent, { className: "ContentGenerationProgressWithConfettiComponent", filePath: "lib/components/shared/content-generation-progress-with-confetti.component.ts", lineNumber: 29 }); })();
58090
58248
 
58091
58249
  const _c0$n = () => [];
58092
58250
  function SymphiqBusinessAnalysisDashboardComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
@@ -58174,13 +58332,13 @@ function SymphiqBusinessAnalysisDashboardComponent_Conditional_25_Conditional_0_
58174
58332
  } }
58175
58333
  function SymphiqBusinessAnalysisDashboardComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
58176
58334
  i0.ɵɵconditionalCreate(0, SymphiqBusinessAnalysisDashboardComponent_Conditional_25_Conditional_0_Template, 1, 5, "symphiq-journey-progress-indicator", 27);
58177
- i0.ɵɵelement(1, "symphiq-content-generation-progress", 28);
58335
+ i0.ɵɵelement(1, "symphiq-content-generation-progress-with-confetti", 28);
58178
58336
  } if (rf & 2) {
58179
- let tmp_4_0;
58337
+ let tmp_6_0;
58180
58338
  const ctx_r1 = i0.ɵɵnextContext();
58181
58339
  i0.ɵɵconditional(!ctx_r1.isOnboarded() ? 0 : -1);
58182
58340
  i0.ɵɵadvance();
58183
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("itemStatus", ctx_r1.itemStatus())("title", "We are generating a new Business Analysis for " + (((tmp_4_0 = ctx_r1.currentProfile()) == null ? null : tmp_4_0.profileStructured == null ? null : tmp_4_0.profileStructured.businessName) || "your business") + ".")("subtitle", "It will appear here when ready. You can check back later as this will take a few minutes to complete.");
58341
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("itemStatus", ctx_r1.itemStatus())("profile", ctx_r1.profile())("confettiIntensity", "celebration")("title", "We are generating a new Business Analysis for " + (((tmp_6_0 = ctx_r1.currentProfile()) == null ? null : tmp_6_0.profileStructured == null ? null : tmp_6_0.profileStructured.businessName) || "your business") + ".")("subtitle", "It will appear here when ready. You can check back later as this will take a few minutes to complete.");
58184
58342
  } }
58185
58343
  function SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
58186
58344
  const _r6 = i0.ɵɵgetCurrentView();
@@ -58760,7 +58918,7 @@ class SymphiqBusinessAnalysisDashboardComponent {
58760
58918
  static { this.ɵfac = function SymphiqBusinessAnalysisDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SymphiqBusinessAnalysisDashboardComponent)(); }; }
58761
58919
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SymphiqBusinessAnalysisDashboardComponent, selectors: [["symphiq-business-analysis-dashboard"]], hostBindings: function SymphiqBusinessAnalysisDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
58762
58920
  i0.ɵɵlistener("scroll", function SymphiqBusinessAnalysisDashboardComponent_scroll_HostBindingHandler($event) { return ctx.onScroll($event); }, i0.ɵɵresolveWindow)("keydown", function SymphiqBusinessAnalysisDashboardComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyDown($event); }, i0.ɵɵresolveDocument);
58763
- } }, inputs: { embedded: [1, "embedded"], profile: [1, "profile"], parentHeaderOffset: [1, "parentHeaderOffset"], requestedByUser: [1, "requestedByUser"], viewMode: [1, "viewMode"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], isLoading: [1, "isLoading"], isOnboarded: [1, "isOnboarded"], forDemo: [1, "forDemo"], maxAccessibleStepId: [1, "maxAccessibleStepId"], itemStatus: [1, "itemStatus"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick" }, decls: 35, vars: 59, consts: [[3, "ngClass"], [1, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "animated-bubbles", 2, "position", "fixed", "top", "0", "left", "0", "right", "0", "bottom", "0", "width", "100vw", "height", "100vh", "z-index", "1", "pointer-events", "none"], [1, "relative", "z-[51]"], [1, "sticky", "top-0", "z-50", 3, "ngClass"], [1, "transition-all", "duration-300", "ease-in-out", "overflow-hidden"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-8"], [1, "flex", "items-center", "justify-between"], [1, "flex", "items-center", "gap-2"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-3"], [1, "flex-1", "min-w-0", "mr-4"], [1, "flex", "items-center", "gap-4"], [1, "flex", "items-center", "gap-2", "text-sm", "flex-shrink-0"], [1, "relative"], [3, "sections", "viewMode", "embedded", "scrollElement"], [3, "viewMode", "embedded"], [3, "viewInContextRequested", "isLightMode"], [3, "searchChange", "resultSelected", "close", "isLightMode", "isOpen", "searchQuery", "results", "hasResults", "selectedIndex", "placeholder"], [3, "close", "modeSelected", "isOpen", "currentMode", "viewMode", "isLoading"], [3, "searchClick", "isLightMode"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M15 12a3 3 0 11-6 0 3 3 0 016 0z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"], [1, "transition-opacity", "duration-300", 3, "ngClass"], [3, "searchClick", "isLightMode", "minimized"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-2", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"], [3, "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [3, "viewMode", "itemStatus", "title", "subtitle"], [3, "stepClick", "nextStepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "mb-8"], [3, "viewMode", "businessName", "isOnboarded"], [3, "viewMoreClick", "recommendations", "viewMode"], [3, "sections", "viewMode"], [3, "section", "viewMode", "forceExpanded"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8"], [3, "viewMode", "subsections"]], template: function SymphiqBusinessAnalysisDashboardComponent_Template(rf, ctx) { if (rf & 1) {
58921
+ } }, inputs: { embedded: [1, "embedded"], profile: [1, "profile"], parentHeaderOffset: [1, "parentHeaderOffset"], requestedByUser: [1, "requestedByUser"], viewMode: [1, "viewMode"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], isLoading: [1, "isLoading"], isOnboarded: [1, "isOnboarded"], forDemo: [1, "forDemo"], maxAccessibleStepId: [1, "maxAccessibleStepId"], itemStatus: [1, "itemStatus"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick" }, decls: 35, vars: 59, consts: [[3, "ngClass"], [1, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "animated-bubbles", 2, "position", "fixed", "top", "0", "left", "0", "right", "0", "bottom", "0", "width", "100vw", "height", "100vh", "z-index", "1", "pointer-events", "none"], [1, "relative", "z-[51]"], [1, "sticky", "top-0", "z-50", 3, "ngClass"], [1, "transition-all", "duration-300", "ease-in-out", "overflow-hidden"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-8"], [1, "flex", "items-center", "justify-between"], [1, "flex", "items-center", "gap-2"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-3"], [1, "flex-1", "min-w-0", "mr-4"], [1, "flex", "items-center", "gap-4"], [1, "flex", "items-center", "gap-2", "text-sm", "flex-shrink-0"], [1, "relative"], [3, "sections", "viewMode", "embedded", "scrollElement"], [3, "viewMode", "embedded"], [3, "viewInContextRequested", "isLightMode"], [3, "searchChange", "resultSelected", "close", "isLightMode", "isOpen", "searchQuery", "results", "hasResults", "selectedIndex", "placeholder"], [3, "close", "modeSelected", "isOpen", "currentMode", "viewMode", "isLoading"], [3, "searchClick", "isLightMode"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M15 12a3 3 0 11-6 0 3 3 0 016 0z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"], [1, "transition-opacity", "duration-300", 3, "ngClass"], [3, "searchClick", "isLightMode", "minimized"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-2", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"], [3, "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [3, "viewMode", "itemStatus", "profile", "confettiIntensity", "title", "subtitle"], [3, "stepClick", "nextStepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "mb-8"], [3, "viewMode", "businessName", "isOnboarded"], [3, "viewMoreClick", "recommendations", "viewMode"], [3, "sections", "viewMode"], [3, "section", "viewMode", "forceExpanded"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8"], [3, "viewMode", "subsections"]], template: function SymphiqBusinessAnalysisDashboardComponent_Template(rf, ctx) { if (rf & 1) {
58764
58922
  i0.ɵɵelementStart(0, "div", 0)(1, "div");
58765
58923
  i0.ɵɵelement(2, "div", 1);
58766
58924
  i0.ɵɵelementEnd();
@@ -58781,7 +58939,7 @@ class SymphiqBusinessAnalysisDashboardComponent {
58781
58939
  i0.ɵɵconditionalCreate(23, SymphiqBusinessAnalysisDashboardComponent_Conditional_23_Template, 5, 3);
58782
58940
  i0.ɵɵelementEnd()()()()();
58783
58941
  i0.ɵɵelementStart(24, "main", 13);
58784
- i0.ɵɵconditionalCreate(25, SymphiqBusinessAnalysisDashboardComponent_Conditional_25_Template, 2, 5)(26, SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Template, 2, 1);
58942
+ i0.ɵɵconditionalCreate(25, SymphiqBusinessAnalysisDashboardComponent_Conditional_25_Template, 2, 7)(26, SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Template, 2, 1);
58785
58943
  i0.ɵɵelementEnd();
58786
58944
  i0.ɵɵconditionalCreate(27, SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Template, 1, 4, "symphiq-section-navigation", 14);
58787
58945
  i0.ɵɵconditionalCreate(28, SymphiqBusinessAnalysisDashboardComponent_Conditional_28_Template, 1, 4, "symphiq-floating-toc", 14);
@@ -58853,259 +59011,261 @@ class SymphiqBusinessAnalysisDashboardComponent {
58853
59011
  i0.ɵɵproperty("isLightMode", ctx.isLightMode())("isOpen", ctx.searchService.isSearchOpen())("searchQuery", ctx.searchService.getSearchQuery())("results", ctx.searchService.searchResults())("hasResults", ctx.searchService.hasResults())("selectedIndex", ctx.selectedSearchIndex())("placeholder", "Search sections, items, and analysis...");
58854
59012
  i0.ɵɵadvance();
58855
59013
  i0.ɵɵproperty("isOpen", ctx.isViewModeSwitcherOpen())("currentMode", ctx.displayMode())("viewMode", ctx.viewMode())("isLoading", ctx.isViewModeSwitching());
58856
- } }, dependencies: [CommonModule, i1$1.NgClass, ProfileSectionComponent, SectionNavigationComponent, FloatingTocComponent, FloatingBackButtonComponent, TooltipContainerComponent, SectionDividerComponent, BusinessAnalysisModalComponent, SearchButtonComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, WelcomeBannerComponent, RecommendationsTiledGridComponent, CollapsibleSectionGroupComponent, ContentGenerationProgressComponent], styles: ["[_nghost-%COMP%]{display:block}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}@keyframes _ngcontent-%COMP%_pulse-highlight{0%,to{transform:scale(1);box-shadow:0 0 #3b82f6b3}50%{transform:scale(1.02);box-shadow:0 0 20px 8px #3b82f64d}}[_nghost-%COMP%] .search-highlight-pulse{animation:_ngcontent-%COMP%_pulse-highlight 2s ease-in-out;border-color:#3b82f6!important}"], changeDetection: 0 }); }
59014
+ } }, dependencies: [CommonModule, i1$1.NgClass, ProfileSectionComponent, SectionNavigationComponent, FloatingTocComponent, FloatingBackButtonComponent, TooltipContainerComponent, SectionDividerComponent, BusinessAnalysisModalComponent, SearchButtonComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, WelcomeBannerComponent, RecommendationsTiledGridComponent, CollapsibleSectionGroupComponent, ContentGenerationProgressWithConfettiComponent], styles: ["[_nghost-%COMP%]{display:block}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}@keyframes _ngcontent-%COMP%_pulse-highlight{0%,to{transform:scale(1);box-shadow:0 0 #3b82f6b3}50%{transform:scale(1.02);box-shadow:0 0 20px 8px #3b82f64d}}[_nghost-%COMP%] .search-highlight-pulse{animation:_ngcontent-%COMP%_pulse-highlight 2s ease-in-out;border-color:#3b82f6!important}"], changeDetection: 0 }); }
58857
59015
  }
58858
59016
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SymphiqBusinessAnalysisDashboardComponent, [{
58859
59017
  type: Component,
58860
- args: [{ selector: 'symphiq-business-analysis-dashboard', standalone: true, imports: [CommonModule, ProfileSectionComponent, SectionNavigationComponent, FloatingTocComponent, FloatingBackButtonComponent, TooltipContainerComponent, SectionDividerComponent, BusinessAnalysisModalComponent, SearchButtonComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, WelcomeBannerComponent, RecommendationsTiledGridComponent, CollapsibleSectionGroupComponent, ContentGenerationProgressComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
58861
- <div [ngClass]="getContainerClasses()">
58862
- <!-- Scroll Progress Bar (fixed at top) -->
58863
- <div [class]="embedded() ? 'sticky top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30' : 'fixed top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30'">
58864
- <div
58865
- [style.width.%]="scrollProgress()"
58866
- [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
58867
- class="h-full transition-all duration-200 ease-out">
58868
- </div>
58869
- </div>
58870
-
58871
- <div class="animated-bubbles" [class.light-mode]="isLightMode()" style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
58872
-
58873
- <div class="relative z-[51]">
58874
- <header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50">
58875
- <!-- Expanded Header (default state) -->
58876
- <div
58877
- class="transition-all duration-300 ease-in-out overflow-hidden"
58878
- [class.max-h-0]="headerScrollService.isScrolled()"
58879
- [class.opacity-0]="headerScrollService.isScrolled()"
58880
- [class.max-h-96]="!headerScrollService.isScrolled()"
58881
- [class.opacity-100]="!headerScrollService.isScrolled()">
58882
- <div
58883
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"
58884
- [class.pointer-events-none]="headerScrollService.isScrolled()"
58885
- [class.pointer-events-auto]="!headerScrollService.isScrolled()">
58886
- <div class="flex items-center justify-between">
58887
- <div>
58888
- <h1 [ngClass]="getMainTitleClasses()">
58889
- {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
58890
- </h1>
58891
- <p [ngClass]="getSubtitleClasses()">
58892
- Business Profile & Analysis
58893
- </p>
58894
- </div>
58895
- @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
58896
- <div class="flex items-center gap-2">
58897
- <symphiq-search-button
58898
- [isLightMode]="isLightMode()"
58899
- (searchClick)="openSearch()"
58900
- />
58901
- <button
58902
- type="button"
58903
- (click)="openViewModeSwitcher()"
58904
- [ngClass]="getViewModeButtonClasses()"
58905
- class="cursor-pointer flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
58906
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
58907
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
58908
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
58909
- </svg>
58910
- <span>{{ displayModeLabel() }}</span>
58911
- </button>
58912
- </div>
58913
- }
58914
- </div>
58915
- </div>
58916
- </div>
58917
-
58918
- <!-- Condensed Header (scrolled state) -->
58919
- <div
58920
- class="transition-all duration-300 ease-in-out overflow-hidden"
58921
- [class.max-h-0]="!headerScrollService.isScrolled()"
58922
- [class.opacity-0]="!headerScrollService.isScrolled()"
58923
- [class.max-h-20]="headerScrollService.isScrolled()"
58924
- [class.opacity-100]="headerScrollService.isScrolled()">
58925
- <div
58926
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"
58927
- [class.pointer-events-none]="!headerScrollService.isScrolled()"
58928
- [class.pointer-events-auto]="headerScrollService.isScrolled()">
58929
- <div class="flex items-center justify-between">
58930
- <div class="flex-1 min-w-0 mr-4">
58931
- <h1 [ngClass]="isLightMode() ? 'text-xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent truncate' : 'text-xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent truncate'">
58932
- {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
58933
- </h1>
58934
- </div>
58935
- <div class="flex items-center gap-4">
58936
- @if (!isSimplifiedView()) {
58937
- <div class="flex items-center gap-2 text-sm flex-shrink-0">
58938
- <span [ngClass]="isLightMode() ? 'text-slate-600 font-medium' : 'text-slate-400 font-medium'" class="transition-opacity duration-300" [class.opacity-0]="sectionTitleFading()" [class.opacity-100]="!sectionTitleFading()">
58939
- {{ currentSectionTitle() }}
58940
- </span>
58941
- @if (currentSubsectionTitle()) {
58942
- <span [ngClass]="isLightMode() ? 'text-slate-400' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">›</span>
58943
- <span [ngClass]="isLightMode() ? 'text-slate-500' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">
58944
- {{ currentSubsectionTitle() }}
58945
- </span>
58946
- }
58947
- </div>
58948
- }
58949
- @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
58950
- <symphiq-search-button
58951
- [isLightMode]="isLightMode()"
58952
- [minimized]="true"
58953
- (searchClick)="openSearch()"
58954
- />
58955
- <button
58956
- type="button"
58957
- (click)="openViewModeSwitcher()"
58958
- [ngClass]="getViewModeButtonClasses()"
58959
- class="cursor-pointer flex items-center gap-2 px-2 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
58960
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
58961
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
58962
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
58963
- </svg>
58964
- </button>
58965
- }
58966
- </div>
58967
- </div>
58968
- </div>
58969
- </div>
58970
- </header>
58971
-
58972
- <main class="relative">
58973
- @if (isContentGenerating()) {
58974
- <!-- Journey Progress Banner (always show when not onboarded) -->
58975
- @if (!isOnboarded()) {
58976
- <symphiq-journey-progress-indicator
58977
- [viewMode]="viewMode()"
58978
- [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
58979
- [showNextStepAction]="false"
58980
- [forDemo]="forDemo()"
58981
- [maxAccessibleStepId]="maxAccessibleStepId()"
58982
- (stepClick)="stepClick.emit($event)"
58983
- (nextStepClick)="nextStepClick.emit()"
58984
- />
58985
- }
58986
-
58987
- <!-- Content Generation Progress Component -->
58988
- <symphiq-content-generation-progress
58989
- [viewMode]="viewMode()"
58990
- [itemStatus]="itemStatus()"
58991
- [title]="'We are generating a new Business Analysis for ' + (currentProfile()?.profileStructured?.businessName || 'your business') + '.'"
58992
- [subtitle]="'It will appear here when ready. You can check back later as this will take a few minutes to complete.'"
58993
- />
58994
- } @else {
58995
- @if (isSimplifiedView()) {
58996
- <!-- Journey Progress Banner - Full Width Sticky (only show when not onboarded) -->
58997
- @if (!isOnboarded()) {
58998
- <symphiq-journey-progress-indicator
58999
- [viewMode]="viewMode()"
59000
- [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
59001
- [showNextStepAction]="showNextStepAction()"
59002
- [forDemo]="forDemo()"
59003
- [maxAccessibleStepId]="maxAccessibleStepId()"
59004
- (stepClick)="stepClick.emit($event)"
59005
- (nextStepClick)="nextStepClick.emit()"
59006
- />
59007
- }
59008
-
59009
- <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
59010
- <div class="mb-8">
59011
- <symphiq-welcome-banner
59012
- [viewMode]="viewMode()"
59013
- [businessName]="currentProfile()?.profileStructured?.businessName || 'your business'"
59014
- [isOnboarded]="isOnboarded()"
59015
- />
59016
- </div>
59017
-
59018
- <div class="mb-8">
59019
- <symphiq-recommendations-tiled-grid
59020
- [recommendations]="recommendationItems()"
59021
- [viewMode]="viewMode()"
59022
- (viewMoreClick)="openRecommendationDetailsModal($event)"
59023
- />
59024
- </div>
59025
-
59026
- <div>
59027
- <symphiq-collapsible-section-group
59028
- [sections]="nonRecommendationSections()"
59029
- [viewMode]="viewMode()"
59030
- />
59031
- </div>
59032
- </div>
59033
- } @else {
59034
- @for (section of sections(); track trackBySectionId($index, section); let idx = $index; let last = $last) {
59035
- <symphiq-profile-section
59036
- [section]="section"
59037
- [viewMode]="viewMode()"
59038
- [forceExpanded]="!isCompactView()"
59039
- />
59040
- @if (!last) {
59041
- <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
59042
- <symphiq-section-divider
59043
- [viewMode]="viewMode()"
59044
- [subsections]="sections()[idx + 1].subsections || []" />
59045
- </div>
59046
- }
59047
- }
59048
- }
59049
- }
59050
- </main>
59051
-
59052
- @if (!isSimplifiedView()) {
59053
- <symphiq-section-navigation
59054
- [sections]="sections()"
59055
- [viewMode]="viewMode()"
59056
- [embedded]="embedded()"
59057
- [scrollElement]="scrollElement() ?? undefined"
59058
- />
59059
- }
59060
-
59061
- @if (!isSimplifiedView()) {
59062
- <symphiq-floating-toc
59063
- [sections]="sections()"
59064
- [viewMode]="viewMode()"
59065
- [embedded]="embedded()"
59066
- [scrollElement]="scrollElement() ?? undefined"
59067
- />
59068
- }
59069
-
59070
- <symphiq-floating-back-button
59071
- [viewMode]="viewMode()"
59072
- [embedded]="embedded()"
59073
- />
59074
- </div>
59075
-
59076
- @if (isLoading()) {
59077
- <div [ngClass]="getLoadingOverlayClasses()">
59078
- <div [ngClass]="getSpinnerClasses()"></div>
59079
- </div>
59080
- }
59081
-
59082
- <symphiq-tooltip-container />
59083
- <symphiq-business-analysis-modal
59084
- [isLightMode]="isLightMode()"
59085
- (viewInContextRequested)="handleViewInContext($event)" />
59086
-
59087
- <symphiq-search-modal
59088
- [isLightMode]="isLightMode()"
59089
- [isOpen]="searchService.isSearchOpen()"
59090
- [searchQuery]="searchService.getSearchQuery()"
59091
- [results]="searchService.searchResults()"
59092
- [hasResults]="searchService.hasResults()"
59093
- [selectedIndex]="selectedSearchIndex()"
59094
- [placeholder]="'Search sections, items, and analysis...'"
59095
- (searchChange)="onSearchChange($event)"
59096
- (resultSelected)="onSearchResultSelected($event)"
59097
- (close)="closeSearch()"
59098
- />
59099
-
59100
- <symphiq-view-mode-switcher-modal
59101
- [isOpen]="isViewModeSwitcherOpen()"
59102
- [currentMode]="displayMode()"
59103
- [viewMode]="viewMode()"
59104
- [isLoading]="isViewModeSwitching()"
59105
- (close)="closeViewModeSwitcher()"
59106
- (modeSelected)="handleDisplayModeChange($event)"
59107
- />
59108
- </div>
59018
+ args: [{ selector: 'symphiq-business-analysis-dashboard', standalone: true, imports: [CommonModule, ProfileSectionComponent, SectionNavigationComponent, FloatingTocComponent, FloatingBackButtonComponent, TooltipContainerComponent, SectionDividerComponent, BusinessAnalysisModalComponent, SearchButtonComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, WelcomeBannerComponent, RecommendationsTiledGridComponent, CollapsibleSectionGroupComponent, ContentGenerationProgressWithConfettiComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
59019
+ <div [ngClass]="getContainerClasses()">
59020
+ <!-- Scroll Progress Bar (fixed at top) -->
59021
+ <div [class]="embedded() ? 'sticky top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30' : 'fixed top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30'">
59022
+ <div
59023
+ [style.width.%]="scrollProgress()"
59024
+ [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
59025
+ class="h-full transition-all duration-200 ease-out">
59026
+ </div>
59027
+ </div>
59028
+
59029
+ <div class="animated-bubbles" [class.light-mode]="isLightMode()" style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
59030
+
59031
+ <div class="relative z-[51]">
59032
+ <header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50">
59033
+ <!-- Expanded Header (default state) -->
59034
+ <div
59035
+ class="transition-all duration-300 ease-in-out overflow-hidden"
59036
+ [class.max-h-0]="headerScrollService.isScrolled()"
59037
+ [class.opacity-0]="headerScrollService.isScrolled()"
59038
+ [class.max-h-96]="!headerScrollService.isScrolled()"
59039
+ [class.opacity-100]="!headerScrollService.isScrolled()">
59040
+ <div
59041
+ class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"
59042
+ [class.pointer-events-none]="headerScrollService.isScrolled()"
59043
+ [class.pointer-events-auto]="!headerScrollService.isScrolled()">
59044
+ <div class="flex items-center justify-between">
59045
+ <div>
59046
+ <h1 [ngClass]="getMainTitleClasses()">
59047
+ {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
59048
+ </h1>
59049
+ <p [ngClass]="getSubtitleClasses()">
59050
+ Business Profile & Analysis
59051
+ </p>
59052
+ </div>
59053
+ @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
59054
+ <div class="flex items-center gap-2">
59055
+ <symphiq-search-button
59056
+ [isLightMode]="isLightMode()"
59057
+ (searchClick)="openSearch()"
59058
+ />
59059
+ <button
59060
+ type="button"
59061
+ (click)="openViewModeSwitcher()"
59062
+ [ngClass]="getViewModeButtonClasses()"
59063
+ class="cursor-pointer flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
59064
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
59065
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
59066
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
59067
+ </svg>
59068
+ <span>{{ displayModeLabel() }}</span>
59069
+ </button>
59070
+ </div>
59071
+ }
59072
+ </div>
59073
+ </div>
59074
+ </div>
59075
+
59076
+ <!-- Condensed Header (scrolled state) -->
59077
+ <div
59078
+ class="transition-all duration-300 ease-in-out overflow-hidden"
59079
+ [class.max-h-0]="!headerScrollService.isScrolled()"
59080
+ [class.opacity-0]="!headerScrollService.isScrolled()"
59081
+ [class.max-h-20]="headerScrollService.isScrolled()"
59082
+ [class.opacity-100]="headerScrollService.isScrolled()">
59083
+ <div
59084
+ class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"
59085
+ [class.pointer-events-none]="!headerScrollService.isScrolled()"
59086
+ [class.pointer-events-auto]="headerScrollService.isScrolled()">
59087
+ <div class="flex items-center justify-between">
59088
+ <div class="flex-1 min-w-0 mr-4">
59089
+ <h1 [ngClass]="isLightMode() ? 'text-xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent truncate' : 'text-xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent truncate'">
59090
+ {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
59091
+ </h1>
59092
+ </div>
59093
+ <div class="flex items-center gap-4">
59094
+ @if (!isSimplifiedView()) {
59095
+ <div class="flex items-center gap-2 text-sm flex-shrink-0">
59096
+ <span [ngClass]="isLightMode() ? 'text-slate-600 font-medium' : 'text-slate-400 font-medium'" class="transition-opacity duration-300" [class.opacity-0]="sectionTitleFading()" [class.opacity-100]="!sectionTitleFading()">
59097
+ {{ currentSectionTitle() }}
59098
+ </span>
59099
+ @if (currentSubsectionTitle()) {
59100
+ <span [ngClass]="isLightMode() ? 'text-slate-400' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">›</span>
59101
+ <span [ngClass]="isLightMode() ? 'text-slate-500' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">
59102
+ {{ currentSubsectionTitle() }}
59103
+ </span>
59104
+ }
59105
+ </div>
59106
+ }
59107
+ @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
59108
+ <symphiq-search-button
59109
+ [isLightMode]="isLightMode()"
59110
+ [minimized]="true"
59111
+ (searchClick)="openSearch()"
59112
+ />
59113
+ <button
59114
+ type="button"
59115
+ (click)="openViewModeSwitcher()"
59116
+ [ngClass]="getViewModeButtonClasses()"
59117
+ class="cursor-pointer flex items-center gap-2 px-2 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
59118
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
59119
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
59120
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
59121
+ </svg>
59122
+ </button>
59123
+ }
59124
+ </div>
59125
+ </div>
59126
+ </div>
59127
+ </div>
59128
+ </header>
59129
+
59130
+ <main class="relative">
59131
+ @if (isContentGenerating()) {
59132
+ <!-- Journey Progress Banner (always show when not onboarded) -->
59133
+ @if (!isOnboarded()) {
59134
+ <symphiq-journey-progress-indicator
59135
+ [viewMode]="viewMode()"
59136
+ [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
59137
+ [showNextStepAction]="false"
59138
+ [forDemo]="forDemo()"
59139
+ [maxAccessibleStepId]="maxAccessibleStepId()"
59140
+ (stepClick)="stepClick.emit($event)"
59141
+ (nextStepClick)="nextStepClick.emit()"
59142
+ />
59143
+ }
59144
+
59145
+ <!-- Content Generation Progress Component -->
59146
+ <symphiq-content-generation-progress-with-confetti
59147
+ [viewMode]="viewMode()"
59148
+ [itemStatus]="itemStatus()"
59149
+ [profile]="profile()"
59150
+ [confettiIntensity]="'celebration'"
59151
+ [title]="'We are generating a new Business Analysis for ' + (currentProfile()?.profileStructured?.businessName || 'your business') + '.'"
59152
+ [subtitle]="'It will appear here when ready. You can check back later as this will take a few minutes to complete.'"
59153
+ />
59154
+ } @else {
59155
+ @if (isSimplifiedView()) {
59156
+ <!-- Journey Progress Banner - Full Width Sticky (only show when not onboarded) -->
59157
+ @if (!isOnboarded()) {
59158
+ <symphiq-journey-progress-indicator
59159
+ [viewMode]="viewMode()"
59160
+ [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
59161
+ [showNextStepAction]="showNextStepAction()"
59162
+ [forDemo]="forDemo()"
59163
+ [maxAccessibleStepId]="maxAccessibleStepId()"
59164
+ (stepClick)="stepClick.emit($event)"
59165
+ (nextStepClick)="nextStepClick.emit()"
59166
+ />
59167
+ }
59168
+
59169
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
59170
+ <div class="mb-8">
59171
+ <symphiq-welcome-banner
59172
+ [viewMode]="viewMode()"
59173
+ [businessName]="currentProfile()?.profileStructured?.businessName || 'your business'"
59174
+ [isOnboarded]="isOnboarded()"
59175
+ />
59176
+ </div>
59177
+
59178
+ <div class="mb-8">
59179
+ <symphiq-recommendations-tiled-grid
59180
+ [recommendations]="recommendationItems()"
59181
+ [viewMode]="viewMode()"
59182
+ (viewMoreClick)="openRecommendationDetailsModal($event)"
59183
+ />
59184
+ </div>
59185
+
59186
+ <div>
59187
+ <symphiq-collapsible-section-group
59188
+ [sections]="nonRecommendationSections()"
59189
+ [viewMode]="viewMode()"
59190
+ />
59191
+ </div>
59192
+ </div>
59193
+ } @else {
59194
+ @for (section of sections(); track trackBySectionId($index, section); let idx = $index; let last = $last) {
59195
+ <symphiq-profile-section
59196
+ [section]="section"
59197
+ [viewMode]="viewMode()"
59198
+ [forceExpanded]="!isCompactView()"
59199
+ />
59200
+ @if (!last) {
59201
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
59202
+ <symphiq-section-divider
59203
+ [viewMode]="viewMode()"
59204
+ [subsections]="sections()[idx + 1].subsections || []" />
59205
+ </div>
59206
+ }
59207
+ }
59208
+ }
59209
+ }
59210
+ </main>
59211
+
59212
+ @if (!isSimplifiedView()) {
59213
+ <symphiq-section-navigation
59214
+ [sections]="sections()"
59215
+ [viewMode]="viewMode()"
59216
+ [embedded]="embedded()"
59217
+ [scrollElement]="scrollElement() ?? undefined"
59218
+ />
59219
+ }
59220
+
59221
+ @if (!isSimplifiedView()) {
59222
+ <symphiq-floating-toc
59223
+ [sections]="sections()"
59224
+ [viewMode]="viewMode()"
59225
+ [embedded]="embedded()"
59226
+ [scrollElement]="scrollElement() ?? undefined"
59227
+ />
59228
+ }
59229
+
59230
+ <symphiq-floating-back-button
59231
+ [viewMode]="viewMode()"
59232
+ [embedded]="embedded()"
59233
+ />
59234
+ </div>
59235
+
59236
+ @if (isLoading()) {
59237
+ <div [ngClass]="getLoadingOverlayClasses()">
59238
+ <div [ngClass]="getSpinnerClasses()"></div>
59239
+ </div>
59240
+ }
59241
+
59242
+ <symphiq-tooltip-container />
59243
+ <symphiq-business-analysis-modal
59244
+ [isLightMode]="isLightMode()"
59245
+ (viewInContextRequested)="handleViewInContext($event)" />
59246
+
59247
+ <symphiq-search-modal
59248
+ [isLightMode]="isLightMode()"
59249
+ [isOpen]="searchService.isSearchOpen()"
59250
+ [searchQuery]="searchService.getSearchQuery()"
59251
+ [results]="searchService.searchResults()"
59252
+ [hasResults]="searchService.hasResults()"
59253
+ [selectedIndex]="selectedSearchIndex()"
59254
+ [placeholder]="'Search sections, items, and analysis...'"
59255
+ (searchChange)="onSearchChange($event)"
59256
+ (resultSelected)="onSearchResultSelected($event)"
59257
+ (close)="closeSearch()"
59258
+ />
59259
+
59260
+ <symphiq-view-mode-switcher-modal
59261
+ [isOpen]="isViewModeSwitcherOpen()"
59262
+ [currentMode]="displayMode()"
59263
+ [viewMode]="viewMode()"
59264
+ [isLoading]="isViewModeSwitching()"
59265
+ (close)="closeViewModeSwitcher()"
59266
+ (modeSelected)="handleDisplayModeChange($event)"
59267
+ />
59268
+ </div>
59109
59269
  `, styles: [":host{display:block}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse-highlight{0%,to{transform:scale(1);box-shadow:0 0 #3b82f6b3}50%{transform:scale(1.02);box-shadow:0 0 20px 8px #3b82f64d}}:host ::ng-deep .search-highlight-pulse{animation:pulse-highlight 2s ease-in-out;border-color:#3b82f6!important}\n"] }]
59110
59270
  }], () => [], { embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], profile: [{ type: i0.Input, args: [{ isSignal: true, alias: "profile", required: false }] }], parentHeaderOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentHeaderOffset", required: false }] }], requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], scrollEvent: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollEvent", required: false }] }], scrollElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollElement", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], isOnboarded: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOnboarded", required: false }] }], forDemo: [{ type: i0.Input, args: [{ isSignal: true, alias: "forDemo", required: false }] }], maxAccessibleStepId: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxAccessibleStepId", required: false }] }], itemStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemStatus", required: false }] }], stepClick: [{ type: i0.Output, args: ["stepClick"] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], onScroll: [{
59111
59271
  type: HostListener,
@@ -59114,7 +59274,7 @@ class SymphiqBusinessAnalysisDashboardComponent {
59114
59274
  type: HostListener,
59115
59275
  args: ['document:keydown', ['$event']]
59116
59276
  }] }); })();
59117
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqBusinessAnalysisDashboardComponent, { className: "SymphiqBusinessAnalysisDashboardComponent", filePath: "lib/components/business-analysis-dashboard/symphiq-business-analysis-dashboard.component.ts", lineNumber: 333 }); })();
59277
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqBusinessAnalysisDashboardComponent, { className: "SymphiqBusinessAnalysisDashboardComponent", filePath: "lib/components/business-analysis-dashboard/symphiq-business-analysis-dashboard.component.ts", lineNumber: 335 }); })();
59118
59278
 
59119
59279
  function DashboardHeaderComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
59120
59280
  i0.ɵɵelement(0, "div", 6);
@@ -104874,5 +105034,5 @@ const PROFILE_ANALYSIS_METRIC_SCREEN_PAGE_VIEWS = ({
104874
105034
  * Generated bundle index. Do not edit.
104875
105035
  */
104876
105036
 
104877
- export { AreaChartComponent, BUSINESS_PROFILE, BarChartComponent, BreakdownSectionComponent, BusinessAnalysisModalComponent, BusinessProfileSearchService, ChartCardComponent, ChartContainerComponent, ChartThemeService, CircularProgressComponent, CompetitivePositioningSummaryComponent, CompetitorAnalysisCardComponent, ConfidenceLevelCardComponent, ContentGenerationProgressComponent, CrossDashboardRelationshipsService, FUNNEL_ANALYSIS, FloatingBackButtonComponent, FloatingTocComponent, FocusAreaDetailCardComponent, FocusAreaExecutiveSummaryComponent, FocusAreaQuestionComponent, FocusAreaToolsModalComponent, FunnelOrderService, GradeBadgeComponent, HeaderScrollService, HierarchyDisplayComponent, HorizontalBarComponent, IconService, InsightCardComponent, JourneyProgressIndicatorComponent, JourneyStepIdEnum, LineChartComponent, MetricCardComponent, MetricExecutiveSummaryComponent, MetricFormatterService, MetricListItemComponent, MetricWelcomeBannerComponent, MobileBottomNavComponent, MobileFABComponent, ModalComponent, ModalService, NapkinVisualPlaceholderComponent, NavigationStateService, OpportunityHighlightBannerComponent, OverallAssessmentComponent, PROFILE_ANALYSIS_FOCUS_AREA_AFFILIATE, PROFILE_ANALYSIS_METRIC_SCREEN_PAGE_VIEWS, PROFILE_ANALYSIS_SHOP, PieChartComponent, ProfileItemCardComponent, ProfileSectionComponent, ProfileSubsectionComponent, RelatedContentSidebarComponent, ScrollDepthService, ScrollProgressBarComponent, SearchButtonComponent, SearchModalComponent, SectionDividerComponent, SectionNavigationComponent, ShadowElevationDirective, ShopPlatformEnum, ShopWelcomeBannerComponent, SkeletonBarComponent, SkeletonCardBaseComponent, SkeletonCircleComponent, SkeletonCompetitorCardComponent, SkeletonCustomerSegmentCardComponent, SkeletonFocusAreaCardComponent, SkeletonGenericCardComponent, SkeletonLoaderComponent, SkeletonPriceTierCardComponent, SkeletonProductCategoryCardComponent, SkeletonRegionCardComponent, SkeletonSeasonCardComponent, SymphiqBusinessAnalysisDashboardComponent, SymphiqConnectGaDashboardComponent, SymphiqCreateAccountDashboardComponent, SymphiqFunnelAnalysisDashboardComponent, SymphiqFunnelAnalysisPreviewComponent, SymphiqIconComponent, SymphiqProfileAnalysisDashboardComponent, SymphiqWelcomeDashboardComponent, TooltipContainerComponent, TooltipDataService, TooltipDirective, TooltipService, ViewModeService, ViewportAnimationDirective, VisualizationContainerComponent, getBadgeLabelClasses, getButtonClasses, getCategoryBadgeClasses, getCategoryColor, getCompetitiveBadgeClasses, getContainerClasses, getFooterClasses, getGradeBadgeClasses, getHeaderClasses, getInsightsBadgeClasses, getInsightsCardClasses, getMetricLabelClasses, getMetricMiniCardClasses, getMetricValueClasses, getNarrativeTextClasses, getRevenueCardClasses, getRevenueIconClasses, getStatusBadgeClasses, getStatusDotClasses, getStatusIconClasses, getStatusSummaryClasses, getSubtitleClasses, getTitleClasses, getTrendClasses, getTrendIconClasses, getTrendValueClasses, isLightMode };
105037
+ export { AreaChartComponent, BUSINESS_PROFILE, BarChartComponent, BreakdownSectionComponent, BusinessAnalysisModalComponent, BusinessProfileSearchService, ChartCardComponent, ChartContainerComponent, ChartThemeService, CircularProgressComponent, CompetitivePositioningSummaryComponent, CompetitorAnalysisCardComponent, ConfettiService, ConfidenceLevelCardComponent, ContentGenerationProgressComponent, ContentGenerationProgressWithConfettiComponent, CrossDashboardRelationshipsService, FUNNEL_ANALYSIS, FloatingBackButtonComponent, FloatingTocComponent, FocusAreaDetailCardComponent, FocusAreaExecutiveSummaryComponent, FocusAreaQuestionComponent, FocusAreaToolsModalComponent, FunnelOrderService, GradeBadgeComponent, HeaderScrollService, HierarchyDisplayComponent, HorizontalBarComponent, IconService, InsightCardComponent, JourneyProgressIndicatorComponent, JourneyStepIdEnum, LineChartComponent, MetricCardComponent, MetricExecutiveSummaryComponent, MetricFormatterService, MetricListItemComponent, MetricWelcomeBannerComponent, MobileBottomNavComponent, MobileFABComponent, ModalComponent, ModalService, NapkinVisualPlaceholderComponent, NavigationStateService, OpportunityHighlightBannerComponent, OverallAssessmentComponent, PROFILE_ANALYSIS_FOCUS_AREA_AFFILIATE, PROFILE_ANALYSIS_METRIC_SCREEN_PAGE_VIEWS, PROFILE_ANALYSIS_SHOP, PieChartComponent, ProfileItemCardComponent, ProfileSectionComponent, ProfileSubsectionComponent, RelatedContentSidebarComponent, ScrollDepthService, ScrollProgressBarComponent, SearchButtonComponent, SearchModalComponent, SectionDividerComponent, SectionNavigationComponent, ShadowElevationDirective, ShopPlatformEnum, ShopWelcomeBannerComponent, SkeletonBarComponent, SkeletonCardBaseComponent, SkeletonCircleComponent, SkeletonCompetitorCardComponent, SkeletonCustomerSegmentCardComponent, SkeletonFocusAreaCardComponent, SkeletonGenericCardComponent, SkeletonLoaderComponent, SkeletonPriceTierCardComponent, SkeletonProductCategoryCardComponent, SkeletonRegionCardComponent, SkeletonSeasonCardComponent, SymphiqBusinessAnalysisDashboardComponent, SymphiqConnectGaDashboardComponent, SymphiqCreateAccountDashboardComponent, SymphiqFunnelAnalysisDashboardComponent, SymphiqFunnelAnalysisPreviewComponent, SymphiqIconComponent, SymphiqProfileAnalysisDashboardComponent, SymphiqWelcomeDashboardComponent, TooltipContainerComponent, TooltipDataService, TooltipDirective, TooltipService, ViewModeService, ViewportAnimationDirective, VisualizationContainerComponent, getBadgeLabelClasses, getButtonClasses, getCategoryBadgeClasses, getCategoryColor, getCompetitiveBadgeClasses, getContainerClasses, getFooterClasses, getGradeBadgeClasses, getHeaderClasses, getInsightsBadgeClasses, getInsightsCardClasses, getMetricLabelClasses, getMetricMiniCardClasses, getMetricValueClasses, getNarrativeTextClasses, getRevenueCardClasses, getRevenueIconClasses, getStatusBadgeClasses, getStatusDotClasses, getStatusIconClasses, getStatusSummaryClasses, getSubtitleClasses, getTitleClasses, getTrendClasses, getTrendIconClasses, getTrendValueClasses, isLightMode };
104878
105038
  //# sourceMappingURL=symphiq-components.mjs.map