@eric-emg/symphiq-components 1.2.161 → 1.2.163

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, viewMode) {
2458
+ if (customColors && customColors.length > 0) {
2459
+ return customColors;
2460
+ }
2461
+ const isDarkMode = viewMode === ViewModeEnum.DARK;
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, viewMode } = config;
2495
+ const intensityConfig = this.getIntensityConfig(intensity);
2496
+ const colors = this.getColors(customColors, viewMode);
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 {
@@ -54099,6 +54197,7 @@ class SymphiqConnectGaDashboardComponent {
54099
54197
  this.maxAccessibleStepId = input(undefined, ...(ngDevMode ? [{ debugName: "maxAccessibleStepId" }] : []));
54100
54198
  this.stepClick = output();
54101
54199
  this.nextStepClick = output();
54200
+ this.googleButtonClick = output();
54102
54201
  this.headerScrollService = inject(HeaderScrollService);
54103
54202
  this.JourneyStepIdEnum = JourneyStepIdEnum;
54104
54203
  this.COLLAPSE_THRESHOLD = 20;
@@ -54246,7 +54345,7 @@ class SymphiqConnectGaDashboardComponent {
54246
54345
  i0.ɵɵlistener("scroll", function SymphiqConnectGaDashboardComponent_scroll_HostBindingHandler($event) { return ctx.onScroll($event); }, i0.ɵɵresolveWindow);
54247
54346
  } if (rf & 2) {
54248
54347
  i0.ɵɵclassProp("light", ctx.isLightMode())("dark", !ctx.isLightMode());
54249
- } }, inputs: { embedded: [1, "embedded"], parentHeaderOffset: [1, "parentHeaderOffset"], viewMode: [1, "viewMode"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], forDemo: [1, "forDemo"], maxAccessibleStepId: [1, "maxAccessibleStepId"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick" }, decls: 70, vars: 66, 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, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-3"], [1, "flex-1", "min-w-0", "mr-4"], [3, "stepClick", "nextStepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "relative"], [1, "max-w-3xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-8"], [1, "rounded-2xl", "border", "shadow-lg", "overflow-hidden", "mb-8", 3, "ngClass"], [1, "px-8", "py-8", 3, "ngClass"], [1, "flex", "items-start", "gap-6"], [1, "flex-shrink-0", "w-16", "h-16", "rounded-2xl", "flex", "items-center", "justify-center", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-8", "h-8"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"], [1, "flex-1"], [1, "text-2xl", "sm:text-3xl", "font-bold", "mb-4", 3, "ngClass"], [1, "text-base", "leading-relaxed", "mb-6", 3, "ngClass"], [1, "mb-6"], ["type", "button", 1, "gsi-material-button"], [1, "gsi-material-button-state"], [1, "gsi-material-button-content-wrapper"], [1, "gsi-material-button-icon"], ["version", "1.1", "xmlns", "http://www.w3.org/2000/svg", "viewBox", "0 0 48 48", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", 2, "display", "block"], ["fill", "#EA4335", "d", "M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"], ["fill", "#4285F4", "d", "M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"], ["fill", "#FBBC05", "d", "M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"], ["fill", "#34A853", "d", "M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"], ["fill", "none", "d", "M0 0h48v48H0z"], [1, "gsi-material-button-contents"], [1, "p-4", "rounded-lg", "border", "flex", "items-start", "gap-3", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "flex-shrink-0", "mt-0.5", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "text-sm", "leading-relaxed", 3, "ngClass"], [1, "font-semibold"], [1, "mt-6", "rounded-lg", "border", "overflow-hidden", 3, "ngClass"], [1, "px-4", "py-4", "cursor-pointer", "flex", "items-center", "justify-between", "gap-3", "transition-colors", "duration-200", 3, "click", "ngClass"], [1, "text-base", "font-semibold", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "flex-shrink-0", "transition-transform", "duration-300", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"], [1, "px-4", "pb-4", "pt-2", 3, "ngClass"], [1, "text-sm", "leading-relaxed", "mb-4", 3, "ngClass"], [1, "font-bold"]], template: function SymphiqConnectGaDashboardComponent_Template(rf, ctx) { if (rf & 1) {
54348
+ } }, inputs: { embedded: [1, "embedded"], parentHeaderOffset: [1, "parentHeaderOffset"], viewMode: [1, "viewMode"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], forDemo: [1, "forDemo"], maxAccessibleStepId: [1, "maxAccessibleStepId"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick", googleButtonClick: "googleButtonClick" }, decls: 70, vars: 66, 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, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-3"], [1, "flex-1", "min-w-0", "mr-4"], [3, "stepClick", "nextStepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "relative"], [1, "max-w-3xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-8"], [1, "rounded-2xl", "border", "shadow-lg", "overflow-hidden", "mb-8", 3, "ngClass"], [1, "px-8", "py-8", 3, "ngClass"], [1, "flex", "items-start", "gap-6"], [1, "flex-shrink-0", "w-16", "h-16", "rounded-2xl", "flex", "items-center", "justify-center", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-8", "h-8"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"], [1, "flex-1"], [1, "text-2xl", "sm:text-3xl", "font-bold", "mb-4", 3, "ngClass"], [1, "text-base", "leading-relaxed", "mb-6", 3, "ngClass"], [1, "mb-6"], ["type", "button", 1, "gsi-material-button", 3, "click"], [1, "gsi-material-button-state"], [1, "gsi-material-button-content-wrapper"], [1, "gsi-material-button-icon"], ["version", "1.1", "xmlns", "http://www.w3.org/2000/svg", "viewBox", "0 0 48 48", 0, "xmlns", "xlink", "http://www.w3.org/1999/xlink", 2, "display", "block"], ["fill", "#EA4335", "d", "M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"], ["fill", "#4285F4", "d", "M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"], ["fill", "#FBBC05", "d", "M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"], ["fill", "#34A853", "d", "M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"], ["fill", "none", "d", "M0 0h48v48H0z"], [1, "gsi-material-button-contents"], [1, "p-4", "rounded-lg", "border", "flex", "items-start", "gap-3", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "flex-shrink-0", "mt-0.5", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "text-sm", "leading-relaxed", 3, "ngClass"], [1, "font-semibold"], [1, "mt-6", "rounded-lg", "border", "overflow-hidden", 3, "ngClass"], [1, "px-4", "py-4", "cursor-pointer", "flex", "items-center", "justify-between", "gap-3", "transition-colors", "duration-200", 3, "click", "ngClass"], [1, "text-base", "font-semibold", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "flex-shrink-0", "transition-transform", "duration-300", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"], [1, "px-4", "pb-4", "pt-2", 3, "ngClass"], [1, "text-sm", "leading-relaxed", "mb-4", 3, "ngClass"], [1, "font-bold"]], template: function SymphiqConnectGaDashboardComponent_Template(rf, ctx) { if (rf & 1) {
54250
54349
  i0.ɵɵelementStart(0, "div", 0)(1, "div");
54251
54350
  i0.ɵɵelement(2, "div", 1);
54252
54351
  i0.ɵɵelementEnd();
@@ -54276,6 +54375,7 @@ class SymphiqConnectGaDashboardComponent {
54276
54375
  i0.ɵɵtext(33, " Integrating Google Analytics is essential. We use it to pull the majority of your data in a read-only format, ensuring no changes are made to your analytics. Please make sure you have access to the Google Analytics property associated with this shop to ensure proper integration. ");
54277
54376
  i0.ɵɵelementEnd();
54278
54377
  i0.ɵɵelementStart(34, "div", 22)(35, "button", 23);
54378
+ i0.ɵɵlistener("click", function SymphiqConnectGaDashboardComponent_Template_button_click_35_listener() { return ctx.googleButtonClick.emit(); });
54279
54379
  i0.ɵɵelement(36, "div", 24);
54280
54380
  i0.ɵɵelementStart(37, "div", 25)(38, "div", 26);
54281
54381
  i0.ɵɵnamespaceSVG();
@@ -54481,7 +54581,7 @@ class SymphiqConnectGaDashboardComponent {
54481
54581
 
54482
54582
  <!-- Continue with Google Button -->
54483
54583
  <div class="mb-6">
54484
- <button type="button" class="gsi-material-button">
54584
+ <button type="button" class="gsi-material-button" (click)="googleButtonClick.emit()">
54485
54585
  <div class="gsi-material-button-state"></div>
54486
54586
  <div class="gsi-material-button-content-wrapper">
54487
54587
  <div class="gsi-material-button-icon">
@@ -54557,7 +54657,7 @@ class SymphiqConnectGaDashboardComponent {
54557
54657
  </div>
54558
54658
  </div>
54559
54659
  `, styles: [":host{display:block}.animated-bubbles{overflow:hidden}.animated-bubbles:before,.animated-bubbles:after{content:\"\";position:absolute;border-radius:50%;animation:float 20s infinite ease-in-out;opacity:.05}.animated-bubbles:before{width:600px;height:600px;background:radial-gradient(circle,#3b82f6 0%,transparent 70%);top:-300px;left:-300px;animation-delay:-5s}.animated-bubbles:after{width:800px;height:800px;background:radial-gradient(circle,#06b6d4 0%,transparent 70%);bottom:-400px;right:-400px;animation-delay:-10s}.animated-bubbles.light-mode:before,.animated-bubbles.light-mode:after{opacity:.03}@keyframes float{0%,to{transform:translate(0) scale(1)}33%{transform:translate(50px,-50px) scale(1.1)}66%{transform:translate(-30px,30px) scale(.9)}}:host.light .gsi-material-button{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-webkit-appearance:none;background-color:#fff;background-image:none;border:1px solid #747775;-webkit-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#1f1f1f;cursor:pointer;font-family:Roboto,arial,sans-serif;font-size:14px;height:40px;letter-spacing:.25px;outline:none;overflow:hidden;padding:0 12px;position:relative;text-align:center;-webkit-transition:background-color .218s,border-color .218s,box-shadow .218s;transition:background-color .218s,border-color .218s,box-shadow .218s;vertical-align:middle;white-space:nowrap;width:auto;max-width:400px;min-width:min-content}:host.light .gsi-material-button .gsi-material-button-icon{height:20px;margin-right:12px;min-width:20px;width:20px}:host.light .gsi-material-button .gsi-material-button-content-wrapper{-webkit-align-items:center;align-items:center;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;height:100%;justify-content:space-between;position:relative;width:100%}:host.light .gsi-material-button .gsi-material-button-contents{-webkit-flex-grow:1;flex-grow:1;font-family:Roboto,arial,sans-serif;font-weight:500;overflow:hidden;text-overflow:ellipsis;vertical-align:top}:host.light .gsi-material-button .gsi-material-button-state{-webkit-transition:opacity .218s;transition:opacity .218s;inset:0;opacity:0;position:absolute}:host.light .gsi-material-button:disabled{cursor:default;background-color:#ffffff61;border-color:#1f1f1f1f}:host.light .gsi-material-button:disabled .gsi-material-button-contents{opacity:38%}:host.light .gsi-material-button:disabled .gsi-material-button-icon{opacity:38%}:host.light .gsi-material-button:not(:disabled):active .gsi-material-button-state,:host.light .gsi-material-button:not(:disabled):focus .gsi-material-button-state{background-color:#303030;opacity:12%}:host.light .gsi-material-button:not(:disabled):hover{-webkit-box-shadow:0 1px 2px 0 rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15);box-shadow:0 1px 2px #3c40434d,0 1px 3px 1px #3c404326}:host.light .gsi-material-button:not(:disabled):hover .gsi-material-button-state{background-color:#303030;opacity:8%}:host.dark .gsi-material-button{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-webkit-appearance:none;background-color:#131314;background-image:none;border:1px solid #747775;-webkit-border-radius:4px;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#e3e3e3;cursor:pointer;font-family:Roboto,arial,sans-serif;font-size:14px;height:40px;letter-spacing:.25px;outline:none;overflow:hidden;padding:0 12px;position:relative;text-align:center;-webkit-transition:background-color .218s,border-color .218s,box-shadow .218s;transition:background-color .218s,border-color .218s,box-shadow .218s;vertical-align:middle;white-space:nowrap;width:auto;max-width:400px;min-width:min-content;border-color:#8e918f}:host.dark .gsi-material-button .gsi-material-button-icon{height:20px;margin-right:12px;min-width:20px;width:20px}:host.dark .gsi-material-button .gsi-material-button-content-wrapper{-webkit-align-items:center;align-items:center;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;height:100%;justify-content:space-between;position:relative;width:100%}:host.dark .gsi-material-button .gsi-material-button-contents{-webkit-flex-grow:1;flex-grow:1;font-family:Roboto,arial,sans-serif;font-weight:500;overflow:hidden;text-overflow:ellipsis;vertical-align:top}:host.dark .gsi-material-button .gsi-material-button-state{-webkit-transition:opacity .218s;transition:opacity .218s;inset:0;opacity:0;position:absolute}:host.dark .gsi-material-button:disabled{cursor:default;background-color:#13131461;border-color:#8e918f1f}:host.dark .gsi-material-button:disabled .gsi-material-button-state{background-color:#e3e3e31f}:host.dark .gsi-material-button:disabled .gsi-material-button-contents{opacity:38%}:host.dark .gsi-material-button:disabled .gsi-material-button-icon{opacity:38%}:host.dark .gsi-material-button:not(:disabled):active .gsi-material-button-state,:host.dark .gsi-material-button:not(:disabled):focus .gsi-material-button-state{background-color:#fff;opacity:12%}:host.dark .gsi-material-button:not(:disabled):hover{-webkit-box-shadow:0 1px 2px 0 rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15);box-shadow:0 1px 2px #3c40434d,0 1px 3px 1px #3c404326}:host.dark .gsi-material-button:not(:disabled):hover .gsi-material-button-state{background-color:#fff;opacity:8%}\n"] }]
54560
- }], () => [], { embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], parentHeaderOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentHeaderOffset", 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 }] }], forDemo: [{ type: i0.Input, args: [{ isSignal: true, alias: "forDemo", required: false }] }], maxAccessibleStepId: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxAccessibleStepId", required: false }] }], stepClick: [{ type: i0.Output, args: ["stepClick"] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], onScroll: [{
54660
+ }], () => [], { embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], parentHeaderOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentHeaderOffset", 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 }] }], forDemo: [{ type: i0.Input, args: [{ isSignal: true, alias: "forDemo", required: false }] }], maxAccessibleStepId: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxAccessibleStepId", required: false }] }], stepClick: [{ type: i0.Output, args: ["stepClick"] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], googleButtonClick: [{ type: i0.Output, args: ["googleButtonClick"] }], onScroll: [{
54561
54661
  type: HostListener,
54562
54662
  args: ['window:scroll', ['$event']]
54563
54663
  }] }); })();
@@ -57836,27 +57936,24 @@ class CollapsibleSectionGroupComponent {
57836
57936
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollapsibleSectionGroupComponent, { className: "CollapsibleSectionGroupComponent", filePath: "lib/components/business-analysis-dashboard/collapsible-section-group.component.ts", lineNumber: 100 }); })();
57837
57937
 
57838
57938
  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()();
57939
+ i0.ɵɵelementStart(0, "div", 20);
57940
+ i0.ɵɵelement(1, "div", 21)(2, "div", 22)(3, "div", 23)(4, "div", 24)(5, "div", 25)(6, "div", 26);
57941
+ i0.ɵɵelementEnd();
57842
57942
  } if (rf & 2) {
57843
57943
  const ctx_r0 = i0.ɵɵnextContext();
57844
- i0.ɵɵstyleProp("clip-path", "inset(0 0 0 " + ctx_r0.progressPercentage() + "%)");
57845
- i0.ɵɵadvance(2);
57846
57944
  i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
57847
- i0.ɵɵproperty("ngClass", ctx_r0.dotClasses());
57848
57945
  i0.ɵɵadvance();
57849
- i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
57850
- i0.ɵɵproperty("ngClass", ctx_r0.dotClasses());
57946
+ i0.ɵɵstyleProp("background-color", ctx_r0.dotColor());
57851
57947
  i0.ɵɵadvance();
57852
- i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
57853
- i0.ɵɵproperty("ngClass", ctx_r0.dotClasses());
57948
+ i0.ɵɵstyleProp("background-color", ctx_r0.dotColor());
57854
57949
  i0.ɵɵadvance();
57855
- i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
57856
- i0.ɵɵproperty("ngClass", ctx_r0.dotClasses());
57950
+ i0.ɵɵstyleProp("background-color", ctx_r0.dotColor());
57857
57951
  i0.ɵɵadvance();
57858
- i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
57859
- i0.ɵɵproperty("ngClass", ctx_r0.dotClasses());
57952
+ i0.ɵɵstyleProp("background-color", ctx_r0.dotColor());
57953
+ i0.ɵɵadvance();
57954
+ i0.ɵɵstyleProp("background-color", ctx_r0.dotColor());
57955
+ i0.ɵɵadvance();
57956
+ i0.ɵɵstyleProp("background-color", ctx_r0.dotColor());
57860
57957
  } }
57861
57958
  function ContentGenerationProgressComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
57862
57959
  i0.ɵɵelement(0, "div", 27);
@@ -57874,8 +57971,9 @@ class ContentGenerationProgressComponent {
57874
57971
  this.showIcon = input(true, ...(ngDevMode ? [{ debugName: "showIcon" }] : []));
57875
57972
  this.progressPercentage = computed(() => {
57876
57973
  const status = this.itemStatus();
57877
- if (!status?.percentageComplete)
57974
+ if (!status?.percentageComplete) {
57878
57975
  return 0;
57976
+ }
57879
57977
  return Math.round(Math.min(100, Math.max(0, status.percentageComplete)));
57880
57978
  }, ...(ngDevMode ? [{ debugName: "progressPercentage" }] : []));
57881
57979
  this.progressMessage = computed(() => {
@@ -57929,6 +58027,9 @@ class ContentGenerationProgressComponent {
57929
58027
  ? 'bg-blue-400 shadow-lg shadow-blue-400/60'
57930
58028
  : 'bg-cyan-300 shadow-lg shadow-cyan-300/60';
57931
58029
  }, ...(ngDevMode ? [{ debugName: "dotClasses" }] : []));
58030
+ this.dotColor = computed(() => {
58031
+ return this.isLightMode() ? '#60a5fa' : '#67e8f9';
58032
+ }, ...(ngDevMode ? [{ debugName: "dotColor" }] : []));
57932
58033
  this.progressGlowClasses = computed(() => {
57933
58034
  return this.isLightMode()
57934
58035
  ? 'bg-blue-400 shadow-xl'
@@ -57941,7 +58042,7 @@ class ContentGenerationProgressComponent {
57941
58042
  }, ...(ngDevMode ? [{ debugName: "percentageClasses" }] : []));
57942
58043
  }
57943
58044
  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) {
58045
+ 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", 2, "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", "pointer-events-none", 2, "right", "0", "top", "-4px", "bottom", "-4px", "overflow", "visible", 3, "left"], [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", "pointer-events-none", 2, "right", "0", "top", "-4px", "bottom", "-4px", "overflow", "visible"], [1, "animated-dot", "animated-dot-1"], [1, "animated-dot", "animated-dot-2"], [1, "animated-dot", "animated-dot-3"], [1, "animated-dot", "animated-dot-4"], [1, "animated-dot", "animated-dot-5"], [1, "animated-dot", "animated-dot-6"], [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
58046
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4);
57946
58047
  i0.ɵɵnamespaceSVG();
57947
58048
  i0.ɵɵelementStart(5, "svg", 5);
@@ -57964,7 +58065,7 @@ class ContentGenerationProgressComponent {
57964
58065
  i0.ɵɵelementStart(18, "div", 15);
57965
58066
  i0.ɵɵelement(19, "div", 16);
57966
58067
  i0.ɵɵelementEnd();
57967
- i0.ɵɵconditionalCreate(20, ContentGenerationProgressComponent_Conditional_20_Template, 7, 17, "div", 17);
58068
+ i0.ɵɵconditionalCreate(20, ContentGenerationProgressComponent_Conditional_20_Template, 7, 14, "div", 17);
57968
58069
  i0.ɵɵconditionalCreate(21, ContentGenerationProgressComponent_Conditional_21_Template, 1, 3, "div", 18);
57969
58070
  i0.ɵɵelementEnd();
57970
58071
  i0.ɵɵelementStart(22, "div", 11)(23, "span", 19);
@@ -58001,92 +58102,158 @@ class ContentGenerationProgressComponent {
58001
58102
  i0.ɵɵproperty("ngClass", ctx.percentageClasses());
58002
58103
  i0.ɵɵadvance();
58003
58104
  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 }); }
58105
+ } }, 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%{left:0%;opacity:0}3%{left:3%;opacity:1}97%{left:97%;opacity:1}to{left:100%;opacity:0}}@keyframes _ngcontent-%COMP%_dots-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.4)}}@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}.animated-dot[_ngcontent-%COMP%]{position:absolute;top:50%;width:12px;height:12px;border-radius:50%;margin-top:-6px;margin-left:-6px;animation:_ngcontent-%COMP%_dots-move 6s linear infinite,_ngcontent-%COMP%_dots-pulse 2s ease-in-out infinite;will-change:left,transform,opacity;z-index:20;box-shadow:0 0 8px currentColor,0 0 16px currentColor}.animated-dot-1[_ngcontent-%COMP%]{animation-delay:0s,0s}.animated-dot-2[_ngcontent-%COMP%]{animation-delay:1s,0s}.animated-dot-3[_ngcontent-%COMP%]{animation-delay:2s,0s}.animated-dot-4[_ngcontent-%COMP%]{animation-delay:3s,0s}.animated-dot-5[_ngcontent-%COMP%]{animation-delay:4s,0s}.animated-dot-6[_ngcontent-%COMP%]{animation-delay:5s,0s}"], changeDetection: 0 }); }
58005
58106
  }
58006
58107
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContentGenerationProgressComponent, [{
58007
58108
  type: Component,
58008
- args: [{ selector: 'symphiq-content-generation-progress', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
58009
- <div [ngClass]="containerClasses()" class="min-h-[60vh] flex items-center justify-center px-4 py-12">
58010
- <div class="max-w-3xl w-full space-y-8">
58011
- <!-- Title Section -->
58012
- <div class="text-center space-y-3">
58013
- <div class="flex items-center justify-center mb-4">
58014
- <div [ngClass]="iconContainerClasses()" class="relative w-20 h-20 rounded-2xl flex items-center justify-center icon-pulse">
58015
- <svg class="w-10 h-10" fill="none" stroke="currentColor" viewBox="0 0 24 24">
58016
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
58017
- </svg>
58018
- <div class="absolute inset-0 rounded-2xl icon-glow"></div>
58019
- </div>
58020
- </div>
58021
-
58022
- <h2 [ngClass]="titleClasses()" class="text-3xl sm:text-4xl font-bold">
58023
- {{ title() }}
58024
- </h2>
58025
-
58026
- <p [ngClass]="subtitleClasses()" class="text-base sm:text-lg max-w-2xl mx-auto">
58027
- {{ subtitle() }}
58028
- </p>
58029
- </div>
58030
-
58031
- <!-- Progress Section -->
58032
- <div class="space-y-4">
58033
- <!-- Progress Message -->
58034
- <div class="text-center">
58035
- <p [ngClass]="progressMessageClasses()" class="text-lg sm:text-xl font-medium message-fade">
58036
- {{ progressMessage() }}
58037
- </p>
58038
- </div>
58039
-
58040
- <!-- Progress Bar Container -->
58041
- <div [ngClass]="progressBarContainerClasses()" class="relative h-3 rounded-full overflow-visible">
58042
- <!-- Background Track -->
58043
- <div [ngClass]="progressBarBackgroundClasses()" class="absolute inset-0 rounded-full"></div>
58044
-
58045
- <!-- Solid Fill with Gradient -->
58046
- <div
58047
- [ngClass]="progressBarFillClasses()"
58048
- [style.width.%]="progressPercentage()"
58049
- class="absolute inset-y-0 left-0 rounded-full transition-all duration-700 ease-out overflow-hidden">
58050
- <!-- Inner shimmer effect -->
58051
- <div class="absolute inset-0 shimmer-effect"></div>
58052
- </div>
58053
-
58054
- <!-- Animated Dots Overlay (shows beyond the solid bar) -->
58055
- @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>
58064
- </div>
58065
- }
58066
-
58067
- <!-- Glow effect at the progress edge -->
58068
- @if (progressPercentage() > 0 && progressPercentage() < 100) {
58069
- <div
58070
- [ngClass]="progressGlowClasses()"
58071
- [style.left.%]="progressPercentage()"
58072
- class="absolute top-1/2 -translate-y-1/2 w-4 h-4 rounded-full blur-md transition-all duration-700 ease-out"
58073
- style="margin-left: -8px;">
58074
- </div>
58075
- }
58076
- </div>
58077
-
58078
- <!-- Progress Percentage -->
58079
- <div class="text-center">
58080
- <span [ngClass]="percentageClasses()" class="text-sm font-medium tabular-nums">
58081
- {{ progressPercentage() }}% complete
58082
- </span>
58083
- </div>
58084
- </div>
58085
- </div>
58086
- </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"] }]
58109
+ args: [{ selector: 'symphiq-content-generation-progress', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
58110
+ <div [ngClass]="containerClasses()" class="min-h-[60vh] flex items-center justify-center px-4 py-12">
58111
+ <div class="max-w-3xl w-full space-y-8">
58112
+ <!-- Title Section -->
58113
+ <div class="text-center space-y-3">
58114
+ <div class="flex items-center justify-center mb-4">
58115
+ <div [ngClass]="iconContainerClasses()" class="relative w-20 h-20 rounded-2xl flex items-center justify-center icon-pulse">
58116
+ <svg class="w-10 h-10" fill="none" stroke="currentColor" viewBox="0 0 24 24">
58117
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
58118
+ </svg>
58119
+ <div class="absolute inset-0 rounded-2xl icon-glow"></div>
58120
+ </div>
58121
+ </div>
58122
+
58123
+ <h2 [ngClass]="titleClasses()" class="text-3xl sm:text-4xl font-bold">
58124
+ {{ title() }}
58125
+ </h2>
58126
+
58127
+ <p [ngClass]="subtitleClasses()" class="text-base sm:text-lg max-w-2xl mx-auto">
58128
+ {{ subtitle() }}
58129
+ </p>
58130
+ </div>
58131
+
58132
+ <!-- Progress Section -->
58133
+ <div class="space-y-4">
58134
+ <!-- Progress Message -->
58135
+ <div class="text-center">
58136
+ <p [ngClass]="progressMessageClasses()" class="text-lg sm:text-xl font-medium message-fade">
58137
+ {{ progressMessage() }}
58138
+ </p>
58139
+ </div>
58140
+
58141
+ <!-- Progress Bar Container -->
58142
+ <div [ngClass]="progressBarContainerClasses()" class="relative h-3 rounded-full" style="overflow: visible;">
58143
+ <!-- Background Track -->
58144
+ <div [ngClass]="progressBarBackgroundClasses()" class="absolute inset-0 rounded-full"></div>
58145
+
58146
+ <!-- Solid Fill with Gradient -->
58147
+ <div
58148
+ [ngClass]="progressBarFillClasses()"
58149
+ [style.width.%]="progressPercentage()"
58150
+ class="absolute inset-y-0 left-0 rounded-full transition-all duration-700 ease-out overflow-hidden">
58151
+ <!-- Inner shimmer effect -->
58152
+ <div class="absolute inset-0 shimmer-effect"></div>
58153
+ </div>
58154
+
58155
+ <!-- Animated Dots Overlay (container positioned at progress edge, dots animate within) -->
58156
+ @if (progressPercentage() > 0 && progressPercentage() < 100) {
58157
+ <div
58158
+ class="absolute pointer-events-none"
58159
+ [style.left.%]="progressPercentage()"
58160
+ style="right: 0; top: -4px; bottom: -4px; overflow: visible;">
58161
+ <div class="animated-dot animated-dot-1" [style.background-color]="dotColor()"></div>
58162
+ <div class="animated-dot animated-dot-2" [style.background-color]="dotColor()"></div>
58163
+ <div class="animated-dot animated-dot-3" [style.background-color]="dotColor()"></div>
58164
+ <div class="animated-dot animated-dot-4" [style.background-color]="dotColor()"></div>
58165
+ <div class="animated-dot animated-dot-5" [style.background-color]="dotColor()"></div>
58166
+ <div class="animated-dot animated-dot-6" [style.background-color]="dotColor()"></div>
58167
+ </div>
58168
+ }
58169
+
58170
+ <!-- Glow effect at the progress edge -->
58171
+ @if (progressPercentage() > 0 && progressPercentage() < 100) {
58172
+ <div
58173
+ [ngClass]="progressGlowClasses()"
58174
+ [style.left.%]="progressPercentage()"
58175
+ class="absolute top-1/2 -translate-y-1/2 w-4 h-4 rounded-full blur-md transition-all duration-700 ease-out"
58176
+ style="margin-left: -8px;">
58177
+ </div>
58178
+ }
58179
+ </div>
58180
+
58181
+ <!-- Progress Percentage -->
58182
+ <div class="text-center">
58183
+ <span [ngClass]="percentageClasses()" class="text-sm font-medium tabular-nums">
58184
+ {{ progressPercentage() }}% complete
58185
+ </span>
58186
+ </div>
58187
+ </div>
58188
+ </div>
58189
+ </div>
58190
+ `, 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%{left:0%;opacity:0}3%{left:3%;opacity:1}97%{left:97%;opacity:1}to{left:100%;opacity:0}}@keyframes dots-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.4)}}@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}.animated-dot{position:absolute;top:50%;width:12px;height:12px;border-radius:50%;margin-top:-6px;margin-left:-6px;animation:dots-move 6s linear infinite,dots-pulse 2s ease-in-out infinite;will-change:left,transform,opacity;z-index:20;box-shadow:0 0 8px currentColor,0 0 16px currentColor}.animated-dot-1{animation-delay:0s,0s}.animated-dot-2{animation-delay:1s,0s}.animated-dot-3{animation-delay:2s,0s}.animated-dot-4{animation-delay:3s,0s}.animated-dot-5{animation-delay:4s,0s}.animated-dot-6{animation-delay:5s,0s}\n"] }]
58088
58191
  }], 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 }); })();
58192
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ContentGenerationProgressComponent, { className: "ContentGenerationProgressComponent", filePath: "lib/components/shared/content-generation-progress.component.ts", lineNumber: 222 }); })();
58193
+
58194
+ class ContentGenerationProgressWithConfettiComponent {
58195
+ constructor() {
58196
+ this.itemStatus = input(...(ngDevMode ? [undefined, { debugName: "itemStatus" }] : []));
58197
+ this.title = input('Generating Your Analysis', ...(ngDevMode ? [{ debugName: "title" }] : []));
58198
+ 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" }] : []));
58199
+ this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
58200
+ this.showIcon = input(true, ...(ngDevMode ? [{ debugName: "showIcon" }] : []));
58201
+ this.profile = input(...(ngDevMode ? [undefined, { debugName: "profile" }] : []));
58202
+ this.confettiIntensity = input('normal', ...(ngDevMode ? [{ debugName: "confettiIntensity" }] : []));
58203
+ this.enableConfetti = input(true, ...(ngDevMode ? [{ debugName: "enableConfetti" }] : []));
58204
+ this.confettiDelay = input(200, ...(ngDevMode ? [{ debugName: "confettiDelay" }] : []));
58205
+ this.confettiService = inject(ConfettiService);
58206
+ this.hasCelebrated = signal(false, ...(ngDevMode ? [{ debugName: "hasCelebrated" }] : []));
58207
+ effect(() => {
58208
+ const currentProfile = this.profile();
58209
+ const currentStatus = currentProfile?.selfContentStatus;
58210
+ if (!this.enableConfetti()) {
58211
+ return;
58212
+ }
58213
+ if (currentStatus === AiDynamicContentStatusEnum.GENERATED && !this.hasCelebrated()) {
58214
+ untracked(() => {
58215
+ this.confettiService.trigger({
58216
+ intensity: this.confettiIntensity(),
58217
+ delay: this.confettiDelay(),
58218
+ viewMode: this.viewMode(),
58219
+ });
58220
+ this.hasCelebrated.set(true);
58221
+ });
58222
+ }
58223
+ if (currentStatus === AiDynamicContentStatusEnum.REQUESTED ||
58224
+ currentStatus === AiDynamicContentStatusEnum.GENERATING) {
58225
+ untracked(() => {
58226
+ this.hasCelebrated.set(false);
58227
+ });
58228
+ }
58229
+ });
58230
+ }
58231
+ static { this.ɵfac = function ContentGenerationProgressWithConfettiComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ContentGenerationProgressWithConfettiComponent)(); }; }
58232
+ 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) {
58233
+ i0.ɵɵelement(0, "symphiq-content-generation-progress", 0);
58234
+ } if (rf & 2) {
58235
+ i0.ɵɵproperty("itemStatus", ctx.itemStatus())("title", ctx.title())("subtitle", ctx.subtitle())("viewMode", ctx.viewMode())("showIcon", ctx.showIcon());
58236
+ } }, dependencies: [ContentGenerationProgressComponent], encapsulation: 2, changeDetection: 0 }); }
58237
+ }
58238
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContentGenerationProgressWithConfettiComponent, [{
58239
+ type: Component,
58240
+ args: [{
58241
+ selector: 'symphiq-content-generation-progress-with-confetti',
58242
+ standalone: true,
58243
+ imports: [ContentGenerationProgressComponent],
58244
+ changeDetection: ChangeDetectionStrategy.OnPush,
58245
+ template: `
58246
+ <symphiq-content-generation-progress
58247
+ [itemStatus]="itemStatus()"
58248
+ [title]="title()"
58249
+ [subtitle]="subtitle()"
58250
+ [viewMode]="viewMode()"
58251
+ [showIcon]="showIcon()"
58252
+ />
58253
+ `
58254
+ }]
58255
+ }], () => [], { 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 }] }] }); })();
58256
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ContentGenerationProgressWithConfettiComponent, { className: "ContentGenerationProgressWithConfettiComponent", filePath: "lib/components/shared/content-generation-progress-with-confetti.component.ts", lineNumber: 29 }); })();
58090
58257
 
58091
58258
  const _c0$n = () => [];
58092
58259
  function SymphiqBusinessAnalysisDashboardComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
@@ -58174,13 +58341,13 @@ function SymphiqBusinessAnalysisDashboardComponent_Conditional_25_Conditional_0_
58174
58341
  } }
58175
58342
  function SymphiqBusinessAnalysisDashboardComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
58176
58343
  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);
58344
+ i0.ɵɵelement(1, "symphiq-content-generation-progress-with-confetti", 28);
58178
58345
  } if (rf & 2) {
58179
- let tmp_4_0;
58346
+ let tmp_6_0;
58180
58347
  const ctx_r1 = i0.ɵɵnextContext();
58181
58348
  i0.ɵɵconditional(!ctx_r1.isOnboarded() ? 0 : -1);
58182
58349
  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.");
58350
+ 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
58351
  } }
58185
58352
  function SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
58186
58353
  const _r6 = i0.ɵɵgetCurrentView();
@@ -58760,7 +58927,7 @@ class SymphiqBusinessAnalysisDashboardComponent {
58760
58927
  static { this.ɵfac = function SymphiqBusinessAnalysisDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SymphiqBusinessAnalysisDashboardComponent)(); }; }
58761
58928
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SymphiqBusinessAnalysisDashboardComponent, selectors: [["symphiq-business-analysis-dashboard"]], hostBindings: function SymphiqBusinessAnalysisDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
58762
58929
  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) {
58930
+ } }, 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
58931
  i0.ɵɵelementStart(0, "div", 0)(1, "div");
58765
58932
  i0.ɵɵelement(2, "div", 1);
58766
58933
  i0.ɵɵelementEnd();
@@ -58781,7 +58948,7 @@ class SymphiqBusinessAnalysisDashboardComponent {
58781
58948
  i0.ɵɵconditionalCreate(23, SymphiqBusinessAnalysisDashboardComponent_Conditional_23_Template, 5, 3);
58782
58949
  i0.ɵɵelementEnd()()()()();
58783
58950
  i0.ɵɵelementStart(24, "main", 13);
58784
- i0.ɵɵconditionalCreate(25, SymphiqBusinessAnalysisDashboardComponent_Conditional_25_Template, 2, 5)(26, SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Template, 2, 1);
58951
+ i0.ɵɵconditionalCreate(25, SymphiqBusinessAnalysisDashboardComponent_Conditional_25_Template, 2, 7)(26, SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Template, 2, 1);
58785
58952
  i0.ɵɵelementEnd();
58786
58953
  i0.ɵɵconditionalCreate(27, SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Template, 1, 4, "symphiq-section-navigation", 14);
58787
58954
  i0.ɵɵconditionalCreate(28, SymphiqBusinessAnalysisDashboardComponent_Conditional_28_Template, 1, 4, "symphiq-floating-toc", 14);
@@ -58853,259 +59020,261 @@ class SymphiqBusinessAnalysisDashboardComponent {
58853
59020
  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
59021
  i0.ɵɵadvance();
58855
59022
  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 }); }
59023
+ } }, 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
59024
  }
58858
59025
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SymphiqBusinessAnalysisDashboardComponent, [{
58859
59026
  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>
59027
+ 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: `
59028
+ <div [ngClass]="getContainerClasses()">
59029
+ <!-- Scroll Progress Bar (fixed at top) -->
59030
+ <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'">
59031
+ <div
59032
+ [style.width.%]="scrollProgress()"
59033
+ [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
59034
+ class="h-full transition-all duration-200 ease-out">
59035
+ </div>
59036
+ </div>
59037
+
59038
+ <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>
59039
+
59040
+ <div class="relative z-[51]">
59041
+ <header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50">
59042
+ <!-- Expanded Header (default state) -->
59043
+ <div
59044
+ class="transition-all duration-300 ease-in-out overflow-hidden"
59045
+ [class.max-h-0]="headerScrollService.isScrolled()"
59046
+ [class.opacity-0]="headerScrollService.isScrolled()"
59047
+ [class.max-h-96]="!headerScrollService.isScrolled()"
59048
+ [class.opacity-100]="!headerScrollService.isScrolled()">
59049
+ <div
59050
+ class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"
59051
+ [class.pointer-events-none]="headerScrollService.isScrolled()"
59052
+ [class.pointer-events-auto]="!headerScrollService.isScrolled()">
59053
+ <div class="flex items-center justify-between">
59054
+ <div>
59055
+ <h1 [ngClass]="getMainTitleClasses()">
59056
+ {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
59057
+ </h1>
59058
+ <p [ngClass]="getSubtitleClasses()">
59059
+ Business Profile & Analysis
59060
+ </p>
59061
+ </div>
59062
+ @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
59063
+ <div class="flex items-center gap-2">
59064
+ <symphiq-search-button
59065
+ [isLightMode]="isLightMode()"
59066
+ (searchClick)="openSearch()"
59067
+ />
59068
+ <button
59069
+ type="button"
59070
+ (click)="openViewModeSwitcher()"
59071
+ [ngClass]="getViewModeButtonClasses()"
59072
+ 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">
59073
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
59074
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
59075
+ <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>
59076
+ </svg>
59077
+ <span>{{ displayModeLabel() }}</span>
59078
+ </button>
59079
+ </div>
59080
+ }
59081
+ </div>
59082
+ </div>
59083
+ </div>
59084
+
59085
+ <!-- Condensed Header (scrolled state) -->
59086
+ <div
59087
+ class="transition-all duration-300 ease-in-out overflow-hidden"
59088
+ [class.max-h-0]="!headerScrollService.isScrolled()"
59089
+ [class.opacity-0]="!headerScrollService.isScrolled()"
59090
+ [class.max-h-20]="headerScrollService.isScrolled()"
59091
+ [class.opacity-100]="headerScrollService.isScrolled()">
59092
+ <div
59093
+ class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"
59094
+ [class.pointer-events-none]="!headerScrollService.isScrolled()"
59095
+ [class.pointer-events-auto]="headerScrollService.isScrolled()">
59096
+ <div class="flex items-center justify-between">
59097
+ <div class="flex-1 min-w-0 mr-4">
59098
+ <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'">
59099
+ {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
59100
+ </h1>
59101
+ </div>
59102
+ <div class="flex items-center gap-4">
59103
+ @if (!isSimplifiedView()) {
59104
+ <div class="flex items-center gap-2 text-sm flex-shrink-0">
59105
+ <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()">
59106
+ {{ currentSectionTitle() }}
59107
+ </span>
59108
+ @if (currentSubsectionTitle()) {
59109
+ <span [ngClass]="isLightMode() ? 'text-slate-400' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">›</span>
59110
+ <span [ngClass]="isLightMode() ? 'text-slate-500' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">
59111
+ {{ currentSubsectionTitle() }}
59112
+ </span>
59113
+ }
59114
+ </div>
59115
+ }
59116
+ @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
59117
+ <symphiq-search-button
59118
+ [isLightMode]="isLightMode()"
59119
+ [minimized]="true"
59120
+ (searchClick)="openSearch()"
59121
+ />
59122
+ <button
59123
+ type="button"
59124
+ (click)="openViewModeSwitcher()"
59125
+ [ngClass]="getViewModeButtonClasses()"
59126
+ 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">
59127
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
59128
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
59129
+ <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>
59130
+ </svg>
59131
+ </button>
59132
+ }
59133
+ </div>
59134
+ </div>
59135
+ </div>
59136
+ </div>
59137
+ </header>
59138
+
59139
+ <main class="relative">
59140
+ @if (isContentGenerating()) {
59141
+ <!-- Journey Progress Banner (always show when not onboarded) -->
59142
+ @if (!isOnboarded()) {
59143
+ <symphiq-journey-progress-indicator
59144
+ [viewMode]="viewMode()"
59145
+ [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
59146
+ [showNextStepAction]="false"
59147
+ [forDemo]="forDemo()"
59148
+ [maxAccessibleStepId]="maxAccessibleStepId()"
59149
+ (stepClick)="stepClick.emit($event)"
59150
+ (nextStepClick)="nextStepClick.emit()"
59151
+ />
59152
+ }
59153
+
59154
+ <!-- Content Generation Progress Component -->
59155
+ <symphiq-content-generation-progress-with-confetti
59156
+ [viewMode]="viewMode()"
59157
+ [itemStatus]="itemStatus()"
59158
+ [profile]="profile()"
59159
+ [confettiIntensity]="'celebration'"
59160
+ [title]="'We are generating a new Business Analysis for ' + (currentProfile()?.profileStructured?.businessName || 'your business') + '.'"
59161
+ [subtitle]="'It will appear here when ready. You can check back later as this will take a few minutes to complete.'"
59162
+ />
59163
+ } @else {
59164
+ @if (isSimplifiedView()) {
59165
+ <!-- Journey Progress Banner - Full Width Sticky (only show when not onboarded) -->
59166
+ @if (!isOnboarded()) {
59167
+ <symphiq-journey-progress-indicator
59168
+ [viewMode]="viewMode()"
59169
+ [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
59170
+ [showNextStepAction]="showNextStepAction()"
59171
+ [forDemo]="forDemo()"
59172
+ [maxAccessibleStepId]="maxAccessibleStepId()"
59173
+ (stepClick)="stepClick.emit($event)"
59174
+ (nextStepClick)="nextStepClick.emit()"
59175
+ />
59176
+ }
59177
+
59178
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
59179
+ <div class="mb-8">
59180
+ <symphiq-welcome-banner
59181
+ [viewMode]="viewMode()"
59182
+ [businessName]="currentProfile()?.profileStructured?.businessName || 'your business'"
59183
+ [isOnboarded]="isOnboarded()"
59184
+ />
59185
+ </div>
59186
+
59187
+ <div class="mb-8">
59188
+ <symphiq-recommendations-tiled-grid
59189
+ [recommendations]="recommendationItems()"
59190
+ [viewMode]="viewMode()"
59191
+ (viewMoreClick)="openRecommendationDetailsModal($event)"
59192
+ />
59193
+ </div>
59194
+
59195
+ <div>
59196
+ <symphiq-collapsible-section-group
59197
+ [sections]="nonRecommendationSections()"
59198
+ [viewMode]="viewMode()"
59199
+ />
59200
+ </div>
59201
+ </div>
59202
+ } @else {
59203
+ @for (section of sections(); track trackBySectionId($index, section); let idx = $index; let last = $last) {
59204
+ <symphiq-profile-section
59205
+ [section]="section"
59206
+ [viewMode]="viewMode()"
59207
+ [forceExpanded]="!isCompactView()"
59208
+ />
59209
+ @if (!last) {
59210
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
59211
+ <symphiq-section-divider
59212
+ [viewMode]="viewMode()"
59213
+ [subsections]="sections()[idx + 1].subsections || []" />
59214
+ </div>
59215
+ }
59216
+ }
59217
+ }
59218
+ }
59219
+ </main>
59220
+
59221
+ @if (!isSimplifiedView()) {
59222
+ <symphiq-section-navigation
59223
+ [sections]="sections()"
59224
+ [viewMode]="viewMode()"
59225
+ [embedded]="embedded()"
59226
+ [scrollElement]="scrollElement() ?? undefined"
59227
+ />
59228
+ }
59229
+
59230
+ @if (!isSimplifiedView()) {
59231
+ <symphiq-floating-toc
59232
+ [sections]="sections()"
59233
+ [viewMode]="viewMode()"
59234
+ [embedded]="embedded()"
59235
+ [scrollElement]="scrollElement() ?? undefined"
59236
+ />
59237
+ }
59238
+
59239
+ <symphiq-floating-back-button
59240
+ [viewMode]="viewMode()"
59241
+ [embedded]="embedded()"
59242
+ />
59243
+ </div>
59244
+
59245
+ @if (isLoading()) {
59246
+ <div [ngClass]="getLoadingOverlayClasses()">
59247
+ <div [ngClass]="getSpinnerClasses()"></div>
59248
+ </div>
59249
+ }
59250
+
59251
+ <symphiq-tooltip-container />
59252
+ <symphiq-business-analysis-modal
59253
+ [isLightMode]="isLightMode()"
59254
+ (viewInContextRequested)="handleViewInContext($event)" />
59255
+
59256
+ <symphiq-search-modal
59257
+ [isLightMode]="isLightMode()"
59258
+ [isOpen]="searchService.isSearchOpen()"
59259
+ [searchQuery]="searchService.getSearchQuery()"
59260
+ [results]="searchService.searchResults()"
59261
+ [hasResults]="searchService.hasResults()"
59262
+ [selectedIndex]="selectedSearchIndex()"
59263
+ [placeholder]="'Search sections, items, and analysis...'"
59264
+ (searchChange)="onSearchChange($event)"
59265
+ (resultSelected)="onSearchResultSelected($event)"
59266
+ (close)="closeSearch()"
59267
+ />
59268
+
59269
+ <symphiq-view-mode-switcher-modal
59270
+ [isOpen]="isViewModeSwitcherOpen()"
59271
+ [currentMode]="displayMode()"
59272
+ [viewMode]="viewMode()"
59273
+ [isLoading]="isViewModeSwitching()"
59274
+ (close)="closeViewModeSwitcher()"
59275
+ (modeSelected)="handleDisplayModeChange($event)"
59276
+ />
59277
+ </div>
59109
59278
  `, 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
59279
  }], () => [], { 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
59280
  type: HostListener,
@@ -59114,7 +59283,7 @@ class SymphiqBusinessAnalysisDashboardComponent {
59114
59283
  type: HostListener,
59115
59284
  args: ['document:keydown', ['$event']]
59116
59285
  }] }); })();
59117
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqBusinessAnalysisDashboardComponent, { className: "SymphiqBusinessAnalysisDashboardComponent", filePath: "lib/components/business-analysis-dashboard/symphiq-business-analysis-dashboard.component.ts", lineNumber: 333 }); })();
59286
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqBusinessAnalysisDashboardComponent, { className: "SymphiqBusinessAnalysisDashboardComponent", filePath: "lib/components/business-analysis-dashboard/symphiq-business-analysis-dashboard.component.ts", lineNumber: 335 }); })();
59118
59287
 
59119
59288
  function DashboardHeaderComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
59120
59289
  i0.ɵɵelement(0, "div", 6);
@@ -104874,5 +105043,5 @@ const PROFILE_ANALYSIS_METRIC_SCREEN_PAGE_VIEWS = ({
104874
105043
  * Generated bundle index. Do not edit.
104875
105044
  */
104876
105045
 
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 };
105046
+ 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
105047
  //# sourceMappingURL=symphiq-components.mjs.map