@eric-emg/symphiq-components 1.2.162 → 1.2.164

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.
@@ -2454,11 +2454,11 @@ class ConfettiService {
2454
2454
  '#67e8f9'
2455
2455
  ];
2456
2456
  }
2457
- getColors(customColors) {
2457
+ getColors(customColors, viewMode) {
2458
2458
  if (customColors && customColors.length > 0) {
2459
2459
  return customColors;
2460
2460
  }
2461
- const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
2461
+ const isDarkMode = viewMode === ViewModeEnum.DARK;
2462
2462
  return isDarkMode ? this.darkModeColors : this.lightModeColors;
2463
2463
  }
2464
2464
  getIntensityConfig(intensity) {
@@ -2491,9 +2491,9 @@ class ConfettiService {
2491
2491
  }
2492
2492
  }
2493
2493
  trigger(config = {}) {
2494
- const { intensity = 'normal', colors: customColors, delay = 200 } = config;
2494
+ const { intensity = 'normal', colors: customColors, delay = 200, viewMode } = config;
2495
2495
  const intensityConfig = this.getIntensityConfig(intensity);
2496
- const colors = this.getColors(customColors);
2496
+ const colors = this.getColors(customColors, viewMode);
2497
2497
  setTimeout(() => {
2498
2498
  this.fireConfetti(intensityConfig, colors);
2499
2499
  }, delay);
@@ -54197,6 +54197,7 @@ class SymphiqConnectGaDashboardComponent {
54197
54197
  this.maxAccessibleStepId = input(undefined, ...(ngDevMode ? [{ debugName: "maxAccessibleStepId" }] : []));
54198
54198
  this.stepClick = output();
54199
54199
  this.nextStepClick = output();
54200
+ this.googleButtonClick = output();
54200
54201
  this.headerScrollService = inject(HeaderScrollService);
54201
54202
  this.JourneyStepIdEnum = JourneyStepIdEnum;
54202
54203
  this.COLLAPSE_THRESHOLD = 20;
@@ -54344,7 +54345,7 @@ class SymphiqConnectGaDashboardComponent {
54344
54345
  i0.ɵɵlistener("scroll", function SymphiqConnectGaDashboardComponent_scroll_HostBindingHandler($event) { return ctx.onScroll($event); }, i0.ɵɵresolveWindow);
54345
54346
  } if (rf & 2) {
54346
54347
  i0.ɵɵclassProp("light", ctx.isLightMode())("dark", !ctx.isLightMode());
54347
- } }, 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) {
54348
54349
  i0.ɵɵelementStart(0, "div", 0)(1, "div");
54349
54350
  i0.ɵɵelement(2, "div", 1);
54350
54351
  i0.ɵɵelementEnd();
@@ -54374,6 +54375,7 @@ class SymphiqConnectGaDashboardComponent {
54374
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. ");
54375
54376
  i0.ɵɵelementEnd();
54376
54377
  i0.ɵɵelementStart(34, "div", 22)(35, "button", 23);
54378
+ i0.ɵɵlistener("click", function SymphiqConnectGaDashboardComponent_Template_button_click_35_listener() { return ctx.googleButtonClick.emit(); });
54377
54379
  i0.ɵɵelement(36, "div", 24);
54378
54380
  i0.ɵɵelementStart(37, "div", 25)(38, "div", 26);
54379
54381
  i0.ɵɵnamespaceSVG();
@@ -54579,7 +54581,7 @@ class SymphiqConnectGaDashboardComponent {
54579
54581
 
54580
54582
  <!-- Continue with Google Button -->
54581
54583
  <div class="mb-6">
54582
- <button type="button" class="gsi-material-button">
54584
+ <button type="button" class="gsi-material-button" (click)="googleButtonClick.emit()">
54583
54585
  <div class="gsi-material-button-state"></div>
54584
54586
  <div class="gsi-material-button-content-wrapper">
54585
54587
  <div class="gsi-material-button-icon">
@@ -54655,7 +54657,7 @@ class SymphiqConnectGaDashboardComponent {
54655
54657
  </div>
54656
54658
  </div>
54657
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"] }]
54658
- }], () => [], { 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: [{
54659
54661
  type: HostListener,
54660
54662
  args: ['window:scroll', ['$event']]
54661
54663
  }] }); })();
@@ -57934,29 +57936,27 @@ class CollapsibleSectionGroupComponent {
57934
57936
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollapsibleSectionGroupComponent, { className: "CollapsibleSectionGroupComponent", filePath: "lib/components/business-analysis-dashboard/collapsible-section-group.component.ts", lineNumber: 100 }); })();
57935
57937
 
57936
57938
  function ContentGenerationProgressComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
57937
- i0.ɵɵelementStart(0, "div", 17);
57938
- i0.ɵɵelement(1, "div", 20)(2, "div", 21)(3, "div", 22)(4, "div", 23)(5, "div", 24);
57939
+ i0.ɵɵ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);
57939
57941
  i0.ɵɵelementEnd();
57940
57942
  } if (rf & 2) {
57941
57943
  const ctx_r0 = i0.ɵɵnextContext();
57942
- i0.ɵɵadvance();
57943
57944
  i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
57944
- i0.ɵɵproperty("ngClass", ctx_r0.dotClasses());
57945
57945
  i0.ɵɵadvance();
57946
- i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
57947
- i0.ɵɵproperty("ngClass", ctx_r0.dotClasses());
57946
+ i0.ɵɵstyleProp("background-color", ctx_r0.dotColor());
57948
57947
  i0.ɵɵadvance();
57949
- i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
57950
- i0.ɵɵproperty("ngClass", ctx_r0.dotClasses());
57948
+ i0.ɵɵstyleProp("background-color", ctx_r0.dotColor());
57951
57949
  i0.ɵɵadvance();
57952
- i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
57953
- i0.ɵɵproperty("ngClass", ctx_r0.dotClasses());
57950
+ i0.ɵɵstyleProp("background-color", ctx_r0.dotColor());
57954
57951
  i0.ɵɵadvance();
57955
- i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
57956
- 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());
57957
57957
  } }
57958
57958
  function ContentGenerationProgressComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
57959
- i0.ɵɵelement(0, "div", 25);
57959
+ i0.ɵɵelement(0, "div", 27);
57960
57960
  } if (rf & 2) {
57961
57961
  const ctx_r0 = i0.ɵɵnextContext();
57962
57962
  i0.ɵɵstyleProp("left", ctx_r0.progressPercentage(), "%");
@@ -57971,8 +57971,9 @@ class ContentGenerationProgressComponent {
57971
57971
  this.showIcon = input(true, ...(ngDevMode ? [{ debugName: "showIcon" }] : []));
57972
57972
  this.progressPercentage = computed(() => {
57973
57973
  const status = this.itemStatus();
57974
- if (!status?.percentageComplete)
57974
+ if (!status?.percentageComplete) {
57975
57975
  return 0;
57976
+ }
57976
57977
  return Math.round(Math.min(100, Math.max(0, status.percentageComplete)));
57977
57978
  }, ...(ngDevMode ? [{ debugName: "progressPercentage" }] : []));
57978
57979
  this.progressMessage = computed(() => {
@@ -58026,6 +58027,9 @@ class ContentGenerationProgressComponent {
58026
58027
  ? 'bg-blue-400 shadow-lg shadow-blue-400/60'
58027
58028
  : 'bg-cyan-300 shadow-lg shadow-cyan-300/60';
58028
58029
  }, ...(ngDevMode ? [{ debugName: "dotClasses" }] : []));
58030
+ this.dotColor = computed(() => {
58031
+ return this.isLightMode() ? '#60a5fa' : '#67e8f9';
58032
+ }, ...(ngDevMode ? [{ debugName: "dotColor" }] : []));
58029
58033
  this.progressGlowClasses = computed(() => {
58030
58034
  return this.isLightMode()
58031
58035
  ? 'bg-blue-400 shadow-xl'
@@ -58038,7 +58042,7 @@ class ContentGenerationProgressComponent {
58038
58042
  }, ...(ngDevMode ? [{ debugName: "percentageClasses" }] : []));
58039
58043
  }
58040
58044
  static { this.ɵfac = function ContentGenerationProgressComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ContentGenerationProgressComponent)(); }; }
58041
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContentGenerationProgressComponent, selectors: [["symphiq-content-generation-progress"]], inputs: { itemStatus: [1, "itemStatus"], title: [1, "title"], subtitle: [1, "subtitle"], viewMode: [1, "viewMode"], showIcon: [1, "showIcon"] }, decls: 25, vars: 17, consts: [[1, "min-h-[60vh]", "flex", "items-center", "justify-center", "px-4", "py-12", 3, "ngClass"], [1, "max-w-3xl", "w-full", "space-y-8"], [1, "text-center", "space-y-3"], [1, "flex", "items-center", "justify-center", "mb-4"], [1, "relative", "w-20", "h-20", "rounded-2xl", "flex", "items-center", "justify-center", "icon-pulse", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-10", "h-10"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 10V3L4 14h7v7l9-11h-7z"], [1, "absolute", "inset-0", "rounded-2xl", "icon-glow"], [1, "text-3xl", "sm:text-4xl", "font-bold", 3, "ngClass"], [1, "text-base", "sm:text-lg", "max-w-2xl", "mx-auto", 3, "ngClass"], [1, "space-y-4"], [1, "text-center"], [1, "text-lg", "sm:text-xl", "font-medium", "message-fade", 3, "ngClass"], [1, "relative", "h-3", "rounded-full", "overflow-visible", 3, "ngClass"], [1, "absolute", "inset-0", "rounded-full", 3, "ngClass"], [1, "absolute", "inset-y-0", "left-0", "rounded-full", "transition-all", "duration-700", "ease-out", "overflow-hidden", 3, "ngClass"], [1, "absolute", "inset-0", "shimmer-effect"], [1, "absolute", "inset-0", "overflow-visible", "pointer-events-none"], [1, "absolute", "top-1/2", "-translate-y-1/2", "w-4", "h-4", "rounded-full", "blur-md", "transition-all", "duration-700", "ease-out", 2, "margin-left", "-8px", 3, "ngClass", "left"], [1, "text-sm", "font-medium", "tabular-nums", 3, "ngClass"], [1, "dot", "dot-1", 3, "ngClass"], [1, "dot", "dot-2", 3, "ngClass"], [1, "dot", "dot-3", 3, "ngClass"], [1, "dot", "dot-4", 3, "ngClass"], [1, "dot", "dot-5", 3, "ngClass"], [1, "absolute", "top-1/2", "-translate-y-1/2", "w-4", "h-4", "rounded-full", "blur-md", "transition-all", "duration-700", "ease-out", 2, "margin-left", "-8px", 3, "ngClass"]], template: function ContentGenerationProgressComponent_Template(rf, ctx) { if (rf & 1) {
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) {
58042
58046
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4);
58043
58047
  i0.ɵɵnamespaceSVG();
58044
58048
  i0.ɵɵelementStart(5, "svg", 5);
@@ -58061,7 +58065,7 @@ class ContentGenerationProgressComponent {
58061
58065
  i0.ɵɵelementStart(18, "div", 15);
58062
58066
  i0.ɵɵelement(19, "div", 16);
58063
58067
  i0.ɵɵelementEnd();
58064
- i0.ɵɵconditionalCreate(20, ContentGenerationProgressComponent_Conditional_20_Template, 6, 15, "div", 17);
58068
+ i0.ɵɵconditionalCreate(20, ContentGenerationProgressComponent_Conditional_20_Template, 7, 14, "div", 17);
58065
58069
  i0.ɵɵconditionalCreate(21, ContentGenerationProgressComponent_Conditional_21_Template, 1, 3, "div", 18);
58066
58070
  i0.ɵɵelementEnd();
58067
58071
  i0.ɵɵelementStart(22, "div", 11)(23, "span", 19);
@@ -58098,90 +58102,94 @@ class ContentGenerationProgressComponent {
58098
58102
  i0.ɵɵproperty("ngClass", ctx.percentageClasses());
58099
58103
  i0.ɵɵadvance();
58100
58104
  i0.ɵɵtextInterpolate1(" ", ctx.progressPercentage(), "% complete ");
58101
- } }, dependencies: [CommonModule, i1$1.NgClass], styles: ["@keyframes _ngcontent-%COMP%_icon-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.9}}@keyframes _ngcontent-%COMP%_icon-glow-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.6;transform:scale(1.2)}}@keyframes _ngcontent-%COMP%_shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes _ngcontent-%COMP%_dots-move{0%{transform:translate(0) scale(.8);opacity:0}10%{opacity:1;transform:translate(10px) scale(1)}25%{transform:translate(30px) scale(1.2)}40%{transform:translate(50px) scale(1)}55%{transform:translate(70px) scale(1.2)}70%{transform:translate(90px) scale(1)}85%{transform:translate(110px) scale(1.2);opacity:1}to{transform:translate(130px) scale(.8);opacity:0}}@keyframes _ngcontent-%COMP%_message-fade{0%,to{opacity:1}50%{opacity:.7}}.icon-pulse[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_icon-pulse 2s ease-in-out infinite}.icon-glow[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_icon-glow-pulse 2s ease-in-out infinite}.shimmer-effect[_ngcontent-%COMP%]{background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.3) 50%,transparent 100%);animation:_ngcontent-%COMP%_shimmer 2s ease-in-out infinite}.message-fade[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_message-fade 3s ease-in-out infinite}.dot[_ngcontent-%COMP%]{position:absolute;top:50%;width:6px;height:6px;border-radius:50%;margin-top:-3px;margin-left:-3px;animation:_ngcontent-%COMP%_dots-move 3s ease-in-out infinite}.dot-1[_ngcontent-%COMP%]{animation-delay:0s}.dot-2[_ngcontent-%COMP%]{animation-delay:.5s}.dot-3[_ngcontent-%COMP%]{animation-delay:1s}.dot-4[_ngcontent-%COMP%]{animation-delay:1.5s}.dot-5[_ngcontent-%COMP%]{animation-delay:2s}@media (prefers-reduced-motion: reduce){.icon-pulse[_ngcontent-%COMP%], .icon-glow[_ngcontent-%COMP%], .shimmer-effect[_ngcontent-%COMP%], .message-fade[_ngcontent-%COMP%], .dot[_ngcontent-%COMP%]{animation:none}}"], changeDetection: 0 }); }
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 }); }
58102
58106
  }
58103
58107
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContentGenerationProgressComponent, [{
58104
58108
  type: Component,
58105
- args: [{ selector: 'symphiq-content-generation-progress', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
58106
- <div [ngClass]="containerClasses()" class="min-h-[60vh] flex items-center justify-center px-4 py-12">
58107
- <div class="max-w-3xl w-full space-y-8">
58108
- <!-- Title Section -->
58109
- <div class="text-center space-y-3">
58110
- <div class="flex items-center justify-center mb-4">
58111
- <div [ngClass]="iconContainerClasses()" class="relative w-20 h-20 rounded-2xl flex items-center justify-center icon-pulse">
58112
- <svg class="w-10 h-10" fill="none" stroke="currentColor" viewBox="0 0 24 24">
58113
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
58114
- </svg>
58115
- <div class="absolute inset-0 rounded-2xl icon-glow"></div>
58116
- </div>
58117
- </div>
58118
-
58119
- <h2 [ngClass]="titleClasses()" class="text-3xl sm:text-4xl font-bold">
58120
- {{ title() }}
58121
- </h2>
58122
-
58123
- <p [ngClass]="subtitleClasses()" class="text-base sm:text-lg max-w-2xl mx-auto">
58124
- {{ subtitle() }}
58125
- </p>
58126
- </div>
58127
-
58128
- <!-- Progress Section -->
58129
- <div class="space-y-4">
58130
- <!-- Progress Message -->
58131
- <div class="text-center">
58132
- <p [ngClass]="progressMessageClasses()" class="text-lg sm:text-xl font-medium message-fade">
58133
- {{ progressMessage() }}
58134
- </p>
58135
- </div>
58136
-
58137
- <!-- Progress Bar Container -->
58138
- <div [ngClass]="progressBarContainerClasses()" class="relative h-3 rounded-full overflow-visible">
58139
- <!-- Background Track -->
58140
- <div [ngClass]="progressBarBackgroundClasses()" class="absolute inset-0 rounded-full"></div>
58141
-
58142
- <!-- Solid Fill with Gradient -->
58143
- <div
58144
- [ngClass]="progressBarFillClasses()"
58145
- [style.width.%]="progressPercentage()"
58146
- class="absolute inset-y-0 left-0 rounded-full transition-all duration-700 ease-out overflow-hidden">
58147
- <!-- Inner shimmer effect -->
58148
- <div class="absolute inset-0 shimmer-effect"></div>
58149
- </div>
58150
-
58151
- <!-- Animated Dots Overlay (emerges from the solid bar edge) -->
58152
- @if (progressPercentage() > 0 && progressPercentage() < 100) {
58153
- <div class="absolute inset-0 overflow-visible pointer-events-none">
58154
- <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-1"></div>
58155
- <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-2"></div>
58156
- <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-3"></div>
58157
- <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-4"></div>
58158
- <div [ngClass]="dotClasses()" [style.left.%]="progressPercentage()" class="dot dot-5"></div>
58159
- </div>
58160
- }
58161
-
58162
- <!-- Glow effect at the progress edge -->
58163
- @if (progressPercentage() > 0 && progressPercentage() < 100) {
58164
- <div
58165
- [ngClass]="progressGlowClasses()"
58166
- [style.left.%]="progressPercentage()"
58167
- class="absolute top-1/2 -translate-y-1/2 w-4 h-4 rounded-full blur-md transition-all duration-700 ease-out"
58168
- style="margin-left: -8px;">
58169
- </div>
58170
- }
58171
- </div>
58172
-
58173
- <!-- Progress Percentage -->
58174
- <div class="text-center">
58175
- <span [ngClass]="percentageClasses()" class="text-sm font-medium tabular-nums">
58176
- {{ progressPercentage() }}% complete
58177
- </span>
58178
- </div>
58179
- </div>
58180
- </div>
58181
- </div>
58182
- `, styles: ["@keyframes icon-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.05);opacity:.9}}@keyframes icon-glow-pulse{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.6;transform:scale(1.2)}}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes dots-move{0%{transform:translate(0) scale(.8);opacity:0}10%{opacity:1;transform:translate(10px) scale(1)}25%{transform:translate(30px) scale(1.2)}40%{transform:translate(50px) scale(1)}55%{transform:translate(70px) scale(1.2)}70%{transform:translate(90px) scale(1)}85%{transform:translate(110px) scale(1.2);opacity:1}to{transform:translate(130px) scale(.8);opacity:0}}@keyframes message-fade{0%,to{opacity:1}50%{opacity:.7}}.icon-pulse{animation:icon-pulse 2s ease-in-out infinite}.icon-glow{animation:icon-glow-pulse 2s ease-in-out infinite}.shimmer-effect{background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.3) 50%,transparent 100%);animation:shimmer 2s ease-in-out infinite}.message-fade{animation:message-fade 3s ease-in-out infinite}.dot{position:absolute;top:50%;width:6px;height:6px;border-radius:50%;margin-top:-3px;margin-left:-3px;animation:dots-move 3s ease-in-out infinite}.dot-1{animation-delay:0s}.dot-2{animation-delay:.5s}.dot-3{animation-delay:1s}.dot-4{animation-delay:1.5s}.dot-5{animation-delay:2s}@media (prefers-reduced-motion: reduce){.icon-pulse,.icon-glow,.shimmer-effect,.message-fade,.dot{animation:none}}\n"] }]
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"] }]
58183
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 }] }] }); })();
58184
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ContentGenerationProgressComponent, { className: "ContentGenerationProgressComponent", filePath: "lib/components/shared/content-generation-progress.component.ts", lineNumber: 224 }); })();
58192
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ContentGenerationProgressComponent, { className: "ContentGenerationProgressComponent", filePath: "lib/components/shared/content-generation-progress.component.ts", lineNumber: 222 }); })();
58185
58193
 
58186
58194
  class ContentGenerationProgressWithConfettiComponent {
58187
58195
  constructor() {
@@ -58206,7 +58214,8 @@ class ContentGenerationProgressWithConfettiComponent {
58206
58214
  untracked(() => {
58207
58215
  this.confettiService.trigger({
58208
58216
  intensity: this.confettiIntensity(),
58209
- delay: this.confettiDelay()
58217
+ delay: this.confettiDelay(),
58218
+ viewMode: this.viewMode(),
58210
58219
  });
58211
58220
  this.hasCelebrated.set(true);
58212
58221
  });
@@ -58547,6 +58556,18 @@ class SymphiqBusinessAnalysisDashboardComponent {
58547
58556
  this.lastSubsectionTitle = '';
58548
58557
  this.lastScrollY = 0;
58549
58558
  this.scrollDirection = 'down';
58559
+ effect(() => {
58560
+ const profile = this.profile();
58561
+ this.currentProfile.set(profile);
58562
+ this.lookupService.setProfile(profile);
58563
+ if (profile) {
58564
+ this.searchService.setProfile(profile);
58565
+ }
58566
+ if (profile?.profileStructured?.sections) {
58567
+ const recommendations = profile.profileStructured?.recommendations;
58568
+ this.profileContextService.indexProfile(profile.profileStructured.sections, recommendations);
58569
+ }
58570
+ });
58550
58571
  }
58551
58572
  onScroll() {
58552
58573
  this.headerScrollService.handleScroll(this.embedded());
@@ -58707,16 +58728,6 @@ class SymphiqBusinessAnalysisDashboardComponent {
58707
58728
  }, 2000);
58708
58729
  }
58709
58730
  ngOnInit() {
58710
- this.currentProfile.set(this.profile());
58711
- this.lookupService.setProfile(this.profile());
58712
- const profile = this.profile();
58713
- if (profile) {
58714
- this.searchService.setProfile(profile);
58715
- }
58716
- if (profile?.profileStructured?.sections) {
58717
- const recommendations = profile.profileStructured?.recommendations;
58718
- this.profileContextService.indexProfile(profile.profileStructured.sections, recommendations);
58719
- }
58720
58731
  }
58721
58732
  ngAfterViewInit() {
58722
58733
  // Use a single observer for subsections which includes parent section information
@@ -59015,257 +59026,257 @@ class SymphiqBusinessAnalysisDashboardComponent {
59015
59026
  }
59016
59027
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SymphiqBusinessAnalysisDashboardComponent, [{
59017
59028
  type: Component,
59018
- args: [{ selector: 'symphiq-business-analysis-dashboard', standalone: true, imports: [CommonModule, ProfileSectionComponent, SectionNavigationComponent, FloatingTocComponent, FloatingBackButtonComponent, TooltipContainerComponent, SectionDividerComponent, BusinessAnalysisModalComponent, SearchButtonComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, WelcomeBannerComponent, RecommendationsTiledGridComponent, CollapsibleSectionGroupComponent, ContentGenerationProgressWithConfettiComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
59019
- <div [ngClass]="getContainerClasses()">
59020
- <!-- Scroll Progress Bar (fixed at top) -->
59021
- <div [class]="embedded() ? 'sticky top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30' : 'fixed top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30'">
59022
- <div
59023
- [style.width.%]="scrollProgress()"
59024
- [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
59025
- class="h-full transition-all duration-200 ease-out">
59026
- </div>
59027
- </div>
59028
-
59029
- <div class="animated-bubbles" [class.light-mode]="isLightMode()" style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
59030
-
59031
- <div class="relative z-[51]">
59032
- <header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50">
59033
- <!-- Expanded Header (default state) -->
59034
- <div
59035
- class="transition-all duration-300 ease-in-out overflow-hidden"
59036
- [class.max-h-0]="headerScrollService.isScrolled()"
59037
- [class.opacity-0]="headerScrollService.isScrolled()"
59038
- [class.max-h-96]="!headerScrollService.isScrolled()"
59039
- [class.opacity-100]="!headerScrollService.isScrolled()">
59040
- <div
59041
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"
59042
- [class.pointer-events-none]="headerScrollService.isScrolled()"
59043
- [class.pointer-events-auto]="!headerScrollService.isScrolled()">
59044
- <div class="flex items-center justify-between">
59045
- <div>
59046
- <h1 [ngClass]="getMainTitleClasses()">
59047
- {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
59048
- </h1>
59049
- <p [ngClass]="getSubtitleClasses()">
59050
- Business Profile & Analysis
59051
- </p>
59052
- </div>
59053
- @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
59054
- <div class="flex items-center gap-2">
59055
- <symphiq-search-button
59056
- [isLightMode]="isLightMode()"
59057
- (searchClick)="openSearch()"
59058
- />
59059
- <button
59060
- type="button"
59061
- (click)="openViewModeSwitcher()"
59062
- [ngClass]="getViewModeButtonClasses()"
59063
- class="cursor-pointer flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
59064
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
59065
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
59066
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
59067
- </svg>
59068
- <span>{{ displayModeLabel() }}</span>
59069
- </button>
59070
- </div>
59071
- }
59072
- </div>
59073
- </div>
59074
- </div>
59075
-
59076
- <!-- Condensed Header (scrolled state) -->
59077
- <div
59078
- class="transition-all duration-300 ease-in-out overflow-hidden"
59079
- [class.max-h-0]="!headerScrollService.isScrolled()"
59080
- [class.opacity-0]="!headerScrollService.isScrolled()"
59081
- [class.max-h-20]="headerScrollService.isScrolled()"
59082
- [class.opacity-100]="headerScrollService.isScrolled()">
59083
- <div
59084
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"
59085
- [class.pointer-events-none]="!headerScrollService.isScrolled()"
59086
- [class.pointer-events-auto]="headerScrollService.isScrolled()">
59087
- <div class="flex items-center justify-between">
59088
- <div class="flex-1 min-w-0 mr-4">
59089
- <h1 [ngClass]="isLightMode() ? 'text-xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent truncate' : 'text-xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent truncate'">
59090
- {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
59091
- </h1>
59092
- </div>
59093
- <div class="flex items-center gap-4">
59094
- @if (!isSimplifiedView()) {
59095
- <div class="flex items-center gap-2 text-sm flex-shrink-0">
59096
- <span [ngClass]="isLightMode() ? 'text-slate-600 font-medium' : 'text-slate-400 font-medium'" class="transition-opacity duration-300" [class.opacity-0]="sectionTitleFading()" [class.opacity-100]="!sectionTitleFading()">
59097
- {{ currentSectionTitle() }}
59098
- </span>
59099
- @if (currentSubsectionTitle()) {
59100
- <span [ngClass]="isLightMode() ? 'text-slate-400' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">›</span>
59101
- <span [ngClass]="isLightMode() ? 'text-slate-500' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">
59102
- {{ currentSubsectionTitle() }}
59103
- </span>
59104
- }
59105
- </div>
59106
- }
59107
- @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
59108
- <symphiq-search-button
59109
- [isLightMode]="isLightMode()"
59110
- [minimized]="true"
59111
- (searchClick)="openSearch()"
59112
- />
59113
- <button
59114
- type="button"
59115
- (click)="openViewModeSwitcher()"
59116
- [ngClass]="getViewModeButtonClasses()"
59117
- class="cursor-pointer flex items-center gap-2 px-2 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
59118
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
59119
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
59120
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
59121
- </svg>
59122
- </button>
59123
- }
59124
- </div>
59125
- </div>
59126
- </div>
59127
- </div>
59128
- </header>
59129
-
59130
- <main class="relative">
59131
- @if (isContentGenerating()) {
59132
- <!-- Journey Progress Banner (always show when not onboarded) -->
59133
- @if (!isOnboarded()) {
59134
- <symphiq-journey-progress-indicator
59135
- [viewMode]="viewMode()"
59136
- [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
59137
- [showNextStepAction]="false"
59138
- [forDemo]="forDemo()"
59139
- [maxAccessibleStepId]="maxAccessibleStepId()"
59140
- (stepClick)="stepClick.emit($event)"
59141
- (nextStepClick)="nextStepClick.emit()"
59142
- />
59143
- }
59144
-
59145
- <!-- Content Generation Progress Component -->
59146
- <symphiq-content-generation-progress-with-confetti
59147
- [viewMode]="viewMode()"
59148
- [itemStatus]="itemStatus()"
59149
- [profile]="profile()"
59150
- [confettiIntensity]="'celebration'"
59151
- [title]="'We are generating a new Business Analysis for ' + (currentProfile()?.profileStructured?.businessName || 'your business') + '.'"
59152
- [subtitle]="'It will appear here when ready. You can check back later as this will take a few minutes to complete.'"
59153
- />
59154
- } @else {
59155
- @if (isSimplifiedView()) {
59156
- <!-- Journey Progress Banner - Full Width Sticky (only show when not onboarded) -->
59157
- @if (!isOnboarded()) {
59158
- <symphiq-journey-progress-indicator
59159
- [viewMode]="viewMode()"
59160
- [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
59161
- [showNextStepAction]="showNextStepAction()"
59162
- [forDemo]="forDemo()"
59163
- [maxAccessibleStepId]="maxAccessibleStepId()"
59164
- (stepClick)="stepClick.emit($event)"
59165
- (nextStepClick)="nextStepClick.emit()"
59166
- />
59167
- }
59168
-
59169
- <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
59170
- <div class="mb-8">
59171
- <symphiq-welcome-banner
59172
- [viewMode]="viewMode()"
59173
- [businessName]="currentProfile()?.profileStructured?.businessName || 'your business'"
59174
- [isOnboarded]="isOnboarded()"
59175
- />
59176
- </div>
59177
-
59178
- <div class="mb-8">
59179
- <symphiq-recommendations-tiled-grid
59180
- [recommendations]="recommendationItems()"
59181
- [viewMode]="viewMode()"
59182
- (viewMoreClick)="openRecommendationDetailsModal($event)"
59183
- />
59184
- </div>
59185
-
59186
- <div>
59187
- <symphiq-collapsible-section-group
59188
- [sections]="nonRecommendationSections()"
59189
- [viewMode]="viewMode()"
59190
- />
59191
- </div>
59192
- </div>
59193
- } @else {
59194
- @for (section of sections(); track trackBySectionId($index, section); let idx = $index; let last = $last) {
59195
- <symphiq-profile-section
59196
- [section]="section"
59197
- [viewMode]="viewMode()"
59198
- [forceExpanded]="!isCompactView()"
59199
- />
59200
- @if (!last) {
59201
- <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
59202
- <symphiq-section-divider
59203
- [viewMode]="viewMode()"
59204
- [subsections]="sections()[idx + 1].subsections || []" />
59205
- </div>
59206
- }
59207
- }
59208
- }
59209
- }
59210
- </main>
59211
-
59212
- @if (!isSimplifiedView()) {
59213
- <symphiq-section-navigation
59214
- [sections]="sections()"
59215
- [viewMode]="viewMode()"
59216
- [embedded]="embedded()"
59217
- [scrollElement]="scrollElement() ?? undefined"
59218
- />
59219
- }
59220
-
59221
- @if (!isSimplifiedView()) {
59222
- <symphiq-floating-toc
59223
- [sections]="sections()"
59224
- [viewMode]="viewMode()"
59225
- [embedded]="embedded()"
59226
- [scrollElement]="scrollElement() ?? undefined"
59227
- />
59228
- }
59229
-
59230
- <symphiq-floating-back-button
59231
- [viewMode]="viewMode()"
59232
- [embedded]="embedded()"
59233
- />
59234
- </div>
59235
-
59236
- @if (isLoading()) {
59237
- <div [ngClass]="getLoadingOverlayClasses()">
59238
- <div [ngClass]="getSpinnerClasses()"></div>
59239
- </div>
59240
- }
59241
-
59242
- <symphiq-tooltip-container />
59243
- <symphiq-business-analysis-modal
59244
- [isLightMode]="isLightMode()"
59245
- (viewInContextRequested)="handleViewInContext($event)" />
59246
-
59247
- <symphiq-search-modal
59248
- [isLightMode]="isLightMode()"
59249
- [isOpen]="searchService.isSearchOpen()"
59250
- [searchQuery]="searchService.getSearchQuery()"
59251
- [results]="searchService.searchResults()"
59252
- [hasResults]="searchService.hasResults()"
59253
- [selectedIndex]="selectedSearchIndex()"
59254
- [placeholder]="'Search sections, items, and analysis...'"
59255
- (searchChange)="onSearchChange($event)"
59256
- (resultSelected)="onSearchResultSelected($event)"
59257
- (close)="closeSearch()"
59258
- />
59259
-
59260
- <symphiq-view-mode-switcher-modal
59261
- [isOpen]="isViewModeSwitcherOpen()"
59262
- [currentMode]="displayMode()"
59263
- [viewMode]="viewMode()"
59264
- [isLoading]="isViewModeSwitching()"
59265
- (close)="closeViewModeSwitcher()"
59266
- (modeSelected)="handleDisplayModeChange($event)"
59267
- />
59268
- </div>
59029
+ 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: `
59030
+ <div [ngClass]="getContainerClasses()">
59031
+ <!-- Scroll Progress Bar (fixed at top) -->
59032
+ <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'">
59033
+ <div
59034
+ [style.width.%]="scrollProgress()"
59035
+ [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
59036
+ class="h-full transition-all duration-200 ease-out">
59037
+ </div>
59038
+ </div>
59039
+
59040
+ <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>
59041
+
59042
+ <div class="relative z-[51]">
59043
+ <header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50">
59044
+ <!-- Expanded Header (default state) -->
59045
+ <div
59046
+ class="transition-all duration-300 ease-in-out overflow-hidden"
59047
+ [class.max-h-0]="headerScrollService.isScrolled()"
59048
+ [class.opacity-0]="headerScrollService.isScrolled()"
59049
+ [class.max-h-96]="!headerScrollService.isScrolled()"
59050
+ [class.opacity-100]="!headerScrollService.isScrolled()">
59051
+ <div
59052
+ class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"
59053
+ [class.pointer-events-none]="headerScrollService.isScrolled()"
59054
+ [class.pointer-events-auto]="!headerScrollService.isScrolled()">
59055
+ <div class="flex items-center justify-between">
59056
+ <div>
59057
+ <h1 [ngClass]="getMainTitleClasses()">
59058
+ {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
59059
+ </h1>
59060
+ <p [ngClass]="getSubtitleClasses()">
59061
+ Business Profile & Analysis
59062
+ </p>
59063
+ </div>
59064
+ @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
59065
+ <div class="flex items-center gap-2">
59066
+ <symphiq-search-button
59067
+ [isLightMode]="isLightMode()"
59068
+ (searchClick)="openSearch()"
59069
+ />
59070
+ <button
59071
+ type="button"
59072
+ (click)="openViewModeSwitcher()"
59073
+ [ngClass]="getViewModeButtonClasses()"
59074
+ 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">
59075
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
59076
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
59077
+ <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>
59078
+ </svg>
59079
+ <span>{{ displayModeLabel() }}</span>
59080
+ </button>
59081
+ </div>
59082
+ }
59083
+ </div>
59084
+ </div>
59085
+ </div>
59086
+
59087
+ <!-- Condensed Header (scrolled state) -->
59088
+ <div
59089
+ class="transition-all duration-300 ease-in-out overflow-hidden"
59090
+ [class.max-h-0]="!headerScrollService.isScrolled()"
59091
+ [class.opacity-0]="!headerScrollService.isScrolled()"
59092
+ [class.max-h-20]="headerScrollService.isScrolled()"
59093
+ [class.opacity-100]="headerScrollService.isScrolled()">
59094
+ <div
59095
+ class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"
59096
+ [class.pointer-events-none]="!headerScrollService.isScrolled()"
59097
+ [class.pointer-events-auto]="headerScrollService.isScrolled()">
59098
+ <div class="flex items-center justify-between">
59099
+ <div class="flex-1 min-w-0 mr-4">
59100
+ <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'">
59101
+ {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
59102
+ </h1>
59103
+ </div>
59104
+ <div class="flex items-center gap-4">
59105
+ @if (!isSimplifiedView()) {
59106
+ <div class="flex items-center gap-2 text-sm flex-shrink-0">
59107
+ <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()">
59108
+ {{ currentSectionTitle() }}
59109
+ </span>
59110
+ @if (currentSubsectionTitle()) {
59111
+ <span [ngClass]="isLightMode() ? 'text-slate-400' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">›</span>
59112
+ <span [ngClass]="isLightMode() ? 'text-slate-500' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">
59113
+ {{ currentSubsectionTitle() }}
59114
+ </span>
59115
+ }
59116
+ </div>
59117
+ }
59118
+ @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
59119
+ <symphiq-search-button
59120
+ [isLightMode]="isLightMode()"
59121
+ [minimized]="true"
59122
+ (searchClick)="openSearch()"
59123
+ />
59124
+ <button
59125
+ type="button"
59126
+ (click)="openViewModeSwitcher()"
59127
+ [ngClass]="getViewModeButtonClasses()"
59128
+ 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">
59129
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
59130
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
59131
+ <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>
59132
+ </svg>
59133
+ </button>
59134
+ }
59135
+ </div>
59136
+ </div>
59137
+ </div>
59138
+ </div>
59139
+ </header>
59140
+
59141
+ <main class="relative">
59142
+ @if (isContentGenerating()) {
59143
+ <!-- Journey Progress Banner (always show when not onboarded) -->
59144
+ @if (!isOnboarded()) {
59145
+ <symphiq-journey-progress-indicator
59146
+ [viewMode]="viewMode()"
59147
+ [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
59148
+ [showNextStepAction]="false"
59149
+ [forDemo]="forDemo()"
59150
+ [maxAccessibleStepId]="maxAccessibleStepId()"
59151
+ (stepClick)="stepClick.emit($event)"
59152
+ (nextStepClick)="nextStepClick.emit()"
59153
+ />
59154
+ }
59155
+
59156
+ <!-- Content Generation Progress Component -->
59157
+ <symphiq-content-generation-progress-with-confetti
59158
+ [viewMode]="viewMode()"
59159
+ [itemStatus]="itemStatus()"
59160
+ [profile]="profile()"
59161
+ [confettiIntensity]="'celebration'"
59162
+ [title]="'We are generating a new Business Analysis for ' + (currentProfile()?.profileStructured?.businessName || 'your business') + '.'"
59163
+ [subtitle]="'It will appear here when ready. You can check back later as this will take a few minutes to complete.'"
59164
+ />
59165
+ } @else {
59166
+ @if (isSimplifiedView()) {
59167
+ <!-- Journey Progress Banner - Full Width Sticky (only show when not onboarded) -->
59168
+ @if (!isOnboarded()) {
59169
+ <symphiq-journey-progress-indicator
59170
+ [viewMode]="viewMode()"
59171
+ [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
59172
+ [showNextStepAction]="showNextStepAction()"
59173
+ [forDemo]="forDemo()"
59174
+ [maxAccessibleStepId]="maxAccessibleStepId()"
59175
+ (stepClick)="stepClick.emit($event)"
59176
+ (nextStepClick)="nextStepClick.emit()"
59177
+ />
59178
+ }
59179
+
59180
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
59181
+ <div class="mb-8">
59182
+ <symphiq-welcome-banner
59183
+ [viewMode]="viewMode()"
59184
+ [businessName]="currentProfile()?.profileStructured?.businessName || 'your business'"
59185
+ [isOnboarded]="isOnboarded()"
59186
+ />
59187
+ </div>
59188
+
59189
+ <div class="mb-8">
59190
+ <symphiq-recommendations-tiled-grid
59191
+ [recommendations]="recommendationItems()"
59192
+ [viewMode]="viewMode()"
59193
+ (viewMoreClick)="openRecommendationDetailsModal($event)"
59194
+ />
59195
+ </div>
59196
+
59197
+ <div>
59198
+ <symphiq-collapsible-section-group
59199
+ [sections]="nonRecommendationSections()"
59200
+ [viewMode]="viewMode()"
59201
+ />
59202
+ </div>
59203
+ </div>
59204
+ } @else {
59205
+ @for (section of sections(); track trackBySectionId($index, section); let idx = $index; let last = $last) {
59206
+ <symphiq-profile-section
59207
+ [section]="section"
59208
+ [viewMode]="viewMode()"
59209
+ [forceExpanded]="!isCompactView()"
59210
+ />
59211
+ @if (!last) {
59212
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
59213
+ <symphiq-section-divider
59214
+ [viewMode]="viewMode()"
59215
+ [subsections]="sections()[idx + 1].subsections || []" />
59216
+ </div>
59217
+ }
59218
+ }
59219
+ }
59220
+ }
59221
+ </main>
59222
+
59223
+ @if (!isSimplifiedView()) {
59224
+ <symphiq-section-navigation
59225
+ [sections]="sections()"
59226
+ [viewMode]="viewMode()"
59227
+ [embedded]="embedded()"
59228
+ [scrollElement]="scrollElement() ?? undefined"
59229
+ />
59230
+ }
59231
+
59232
+ @if (!isSimplifiedView()) {
59233
+ <symphiq-floating-toc
59234
+ [sections]="sections()"
59235
+ [viewMode]="viewMode()"
59236
+ [embedded]="embedded()"
59237
+ [scrollElement]="scrollElement() ?? undefined"
59238
+ />
59239
+ }
59240
+
59241
+ <symphiq-floating-back-button
59242
+ [viewMode]="viewMode()"
59243
+ [embedded]="embedded()"
59244
+ />
59245
+ </div>
59246
+
59247
+ @if (isLoading()) {
59248
+ <div [ngClass]="getLoadingOverlayClasses()">
59249
+ <div [ngClass]="getSpinnerClasses()"></div>
59250
+ </div>
59251
+ }
59252
+
59253
+ <symphiq-tooltip-container />
59254
+ <symphiq-business-analysis-modal
59255
+ [isLightMode]="isLightMode()"
59256
+ (viewInContextRequested)="handleViewInContext($event)" />
59257
+
59258
+ <symphiq-search-modal
59259
+ [isLightMode]="isLightMode()"
59260
+ [isOpen]="searchService.isSearchOpen()"
59261
+ [searchQuery]="searchService.getSearchQuery()"
59262
+ [results]="searchService.searchResults()"
59263
+ [hasResults]="searchService.hasResults()"
59264
+ [selectedIndex]="selectedSearchIndex()"
59265
+ [placeholder]="'Search sections, items, and analysis...'"
59266
+ (searchChange)="onSearchChange($event)"
59267
+ (resultSelected)="onSearchResultSelected($event)"
59268
+ (close)="closeSearch()"
59269
+ />
59270
+
59271
+ <symphiq-view-mode-switcher-modal
59272
+ [isOpen]="isViewModeSwitcherOpen()"
59273
+ [currentMode]="displayMode()"
59274
+ [viewMode]="viewMode()"
59275
+ [isLoading]="isViewModeSwitching()"
59276
+ (close)="closeViewModeSwitcher()"
59277
+ (modeSelected)="handleDisplayModeChange($event)"
59278
+ />
59279
+ </div>
59269
59280
  `, 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"] }]
59270
59281
  }], () => [], { 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: [{
59271
59282
  type: HostListener,