@eric-emg/symphiq-components 1.2.527 → 1.2.529

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.
@@ -22,7 +22,6 @@ import { XYChart, CategoryAxis, AxisRendererX, ValueAxis, AxisRendererY, XYCurso
22
22
  import am5themes_Animated from '@amcharts/amcharts5/themes/Animated';
23
23
  import { PieChart, PieSeries } from '@amcharts/amcharts5/percent';
24
24
  import { EMAIL_IS_EMG_APPS } from '@jebgem/util';
25
- export * from '@symphiq-components/components/profile-analysis-focus-area-dashboard/focus-area-executive-summary.component';
26
25
 
27
26
  class FunnelOrderService {
28
27
  constructor() {
@@ -64073,17 +64072,24 @@ function SymphiqRevenueCalculatorDashboardComponent_Conditional_10_Template(rf,
64073
64072
  i0.ɵɵadvance(2);
64074
64073
  i0.ɵɵproperty("ngClass", ctx_r0.loadingTextClasses());
64075
64074
  } }
64076
- function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
64075
+ function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
64077
64076
  const _r2 = i0.ɵɵgetCurrentView();
64078
- i0.ɵɵelement(0, "symphiq-revenue-calculator-welcome-banner", 18);
64079
- i0.ɵɵelementStart(1, "div", 19)(2, "symphiq-initial-target-setting", 20);
64080
- i0.ɵɵlistener("targetsCreated", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template_symphiq_initial_target_setting_targetsCreated_2_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onTargetsCreated($event)); })("calculateRevenueReverseRequest", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template_symphiq_initial_target_setting_calculateRevenueReverseRequest_2_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.calculateRevenueReverseRequest.emit($event)); })("calculateRevenueRequest", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template_symphiq_initial_target_setting_calculateRevenueRequest_2_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onCalculateRevenueRequest($event)); })("editRelatedMetricTarget", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template_symphiq_initial_target_setting_editRelatedMetricTarget_2_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.editRelatedMetricTarget.emit($event)); })("saveTargetsClick", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template_symphiq_initial_target_setting_saveTargetsClick_2_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.saveTargetsClick.emit()); })("targetsUpdated", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template_symphiq_initial_target_setting_targetsUpdated_2_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.targetsUpdated.emit($event)); })("discardChangesClick", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template_symphiq_initial_target_setting_discardChangesClick_2_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.discardChangesClick.emit()); });
64077
+ i0.ɵɵelementStart(0, "div", 19)(1, "symphiq-initial-target-setting", 20);
64078
+ i0.ɵɵlistener("targetsCreated", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Conditional_1_Template_symphiq_initial_target_setting_targetsCreated_1_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onTargetsCreated($event)); })("calculateRevenueReverseRequest", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Conditional_1_Template_symphiq_initial_target_setting_calculateRevenueReverseRequest_1_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.calculateRevenueReverseRequest.emit($event)); })("calculateRevenueRequest", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Conditional_1_Template_symphiq_initial_target_setting_calculateRevenueRequest_1_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onCalculateRevenueRequest($event)); })("editRelatedMetricTarget", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Conditional_1_Template_symphiq_initial_target_setting_editRelatedMetricTarget_1_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.editRelatedMetricTarget.emit($event)); })("saveTargetsClick", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Conditional_1_Template_symphiq_initial_target_setting_saveTargetsClick_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.saveTargetsClick.emit()); })("targetsUpdated", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Conditional_1_Template_symphiq_initial_target_setting_targetsUpdated_1_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.targetsUpdated.emit($event)); })("discardChangesClick", function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Conditional_1_Template_symphiq_initial_target_setting_discardChangesClick_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.discardChangesClick.emit()); });
64081
64079
  i0.ɵɵelementEnd()();
64080
+ } if (rf & 2) {
64081
+ const ctx_r0 = i0.ɵɵnextContext(2);
64082
+ i0.ɵɵadvance();
64083
+ i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("funnelMetrics", ctx_r0.funnelMetrics() ?? i0.ɵɵpureFunction0(13, _c0$y))("mainUiData", ctx_r0.mainUiData())("trendUiData", ctx_r0.trendUiData())("shopId", ctx_r0.shopId())("pacingResponse", ctx_r0.pacingResponse())("dataResults", ctx_r0.dataResults())("calculateRevenueReverseResponse", ctx_r0.calculateRevenueReverseResponse())("calculateRevenueResponse", ctx_r0.calculateRevenueResponse())("isCalculatingTargets", ctx_r0.isCalculatingTargets())("targets", ctx_r0.targets())("targetHistories", ctx_r0.targetHistories() ?? i0.ɵɵpureFunction0(14, _c0$y))("users", ctx_r0.users() ?? i0.ɵɵpureFunction0(15, _c0$y));
64084
+ } }
64085
+ function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
64086
+ i0.ɵɵelement(0, "symphiq-revenue-calculator-welcome-banner", 18);
64087
+ i0.ɵɵconditionalCreate(1, SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Conditional_1_Template, 2, 16, "div", 19);
64082
64088
  } if (rf & 2) {
64083
64089
  const ctx_r0 = i0.ɵɵnextContext();
64084
64090
  i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("dataLoadStatus", ctx_r0.dataLoadStatus() ?? ctx_r0.ShopDataLoadStatusEnum.NOT_LOADED)("hasTargets", ctx_r0.hasCurrentYearTargets())("isOnboarded", ctx_r0.isOnboarded());
64085
- i0.ɵɵadvance(2);
64086
- i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("funnelMetrics", ctx_r0.funnelMetrics() ?? i0.ɵɵpureFunction0(17, _c0$y))("mainUiData", ctx_r0.mainUiData())("trendUiData", ctx_r0.trendUiData())("shopId", ctx_r0.shopId())("pacingResponse", ctx_r0.pacingResponse())("dataResults", ctx_r0.dataResults())("calculateRevenueReverseResponse", ctx_r0.calculateRevenueReverseResponse())("calculateRevenueResponse", ctx_r0.calculateRevenueResponse())("isCalculatingTargets", ctx_r0.isCalculatingTargets())("targets", ctx_r0.targets())("targetHistories", ctx_r0.targetHistories() ?? i0.ɵɵpureFunction0(18, _c0$y))("users", ctx_r0.users() ?? i0.ɵɵpureFunction0(19, _c0$y));
64091
+ i0.ɵɵadvance();
64092
+ i0.ɵɵconditional(!ctx_r0.isLoading() ? 1 : -1);
64087
64093
  } }
64088
64094
  function SymphiqRevenueCalculatorDashboardComponent_Conditional_12_Conditional_5_Template(rf, ctx) { if (rf & 1) {
64089
64095
  i0.ɵɵnamespaceSVG();
@@ -64296,7 +64302,7 @@ class SymphiqRevenueCalculatorDashboardComponent {
64296
64302
  i0.ɵɵlistener("stepClick", function SymphiqRevenueCalculatorDashboardComponent_Template_symphiq_journey_progress_indicator_stepClick_6_listener($event) { return ctx.stepClick.emit($event); })("nextStepClick", function SymphiqRevenueCalculatorDashboardComponent_Template_symphiq_journey_progress_indicator_nextStepClick_6_listener() { return ctx.nextStepClick.emit(); });
64297
64303
  i0.ɵɵelementEnd();
64298
64304
  i0.ɵɵelementStart(7, "main", 6)(8, "div", 7);
64299
- i0.ɵɵconditionalCreate(9, SymphiqRevenueCalculatorDashboardComponent_Conditional_9_Template, 2, 1, "div", 8)(10, SymphiqRevenueCalculatorDashboardComponent_Conditional_10_Template, 10, 8)(11, SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template, 3, 20);
64305
+ i0.ɵɵconditionalCreate(9, SymphiqRevenueCalculatorDashboardComponent_Conditional_9_Template, 2, 1, "div", 8)(10, SymphiqRevenueCalculatorDashboardComponent_Conditional_10_Template, 10, 8)(11, SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template, 2, 5);
64300
64306
  i0.ɵɵelementEnd()();
64301
64307
  i0.ɵɵconditionalCreate(12, SymphiqRevenueCalculatorDashboardComponent_Conditional_12_Template, 7, 7, "div", 9);
64302
64308
  i0.ɵɵelementEnd()();
@@ -64425,30 +64431,32 @@ class SymphiqRevenueCalculatorDashboardComponent {
64425
64431
  [isOnboarded]="isOnboarded()"
64426
64432
  />
64427
64433
 
64428
- <div class="mt-8">
64429
- <symphiq-initial-target-setting
64430
- [viewMode]="viewMode()"
64431
- [funnelMetrics]="funnelMetrics() ?? []"
64432
- [mainUiData]="mainUiData()"
64433
- [trendUiData]="trendUiData()"
64434
- [shopId]="shopId()"
64435
- [pacingResponse]="pacingResponse()"
64436
- [dataResults]="dataResults()"
64437
- [calculateRevenueReverseResponse]="calculateRevenueReverseResponse()"
64438
- [calculateRevenueResponse]="calculateRevenueResponse()"
64439
- [isCalculatingTargets]="isCalculatingTargets()"
64440
- [targets]="targets()"
64441
- [targetHistories]="targetHistories() ?? []"
64442
- [users]="users() ?? []"
64443
- (targetsCreated)="onTargetsCreated($event)"
64444
- (calculateRevenueReverseRequest)="calculateRevenueReverseRequest.emit($event)"
64445
- (calculateRevenueRequest)="onCalculateRevenueRequest($event)"
64446
- (editRelatedMetricTarget)="editRelatedMetricTarget.emit($event)"
64447
- (saveTargetsClick)="saveTargetsClick.emit()"
64448
- (targetsUpdated)="targetsUpdated.emit($event)"
64449
- (discardChangesClick)="discardChangesClick.emit()"
64450
- />
64451
- </div>
64434
+ @if (!isLoading()) {
64435
+ <div class="mt-8">
64436
+ <symphiq-initial-target-setting
64437
+ [viewMode]="viewMode()"
64438
+ [funnelMetrics]="funnelMetrics() ?? []"
64439
+ [mainUiData]="mainUiData()"
64440
+ [trendUiData]="trendUiData()"
64441
+ [shopId]="shopId()"
64442
+ [pacingResponse]="pacingResponse()"
64443
+ [dataResults]="dataResults()"
64444
+ [calculateRevenueReverseResponse]="calculateRevenueReverseResponse()"
64445
+ [calculateRevenueResponse]="calculateRevenueResponse()"
64446
+ [isCalculatingTargets]="isCalculatingTargets()"
64447
+ [targets]="targets()"
64448
+ [targetHistories]="targetHistories() ?? []"
64449
+ [users]="users() ?? []"
64450
+ (targetsCreated)="onTargetsCreated($event)"
64451
+ (calculateRevenueReverseRequest)="calculateRevenueReverseRequest.emit($event)"
64452
+ (calculateRevenueRequest)="onCalculateRevenueRequest($event)"
64453
+ (editRelatedMetricTarget)="editRelatedMetricTarget.emit($event)"
64454
+ (saveTargetsClick)="saveTargetsClick.emit()"
64455
+ (targetsUpdated)="targetsUpdated.emit($event)"
64456
+ (discardChangesClick)="discardChangesClick.emit()"
64457
+ />
64458
+ </div>
64459
+ }
64452
64460
  }
64453
64461
 
64454
64462
  </div>
@@ -64492,7 +64500,7 @@ class SymphiqRevenueCalculatorDashboardComponent {
64492
64500
  type: HostListener,
64493
64501
  args: ['window:scroll', ['$event']]
64494
64502
  }] }); })();
64495
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqRevenueCalculatorDashboardComponent, { className: "SymphiqRevenueCalculatorDashboardComponent", filePath: "lib/components/revenue-calculator-dashboard/symphiq-revenue-calculator-dashboard.component.ts", lineNumber: 209 }); })();
64503
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqRevenueCalculatorDashboardComponent, { className: "SymphiqRevenueCalculatorDashboardComponent", filePath: "lib/components/revenue-calculator-dashboard/symphiq-revenue-calculator-dashboard.component.ts", lineNumber: 211 }); })();
64496
64504
 
64497
64505
  function HierarchyDisplayComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
64498
64506
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 1);
@@ -84913,39 +84921,39 @@ class FocusAreaHealthIndicatorComponent {
84913
84921
  standalone: true,
84914
84922
  imports: [CommonModule, SymphiqIconComponent],
84915
84923
  changeDetection: ChangeDetectionStrategy.OnPush,
84916
- template: `
84917
- <div [ngClass]="containerClasses()" class="rounded-xl p-6 border">
84918
- <div class="flex items-start gap-4">
84919
- <div [ngClass]="iconContainerClasses()" class="flex-shrink-0 w-12 h-12 rounded-xl flex items-center justify-center">
84920
- <symphiq-icon [icon]="healthIcon()" size="w-6 h-6" />
84921
- </div>
84922
- <div class="flex-1">
84923
- <div class="flex items-center justify-between mb-2">
84924
- <h3 [ngClass]="titleClasses()" class="text-sm font-semibold uppercase tracking-wider">
84925
- Focus Area Health
84926
- </h3>
84927
- <span [ngClass]="healthBadgeClasses()" class="px-3 py-1 rounded-full text-xs font-bold uppercase">
84928
- {{ healthLabel() }}
84929
- </span>
84930
- </div>
84931
-
84932
- <!-- Health Meter -->
84933
- <div class="mb-3">
84934
- <div [ngClass]="meterBackgroundClasses()" class="h-2 rounded-full overflow-hidden">
84935
- <div
84936
- [ngClass]="meterFillClasses()"
84937
- [style.width.%]="healthPercentage()"
84938
- class="h-full transition-all duration-500 ease-out rounded-full"
84939
- ></div>
84940
- </div>
84941
- </div>
84942
-
84943
- <p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed">
84944
- {{ healthDescription() }}
84945
- </p>
84946
- </div>
84947
- </div>
84948
- </div>
84924
+ template: `
84925
+ <div [ngClass]="containerClasses()" class="rounded-xl p-6 border">
84926
+ <div class="flex items-start gap-4">
84927
+ <div [ngClass]="iconContainerClasses()" class="flex-shrink-0 w-12 h-12 rounded-xl flex items-center justify-center">
84928
+ <symphiq-icon [icon]="healthIcon()" size="w-6 h-6" />
84929
+ </div>
84930
+ <div class="flex-1">
84931
+ <div class="flex items-center justify-between mb-2">
84932
+ <h3 [ngClass]="titleClasses()" class="text-sm font-semibold uppercase tracking-wider">
84933
+ Focus Area Health
84934
+ </h3>
84935
+ <span [ngClass]="healthBadgeClasses()" class="px-3 py-1 rounded-full text-xs font-bold uppercase">
84936
+ {{ healthLabel() }}
84937
+ </span>
84938
+ </div>
84939
+
84940
+ <!-- Health Meter -->
84941
+ <div class="mb-3">
84942
+ <div [ngClass]="meterBackgroundClasses()" class="h-2 rounded-full overflow-hidden">
84943
+ <div
84944
+ [ngClass]="meterFillClasses()"
84945
+ [style.width.%]="healthPercentage()"
84946
+ class="h-full transition-all duration-500 ease-out rounded-full"
84947
+ ></div>
84948
+ </div>
84949
+ </div>
84950
+
84951
+ <p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed">
84952
+ {{ healthDescription() }}
84953
+ </p>
84954
+ </div>
84955
+ </div>
84956
+ </div>
84949
84957
  `
84950
84958
  }]
84951
84959
  }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], health: [{ type: i0.Input, args: [{ isSignal: true, alias: "health", required: false }] }] }); })();
@@ -85315,177 +85323,177 @@ class FocusAreaExecutiveSummaryComponent {
85315
85323
  RelatedGoalChipsComponent
85316
85324
  ],
85317
85325
  changeDetection: ChangeDetectionStrategy.OnPush,
85318
- template: `
85319
- <section id="section-executive-summary" class="space-y-6 scroll-mt-24">
85320
- <!-- Summary Banner -->
85321
- <div [ngClass]="getBannerClasses()" class="rounded-2xl p-8 shadow-xl">
85322
- <div class="space-y-6">
85323
- <div class="flex items-start justify-between gap-4">
85324
- <div class="flex-1">
85325
- <h2 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold mb-3">
85326
- Executive Summary
85327
- </h2>
85328
- <p [ngClass]="getTextClasses()" class="text-lg leading-relaxed">
85329
- {{ summary()?.gradeRationale }}
85330
- </p>
85331
- </div>
85332
- @if (summary()?.overallGrade) {
85333
- <symphiq-grade-badge
85334
- [grade]="summary()!.overallGrade!"
85335
- [gradeRationale]="summary()!.gradeRationale || ''"
85336
- [viewMode]="viewMode()"
85337
- />
85338
- }
85339
- </div>
85340
-
85341
- @if (summary()?.narrative) {
85342
- <div [ngClass]="getNarrativeClasses()" class="rounded-xl p-6">
85343
- <h3 [ngClass]="getSubheadingClasses()" class="text-lg font-semibold mb-3">
85344
- Analysis Narrative
85345
- </h3>
85346
- <div class="relative">
85347
- @if (summary()?.napkinVisual?.enabled) {
85348
- <div class="mb-6 lg:float-left lg:mr-6 lg:mb-4 lg:max-w-[66%]">
85349
- <symphiq-napkin-visual-placeholder
85350
- [visual]="summary()!.napkinVisual!"
85351
- [viewMode]="viewMode()"
85352
- />
85353
- </div>
85354
- }
85355
- <p [ngClass]="getTextClasses()" class="text-sm leading-relaxed whitespace-pre-line">
85356
- {{ summary()?.narrative }}
85357
- </p>
85358
- <div class="clear-both"></div>
85359
- </div>
85360
- </div>
85361
- }
85362
-
85363
- <!-- Health and Top Priorities -->
85364
- <div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
85365
- <!-- Health Indicator -->
85366
- <div class="lg:col-span-1">
85367
- @if (summary()?.focusAreaHealth) {
85368
- <symphiq-focus-area-health-indicator
85369
- [viewMode]="viewMode()"
85370
- [health]="summary()?.focusAreaHealth"
85371
- />
85372
- }
85373
- </div>
85374
-
85375
- <!-- Quick Stats -->
85376
- <div class="lg:col-span-2 grid grid-cols-2 gap-4">
85377
- <button
85378
- type="button"
85379
- (click)="onTopPrioritiesClick()"
85380
- [ngClass]="getTopPrioritiesStatCardClasses()"
85381
- class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
85382
- <div [ngClass]="getTopPrioritiesStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
85383
- Top Priorities
85384
- </div>
85385
- <div [ngClass]="getTopPrioritiesStatValueClasses()" class="text-3xl font-bold mb-2">
85386
- {{ summary()?.topPriorities?.length || 0 }}
85387
- </div>
85388
- <div class="flex items-center gap-1.5 text-xs font-medium">
85389
- <span [ngClass]="getTopPrioritiesButtonTextClasses()">View Details</span>
85390
- <symphiq-icon
85391
- [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }"
85392
- size="w-4 h-4"
85393
- [ngClass]="getTopPrioritiesButtonTextClasses()"
85394
- class="transition-transform group-hover:translate-x-1"
85395
- />
85396
- </div>
85397
- </button>
85398
-
85399
- <button
85400
- type="button"
85401
- (click)="scrollToQuickWins()"
85402
- [ngClass]="getQuickWinsStatCardClasses()"
85403
- class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
85404
- <div [ngClass]="getQuickWinsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
85405
- Quick Wins
85406
- </div>
85407
- <div [ngClass]="getQuickWinsStatValueClasses()" class="text-3xl font-bold mb-2">
85408
- {{ summary()?.quickWins?.length || 0 }}
85409
- </div>
85410
- <div class="flex items-center gap-1.5 text-xs font-medium">
85411
- <span [ngClass]="getQuickWinsButtonTextClasses()">Details Below</span>
85412
- <symphiq-icon
85413
- [icon]="{ name: 'chevron-down', source: IconSourceEnum.HEROICONS }"
85414
- size="w-4 h-4"
85415
- [ngClass]="getQuickWinsButtonTextClasses()"
85416
- class="transition-transform group-hover:translate-y-1 animate-bounce"
85417
- />
85418
- </div>
85419
- </button>
85420
- </div>
85421
- </div>
85422
- </div>
85423
- </div>
85424
-
85425
- <!-- Top Priorities Grid - Hidden, now shown in modal -->
85426
- <!-- Top priorities are now displayed in a modal instead of inline -->
85427
-
85428
- <!-- Quick Wins -->
85429
- @if (summary()?.quickWins?.length) {
85430
- <div id="quick-wins-section" class="space-y-4 scroll-mt-24">
85431
- <h3 [ngClass]="getSectionTitleClasses()" class="text-xl font-bold">
85432
- Quick Wins
85433
- </h3>
85434
- <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
85435
- @for (win of summary()!.quickWins!; track $index) {
85436
- <div [ngClass]="getQuickWinCardClasses()"
85437
- class="rounded-xl p-6 transition-all duration-300">
85438
- <div class="space-y-4">
85439
- <div class="flex items-start gap-3">
85440
- <span [ngClass]="getNumberBadgeClasses()"
85441
- class="flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center text-sm font-bold">
85442
- {{ $index + 1 }}
85443
- </span>
85444
- <p [ngClass]="getQuickWinTextClasses()" class="font-semibold leading-tight flex-1">
85445
- {{ win.action }}
85446
- </p>
85447
- </div>
85448
-
85449
- <div class="flex flex-wrap gap-2">
85450
- <span [ngClass]="getEffortBadgeClasses(win.effort)"
85451
- class="px-3 py-1 rounded-full text-xs font-semibold">
85452
- {{ formatLabel(win.effort) }} Effort
85453
- </span>
85454
- <span [ngClass]="getImpactBadgeClasses(win.impact)"
85455
- class="px-3 py-1 rounded-full text-xs font-semibold">
85456
- {{ formatLabel(win.impact) }} Impact
85457
- </span>
85458
- </div>
85459
-
85460
- @if (win.estimatedTimeframe) {
85461
- <div class="flex items-center gap-2 text-sm" [ngClass]="getMetaTextClasses()">
85462
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
85463
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
85464
- d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
85465
- </svg>
85466
- <span>{{ win.estimatedTimeframe }}</span>
85467
- </div>
85468
- }
85469
-
85470
- @if (win.relatedGoalId && allGoals()) {
85471
- <div class="space-y-2">
85472
- <h4 [ngClass]="getMetaTextClasses()" class="text-xs font-semibold uppercase tracking-wider">
85473
- Related Goal
85474
- </h4>
85475
- <symphiq-related-goal-chips
85476
- [relatedGoalIds]="[win.relatedGoalId]"
85477
- [allGoals]="allGoals()"
85478
- [viewMode]="viewMode()"
85479
- />
85480
- </div>
85481
- }
85482
- </div>
85483
- </div>
85484
- }
85485
- </div>
85486
- </div>
85487
- }
85488
- </section>
85326
+ template: `
85327
+ <section id="section-executive-summary" class="space-y-6 scroll-mt-24">
85328
+ <!-- Summary Banner -->
85329
+ <div [ngClass]="getBannerClasses()" class="rounded-2xl p-8 shadow-xl">
85330
+ <div class="space-y-6">
85331
+ <div class="flex items-start justify-between gap-4">
85332
+ <div class="flex-1">
85333
+ <h2 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold mb-3">
85334
+ Executive Summary
85335
+ </h2>
85336
+ <p [ngClass]="getTextClasses()" class="text-lg leading-relaxed">
85337
+ {{ summary()?.gradeRationale }}
85338
+ </p>
85339
+ </div>
85340
+ @if (summary()?.overallGrade) {
85341
+ <symphiq-grade-badge
85342
+ [grade]="summary()!.overallGrade!"
85343
+ [gradeRationale]="summary()!.gradeRationale || ''"
85344
+ [viewMode]="viewMode()"
85345
+ />
85346
+ }
85347
+ </div>
85348
+
85349
+ @if (summary()?.narrative) {
85350
+ <div [ngClass]="getNarrativeClasses()" class="rounded-xl p-6">
85351
+ <h3 [ngClass]="getSubheadingClasses()" class="text-lg font-semibold mb-3">
85352
+ Analysis Narrative
85353
+ </h3>
85354
+ <div class="relative">
85355
+ @if (summary()?.napkinVisual?.enabled) {
85356
+ <div class="mb-6 lg:float-left lg:mr-6 lg:mb-4 lg:max-w-[66%]">
85357
+ <symphiq-napkin-visual-placeholder
85358
+ [visual]="summary()!.napkinVisual!"
85359
+ [viewMode]="viewMode()"
85360
+ />
85361
+ </div>
85362
+ }
85363
+ <p [ngClass]="getTextClasses()" class="text-sm leading-relaxed whitespace-pre-line">
85364
+ {{ summary()?.narrative }}
85365
+ </p>
85366
+ <div class="clear-both"></div>
85367
+ </div>
85368
+ </div>
85369
+ }
85370
+
85371
+ <!-- Health and Top Priorities -->
85372
+ <div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
85373
+ <!-- Health Indicator -->
85374
+ <div class="lg:col-span-1">
85375
+ @if (summary()?.focusAreaHealth) {
85376
+ <symphiq-focus-area-health-indicator
85377
+ [viewMode]="viewMode()"
85378
+ [health]="summary()?.focusAreaHealth"
85379
+ />
85380
+ }
85381
+ </div>
85382
+
85383
+ <!-- Quick Stats -->
85384
+ <div class="lg:col-span-2 grid grid-cols-2 gap-4">
85385
+ <button
85386
+ type="button"
85387
+ (click)="onTopPrioritiesClick()"
85388
+ [ngClass]="getTopPrioritiesStatCardClasses()"
85389
+ class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
85390
+ <div [ngClass]="getTopPrioritiesStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
85391
+ Top Priorities
85392
+ </div>
85393
+ <div [ngClass]="getTopPrioritiesStatValueClasses()" class="text-3xl font-bold mb-2">
85394
+ {{ summary()?.topPriorities?.length || 0 }}
85395
+ </div>
85396
+ <div class="flex items-center gap-1.5 text-xs font-medium">
85397
+ <span [ngClass]="getTopPrioritiesButtonTextClasses()">View Details</span>
85398
+ <symphiq-icon
85399
+ [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }"
85400
+ size="w-4 h-4"
85401
+ [ngClass]="getTopPrioritiesButtonTextClasses()"
85402
+ class="transition-transform group-hover:translate-x-1"
85403
+ />
85404
+ </div>
85405
+ </button>
85406
+
85407
+ <button
85408
+ type="button"
85409
+ (click)="scrollToQuickWins()"
85410
+ [ngClass]="getQuickWinsStatCardClasses()"
85411
+ class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
85412
+ <div [ngClass]="getQuickWinsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
85413
+ Quick Wins
85414
+ </div>
85415
+ <div [ngClass]="getQuickWinsStatValueClasses()" class="text-3xl font-bold mb-2">
85416
+ {{ summary()?.quickWins?.length || 0 }}
85417
+ </div>
85418
+ <div class="flex items-center gap-1.5 text-xs font-medium">
85419
+ <span [ngClass]="getQuickWinsButtonTextClasses()">Details Below</span>
85420
+ <symphiq-icon
85421
+ [icon]="{ name: 'chevron-down', source: IconSourceEnum.HEROICONS }"
85422
+ size="w-4 h-4"
85423
+ [ngClass]="getQuickWinsButtonTextClasses()"
85424
+ class="transition-transform group-hover:translate-y-1 animate-bounce"
85425
+ />
85426
+ </div>
85427
+ </button>
85428
+ </div>
85429
+ </div>
85430
+ </div>
85431
+ </div>
85432
+
85433
+ <!-- Top Priorities Grid - Hidden, now shown in modal -->
85434
+ <!-- Top priorities are now displayed in a modal instead of inline -->
85435
+
85436
+ <!-- Quick Wins -->
85437
+ @if (summary()?.quickWins?.length) {
85438
+ <div id="quick-wins-section" class="space-y-4 scroll-mt-24">
85439
+ <h3 [ngClass]="getSectionTitleClasses()" class="text-xl font-bold">
85440
+ Quick Wins
85441
+ </h3>
85442
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
85443
+ @for (win of summary()!.quickWins!; track $index) {
85444
+ <div [ngClass]="getQuickWinCardClasses()"
85445
+ class="rounded-xl p-6 transition-all duration-300">
85446
+ <div class="space-y-4">
85447
+ <div class="flex items-start gap-3">
85448
+ <span [ngClass]="getNumberBadgeClasses()"
85449
+ class="flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center text-sm font-bold">
85450
+ {{ $index + 1 }}
85451
+ </span>
85452
+ <p [ngClass]="getQuickWinTextClasses()" class="font-semibold leading-tight flex-1">
85453
+ {{ win.action }}
85454
+ </p>
85455
+ </div>
85456
+
85457
+ <div class="flex flex-wrap gap-2">
85458
+ <span [ngClass]="getEffortBadgeClasses(win.effort)"
85459
+ class="px-3 py-1 rounded-full text-xs font-semibold">
85460
+ {{ formatLabel(win.effort) }} Effort
85461
+ </span>
85462
+ <span [ngClass]="getImpactBadgeClasses(win.impact)"
85463
+ class="px-3 py-1 rounded-full text-xs font-semibold">
85464
+ {{ formatLabel(win.impact) }} Impact
85465
+ </span>
85466
+ </div>
85467
+
85468
+ @if (win.estimatedTimeframe) {
85469
+ <div class="flex items-center gap-2 text-sm" [ngClass]="getMetaTextClasses()">
85470
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
85471
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
85472
+ d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
85473
+ </svg>
85474
+ <span>{{ win.estimatedTimeframe }}</span>
85475
+ </div>
85476
+ }
85477
+
85478
+ @if (win.relatedGoalId && allGoals()) {
85479
+ <div class="space-y-2">
85480
+ <h4 [ngClass]="getMetaTextClasses()" class="text-xs font-semibold uppercase tracking-wider">
85481
+ Related Goal
85482
+ </h4>
85483
+ <symphiq-related-goal-chips
85484
+ [relatedGoalIds]="[win.relatedGoalId]"
85485
+ [allGoals]="allGoals()"
85486
+ [viewMode]="viewMode()"
85487
+ />
85488
+ </div>
85489
+ }
85490
+ </div>
85491
+ </div>
85492
+ }
85493
+ </div>
85494
+ </div>
85495
+ }
85496
+ </section>
85489
85497
  `
85490
85498
  }]
85491
85499
  }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], summary: [{ type: i0.Input, args: [{ isSignal: true, alias: "summary", required: false }] }], allGoals: [{ type: i0.Input, args: [{ isSignal: true, alias: "allGoals", required: false }] }], topPrioritiesClick: [{ type: i0.Output, args: ["topPrioritiesClick"] }], priorityDetailClick: [{ type: i0.Output, args: ["priorityDetailClick"] }] }); })();
@@ -85898,158 +85906,158 @@ class CollapsibleAnalysisSectionGroupComponent {
85898
85906
  standalone: true,
85899
85907
  imports: [CommonModule, SymphiqIconComponent, ProfileSectionContentComponent, NapkinVisualPlaceholderComponent, FocusAreaExecutiveSummaryComponent, MetricExecutiveSummaryComponent],
85900
85908
  changeDetection: ChangeDetectionStrategy.OnPush,
85901
- template: `
85902
- <div [ngClass]="containerClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
85903
- <div [ngClass]="headerClasses()" class="px-6 py-5 border-b">
85904
- <div class="flex items-center justify-between">
85905
- <div class="flex items-center gap-3">
85906
- <div [ngClass]="iconContainerClasses()" class="p-2.5 rounded-lg">
85907
- <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
85908
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"></path>
85909
- </svg>
85910
- </div>
85911
- <div>
85912
- <h2 [ngClass]="titleClasses()" class="text-xl font-bold">
85913
- Supporting Business Context
85914
- </h2>
85915
- <p [ngClass]="subtitleClasses()" class="text-sm mt-0.5">
85916
- Operational insights and competitive analysis
85917
- </p>
85918
- </div>
85919
- </div>
85920
- </div>
85921
- </div>
85922
-
85923
- <div [ngClass]="contentClasses()" class="p-6">
85924
- <div [ngClass]="infoBoxClasses()" class="mb-6 p-4 rounded-xl border flex items-start gap-3">
85925
- <svg class="w-5 h-5 flex-shrink-0 mt-0.5" [ngClass]="infoIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
85926
- <path 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"></path>
85927
- </svg>
85928
- <div class="flex-1">
85929
- <h4 [ngClass]="infoTitleClasses()" class="font-semibold text-sm mb-1">
85930
- {{ getDescriptionTitle() }}
85931
- </h4>
85932
- <p [ngClass]="infoTextClasses()" class="text-sm leading-relaxed">
85933
- {{ getDescriptionText() }}
85934
- </p>
85935
- </div>
85936
- </div>
85937
-
85938
- <div class="space-y-3">
85939
- @for (section of sections(); track section.id; let idx = $index) {
85940
- <div [id]="'collapsible-section-' + idx" [ngClass]="sectionCardClasses()" class="rounded-xl border overflow-hidden transition-all duration-200">
85941
- <button
85942
- type="button"
85943
- (click)="toggleSection(idx)"
85944
- [ngClass]="sectionHeaderClasses(section, idx)"
85945
- class="cursor-pointer w-full px-5 py-4 flex items-center justify-between gap-4 text-left transition-colors duration-200">
85946
- <div class="flex items-center gap-3 flex-1 min-w-0">
85947
- @if (section.icon) {
85948
- <div [ngClass]="sectionIconContainerClasses(idx)" class="p-2 rounded-lg flex-shrink-0 transition-colors duration-200">
85949
- <symphiq-icon [icon]="section.icon" size="w-4 h-4"></symphiq-icon>
85950
- </div>
85951
- }
85952
- <div class="flex-1 min-w-0">
85953
- <h3 [ngClass]="sectionTitleClasses(idx)" class="font-semibold transition-colors duration-200">
85954
- {{ section.title }}
85955
- </h3>
85956
- @if (section.description) {
85957
- <p [ngClass]="sectionDescriptionClasses(idx)" class="text-sm mt-0.5 line-clamp-1 transition-colors duration-200">
85958
- {{ formatDescription(section.description) }}
85959
- </p>
85960
- }
85961
- </div>
85962
- </div>
85963
- <svg
85964
- [ngClass]="chevronClasses(idx)"
85965
- [class.rotate-180]="expandedSections()[idx]"
85966
- class="w-5 h-5 flex-shrink-0 transition-transform duration-200"
85967
- fill="none"
85968
- stroke="currentColor"
85969
- viewBox="0 0 24 24">
85970
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
85971
- </svg>
85972
- </button>
85973
-
85974
- <div
85975
- class="grid transition-[grid-template-rows] duration-300 ease-in-out"
85976
- [style.grid-template-rows]="expandedSections()[idx] ? '1fr' : '0fr'">
85977
- <div class="overflow-hidden">
85978
- <div [ngClass]="sectionContentClasses()" class="border-t p-6">
85979
- <!-- Metric Executive Summary -->
85980
- @if (section.id === 'metric-executive-summary' && metricExecutiveSummary()) {
85981
- <symphiq-metric-executive-summary
85982
- [viewMode]="viewMode()"
85983
- [summary]="metricExecutiveSummary()!"
85984
- [metricName]="metricName() || ''"
85985
- [allGoals]="allGoals()"
85986
- (topPrioritiesClick)="handleMetricTopPrioritiesClick()"
85987
- (priorityDetailClick)="handleMetricPriorityDetailClick($event)"
85988
- />
85989
- } @else if (section.id === 'focus-area-executive-summary' && focusAreaExecutiveSummary()) {
85990
- <symphiq-focus-area-executive-summary
85991
- [viewMode]="viewMode()"
85992
- [summary]="focusAreaExecutiveSummary()!"
85993
- [allGoals]="allGoals()"
85994
- (topPrioritiesClick)="handleTopPrioritiesClick()"
85995
- (priorityDetailClick)="handlePriorityDetailClick($event)"
85996
- />
85997
- } @else {
85998
- <!-- Description and Napkin Visual (if available) - Alternating layout -->
85999
- @if (section.description || (section.visual && section.visual.enabled)) {
86000
- <div class="mb-6">
86001
- <div class="relative">
86002
- @if (section.visual && section.visual.enabled) {
86003
- @if (idx % 2 === 0) {
86004
- <!-- Even index: Napkin on left -->
86005
- <div class="mb-6 lg:float-left lg:mr-6 lg:mb-4 lg:max-w-[50%]">
86006
- <symphiq-napkin-visual-placeholder
86007
- [visual]="section.visual"
86008
- [viewMode]="viewMode()"
86009
- />
86010
- </div>
86011
- } @else {
86012
- <!-- Odd index: Napkin on right -->
86013
- <div class="mb-6 lg:float-right lg:ml-6 lg:mb-4 lg:max-w-[50%]">
86014
- <symphiq-napkin-visual-placeholder
86015
- [visual]="section.visual"
86016
- [viewMode]="viewMode()"
86017
- />
86018
- </div>
86019
- }
86020
- }
86021
-
86022
- <!-- Description -->
86023
- @if (section.description) {
86024
- <p [ngClass]="descriptionTextClasses()" class="text-sm leading-relaxed whitespace-pre-line">
86025
- {{ formatDescription(section.description) }}
86026
- </p>
86027
- }
86028
- <div class="clear-both"></div>
86029
- </div>
86030
- </div>
86031
- }
86032
-
86033
- <symphiq-profile-section-content
86034
- [section]="section"
86035
- [viewMode]="viewMode()"
86036
- [sectionIndex]="idx"
86037
- [executiveSummary]="executiveSummary()"
86038
- [allGoals]="allGoals()"
86039
- [allMetrics]="allMetrics()"
86040
- [allCharts]="allCharts()"
86041
- [allInsights]="allInsights()"
86042
- [businessProfile]="businessProfile()"
86043
- />
86044
- }
86045
- </div>
86046
- </div>
86047
- </div>
86048
- </div>
86049
- }
86050
- </div>
86051
- </div>
86052
- </div>
85909
+ template: `
85910
+ <div [ngClass]="containerClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
85911
+ <div [ngClass]="headerClasses()" class="px-6 py-5 border-b">
85912
+ <div class="flex items-center justify-between">
85913
+ <div class="flex items-center gap-3">
85914
+ <div [ngClass]="iconContainerClasses()" class="p-2.5 rounded-lg">
85915
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
85916
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"></path>
85917
+ </svg>
85918
+ </div>
85919
+ <div>
85920
+ <h2 [ngClass]="titleClasses()" class="text-xl font-bold">
85921
+ Supporting Business Context
85922
+ </h2>
85923
+ <p [ngClass]="subtitleClasses()" class="text-sm mt-0.5">
85924
+ Operational insights and competitive analysis
85925
+ </p>
85926
+ </div>
85927
+ </div>
85928
+ </div>
85929
+ </div>
85930
+
85931
+ <div [ngClass]="contentClasses()" class="p-6">
85932
+ <div [ngClass]="infoBoxClasses()" class="mb-6 p-4 rounded-xl border flex items-start gap-3">
85933
+ <svg class="w-5 h-5 flex-shrink-0 mt-0.5" [ngClass]="infoIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
85934
+ <path 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"></path>
85935
+ </svg>
85936
+ <div class="flex-1">
85937
+ <h4 [ngClass]="infoTitleClasses()" class="font-semibold text-sm mb-1">
85938
+ {{ getDescriptionTitle() }}
85939
+ </h4>
85940
+ <p [ngClass]="infoTextClasses()" class="text-sm leading-relaxed">
85941
+ {{ getDescriptionText() }}
85942
+ </p>
85943
+ </div>
85944
+ </div>
85945
+
85946
+ <div class="space-y-3">
85947
+ @for (section of sections(); track section.id; let idx = $index) {
85948
+ <div [id]="'collapsible-section-' + idx" [ngClass]="sectionCardClasses()" class="rounded-xl border overflow-hidden transition-all duration-200">
85949
+ <button
85950
+ type="button"
85951
+ (click)="toggleSection(idx)"
85952
+ [ngClass]="sectionHeaderClasses(section, idx)"
85953
+ class="cursor-pointer w-full px-5 py-4 flex items-center justify-between gap-4 text-left transition-colors duration-200">
85954
+ <div class="flex items-center gap-3 flex-1 min-w-0">
85955
+ @if (section.icon) {
85956
+ <div [ngClass]="sectionIconContainerClasses(idx)" class="p-2 rounded-lg flex-shrink-0 transition-colors duration-200">
85957
+ <symphiq-icon [icon]="section.icon" size="w-4 h-4"></symphiq-icon>
85958
+ </div>
85959
+ }
85960
+ <div class="flex-1 min-w-0">
85961
+ <h3 [ngClass]="sectionTitleClasses(idx)" class="font-semibold transition-colors duration-200">
85962
+ {{ section.title }}
85963
+ </h3>
85964
+ @if (section.description) {
85965
+ <p [ngClass]="sectionDescriptionClasses(idx)" class="text-sm mt-0.5 line-clamp-1 transition-colors duration-200">
85966
+ {{ formatDescription(section.description) }}
85967
+ </p>
85968
+ }
85969
+ </div>
85970
+ </div>
85971
+ <svg
85972
+ [ngClass]="chevronClasses(idx)"
85973
+ [class.rotate-180]="expandedSections()[idx]"
85974
+ class="w-5 h-5 flex-shrink-0 transition-transform duration-200"
85975
+ fill="none"
85976
+ stroke="currentColor"
85977
+ viewBox="0 0 24 24">
85978
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
85979
+ </svg>
85980
+ </button>
85981
+
85982
+ <div
85983
+ class="grid transition-[grid-template-rows] duration-300 ease-in-out"
85984
+ [style.grid-template-rows]="expandedSections()[idx] ? '1fr' : '0fr'">
85985
+ <div class="overflow-hidden">
85986
+ <div [ngClass]="sectionContentClasses()" class="border-t p-6">
85987
+ <!-- Metric Executive Summary -->
85988
+ @if (section.id === 'metric-executive-summary' && metricExecutiveSummary()) {
85989
+ <symphiq-metric-executive-summary
85990
+ [viewMode]="viewMode()"
85991
+ [summary]="metricExecutiveSummary()!"
85992
+ [metricName]="metricName() || ''"
85993
+ [allGoals]="allGoals()"
85994
+ (topPrioritiesClick)="handleMetricTopPrioritiesClick()"
85995
+ (priorityDetailClick)="handleMetricPriorityDetailClick($event)"
85996
+ />
85997
+ } @else if (section.id === 'focus-area-executive-summary' && focusAreaExecutiveSummary()) {
85998
+ <symphiq-focus-area-executive-summary
85999
+ [viewMode]="viewMode()"
86000
+ [summary]="focusAreaExecutiveSummary()!"
86001
+ [allGoals]="allGoals()"
86002
+ (topPrioritiesClick)="handleTopPrioritiesClick()"
86003
+ (priorityDetailClick)="handlePriorityDetailClick($event)"
86004
+ />
86005
+ } @else {
86006
+ <!-- Description and Napkin Visual (if available) - Alternating layout -->
86007
+ @if (section.description || (section.visual && section.visual.enabled)) {
86008
+ <div class="mb-6">
86009
+ <div class="relative">
86010
+ @if (section.visual && section.visual.enabled) {
86011
+ @if (idx % 2 === 0) {
86012
+ <!-- Even index: Napkin on left -->
86013
+ <div class="mb-6 lg:float-left lg:mr-6 lg:mb-4 lg:max-w-[50%]">
86014
+ <symphiq-napkin-visual-placeholder
86015
+ [visual]="section.visual"
86016
+ [viewMode]="viewMode()"
86017
+ />
86018
+ </div>
86019
+ } @else {
86020
+ <!-- Odd index: Napkin on right -->
86021
+ <div class="mb-6 lg:float-right lg:ml-6 lg:mb-4 lg:max-w-[50%]">
86022
+ <symphiq-napkin-visual-placeholder
86023
+ [visual]="section.visual"
86024
+ [viewMode]="viewMode()"
86025
+ />
86026
+ </div>
86027
+ }
86028
+ }
86029
+
86030
+ <!-- Description -->
86031
+ @if (section.description) {
86032
+ <p [ngClass]="descriptionTextClasses()" class="text-sm leading-relaxed whitespace-pre-line">
86033
+ {{ formatDescription(section.description) }}
86034
+ </p>
86035
+ }
86036
+ <div class="clear-both"></div>
86037
+ </div>
86038
+ </div>
86039
+ }
86040
+
86041
+ <symphiq-profile-section-content
86042
+ [section]="section"
86043
+ [viewMode]="viewMode()"
86044
+ [sectionIndex]="idx"
86045
+ [executiveSummary]="executiveSummary()"
86046
+ [allGoals]="allGoals()"
86047
+ [allMetrics]="allMetrics()"
86048
+ [allCharts]="allCharts()"
86049
+ [allInsights]="allInsights()"
86050
+ [businessProfile]="businessProfile()"
86051
+ />
86052
+ }
86053
+ </div>
86054
+ </div>
86055
+ </div>
86056
+ </div>
86057
+ }
86058
+ </div>
86059
+ </div>
86060
+ </div>
86053
86061
  `
86054
86062
  }]
86055
86063
  }], null, { sections: [{ type: i0.Input, args: [{ isSignal: true, alias: "sections", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], executiveSummary: [{ type: i0.Input, args: [{ isSignal: true, alias: "executiveSummary", required: false }] }], focusAreaExecutiveSummary: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusAreaExecutiveSummary", required: false }] }], metricExecutiveSummary: [{ type: i0.Input, args: [{ isSignal: true, alias: "metricExecutiveSummary", required: false }] }], metricName: [{ type: i0.Input, args: [{ isSignal: true, alias: "metricName", required: false }] }], allGoals: [{ type: i0.Input, args: [{ isSignal: true, alias: "allGoals", required: false }] }], allMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "allMetrics", required: false }] }], allCharts: [{ type: i0.Input, args: [{ isSignal: true, alias: "allCharts", required: false }] }], allInsights: [{ type: i0.Input, args: [{ isSignal: true, alias: "allInsights", required: false }] }], businessProfile: [{ type: i0.Input, args: [{ isSignal: true, alias: "businessProfile", required: false }] }] }); })();
@@ -97183,93 +97191,93 @@ class FocusAreaWelcomeBannerComponent {
97183
97191
  standalone: true,
97184
97192
  imports: [CommonModule, SymphiqIconComponent],
97185
97193
  changeDetection: ChangeDetectionStrategy.OnPush,
97186
- template: `
97187
- <div [ngClass]="containerClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
97188
- <div [ngClass]="contentClasses()" class="px-8 py-8">
97189
- <div class="flex items-start gap-6">
97190
- <div [ngClass]="iconContainerClasses()" class="flex-shrink-0 w-16 h-16 rounded-2xl flex items-center justify-center">
97191
- <symphiq-icon [icon]="focusAreaIcon()" size="w-8 h-8" />
97192
- </div>
97193
-
97194
- <div class="flex-1">
97195
- <h2 [ngClass]="titleClasses()" class="text-2xl sm:text-3xl font-bold mb-3">
97196
- @if (isOnboarded()) {
97197
- Your {{ focusAreaDisplayName() }} Analysis
97198
- } @else {
97199
- Welcome to Your {{ focusAreaDisplayName() }} Analysis
97200
- }
97201
- </h2>
97202
-
97203
- <!-- Description -->
97204
- <div class="space-y-3 mb-6">
97205
- <p [ngClass]="textClasses()" class="text-base leading-relaxed">
97206
- {{ focusAreaDisplayName() }} Analysis provides a deep dive into this specific operational domain. By analyzing your approach, tools, and performance in {{ focusAreaDisplayName() | lowercase }}, Symphiq identifies tactical opportunities and creates an actionable roadmap for improvement.
97207
- </p>
97208
- <p [ngClass]="textClasses()" class="text-base leading-relaxed">
97209
- <strong class="font-semibold">Why this matters:</strong> Rather than generic best practices, this analysis delivers domain-specific insights tailored to your current capabilities, resources, and market position—ensuring recommendations are both impactful and achievable.
97210
- </p>
97211
- </div>
97212
-
97213
- <div [ngClass]="highlightBoxClasses()" class="mt-6 p-5 rounded-xl border-l-4 flex items-start gap-4">
97214
- <svg class="w-6 h-6 flex-shrink-0 mt-0.5" [ngClass]="highlightIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
97215
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
97216
- </svg>
97217
- <div class="flex-1">
97218
- <h3 [ngClass]="highlightTitleClasses()" class="font-bold text-lg mb-2">
97219
- What You'll See Below
97220
- </h3>
97221
- <ul [ngClass]="highlightListClasses()" class="space-y-2 text-sm">
97222
- <li class="flex items-start gap-2">
97223
- <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
97224
- <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path>
97225
- </svg>
97226
- <span><strong class="font-semibold">Focus Area Health</strong> — Current maturity and performance assessment for {{ focusAreaDisplayName() | lowercase }}</span>
97227
- </li>
97228
- <li class="flex items-start gap-2">
97229
- <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
97230
- <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path>
97231
- </svg>
97232
- <span><strong class="font-semibold">Top Priorities</strong> — High-impact improvements specific to this operational domain</span>
97233
- </li>
97234
- <li class="flex items-start gap-2">
97235
- <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
97236
- <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path>
97237
- </svg>
97238
- <span><strong class="font-semibold">Tactical Roadmap</strong> — Step-by-step goals, strategies, and recommendations for domain optimization</span>
97239
- </li>
97240
- </ul>
97241
- </div>
97242
- </div>
97243
-
97244
- <div [ngClass]="nextStepsBoxClasses()" class="mt-6 p-5 rounded-xl border flex items-start gap-4">
97245
- <svg class="w-6 h-6 flex-shrink-0 mt-0.5" [ngClass]="nextStepsIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
97246
- @if (isOnboarded()) {
97247
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
97248
- } @else {
97249
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"></path>
97250
- }
97251
- </svg>
97252
- <div class="flex-1">
97253
- <h3 [ngClass]="nextStepsTitleClasses()" class="font-bold mb-1">
97254
- @if (isOnboarded()) {
97255
- Keep Your Focus Area Updated
97256
- } @else {
97257
- Continue Your Journey
97258
- }
97259
- </h3>
97260
- <p [ngClass]="nextStepsTextClasses()" class="text-sm leading-relaxed">
97261
- @if (isOnboarded()) {
97262
- As you implement improvements, adopt new tools, or refine your {{ focusAreaDisplayName() | lowercase }} approach, update this analysis to keep recommendations aligned with your evolving capabilities and market opportunities.
97263
- } @else {
97264
- This analysis provides domain-specific insights. To unlock the full power of Symphiq, explore additional focus areas and connect them to your shop operations and funnel metrics.
97265
- }
97266
- </p>
97267
- </div>
97268
- </div>
97269
- </div>
97270
- </div>
97271
- </div>
97272
- </div>
97194
+ template: `
97195
+ <div [ngClass]="containerClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
97196
+ <div [ngClass]="contentClasses()" class="px-8 py-8">
97197
+ <div class="flex items-start gap-6">
97198
+ <div [ngClass]="iconContainerClasses()" class="flex-shrink-0 w-16 h-16 rounded-2xl flex items-center justify-center">
97199
+ <symphiq-icon [icon]="focusAreaIcon()" size="w-8 h-8" />
97200
+ </div>
97201
+
97202
+ <div class="flex-1">
97203
+ <h2 [ngClass]="titleClasses()" class="text-2xl sm:text-3xl font-bold mb-3">
97204
+ @if (isOnboarded()) {
97205
+ Your {{ focusAreaDisplayName() }} Analysis
97206
+ } @else {
97207
+ Welcome to Your {{ focusAreaDisplayName() }} Analysis
97208
+ }
97209
+ </h2>
97210
+
97211
+ <!-- Description -->
97212
+ <div class="space-y-3 mb-6">
97213
+ <p [ngClass]="textClasses()" class="text-base leading-relaxed">
97214
+ {{ focusAreaDisplayName() }} Analysis provides a deep dive into this specific operational domain. By analyzing your approach, tools, and performance in {{ focusAreaDisplayName() | lowercase }}, Symphiq identifies tactical opportunities and creates an actionable roadmap for improvement.
97215
+ </p>
97216
+ <p [ngClass]="textClasses()" class="text-base leading-relaxed">
97217
+ <strong class="font-semibold">Why this matters:</strong> Rather than generic best practices, this analysis delivers domain-specific insights tailored to your current capabilities, resources, and market position—ensuring recommendations are both impactful and achievable.
97218
+ </p>
97219
+ </div>
97220
+
97221
+ <div [ngClass]="highlightBoxClasses()" class="mt-6 p-5 rounded-xl border-l-4 flex items-start gap-4">
97222
+ <svg class="w-6 h-6 flex-shrink-0 mt-0.5" [ngClass]="highlightIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
97223
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
97224
+ </svg>
97225
+ <div class="flex-1">
97226
+ <h3 [ngClass]="highlightTitleClasses()" class="font-bold text-lg mb-2">
97227
+ What You'll See Below
97228
+ </h3>
97229
+ <ul [ngClass]="highlightListClasses()" class="space-y-2 text-sm">
97230
+ <li class="flex items-start gap-2">
97231
+ <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
97232
+ <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path>
97233
+ </svg>
97234
+ <span><strong class="font-semibold">Focus Area Health</strong> — Current maturity and performance assessment for {{ focusAreaDisplayName() | lowercase }}</span>
97235
+ </li>
97236
+ <li class="flex items-start gap-2">
97237
+ <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
97238
+ <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path>
97239
+ </svg>
97240
+ <span><strong class="font-semibold">Top Priorities</strong> — High-impact improvements specific to this operational domain</span>
97241
+ </li>
97242
+ <li class="flex items-start gap-2">
97243
+ <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
97244
+ <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path>
97245
+ </svg>
97246
+ <span><strong class="font-semibold">Tactical Roadmap</strong> — Step-by-step goals, strategies, and recommendations for domain optimization</span>
97247
+ </li>
97248
+ </ul>
97249
+ </div>
97250
+ </div>
97251
+
97252
+ <div [ngClass]="nextStepsBoxClasses()" class="mt-6 p-5 rounded-xl border flex items-start gap-4">
97253
+ <svg class="w-6 h-6 flex-shrink-0 mt-0.5" [ngClass]="nextStepsIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
97254
+ @if (isOnboarded()) {
97255
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
97256
+ } @else {
97257
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"></path>
97258
+ }
97259
+ </svg>
97260
+ <div class="flex-1">
97261
+ <h3 [ngClass]="nextStepsTitleClasses()" class="font-bold mb-1">
97262
+ @if (isOnboarded()) {
97263
+ Keep Your Focus Area Updated
97264
+ } @else {
97265
+ Continue Your Journey
97266
+ }
97267
+ </h3>
97268
+ <p [ngClass]="nextStepsTextClasses()" class="text-sm leading-relaxed">
97269
+ @if (isOnboarded()) {
97270
+ As you implement improvements, adopt new tools, or refine your {{ focusAreaDisplayName() | lowercase }} approach, update this analysis to keep recommendations aligned with your evolving capabilities and market opportunities.
97271
+ } @else {
97272
+ This analysis provides domain-specific insights. To unlock the full power of Symphiq, explore additional focus areas and connect them to your shop operations and funnel metrics.
97273
+ }
97274
+ </p>
97275
+ </div>
97276
+ </div>
97277
+ </div>
97278
+ </div>
97279
+ </div>
97280
+ </div>
97273
97281
  `
97274
97282
  }]
97275
97283
  }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], focusAreaDomain: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusAreaDomain", required: false }] }], focusAreaName: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusAreaName", required: false }] }], isOnboarded: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOnboarded", required: false }] }] }); })();
@@ -98163,351 +98171,1181 @@ class SymphiqProfileAnalysisFocusAreaDashboardComponent {
98163
98171
  MarkAsReviewedFooterComponent
98164
98172
  ],
98165
98173
  changeDetection: ChangeDetectionStrategy.OnPush,
98166
- template: `
98167
- <div [ngClass]="getContainerClasses()" [class.min-h-screen]="!embedded()" class="relative">
98168
- <div class="animated-bubbles" [class.light-mode]="isLightMode()"
98169
- style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
98170
-
98171
- <!-- Scroll Progress Bar -->
98172
- <div
98173
- [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'">
98174
- <div
98175
- [style.width.%]="scrollProgress()"
98176
- [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
98177
- class="h-full transition-all duration-200 ease-out">
98178
- </div>
98179
- </div>
98180
-
98181
- <div class="relative z-[51]">
98182
- <!-- Dashboard Header -->
98183
- <symphiq-dashboard-header
98184
- [title]="getAnalysisSubtitle()"
98185
- [subtitle]="''"
98186
- [currentSection]="'Focus Area'"
98187
- [viewMode]="viewMode()"
98188
- [viewModeLabel]="displayModeLabel()"
98189
- [isLoading]="isLoading()"
98190
- [requestedByUser]="requestedByUser()"
98191
- [createdDate]="profileAnalysis()?.selfContentCompletedDate"
98192
- [showControls]="shouldShowHeaderControls()"
98193
- (searchClick)="openSearch()"
98194
- (viewModeClick)="openViewModeSwitcher()"
98195
- />
98196
-
98197
- <!-- Main Content -->
98198
- <main class="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 space-y-12"
98199
- [class.pb-32]="shouldShowReviewFooter()">
98200
-
98201
- <!-- Welcome Banner (Simplified View Only) -->
98202
- @if (isSimplifiedView()) {
98203
- <div class="mb-12">
98204
- <symphiq-focus-area-welcome-banner
98205
- [viewMode]="viewMode()"
98206
- [focusAreaDomain]="focusAreaDomain()"
98207
- [focusAreaName]="focusAreaName()"
98208
- />
98209
- </div>
98210
-
98211
- <!-- Loading Card -->
98212
- @if (isLoading()) {
98213
- <div [ngClass]="isLightMode() ? 'bg-white/80 border-slate-200' : 'bg-slate-800/80 border-slate-700'"
98214
- class="rounded-2xl border shadow-lg p-8 backdrop-blur-sm">
98215
- <div class="flex flex-col items-center justify-center space-y-4">
98216
- <symphiq-indeterminate-spinner [viewMode]="viewMode()" size="large" />
98217
- <div class="text-center">
98218
- <h3 [ngClass]="isLightMode() ? 'text-slate-900' : 'text-white'" class="text-lg font-semibold mb-1">
98219
- Loading Your Focus Area Analysis
98220
- </h3>
98221
- <p [ngClass]="isLightMode() ? 'text-slate-600' : 'text-slate-400'" class="text-sm">
98222
- Please wait while we prepare your personalized insights...
98223
- </p>
98224
- </div>
98225
- </div>
98226
- </div>
98227
- }
98228
- }
98229
-
98230
- <!-- Simplified View Content -->
98231
- @if (isSimplifiedView()) {
98232
- <!-- Strategic Insights & Goals -->
98233
- @if (profileAnalysis()) {
98234
- <div class="mb-8">
98235
- @if (isProfileAnalysisGenerating()) {
98236
- <div [ngClass]="getProgressCardClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
98237
- <symphiq-content-generation-progress
98238
- [itemStatus]="itemStatusProfileAnalysis()"
98239
- [viewMode]="viewMode()"
98240
- title="Generating Your Focus Area Analysis"
98241
- subtitle="We're analyzing your data to create your personalized analysis. It will appear when ready."
98242
- />
98243
- </div>
98244
- } @else {
98245
- <symphiq-strategic-goals-tiled-grid
98246
- [goals]="strategicRoadmapGoals()"
98247
- [viewMode]="viewMode()"
98248
- (viewMoreClick)="openGoalModal($event)"
98249
- />
98250
- }
98251
- </div>
98252
- }
98174
+ template: `
98175
+ <div [ngClass]="getContainerClasses()" [class.min-h-screen]="!embedded()" class="relative">
98176
+ <div class="animated-bubbles" [class.light-mode]="isLightMode()"
98177
+ style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
98178
+
98179
+ <!-- Scroll Progress Bar -->
98180
+ <div
98181
+ [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'">
98182
+ <div
98183
+ [style.width.%]="scrollProgress()"
98184
+ [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
98185
+ class="h-full transition-all duration-200 ease-out">
98186
+ </div>
98187
+ </div>
98188
+
98189
+ <div class="relative z-[51]">
98190
+ <!-- Dashboard Header -->
98191
+ <symphiq-dashboard-header
98192
+ [title]="getAnalysisSubtitle()"
98193
+ [subtitle]="''"
98194
+ [currentSection]="'Focus Area'"
98195
+ [viewMode]="viewMode()"
98196
+ [viewModeLabel]="displayModeLabel()"
98197
+ [isLoading]="isLoading()"
98198
+ [requestedByUser]="requestedByUser()"
98199
+ [createdDate]="profileAnalysis()?.selfContentCompletedDate"
98200
+ [showControls]="shouldShowHeaderControls()"
98201
+ (searchClick)="openSearch()"
98202
+ (viewModeClick)="openViewModeSwitcher()"
98203
+ />
98204
+
98205
+ <!-- Main Content -->
98206
+ <main class="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 space-y-12"
98207
+ [class.pb-32]="shouldShowReviewFooter()">
98208
+
98209
+ <!-- Welcome Banner (Simplified View Only) -->
98210
+ @if (isSimplifiedView()) {
98211
+ <div class="mb-12">
98212
+ <symphiq-focus-area-welcome-banner
98213
+ [viewMode]="viewMode()"
98214
+ [focusAreaDomain]="focusAreaDomain()"
98215
+ [focusAreaName]="focusAreaName()"
98216
+ />
98217
+ </div>
98218
+
98219
+ <!-- Loading Card -->
98220
+ @if (isLoading()) {
98221
+ <div [ngClass]="isLightMode() ? 'bg-white/80 border-slate-200' : 'bg-slate-800/80 border-slate-700'"
98222
+ class="rounded-2xl border shadow-lg p-8 backdrop-blur-sm">
98223
+ <div class="flex flex-col items-center justify-center space-y-4">
98224
+ <symphiq-indeterminate-spinner [viewMode]="viewMode()" size="large" />
98225
+ <div class="text-center">
98226
+ <h3 [ngClass]="isLightMode() ? 'text-slate-900' : 'text-white'" class="text-lg font-semibold mb-1">
98227
+ Loading Your Focus Area Analysis
98228
+ </h3>
98229
+ <p [ngClass]="isLightMode() ? 'text-slate-600' : 'text-slate-400'" class="text-sm">
98230
+ Please wait while we prepare your personalized insights...
98231
+ </p>
98232
+ </div>
98233
+ </div>
98234
+ </div>
98235
+ }
98236
+ }
98237
+
98238
+ <!-- Simplified View Content -->
98239
+ @if (isSimplifiedView()) {
98240
+ <!-- Strategic Insights & Goals -->
98241
+ @if (profileAnalysis()) {
98242
+ <div class="mb-8">
98243
+ @if (isProfileAnalysisGenerating()) {
98244
+ <div [ngClass]="getProgressCardClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
98245
+ <symphiq-content-generation-progress
98246
+ [itemStatus]="itemStatusProfileAnalysis()"
98247
+ [viewMode]="viewMode()"
98248
+ title="Generating Your Focus Area Analysis"
98249
+ subtitle="We're analyzing your data to create your personalized analysis. It will appear when ready."
98250
+ />
98251
+ </div>
98252
+ } @else {
98253
+ <symphiq-strategic-goals-tiled-grid
98254
+ [goals]="strategicRoadmapGoals()"
98255
+ [viewMode]="viewMode()"
98256
+ (viewMoreClick)="openGoalModal($event)"
98257
+ />
98258
+ }
98259
+ </div>
98260
+ }
98261
+
98262
+ <!-- Supporting Business Context -->
98263
+ @if (nonStrategicSections().length > 0) {
98264
+ <div>
98265
+ <symphiq-collapsible-analysis-section-group
98266
+ [sections]="nonStrategicSections()"
98267
+ [viewMode]="viewMode()"
98268
+ [focusAreaExecutiveSummary]="focusAreaExecutiveSummary()"
98269
+ [allGoals]="allGoals()"
98270
+ [allMetrics]="allMetrics()"
98271
+ [allCharts]="allCharts()"
98272
+ [allInsights]="allInsights()"
98273
+ [businessProfile]="profile()"
98274
+ />
98275
+ </div>
98276
+ }
98277
+ }
98278
+
98279
+ <!-- Compact & Expanded View Content -->
98280
+ @if (!isSimplifiedView()) {
98281
+ <!-- Focus Area Executive Summary -->
98282
+ @if (focusAreaExecutiveSummary(); as summary) {
98283
+ <symphiq-focus-area-executive-summary
98284
+ [viewMode]="viewMode()"
98285
+ [summary]="summary"
98286
+ [allGoals]="allGoals()"
98287
+ (topPrioritiesClick)="handleTopPrioritiesClick()"
98288
+ (priorityDetailClick)="handlePriorityDetailClick($event)"
98289
+ />
98290
+ }
98291
+
98292
+ <!-- Divider Before First Section -->
98293
+ @if (sections(); as sectionList) {
98294
+ @if (sectionList.length > 0 && sectionList[0].icon) {
98295
+ <symphiq-section-divider
98296
+ [viewMode]="viewMode()"
98297
+ [sectionIcon]="sectionList[0].icon"
98298
+ />
98299
+ }
98300
+ }
98301
+
98302
+ <!-- Profile Analysis Sections -->
98303
+ @if (sections(); as sectionList) {
98304
+ <section class="space-y-8">
98305
+ @for (section of sectionList; track section.id; let idx = $index; let last = $last) {
98306
+ <div [id]="'section-' + section.id" [ngClass]="getSectionCardClasses()"
98307
+ class="rounded-xl p-8 scroll-mt-24">
98308
+ <!-- Icon and Title -->
98309
+ <div class="flex items-start gap-3 mb-6">
98310
+ @if (section.icon) {
98311
+ <div [ngClass]="getSectionIconClasses()"
98312
+ class="flex-shrink-0 w-12 h-12 rounded-xl flex items-center justify-center">
98313
+ <symphiq-icon [icon]="section.icon" size="w-6 h-6"></symphiq-icon>
98314
+ </div>
98315
+ }
98316
+ <div class="flex-1">
98317
+ <h3 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold">
98318
+ {{ section.title }}
98319
+ </h3>
98320
+ </div>
98321
+ </div>
98322
+
98323
+ <!-- Description and Visual Side-by-Side -->
98324
+ @if (section.description || (section.visual && section.visual.enabled)) {
98325
+ <div class="mb-6 flex flex-col lg:flex-row gap-6 items-start"
98326
+ [class.lg:flex-row-reverse]="idx % 2 === 0">
98327
+ @if (section.visual && section.visual.enabled) {
98328
+ <div class="w-full lg:w-2/3">
98329
+ <symphiq-napkin-visual-placeholder
98330
+ [visual]="section.visual"
98331
+ [viewMode]="viewMode()"
98332
+ />
98333
+ </div>
98334
+ }
98335
+ @if (section.description) {
98336
+ <div class="w-full"
98337
+ [class.lg:w-1/3]="section.visual && section.visual.enabled" [class.lg:w-full]="!section.visual || !section.visual.enabled">
98338
+ <p [ngClass]="getSectionDescriptionClasses()"
98339
+ class="text-sm leading-relaxed whitespace-pre-line">
98340
+ {{ section.description }}
98341
+ </p>
98342
+ </div>
98343
+ }
98344
+ </div>
98345
+ }
98346
+
98347
+ <!-- Section Content -->
98348
+ <symphiq-profile-section-content
98349
+ [section]="section"
98350
+ [viewMode]="viewMode()"
98351
+ [sectionIndex]="idx"
98352
+ [allGoals]="allGoals()"
98353
+ [allMetrics]="allMetrics()"
98354
+ [allCharts]="allCharts()"
98355
+ [allInsights]="allInsights()"
98356
+ [businessProfile]="profile()"
98357
+ />
98358
+ </div>
98359
+
98360
+ <!-- Section Divider (between sections) -->
98361
+ @if (!last) {
98362
+ <symphiq-section-divider
98363
+ [viewMode]="viewMode()"
98364
+ [sectionIcon]="sectionList[idx + 1].icon"
98365
+ />
98366
+ }
98367
+ }
98368
+ </section>
98369
+ }
98370
+ }
98371
+
98372
+ </main>
98373
+
98374
+ <!-- Table of Contents (Compact & Expanded Views) -->
98375
+ @if (!isSimplifiedView() && sections()) {
98376
+ <symphiq-floating-toc
98377
+ [sections]="tocSections()"
98378
+ [viewMode]="viewMode()"
98379
+ [embedded]="embedded()"
98380
+ [scrollElement]="scrollElement() ?? undefined"
98381
+ />
98382
+ }
98383
+
98384
+ <!-- Section Navigation Dots (Compact & Expanded Views) -->
98385
+ @if (!isSimplifiedView() && sections()) {
98386
+ <symphiq-section-navigation
98387
+ [sections]="tocSections()"
98388
+ [viewMode]="viewMode()"
98389
+ [embedded]="embedded()"
98390
+ [scrollElement]="scrollElement() ?? undefined"
98391
+ />
98392
+ }
98393
+
98394
+ <!-- Search Modal -->
98395
+ <symphiq-search-modal
98396
+ [isOpen]="isSearchOpen()"
98397
+ [isLightMode]="isLightMode()"
98398
+ (close)="closeSearch()"
98399
+ />
98400
+
98401
+ <!-- View Mode Switcher Modal -->
98402
+ <symphiq-view-mode-switcher-modal
98403
+ [isOpen]="isViewModeSwitcherOpen()"
98404
+ [currentMode]="currentDisplayMode()"
98405
+ [viewMode]="viewMode()"
98406
+ (close)="closeViewModeSwitcher()"
98407
+ (modeSelected)="handleDisplayModeChange($event)"
98408
+ />
98409
+
98410
+ <!-- Profile Analysis Modal -->
98411
+ <symphiq-profile-analysis-modal
98412
+ [isLightMode]="isLightMode()"
98413
+ [allMetrics]="allMetrics()"
98414
+ [allInsights]="allInsights()"
98415
+ [allBusinessInsights]="allBusinessInsights()"
98416
+ [allCharts]="allCharts()"
98417
+ >
98418
+ @if (modalType() === 'goal-detail' && getGoalDetailData(); as data) {
98419
+ <symphiq-goal-card
98420
+ [goal]="data.goal"
98421
+ [viewMode]="data.viewMode"
98422
+ [isInModal]="true"
98423
+ [allMetrics]="allMetrics()"
98424
+ [allCharts]="allCharts()"
98425
+ [allInsights]="allInsights()"
98426
+ [currentModalState]="getCurrentModalState()"
98427
+ [businessProfile]="profile()"
98428
+ />
98429
+ }
98430
+ @if (modalType() === 'goal-objectives' && getGoalDetailData(); as data) {
98431
+ <symphiq-goal-objectives-modal-content
98432
+ [goal]="data.goal"
98433
+ [viewMode]="data.viewMode"
98434
+ />
98435
+ }
98436
+ @if (modalType() === 'objective-strategies' && getObjectiveStrategiesData(); as data) {
98437
+ <symphiq-objective-strategies-modal-content
98438
+ [objective]="data.objective"
98439
+ [goalTitle]="data.goalTitle"
98440
+ [viewMode]="data.viewMode"
98441
+ />
98442
+ }
98443
+ @if (modalType() === 'strategy-recommendations' && getStrategyRecommendationsData(); as data) {
98444
+ <symphiq-strategy-recommendations-modal-content
98445
+ [strategy]="data.strategy"
98446
+ [objectiveTitle]="data.objectiveTitle"
98447
+ [goalTitle]="data.goalTitle"
98448
+ [viewMode]="data.viewMode"
98449
+ [expandedRecommendationId]="data.expandedRecommendationId"
98450
+ [allMetrics]="allMetrics()"
98451
+ [allCharts]="allCharts()"
98452
+ [allInsights]="allInsights()"
98453
+ [allBusinessInsights]="allBusinessInsights()"
98454
+ [currentModalState]="getCurrentModalState()"
98455
+ />
98456
+ }
98457
+ @if (modalType() === 'category-detail' && getCategoryDetailData(); as data) {
98458
+ <symphiq-category-detail-modal-content
98459
+ [category]="data.category"
98460
+ [viewMode]="data.viewMode"
98461
+ [scrollToSection]="data.scrollToSection"
98462
+ />
98463
+ }
98464
+ @if (modalType() === 'strength-detail' && getStrengthDetailData(); as data) {
98465
+ <symphiq-strength-detail-modal-content
98466
+ [strength]="data.strength"
98467
+ [viewMode]="data.viewMode"
98468
+ [allFunnelStrengths]="funnelStrengths()"
98469
+ [currentModalState]="getCurrentModalState()"
98470
+ />
98471
+ }
98472
+ @if (modalType() === 'gap-detail' && getGapDetailData(); as data) {
98473
+ <symphiq-gap-detail-modal-content
98474
+ [gap]="data.gap"
98475
+ [viewMode]="data.viewMode"
98476
+ [allGoals]="allGoals()"
98477
+ [allWeaknesses]="funnelWeaknesses()"
98478
+ [currentModalState]="getCurrentModalState()"
98479
+ />
98480
+ }
98481
+ @if (modalType() === 'opportunity-detail' && getOpportunityDetailData(); as data) {
98482
+ <symphiq-opportunity-detail-modal-content
98483
+ [opportunity]="data.opportunity"
98484
+ [viewMode]="data.viewMode"
98485
+ [allStrengths]="funnelStrengths()"
98486
+ [currentModalState]="getCurrentModalState()"
98487
+ />
98488
+ }
98489
+ </symphiq-profile-analysis-modal>
98490
+
98491
+ <!-- Funnel Analysis Modal -->
98492
+ <symphiq-funnel-analysis-modal
98493
+ #funnelModalComponent
98494
+ />
98495
+
98496
+ <!-- Mark as Reviewed Sticky Footer -->
98497
+ <symphiq-mark-as-reviewed-footer
98498
+ [viewMode]="viewMode()"
98499
+ [reviewStatus]="profileAnalysis()?.reviewStatus"
98500
+ [selfContentStatus]="profileAnalysis()?.selfContentStatus"
98501
+ [isMarkingAsReviewed]="isMarkingAsReviewed()"
98502
+ (markAsReviewedClick)="handleMarkAsReviewedClick()"
98503
+ />
98504
+
98505
+ <!-- Tooltip Container -->
98506
+ <symphiq-tooltip-container />
98507
+ </div>
98508
+ </div>
98509
+ `
98510
+ }]
98511
+ }], null, { funnelModalComponent: [{
98512
+ type: ViewChild,
98513
+ args: ['funnelModalComponent']
98514
+ }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], profileAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileAnalysis", required: false }] }], funnelAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelAnalysis", required: false }] }], profile: [{ type: i0.Input, args: [{ isSignal: true, alias: "profile", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], scrollEvent: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollEvent", required: false }] }], scrollElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollElement", required: false }] }], focusAreaDetails: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusAreaDetails", required: false }] }], itemStatusProfileAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemStatusProfileAnalysis", required: false }] }], isMarkingAsReviewed: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMarkingAsReviewed", required: false }] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], markAsReviewedClick: [{ type: i0.Output, args: ["markAsReviewedClick"] }], onWindowScroll: [{
98515
+ type: HostListener,
98516
+ args: ['window:scroll', ['$event']]
98517
+ }] }); })();
98518
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqProfileAnalysisFocusAreaDashboardComponent, { className: "SymphiqProfileAnalysisFocusAreaDashboardComponent", filePath: "lib/components/profile-analysis-focus-area-dashboard/symphiq-profile-analysis-focus-area-dashboard.component.ts", lineNumber: 481 }); })();
98253
98519
 
98254
- <!-- Supporting Business Context -->
98255
- @if (nonStrategicSections().length > 0) {
98256
- <div>
98257
- <symphiq-collapsible-analysis-section-group
98258
- [sections]="nonStrategicSections()"
98259
- [viewMode]="viewMode()"
98260
- [focusAreaExecutiveSummary]="focusAreaExecutiveSummary()"
98261
- [allGoals]="allGoals()"
98262
- [allMetrics]="allMetrics()"
98263
- [allCharts]="allCharts()"
98264
- [allInsights]="allInsights()"
98265
- [businessProfile]="profile()"
98266
- />
98267
- </div>
98520
+ function SymphiqProfileMetricsAnalysesDashboardComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
98521
+ const _r1 = i0.ɵɵgetCurrentView();
98522
+ i0.ɵɵelementStart(0, "symphiq-journey-progress-indicator", 35);
98523
+ i0.ɵɵlistener("nextStepClick", function SymphiqProfileMetricsAnalysesDashboardComponent_Conditional_6_Template_symphiq_journey_progress_indicator_nextStepClick_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.nextStepClick.emit()); })("stepClick", function SymphiqProfileMetricsAnalysesDashboardComponent_Conditional_6_Template_symphiq_journey_progress_indicator_stepClick_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.stepClick.emit($event)); });
98524
+ i0.ɵɵelementEnd();
98525
+ } if (rf & 2) {
98526
+ const ctx_r1 = i0.ɵɵnextContext();
98527
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("currentStepId", ctx_r1.currentStepId())("showNextStepAction", ctx_r1.forDemo() || ctx_r1.allMetricsAnalysisReviewed())("forDemo", ctx_r1.forDemo())("maxAccessibleStepId", ctx_r1.maxAccessibleStepId());
98528
+ } }
98529
+ function SymphiqProfileMetricsAnalysesDashboardComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
98530
+ i0.ɵɵelement(0, "symphiq-profile-analysis-status-summary", 16);
98531
+ } if (rf & 2) {
98532
+ const ctx_r1 = i0.ɵɵnextContext();
98533
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("profileStatusCounts", ctx_r1.metricStatusCounts())("analysisStatusCounts", ctx_r1.analysisStatusCounts())("allReviewed", ctx_r1.allMetricsAnalysisReviewed())("hasItems", ctx_r1.metricCards().length > 0)("config", ctx_r1.metricStatusConfig);
98534
+ } }
98535
+ function SymphiqProfileMetricsAnalysesDashboardComponent_Conditional_65_Template(rf, ctx) { if (rf & 1) {
98536
+ const _r3 = i0.ɵɵgetCurrentView();
98537
+ i0.ɵɵelementStart(0, "symphiq-search-modal", 36);
98538
+ i0.ɵɵlistener("closeModal", function SymphiqProfileMetricsAnalysesDashboardComponent_Conditional_65_Template_symphiq_search_modal_closeModal_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleCloseSearchModal()); });
98539
+ i0.ɵɵelementEnd();
98540
+ } }
98541
+ class SymphiqProfileMetricsAnalysesDashboardComponent {
98542
+ constructor() {
98543
+ this.requestedByUser = input(...(ngDevMode ? [undefined, { debugName: "requestedByUser" }] : []));
98544
+ this.createdDate = input(...(ngDevMode ? [undefined, { debugName: "createdDate" }] : []));
98545
+ this.embedded = input(false, ...(ngDevMode ? [{ debugName: "embedded" }] : []));
98546
+ this.profileAnalyses = input(...(ngDevMode ? [undefined, { debugName: "profileAnalyses" }] : []));
98547
+ this.profileMetrics = input(...(ngDevMode ? [undefined, { debugName: "profileMetrics" }] : []));
98548
+ this.itemStatusesProfileMetric = input(...(ngDevMode ? [undefined, { debugName: "itemStatusesProfileMetric" }] : []));
98549
+ this.itemStatusesProfileAnalysis = input(...(ngDevMode ? [undefined, { debugName: "itemStatusesProfileAnalysis" }] : []));
98550
+ this.profile = input(...(ngDevMode ? [undefined, { debugName: "profile" }] : []));
98551
+ this.funnelAnalysis = input(...(ngDevMode ? [undefined, { debugName: "funnelAnalysis" }] : []));
98552
+ this.funnelMetrics = input(...(ngDevMode ? [undefined, { debugName: "funnelMetrics" }] : []));
98553
+ this.account = input(...(ngDevMode ? [undefined, { debugName: "account" }] : []));
98554
+ this.profileMetricQuestions = input(...(ngDevMode ? [undefined, { debugName: "profileMetricQuestions" }] : []));
98555
+ this.isOnboarded = input(false, ...(ngDevMode ? [{ debugName: "isOnboarded" }] : []));
98556
+ this.scrollEvent = input(...(ngDevMode ? [undefined, { debugName: "scrollEvent" }] : []));
98557
+ this.scrollElement = input(...(ngDevMode ? [undefined, { debugName: "scrollElement" }] : []));
98558
+ this.users = input([], ...(ngDevMode ? [{ debugName: "users" }] : []));
98559
+ this.isLoading = input(...(ngDevMode ? [undefined, { debugName: "isLoading" }] : []));
98560
+ this.forDemo = input(false, ...(ngDevMode ? [{ debugName: "forDemo" }] : []));
98561
+ this.currentUser = input(...(ngDevMode ? [undefined, { debugName: "currentUser" }] : []));
98562
+ this.maxAccessibleStepId = input(undefined, ...(ngDevMode ? [{ debugName: "maxAccessibleStepId" }] : []));
98563
+ this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
98564
+ this.displayMode = input(DisplayModeEnum.SIMPLIFIED, ...(ngDevMode ? [{ debugName: "displayMode" }] : []));
98565
+ this.currentStepId = input(JourneyStepIdEnum.METRIC_ANALYSIS, ...(ngDevMode ? [{ debugName: "currentStepId" }] : []));
98566
+ this.navigateToProfileMetric = output();
98567
+ this.navigateToProfileAnalysis = output();
98568
+ this.stepClick = output();
98569
+ this.nextStepClick = output();
98570
+ this.answerMetricProfileQuestions = output();
98571
+ this.continueMetricProfileQuestions = output();
98572
+ this.profileQuestionAnswerSave = output();
98573
+ this.metricProfileAdminAnswerAction = output();
98574
+ this.showSearchModal = signal(false, ...(ngDevMode ? [{ debugName: "showSearchModal" }] : []));
98575
+ this.scrollProgress = signal(0, ...(ngDevMode ? [{ debugName: "scrollProgress" }] : []));
98576
+ this.headerScrollService = inject(HeaderScrollService);
98577
+ this.isLightMode = computed(() => this.viewMode() === ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "isLightMode" }] : []));
98578
+ this.isSimplifiedView = computed(() => this.displayMode() === DisplayModeEnum.SIMPLIFIED, ...(ngDevMode ? [{ debugName: "isSimplifiedView" }] : []));
98579
+ this.AiDynamicContentStatusEnum = AiDynamicContentStatusEnum;
98580
+ this.ProfileAnalysisReviewStatusEnum = ProfileAnalysisReviewStatusEnum;
98581
+ this.metricStatusConfig = {
98582
+ profileSectionTitle: 'Metric Profiles',
98583
+ profileSectionIcon: 'chart',
98584
+ analysisSectionTitle: 'Metric Analyses',
98585
+ analysisSectionIcon: 'chart',
98586
+ allReviewedMessage: 'All Metric Analyses Reviewed!',
98587
+ noAnalysesMessage: 'No metric analyses yet'
98588
+ };
98589
+ this.metricCardConfig = {
98590
+ toolsLabel: '',
98591
+ profileProgressLabel: 'Profile progress',
98592
+ generatingProfileTitle: 'Generating Metric Profile',
98593
+ generatingAnalysisTitle: 'Generating Metric Analysis',
98594
+ notInterestedSectionLabel: '',
98595
+ showNotInterestedSection: false
98596
+ };
98597
+ this.COLLAPSE_THRESHOLD = 50;
98598
+ this.EXPAND_THRESHOLD = 10;
98599
+ this.embeddedScrollEffect = effect(() => {
98600
+ const scrollEvent = this.scrollEvent();
98601
+ const isEmbedded = this.embedded();
98602
+ if (isEmbedded && !scrollEvent) {
98603
+ return;
98268
98604
  }
98269
- }
98270
-
98271
- <!-- Compact & Expanded View Content -->
98272
- @if (!isSimplifiedView()) {
98273
- <!-- Focus Area Executive Summary -->
98274
- @if (focusAreaExecutiveSummary(); as summary) {
98275
- <symphiq-focus-area-executive-summary
98276
- [viewMode]="viewMode()"
98277
- [summary]="summary"
98278
- [allGoals]="allGoals()"
98279
- (topPrioritiesClick)="handleTopPrioritiesClick()"
98280
- (priorityDetailClick)="handlePriorityDetailClick($event)"
98281
- />
98605
+ if (!scrollEvent || !isEmbedded) {
98606
+ return;
98282
98607
  }
98283
-
98284
- <!-- Divider Before First Section -->
98285
- @if (sections(); as sectionList) {
98286
- @if (sectionList.length > 0 && sectionList[0].icon) {
98287
- <symphiq-section-divider
98288
- [viewMode]="viewMode()"
98289
- [sectionIcon]="sectionList[0].icon"
98290
- />
98291
- }
98608
+ const detail = scrollEvent.detail;
98609
+ if (!detail) {
98610
+ return;
98292
98611
  }
98293
-
98294
- <!-- Profile Analysis Sections -->
98295
- @if (sections(); as sectionList) {
98296
- <section class="space-y-8">
98297
- @for (section of sectionList; track section.id; let idx = $index; let last = $last) {
98298
- <div [id]="'section-' + section.id" [ngClass]="getSectionCardClasses()"
98299
- class="rounded-xl p-8 scroll-mt-24">
98300
- <!-- Icon and Title -->
98301
- <div class="flex items-start gap-3 mb-6">
98302
- @if (section.icon) {
98303
- <div [ngClass]="getSectionIconClasses()"
98304
- class="flex-shrink-0 w-12 h-12 rounded-xl flex items-center justify-center">
98305
- <symphiq-icon [icon]="section.icon" size="w-6 h-6"></symphiq-icon>
98306
- </div>
98307
- }
98308
- <div class="flex-1">
98309
- <h3 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold">
98310
- {{ section.title }}
98311
- </h3>
98312
- </div>
98313
- </div>
98314
-
98315
- <!-- Description and Visual Side-by-Side -->
98316
- @if (section.description || (section.visual && section.visual.enabled)) {
98317
- <div class="mb-6 flex flex-col lg:flex-row gap-6 items-start"
98318
- [class.lg:flex-row-reverse]="idx % 2 === 0">
98319
- @if (section.visual && section.visual.enabled) {
98320
- <div class="w-full lg:w-2/3">
98321
- <symphiq-napkin-visual-placeholder
98322
- [visual]="section.visual"
98323
- [viewMode]="viewMode()"
98324
- />
98325
- </div>
98326
- }
98327
- @if (section.description) {
98328
- <div class="w-full"
98329
- [class.lg:w-1/3]="section.visual && section.visual.enabled" [class.lg:w-full]="!section.visual || !section.visual.enabled">
98330
- <p [ngClass]="getSectionDescriptionClasses()"
98331
- class="text-sm leading-relaxed whitespace-pre-line">
98332
- {{ section.description }}
98333
- </p>
98334
- </div>
98335
- }
98336
- </div>
98337
- }
98338
-
98339
- <!-- Section Content -->
98340
- <symphiq-profile-section-content
98341
- [section]="section"
98342
- [viewMode]="viewMode()"
98343
- [sectionIndex]="idx"
98344
- [allGoals]="allGoals()"
98345
- [allMetrics]="allMetrics()"
98346
- [allCharts]="allCharts()"
98347
- [allInsights]="allInsights()"
98348
- [businessProfile]="profile()"
98349
- />
98350
- </div>
98351
-
98352
- <!-- Section Divider (between sections) -->
98353
- @if (!last) {
98354
- <symphiq-section-divider
98355
- [viewMode]="viewMode()"
98356
- [sectionIcon]="sectionList[idx + 1].icon"
98357
- />
98358
- }
98612
+ const scrollTop = detail.scrollTop || 0;
98613
+ this.headerScrollService.handleEmbeddedScroll(scrollTop, this.COLLAPSE_THRESHOLD, this.EXPAND_THRESHOLD);
98614
+ const scrollElement = this.scrollElement();
98615
+ if (scrollElement) {
98616
+ const scrollHeight = scrollElement.scrollHeight || 0;
98617
+ const clientHeight = scrollElement.clientHeight || 0;
98618
+ const maxScroll = scrollHeight - clientHeight;
98619
+ if (maxScroll > 0) {
98620
+ const progress = (scrollTop / maxScroll) * 100;
98621
+ this.scrollProgress.set(Math.min(100, Math.max(0, progress)));
98359
98622
  }
98360
- </section>
98361
98623
  }
98362
- }
98363
-
98364
- </main>
98365
-
98366
- <!-- Table of Contents (Compact & Expanded Views) -->
98367
- @if (!isSimplifiedView() && sections()) {
98368
- <symphiq-floating-toc
98369
- [sections]="tocSections()"
98370
- [viewMode]="viewMode()"
98371
- [embedded]="embedded()"
98372
- [scrollElement]="scrollElement() ?? undefined"
98373
- />
98624
+ }, ...(ngDevMode ? [{ debugName: "embeddedScrollEffect" }] : []));
98625
+ this.metricCards = computed(() => {
98626
+ const funnelMetricsData = this.funnelMetrics();
98627
+ const profileMetricsData = this.profileMetrics();
98628
+ const profileAnalysesData = this.profileAnalyses();
98629
+ const itemStatusesProfileMetricData = this.itemStatusesProfileMetric();
98630
+ const itemStatusesProfileAnalysisData = this.itemStatusesProfileAnalysis();
98631
+ const profileMetricQuestionsData = this.profileMetricQuestions();
98632
+ const isDemo = this.forDemo();
98633
+ const funnelStageMetrics = [
98634
+ MetricEnum.SCREEN_PAGE_VIEWS,
98635
+ MetricEnum.ITEM_VIEW_EVENTS,
98636
+ MetricEnum.ADD_TO_CARTS,
98637
+ MetricEnum.CHECKOUTS,
98638
+ MetricEnum.ECOMMERCE_PURCHASES,
98639
+ MetricEnum.PURCHASE_REVENUE
98640
+ ];
98641
+ const mockProgressData = {
98642
+ [MetricEnum.SCREEN_PAGE_VIEWS]: { answered: 10, total: 12, hasAnalysis: true },
98643
+ [MetricEnum.ITEM_VIEW_EVENTS]: { answered: 8, total: 11, hasAnalysis: true },
98644
+ [MetricEnum.ADD_TO_CARTS]: { answered: 5, total: 10, hasAnalysis: false },
98645
+ [MetricEnum.CHECKOUTS]: { answered: 7, total: 9, hasAnalysis: true },
98646
+ [MetricEnum.ECOMMERCE_PURCHASES]: { answered: 0, total: 8, hasAnalysis: false },
98647
+ [MetricEnum.PURCHASE_REVENUE]: { answered: 0, total: 10, hasAnalysis: false },
98648
+ [MetricEnum.SESSIONS]: { answered: 0, total: 0, hasAnalysis: false },
98649
+ [MetricEnum.SESSIONS_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98650
+ [MetricEnum.ACTIVE_USERS]: { answered: 0, total: 0, hasAnalysis: false },
98651
+ [MetricEnum.ACTIVE_USERS_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98652
+ [MetricEnum.TRANSACTIONS]: { answered: 0, total: 0, hasAnalysis: false },
98653
+ [MetricEnum.TRANSACTIONS_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98654
+ [MetricEnum.PURCHASE_REVENUE_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98655
+ [MetricEnum.AVERAGE_ORDER_VALUE]: { answered: 0, total: 0, hasAnalysis: false },
98656
+ [MetricEnum.NEW_USERS]: { answered: 0, total: 0, hasAnalysis: false },
98657
+ [MetricEnum.NEW_USERS_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98658
+ [MetricEnum.USER_ENGAGEMENT_DURATION]: { answered: 0, total: 0, hasAnalysis: false },
98659
+ [MetricEnum.SCREEN_PAGE_VIEWS_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98660
+ [MetricEnum.BOUNCES]: { answered: 0, total: 0, hasAnalysis: false },
98661
+ [MetricEnum.BOUNCE_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98662
+ [MetricEnum.ADD_TO_CARTS_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98663
+ [MetricEnum.CHECKOUTS_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98664
+ [MetricEnum.ECOMMERCE_PURCHASES_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98665
+ [MetricEnum.ECOMMERCE_CONVERSION_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98666
+ [MetricEnum.GROSS_PURCHASE_REVENUE]: { answered: 0, total: 0, hasAnalysis: false },
98667
+ [MetricEnum.GROSS_PURCHASE_REVENUE_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98668
+ [MetricEnum.ITEM_VIEW_EVENTS_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98669
+ [MetricEnum.PROMOTION_CLICKS]: { answered: 0, total: 0, hasAnalysis: false },
98670
+ [MetricEnum.PROMOTION_CLICKS_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98671
+ [MetricEnum.PROMOTION_VIEWS]: { answered: 0, total: 0, hasAnalysis: false },
98672
+ [MetricEnum.PROMOTION_VIEWS_PER_DAY]: { answered: 0, total: 0, hasAnalysis: false },
98673
+ [MetricEnum.REFUND_AMOUNT]: { answered: 0, total: 0, hasAnalysis: false },
98674
+ [MetricEnum.SHIPPING_AMOUNT]: { answered: 0, total: 0, hasAnalysis: false },
98675
+ [MetricEnum.TAX_AMOUNT]: { answered: 0, total: 0, hasAnalysis: false },
98676
+ [MetricEnum.ACTIVE_USER_ADD_TO_CART_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98677
+ [MetricEnum.REVENUE_PER_PRODUCT_VIEW]: { answered: 0, total: 0, hasAnalysis: false },
98678
+ [MetricEnum.REVENUE_PER_ADD_TO_CART]: { answered: 0, total: 0, hasAnalysis: false },
98679
+ [MetricEnum.REVENUE_PER_CHECKOUT]: { answered: 0, total: 0, hasAnalysis: false },
98680
+ [MetricEnum.VIEW_TO_PRODUCT_VIEW_CONVERSION_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98681
+ [MetricEnum.PRODUCT_VIEW_TO_CART_CONVERSION_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98682
+ [MetricEnum.CART_TO_CHECKOUT_CONVERSION_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98683
+ [MetricEnum.CHECKOUT_TO_PURCHASE_CONVERSION_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98684
+ [MetricEnum.PRODUCT_VIEW_CONVERSION_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98685
+ [MetricEnum.PRODUCT_VIEW_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98686
+ [MetricEnum.ADD_TO_CART_CONVERSION_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98687
+ [MetricEnum.ADD_TO_CART_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98688
+ [MetricEnum.CHECKOUT_CONVERSION_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98689
+ [MetricEnum.ACTIVE_USER_CHECKOUT_RATE]: { answered: 0, total: 0, hasAnalysis: false },
98690
+ [MetricEnum.GROSS_ITEM_REVENUE]: { answered: 0, total: 0, hasAnalysis: false },
98691
+ [MetricEnum.ITEM_DISCOUNT_AMOUNT]: { answered: 0, total: 0, hasAnalysis: false },
98692
+ [MetricEnum.ITEM_REFUND_AMOUNT]: { answered: 0, total: 0, hasAnalysis: false },
98693
+ [MetricEnum.ITEM_REVENUE]: { answered: 0, total: 0, hasAnalysis: false },
98694
+ [MetricEnum.ITEMS_ADDED_TO_CART]: { answered: 0, total: 0, hasAnalysis: false },
98695
+ [MetricEnum.ITEMS_CHECKED_OUT]: { answered: 0, total: 0, hasAnalysis: false },
98696
+ [MetricEnum.ITEMS_CLICKED_IN_LIST]: { answered: 0, total: 0, hasAnalysis: false },
98697
+ [MetricEnum.ITEMS_CLICKED_IN_PROMOTION]: { answered: 0, total: 0, hasAnalysis: false },
98698
+ [MetricEnum.ITEMS_PURCHASED]: { answered: 0, total: 0, hasAnalysis: false },
98699
+ [MetricEnum.ITEMS_VIEWED]: { answered: 0, total: 0, hasAnalysis: false },
98700
+ [MetricEnum.ITEMS_VIEWED_IN_LIST]: { answered: 0, total: 0, hasAnalysis: false },
98701
+ [MetricEnum.ITEMS_VIEWED_IN_PROMOTION]: { answered: 0, total: 0, hasAnalysis: false }
98702
+ };
98703
+ const funnelMetricsMap = new Map(funnelMetricsData?.map(fm => [fm.funnelMetric, fm]));
98704
+ const profileMetricsMap = new Map(profileMetricsData?.map(pm => {
98705
+ const funnelMetricId = pm.funnelMetricId;
98706
+ if (!funnelMetricId)
98707
+ return [undefined, pm];
98708
+ const funnelMetric = funnelMetricsData?.find(fm => fm.id === funnelMetricId);
98709
+ return [funnelMetric?.funnelMetric, pm];
98710
+ }).filter(([key]) => key !== undefined));
98711
+ const profileMetricIdToMetricEnumMap = new Map(profileMetricsData?.map(pm => {
98712
+ const funnelMetricId = pm.funnelMetricId;
98713
+ if (!funnelMetricId)
98714
+ return [pm.id, undefined];
98715
+ const funnelMetric = funnelMetricsData?.find(fm => fm.id === funnelMetricId);
98716
+ return [pm.id, funnelMetric?.funnelMetric];
98717
+ }).filter(([, value]) => value !== undefined));
98718
+ const profileAnalysesMap = new Map(profileAnalysesData
98719
+ ?.filter(pa => pa.profileMetricId !== undefined)
98720
+ .map(pa => [profileMetricIdToMetricEnumMap.get(pa.profileMetricId), pa])
98721
+ .filter(([key]) => key !== undefined));
98722
+ const itemStatusesProfileMetricMap = new Map(itemStatusesProfileMetricData?.map(is => [is.itemId, is]));
98723
+ const itemStatusesProfileAnalysisMap = new Map(itemStatusesProfileAnalysisData?.map(is => [is.itemId, is]));
98724
+ return funnelStageMetrics.map(metricEnum => {
98725
+ let questionsAnswered = 0;
98726
+ let totalQuestions = 0;
98727
+ let hasAnalysis = false;
98728
+ let status = 'pending';
98729
+ let canViewDetails = false;
98730
+ let selfContentStatusProfileMetric = null;
98731
+ let selfContentStatusProfileAnalysis = null;
98732
+ let itemStatusProfileMetric = null;
98733
+ let itemStatusProfileAnalysis = null;
98734
+ let profileMetric = null;
98735
+ let profileAnalysis = null;
98736
+ if (isDemo) {
98737
+ const mockData = mockProgressData[metricEnum];
98738
+ questionsAnswered = mockData.answered;
98739
+ totalQuestions = mockData.total;
98740
+ hasAnalysis = mockData.hasAnalysis;
98741
+ canViewDetails = true;
98742
+ selfContentStatusProfileMetric = AiDynamicContentStatusEnum.GENERATED;
98743
+ selfContentStatusProfileAnalysis = AiDynamicContentStatusEnum.GENERATED;
98744
+ if (questionsAnswered === totalQuestions && totalQuestions > 0) {
98745
+ status = 'complete';
98746
+ }
98747
+ else if (questionsAnswered > 0) {
98748
+ status = 'in-progress';
98749
+ }
98750
+ else {
98751
+ status = 'not-started';
98752
+ }
98753
+ }
98754
+ else {
98755
+ profileMetric = profileMetricsMap.get(metricEnum) ?? null;
98756
+ profileAnalysis = profileAnalysesMap.get(metricEnum) ?? null;
98757
+ hasAnalysis = !!profileAnalysis;
98758
+ if (profileMetric) {
98759
+ selfContentStatusProfileMetric = profileMetric.selfContentStatus ?? null;
98760
+ canViewDetails = selfContentStatusProfileMetric === AiDynamicContentStatusEnum.GENERATED;
98761
+ const profileMetricId = profileMetric.id;
98762
+ if (profileMetricId) {
98763
+ itemStatusProfileMetric = itemStatusesProfileMetricMap.get(profileMetricId) ?? null;
98764
+ }
98765
+ const questionsForMetric = profileMetricQuestionsData?.filter(q => q.profileMetricId === profileMetricId) ?? [];
98766
+ totalQuestions = questionsForMetric.length;
98767
+ questionsAnswered = questionsForMetric.filter(q => q.answered).length;
98768
+ if (questionsAnswered === totalQuestions && totalQuestions > 0) {
98769
+ status = 'complete';
98770
+ }
98771
+ else if (questionsAnswered > 0) {
98772
+ status = 'in-progress';
98773
+ }
98774
+ else {
98775
+ status = 'not-started';
98776
+ }
98777
+ }
98778
+ if (profileAnalysis) {
98779
+ selfContentStatusProfileAnalysis = profileAnalysis.selfContentStatus ?? null;
98780
+ const profileAnalysisId = profileAnalysis.id;
98781
+ if (profileAnalysisId) {
98782
+ itemStatusProfileAnalysis = itemStatusesProfileAnalysisMap.get(profileAnalysisId) ?? null;
98783
+ }
98784
+ }
98785
+ }
98786
+ const progressPercent = totalQuestions > 0 ? (questionsAnswered / totalQuestions) * 100 : 0;
98787
+ return {
98788
+ metricEnum,
98789
+ title: MetricEnumUtil.title(metricEnum),
98790
+ description: this.getMetricDescription(metricEnum),
98791
+ questionsAnswered,
98792
+ totalQuestions,
98793
+ hasAnalysis,
98794
+ icon: this.getIconForMetric(metricEnum),
98795
+ progressPercent,
98796
+ status,
98797
+ canViewDetails,
98798
+ selfContentStatusProfileMetric,
98799
+ selfContentStatusProfileAnalysis,
98800
+ itemStatusProfileMetric,
98801
+ itemStatusProfileAnalysis,
98802
+ profileMetric,
98803
+ profileAnalysis
98804
+ };
98805
+ });
98806
+ }, ...(ngDevMode ? [{ debugName: "metricCards" }] : []));
98807
+ this.allMetricsAnalysisReviewed = computed(() => {
98808
+ const cards = this.metricCards();
98809
+ if (cards.length === 0) {
98810
+ return false;
98811
+ }
98812
+ return cards.every(card => card.profileAnalysis?.reviewStatus === ProfileAnalysisReviewStatusEnum.REVIEWED);
98813
+ }, ...(ngDevMode ? [{ debugName: "allMetricsAnalysisReviewed" }] : []));
98814
+ this.metricStatusCounts = computed(() => {
98815
+ const cards = this.metricCards();
98816
+ let generating = 0;
98817
+ let notStarted = 0;
98818
+ let inProgress = 0;
98819
+ let completed = 0;
98820
+ for (const card of cards) {
98821
+ const contentStatus = card.selfContentStatusProfileMetric;
98822
+ if (contentStatus === AiDynamicContentStatusEnum.GENERATING || contentStatus === AiDynamicContentStatusEnum.REQUESTED) {
98823
+ generating++;
98824
+ }
98825
+ else if (card.status === 'not-started') {
98826
+ notStarted++;
98827
+ }
98828
+ else if (card.status === 'in-progress') {
98829
+ inProgress++;
98830
+ }
98831
+ else if (card.status === 'complete') {
98832
+ completed++;
98833
+ }
98834
+ }
98835
+ return { generating, notStarted, inProgress, completed };
98836
+ }, ...(ngDevMode ? [{ debugName: "metricStatusCounts" }] : []));
98837
+ this.analysisStatusCounts = computed(() => {
98838
+ const cards = this.metricCards();
98839
+ let generating = 0;
98840
+ let notReviewed = 0;
98841
+ let reviewed = 0;
98842
+ for (const card of cards) {
98843
+ const analysis = card.profileAnalysis;
98844
+ if (!analysis) {
98845
+ continue;
98846
+ }
98847
+ const contentStatus = card.selfContentStatusProfileAnalysis;
98848
+ if (contentStatus === AiDynamicContentStatusEnum.GENERATING || contentStatus === AiDynamicContentStatusEnum.REQUESTED) {
98849
+ generating++;
98850
+ }
98851
+ else if (analysis.reviewStatus === ProfileAnalysisReviewStatusEnum.NOT_REVIEWED) {
98852
+ notReviewed++;
98853
+ }
98854
+ else if (analysis.reviewStatus === ProfileAnalysisReviewStatusEnum.REVIEWED) {
98855
+ reviewed++;
98856
+ }
98857
+ }
98858
+ return { generating, notReviewed, reviewed };
98859
+ }, ...(ngDevMode ? [{ debugName: "analysisStatusCounts" }] : []));
98860
+ this.genericCardData = computed(() => {
98861
+ return this.metricCards().map(card => ({
98862
+ id: card.metricEnum,
98863
+ title: card.title,
98864
+ description: card.description,
98865
+ icon: card.icon,
98866
+ questionsAnswered: card.questionsAnswered,
98867
+ totalQuestions: card.totalQuestions,
98868
+ progressPercent: card.progressPercent,
98869
+ status: card.status,
98870
+ hasAnalysis: card.hasAnalysis,
98871
+ canViewDetails: card.canViewDetails,
98872
+ engagementBadge: null,
98873
+ tools: [],
98874
+ selfContentStatusProfile: card.selfContentStatusProfileMetric,
98875
+ selfContentStatusAnalysis: card.selfContentStatusProfileAnalysis,
98876
+ itemStatusProfile: card.itemStatusProfileMetric,
98877
+ itemStatusAnalysis: card.itemStatusProfileAnalysis,
98878
+ profile: card.profileMetric,
98879
+ profileAnalysis: card.profileAnalysis,
98880
+ isNotInterested: false
98881
+ }));
98882
+ }, ...(ngDevMode ? [{ debugName: "genericCardData" }] : []));
98883
+ }
98884
+ onScroll() {
98885
+ this.headerScrollService.handleScroll(this.embedded());
98886
+ }
98887
+ getCurrentMetricForConfidence() {
98888
+ const cards = this.metricCards();
98889
+ const completedCards = cards.filter(c => c.status === 'complete' || c.profileAnalysis?.reviewStatus === ProfileAnalysisReviewStatusEnum.REVIEWED);
98890
+ if (completedCards.length === 0) {
98891
+ return cards[0]?.metricEnum;
98374
98892
  }
98375
-
98376
- <!-- Section Navigation Dots (Compact & Expanded Views) -->
98377
- @if (!isSimplifiedView() && sections()) {
98378
- <symphiq-section-navigation
98379
- [sections]="tocSections()"
98380
- [viewMode]="viewMode()"
98381
- [embedded]="embedded()"
98382
- [scrollElement]="scrollElement() ?? undefined"
98383
- />
98893
+ if (completedCards.length === cards.length) {
98894
+ return cards[cards.length - 1]?.metricEnum;
98384
98895
  }
98385
-
98386
- <!-- Search Modal -->
98387
- <symphiq-search-modal
98388
- [isOpen]="isSearchOpen()"
98389
- [isLightMode]="isLightMode()"
98390
- (close)="closeSearch()"
98391
- />
98392
-
98393
- <!-- View Mode Switcher Modal -->
98394
- <symphiq-view-mode-switcher-modal
98395
- [isOpen]="isViewModeSwitcherOpen()"
98396
- [currentMode]="currentDisplayMode()"
98397
- [viewMode]="viewMode()"
98398
- (close)="closeViewModeSwitcher()"
98399
- (modeSelected)="handleDisplayModeChange($event)"
98400
- />
98401
-
98402
- <!-- Profile Analysis Modal -->
98403
- <symphiq-profile-analysis-modal
98404
- [isLightMode]="isLightMode()"
98405
- [allMetrics]="allMetrics()"
98406
- [allInsights]="allInsights()"
98407
- [allBusinessInsights]="allBusinessInsights()"
98408
- [allCharts]="allCharts()"
98409
- >
98410
- @if (modalType() === 'goal-detail' && getGoalDetailData(); as data) {
98411
- <symphiq-goal-card
98412
- [goal]="data.goal"
98413
- [viewMode]="data.viewMode"
98414
- [isInModal]="true"
98415
- [allMetrics]="allMetrics()"
98416
- [allCharts]="allCharts()"
98417
- [allInsights]="allInsights()"
98418
- [currentModalState]="getCurrentModalState()"
98419
- [businessProfile]="profile()"
98420
- />
98421
- }
98422
- @if (modalType() === 'goal-objectives' && getGoalDetailData(); as data) {
98423
- <symphiq-goal-objectives-modal-content
98424
- [goal]="data.goal"
98425
- [viewMode]="data.viewMode"
98426
- />
98427
- }
98428
- @if (modalType() === 'objective-strategies' && getObjectiveStrategiesData(); as data) {
98429
- <symphiq-objective-strategies-modal-content
98430
- [objective]="data.objective"
98431
- [goalTitle]="data.goalTitle"
98432
- [viewMode]="data.viewMode"
98433
- />
98434
- }
98435
- @if (modalType() === 'strategy-recommendations' && getStrategyRecommendationsData(); as data) {
98436
- <symphiq-strategy-recommendations-modal-content
98437
- [strategy]="data.strategy"
98438
- [objectiveTitle]="data.objectiveTitle"
98439
- [goalTitle]="data.goalTitle"
98440
- [viewMode]="data.viewMode"
98441
- [expandedRecommendationId]="data.expandedRecommendationId"
98442
- [allMetrics]="allMetrics()"
98443
- [allCharts]="allCharts()"
98444
- [allInsights]="allInsights()"
98445
- [allBusinessInsights]="allBusinessInsights()"
98446
- [currentModalState]="getCurrentModalState()"
98447
- />
98448
- }
98449
- @if (modalType() === 'category-detail' && getCategoryDetailData(); as data) {
98450
- <symphiq-category-detail-modal-content
98451
- [category]="data.category"
98452
- [viewMode]="data.viewMode"
98453
- [scrollToSection]="data.scrollToSection"
98454
- />
98455
- }
98456
- @if (modalType() === 'strength-detail' && getStrengthDetailData(); as data) {
98457
- <symphiq-strength-detail-modal-content
98458
- [strength]="data.strength"
98459
- [viewMode]="data.viewMode"
98460
- [allFunnelStrengths]="funnelStrengths()"
98461
- [currentModalState]="getCurrentModalState()"
98462
- />
98463
- }
98464
- @if (modalType() === 'gap-detail' && getGapDetailData(); as data) {
98465
- <symphiq-gap-detail-modal-content
98466
- [gap]="data.gap"
98467
- [viewMode]="data.viewMode"
98468
- [allGoals]="allGoals()"
98469
- [allWeaknesses]="funnelWeaknesses()"
98470
- [currentModalState]="getCurrentModalState()"
98471
- />
98472
- }
98473
- @if (modalType() === 'opportunity-detail' && getOpportunityDetailData(); as data) {
98474
- <symphiq-opportunity-detail-modal-content
98475
- [opportunity]="data.opportunity"
98476
- [viewMode]="data.viewMode"
98477
- [allStrengths]="funnelStrengths()"
98478
- [currentModalState]="getCurrentModalState()"
98479
- />
98480
- }
98481
- </symphiq-profile-analysis-modal>
98482
-
98483
- <!-- Funnel Analysis Modal -->
98484
- <symphiq-funnel-analysis-modal
98485
- #funnelModalComponent
98486
- />
98487
-
98488
- <!-- Mark as Reviewed Sticky Footer -->
98489
- <symphiq-mark-as-reviewed-footer
98490
- [viewMode]="viewMode()"
98491
- [reviewStatus]="profileAnalysis()?.reviewStatus"
98492
- [selfContentStatus]="profileAnalysis()?.selfContentStatus"
98493
- [isMarkingAsReviewed]="isMarkingAsReviewed()"
98494
- (markAsReviewedClick)="handleMarkAsReviewedClick()"
98495
- />
98496
-
98497
- <!-- Tooltip Container -->
98498
- <symphiq-tooltip-container />
98499
- </div>
98500
- </div>
98501
- `
98502
- }]
98503
- }], null, { funnelModalComponent: [{
98504
- type: ViewChild,
98505
- args: ['funnelModalComponent']
98506
- }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], profileAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileAnalysis", required: false }] }], funnelAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelAnalysis", required: false }] }], profile: [{ type: i0.Input, args: [{ isSignal: true, alias: "profile", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], scrollEvent: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollEvent", required: false }] }], scrollElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollElement", required: false }] }], focusAreaDetails: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusAreaDetails", required: false }] }], itemStatusProfileAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemStatusProfileAnalysis", required: false }] }], isMarkingAsReviewed: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMarkingAsReviewed", required: false }] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], markAsReviewedClick: [{ type: i0.Output, args: ["markAsReviewedClick"] }], onWindowScroll: [{
98896
+ return completedCards[completedCards.length - 1]?.metricEnum;
98897
+ }
98898
+ handleCardClick(event) {
98899
+ const { cardData, clickType } = event;
98900
+ if (clickType === 'profile' && cardData.profile) {
98901
+ this.navigateToProfileMetric.emit(cardData.profile);
98902
+ }
98903
+ else if ((clickType === 'analysis' || clickType === 'review') && cardData.profileAnalysis && cardData.profile) {
98904
+ this.navigateToProfileAnalysis.emit({
98905
+ profileAnalysis: cardData.profileAnalysis,
98906
+ profileMetric: cardData.profile
98907
+ });
98908
+ }
98909
+ }
98910
+ handleSearchClick() {
98911
+ this.showSearchModal.set(true);
98912
+ }
98913
+ handleCloseSearchModal() {
98914
+ this.showSearchModal.set(false);
98915
+ }
98916
+ getWelcomeBannerContainerClasses() {
98917
+ return this.isLightMode()
98918
+ ? 'bg-white border-slate-200'
98919
+ : 'bg-slate-800/50 border-slate-700/50';
98920
+ }
98921
+ getWelcomeBannerIconClasses() {
98922
+ return this.isLightMode()
98923
+ ? 'bg-blue-100 text-blue-600'
98924
+ : 'bg-blue-500/20 text-blue-400';
98925
+ }
98926
+ getWelcomeBannerTitleClasses() {
98927
+ return this.isLightMode()
98928
+ ? 'text-slate-900'
98929
+ : 'text-white';
98930
+ }
98931
+ getWelcomeBannerTextClasses() {
98932
+ return this.isLightMode()
98933
+ ? 'text-slate-700'
98934
+ : 'text-slate-300';
98935
+ }
98936
+ getWelcomeBannerHighlightClasses() {
98937
+ return this.isLightMode()
98938
+ ? 'bg-blue-50/50 border-blue-300'
98939
+ : 'bg-blue-500/10 border-blue-500/30';
98940
+ }
98941
+ getWelcomeBannerHighlightIconClasses() {
98942
+ return this.isLightMode()
98943
+ ? 'text-blue-600'
98944
+ : 'text-blue-400';
98945
+ }
98946
+ getWelcomeBannerHighlightTitleClasses() {
98947
+ return this.isLightMode()
98948
+ ? 'text-slate-900'
98949
+ : 'text-white';
98950
+ }
98951
+ getWelcomeBannerHighlightListClasses() {
98952
+ return this.isLightMode()
98953
+ ? 'text-slate-700'
98954
+ : 'text-slate-300';
98955
+ }
98956
+ getWelcomeBannerNextStepsClasses() {
98957
+ return this.isLightMode()
98958
+ ? 'bg-amber-50/50 border-amber-200'
98959
+ : 'bg-amber-500/10 border-amber-500/30';
98960
+ }
98961
+ getWelcomeBannerNextStepsIconClasses() {
98962
+ return this.isLightMode()
98963
+ ? 'text-amber-600'
98964
+ : 'text-amber-400';
98965
+ }
98966
+ getWelcomeBannerNextStepsTitleClasses() {
98967
+ return this.isLightMode()
98968
+ ? 'text-slate-900'
98969
+ : 'text-white';
98970
+ }
98971
+ getWelcomeBannerNextStepsTextClasses() {
98972
+ return this.isLightMode()
98973
+ ? 'text-slate-700'
98974
+ : 'text-slate-300';
98975
+ }
98976
+ getIconForMetric(metric) {
98977
+ const iconMap = {
98978
+ [MetricEnum.SCREEN_PAGE_VIEWS]: '👁️',
98979
+ [MetricEnum.ITEM_VIEW_EVENTS]: '🛍️',
98980
+ [MetricEnum.ADD_TO_CARTS]: '🛒',
98981
+ [MetricEnum.CHECKOUTS]: '💳',
98982
+ [MetricEnum.ECOMMERCE_PURCHASES]: '✅',
98983
+ [MetricEnum.PURCHASE_REVENUE]: '💰'
98984
+ };
98985
+ return iconMap[metric] || '📊';
98986
+ }
98987
+ getMetricDescription(metric) {
98988
+ const descriptionMap = {
98989
+ [MetricEnum.SCREEN_PAGE_VIEWS]: 'Total page views and sessions driving traffic to your store',
98990
+ [MetricEnum.ITEM_VIEW_EVENTS]: 'Product detail page views indicating customer interest',
98991
+ [MetricEnum.ADD_TO_CARTS]: 'Items added to cart showing purchase intent',
98992
+ [MetricEnum.CHECKOUTS]: 'Initiated checkouts representing high purchase intent',
98993
+ [MetricEnum.ECOMMERCE_PURCHASES]: 'Completed transactions and conversion success',
98994
+ [MetricEnum.PURCHASE_REVENUE]: 'Total purchase revenue and average order value'
98995
+ };
98996
+ return descriptionMap[metric] || 'Funnel stage metric for conversion analysis';
98997
+ }
98998
+ static { this.ɵfac = function SymphiqProfileMetricsAnalysesDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SymphiqProfileMetricsAnalysesDashboardComponent)(); }; }
98999
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SymphiqProfileMetricsAnalysesDashboardComponent, selectors: [["symphiq-profile-metrics-analyses-dashboard"]], hostBindings: function SymphiqProfileMetricsAnalysesDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
99000
+ i0.ɵɵlistener("scroll", function SymphiqProfileMetricsAnalysesDashboardComponent_scroll_HostBindingHandler($event) { return ctx.onScroll($event); }, i0.ɵɵresolveWindow);
99001
+ } }, inputs: { requestedByUser: [1, "requestedByUser"], createdDate: [1, "createdDate"], embedded: [1, "embedded"], profileAnalyses: [1, "profileAnalyses"], profileMetrics: [1, "profileMetrics"], itemStatusesProfileMetric: [1, "itemStatusesProfileMetric"], itemStatusesProfileAnalysis: [1, "itemStatusesProfileAnalysis"], profile: [1, "profile"], funnelAnalysis: [1, "funnelAnalysis"], funnelMetrics: [1, "funnelMetrics"], account: [1, "account"], profileMetricQuestions: [1, "profileMetricQuestions"], isOnboarded: [1, "isOnboarded"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], users: [1, "users"], isLoading: [1, "isLoading"], forDemo: [1, "forDemo"], currentUser: [1, "currentUser"], maxAccessibleStepId: [1, "maxAccessibleStepId"], viewMode: [1, "viewMode"], displayMode: [1, "displayMode"], currentStepId: [1, "currentStepId"] }, outputs: { navigateToProfileMetric: "navigateToProfileMetric", navigateToProfileAnalysis: "navigateToProfileAnalysis", stepClick: "stepClick", nextStepClick: "nextStepClick", answerMetricProfileQuestions: "answerMetricProfileQuestions", continueMetricProfileQuestions: "continueMetricProfileQuestions", profileQuestionAnswerSave: "profileQuestionAnswerSave", metricProfileAdminAnswerAction: "metricProfileAdminAnswerAction" }, decls: 67, vars: 32, consts: [[1, "relative"], [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, "fixed", "top-0", "left-0", "right-0", "h-1", "z-[60]", "bg-slate-200/30"], [1, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "relative", "z-[51]"], [3, "title", "subtitle", "viewMode", "showControls"], [3, "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "container", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-8", "md:py-12", "relative", "z-10"], [1, "rounded-2xl", "border", "shadow-lg", "overflow-hidden", "mb-8", 3, "ngClass"], [1, "px-8", "py-8"], [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-3", 3, "ngClass"], [3, "viewMode", "profileStatusCounts", "analysisStatusCounts", "allReviewed", "hasItems", "config"], [1, "grid", "grid-cols-1", "lg:grid-cols-3", "gap-6", "mb-6"], [1, "lg:col-span-2", "space-y-3"], [1, "text-base", "leading-relaxed", 3, "ngClass"], [1, "font-semibold"], [1, "lg:col-span-1"], ["currentStepId", "metric-analysis", 3, "viewMode", "currentMetric"], [1, "mt-6", "p-5", "rounded-xl", "border-l-4", "flex", "items-start", "gap-4", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", "flex-shrink-0", "mt-0.5", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "font-bold", "text-lg", "mb-2", 3, "ngClass"], [1, "space-y-2", "text-sm", 3, "ngClass"], [1, "flex", "items-start", "gap-2"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-5", "h-5", "flex-shrink-0", "mt-0.5"], ["fill-rule", "evenodd", "d", "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", "clip-rule", "evenodd"], [1, "mt-6", "p-5", "rounded-xl", "border", "flex", "items-start", "gap-4", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 7l5 5m0 0l-5 5m5-5H6"], [1, "text-sm", "leading-relaxed", 3, "ngClass"], [3, "cardClick", "viewMode", "cards", "config"], [3, "nextStepClick", "stepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [3, "closeModal"]], template: function SymphiqProfileMetricsAnalysesDashboardComponent_Template(rf, ctx) { if (rf & 1) {
99002
+ i0.ɵɵelementStart(0, "div", 0);
99003
+ i0.ɵɵelement(1, "div", 1);
99004
+ i0.ɵɵelementStart(2, "div", 2);
99005
+ i0.ɵɵelement(3, "div", 3);
99006
+ i0.ɵɵelementEnd();
99007
+ i0.ɵɵelementStart(4, "div", 4);
99008
+ i0.ɵɵelement(5, "symphiq-dashboard-header", 5);
99009
+ i0.ɵɵconditionalCreate(6, SymphiqProfileMetricsAnalysesDashboardComponent_Conditional_6_Template, 1, 5, "symphiq-journey-progress-indicator", 6);
99010
+ i0.ɵɵelementStart(7, "div", 7)(8, "div", 8)(9, "div", 9)(10, "div", 10)(11, "div", 11);
99011
+ i0.ɵɵnamespaceSVG();
99012
+ i0.ɵɵelementStart(12, "svg", 12);
99013
+ i0.ɵɵelement(13, "path", 13);
99014
+ i0.ɵɵelementEnd()();
99015
+ i0.ɵɵnamespaceHTML();
99016
+ i0.ɵɵelementStart(14, "div", 14)(15, "h2", 15);
99017
+ i0.ɵɵtext(16, " Welcome to Your Metric Analysis ");
99018
+ i0.ɵɵelementEnd();
99019
+ i0.ɵɵconditionalCreate(17, SymphiqProfileMetricsAnalysesDashboardComponent_Conditional_17_Template, 1, 6, "symphiq-profile-analysis-status-summary", 16);
99020
+ i0.ɵɵelementStart(18, "div", 17)(19, "div", 18)(20, "p", 19);
99021
+ i0.ɵɵtext(21, " Metric Analysis provides the deepest level of context for your conversion funnel. Each funnel stage metric\u2014from Views and Product Views to Add to Carts, Checkouts, and Purchases\u2014has unique patterns, behaviors, and optimization opportunities. By answering targeted questions about each metric, you help Symphiq understand the specific factors influencing performance at every conversion point. ");
99022
+ i0.ɵɵelementEnd();
99023
+ i0.ɵɵelementStart(22, "p", 19)(23, "strong", 20);
99024
+ i0.ɵɵtext(24, "Why this matters:");
99025
+ i0.ɵɵelementEnd();
99026
+ i0.ɵɵtext(25, " This granular context ensures recommendations address the precise bottlenecks in your customer journey. Rather than generic funnel advice, you'll receive metric-specific strategies grounded in your actual traffic patterns, customer behavior, content types, and marketing tactics. This completes the full picture\u2014from business strategy to operational execution to performance reality. ");
99027
+ i0.ɵɵelementEnd()();
99028
+ i0.ɵɵelementStart(26, "div", 21);
99029
+ i0.ɵɵelement(27, "symphiq-confidence-level-card", 22);
99030
+ i0.ɵɵelementEnd()();
99031
+ i0.ɵɵelementStart(28, "div", 23);
99032
+ i0.ɵɵnamespaceSVG();
99033
+ i0.ɵɵelementStart(29, "svg", 24);
99034
+ i0.ɵɵelement(30, "path", 25);
99035
+ i0.ɵɵelementEnd();
99036
+ i0.ɵɵnamespaceHTML();
99037
+ i0.ɵɵelementStart(31, "div", 14)(32, "h3", 26);
99038
+ i0.ɵɵtext(33, " What You'll See Below ");
99039
+ i0.ɵɵelementEnd();
99040
+ i0.ɵɵelementStart(34, "ul", 27)(35, "li", 28);
99041
+ i0.ɵɵnamespaceSVG();
99042
+ i0.ɵɵelementStart(36, "svg", 29);
99043
+ i0.ɵɵelement(37, "path", 30);
99044
+ i0.ɵɵelementEnd();
99045
+ i0.ɵɵnamespaceHTML();
99046
+ i0.ɵɵelementStart(38, "span")(39, "strong", 20);
99047
+ i0.ɵɵtext(40, "Funnel Stage Metrics");
99048
+ i0.ɵɵelementEnd();
99049
+ i0.ɵɵtext(41, " \u2014 Each conversion point from Views through Revenue is represented with its own profile");
99050
+ i0.ɵɵelementEnd()();
99051
+ i0.ɵɵelementStart(42, "li", 28);
99052
+ i0.ɵɵnamespaceSVG();
99053
+ i0.ɵɵelementStart(43, "svg", 29);
99054
+ i0.ɵɵelement(44, "path", 30);
99055
+ i0.ɵɵelementEnd();
99056
+ i0.ɵɵnamespaceHTML();
99057
+ i0.ɵɵelementStart(45, "span")(46, "strong", 20);
99058
+ i0.ɵɵtext(47, "Context Questions");
99059
+ i0.ɵɵelementEnd();
99060
+ i0.ɵɵtext(48, " \u2014 Answer targeted questions about traffic sources, customer behavior, content types, and marketing activities for each metric");
99061
+ i0.ɵɵelementEnd()();
99062
+ i0.ɵɵelementStart(49, "li", 28);
99063
+ i0.ɵɵnamespaceSVG();
99064
+ i0.ɵɵelementStart(50, "svg", 29);
99065
+ i0.ɵɵelement(51, "path", 30);
99066
+ i0.ɵɵelementEnd();
99067
+ i0.ɵɵnamespaceHTML();
99068
+ i0.ɵɵelementStart(52, "span")(53, "strong", 20);
99069
+ i0.ɵɵtext(54, "Performance Insights");
99070
+ i0.ɵɵelementEnd();
99071
+ i0.ɵɵtext(55, " \u2014 Unlock analysis showing what's working, what's not, and specific improvement opportunities for each stage");
99072
+ i0.ɵɵelementEnd()()()()();
99073
+ i0.ɵɵelementStart(56, "div", 31);
99074
+ i0.ɵɵnamespaceSVG();
99075
+ i0.ɵɵelementStart(57, "svg", 24);
99076
+ i0.ɵɵelement(58, "path", 32);
99077
+ i0.ɵɵelementEnd();
99078
+ i0.ɵɵnamespaceHTML();
99079
+ i0.ɵɵelementStart(59, "div", 14)(60, "h3", 26);
99080
+ i0.ɵɵtext(61, " Complete Your Profile ");
99081
+ i0.ɵɵelementEnd();
99082
+ i0.ɵɵelementStart(62, "p", 33);
99083
+ i0.ɵɵtext(63, " You've reached the final onboarding step! Once all metrics are profiled, you'll have complete context coverage. Symphiq will then generate unified recommendations that connect business goals to specific funnel improvements\u2014showing exactly what to do next to drive growth. ");
99084
+ i0.ɵɵelementEnd()()()()()()();
99085
+ i0.ɵɵelementStart(64, "symphiq-profile-analysis-card-grid", 34);
99086
+ i0.ɵɵlistener("cardClick", function SymphiqProfileMetricsAnalysesDashboardComponent_Template_symphiq_profile_analysis_card_grid_cardClick_64_listener($event) { return ctx.handleCardClick($event); });
99087
+ i0.ɵɵelementEnd()()();
99088
+ i0.ɵɵconditionalCreate(65, SymphiqProfileMetricsAnalysesDashboardComponent_Conditional_65_Template, 1, 0, "symphiq-search-modal");
99089
+ i0.ɵɵelement(66, "symphiq-tooltip-container");
99090
+ i0.ɵɵelementEnd();
99091
+ } if (rf & 2) {
99092
+ i0.ɵɵclassProp("min-h-screen", !ctx.embedded());
99093
+ i0.ɵɵadvance();
99094
+ i0.ɵɵclassProp("light-mode", ctx.isLightMode());
99095
+ i0.ɵɵadvance(2);
99096
+ i0.ɵɵstyleProp("width", ctx.scrollProgress(), "%");
99097
+ i0.ɵɵproperty("ngClass", ctx.isLightMode() ? "bg-gradient-to-r from-blue-500 to-cyan-500" : "bg-gradient-to-r from-blue-400 to-cyan-400");
99098
+ i0.ɵɵadvance(2);
99099
+ i0.ɵɵproperty("title", "Metric Analysis")("subtitle", "Provide context for funnel stage metrics and performance")("viewMode", ctx.viewMode())("showControls", false);
99100
+ i0.ɵɵadvance();
99101
+ i0.ɵɵconditional(ctx.isSimplifiedView() ? 6 : -1);
99102
+ i0.ɵɵadvance(2);
99103
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerContainerClasses());
99104
+ i0.ɵɵadvance(3);
99105
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerIconClasses());
99106
+ i0.ɵɵadvance(4);
99107
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerTitleClasses());
99108
+ i0.ɵɵadvance(2);
99109
+ i0.ɵɵconditional(ctx.profileMetrics() !== undefined || ctx.profileAnalyses() !== undefined ? 17 : -1);
99110
+ i0.ɵɵadvance(3);
99111
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerTextClasses());
99112
+ i0.ɵɵadvance(2);
99113
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerTextClasses());
99114
+ i0.ɵɵadvance(5);
99115
+ i0.ɵɵproperty("viewMode", ctx.viewMode())("currentMetric", ctx.getCurrentMetricForConfidence());
99116
+ i0.ɵɵadvance();
99117
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerHighlightClasses());
99118
+ i0.ɵɵadvance();
99119
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerHighlightIconClasses());
99120
+ i0.ɵɵadvance(3);
99121
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerHighlightTitleClasses());
99122
+ i0.ɵɵadvance(2);
99123
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerHighlightListClasses());
99124
+ i0.ɵɵadvance(22);
99125
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerNextStepsClasses());
99126
+ i0.ɵɵadvance();
99127
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerNextStepsIconClasses());
99128
+ i0.ɵɵadvance(3);
99129
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerNextStepsTitleClasses());
99130
+ i0.ɵɵadvance(2);
99131
+ i0.ɵɵproperty("ngClass", ctx.getWelcomeBannerNextStepsTextClasses());
99132
+ i0.ɵɵadvance(2);
99133
+ i0.ɵɵproperty("viewMode", ctx.viewMode())("cards", ctx.genericCardData())("config", ctx.metricCardConfig);
99134
+ i0.ɵɵadvance();
99135
+ i0.ɵɵconditional(ctx.showSearchModal() ? 65 : -1);
99136
+ } }, dependencies: [CommonModule, i1$1.NgClass, DashboardHeaderComponent, SearchModalComponent, JourneyProgressIndicatorComponent, ConfidenceLevelCardComponent, TooltipContainerComponent, ProfileAnalysisStatusSummaryComponent, ProfileAnalysisCardGridComponent], styles: [".animated-bubbles[_ngcontent-%COMP%]{background:linear-gradient(135deg,#3b82f60d,#06b6d40d)}.animated-bubbles.light-mode[_ngcontent-%COMP%]{background:linear-gradient(135deg,#3b82f608,#06b6d408)}.animated-bubbles[_ngcontent-%COMP%]:before, .animated-bubbles[_ngcontent-%COMP%]:after{content:\"\";position:absolute;border-radius:50%;animation:_ngcontent-%COMP%_float 20s infinite ease-in-out}.animated-bubbles[_ngcontent-%COMP%]:before{width:500px;height:500px;background:radial-gradient(circle,rgba(59,130,246,.1) 0%,transparent 70%);top:-250px;right:-250px;animation-delay:-5s}.animated-bubbles[_ngcontent-%COMP%]:after{width:400px;height:400px;background:radial-gradient(circle,rgba(6,182,212,.1) 0%,transparent 70%);bottom:-200px;left:-200px;animation-delay:-10s}@keyframes _ngcontent-%COMP%_float{0%,to{transform:translateY(0) translate(0)}25%{transform:translateY(-50px) translate(50px)}50%{transform:translateY(-100px) translate(-50px)}75%{transform:translateY(-50px) translate(-100px)}}@keyframes _ngcontent-%COMP%_review-pulse{0%,to{box-shadow:0 0 #3b82f680}50%{box-shadow:0 0 0 8px #3b82f600}}.animate-review-pulse[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_review-pulse 2s ease-in-out infinite}@keyframes _ngcontent-%COMP%_status-pop{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.status-badge[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_status-pop .3s ease-out;transition:all .3s ease-out}@keyframes _ngcontent-%COMP%_alert-pulse{0%,to{box-shadow:0 0 #ef444466}50%{box-shadow:0 0 0 6px #ef444400}}.animate-alert-pulse[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_alert-pulse 1.5s ease-in-out infinite}"], data: { animation: [
99137
+ trigger('statusBadge', [
99138
+ transition(':enter', [
99139
+ style({ opacity: 0, transform: 'scale(0.8)' }),
99140
+ animate('200ms ease-out', style({ opacity: 1, transform: 'scale(1)' }))
99141
+ ]),
99142
+ transition('* => *', [
99143
+ animate('200ms ease-out', style({ transform: 'scale(1.1)' })),
99144
+ animate('150ms ease-in', style({ transform: 'scale(1)' }))
99145
+ ])
99146
+ ]),
99147
+ trigger('allReviewedBadge', [
99148
+ transition(':enter', [
99149
+ style({ opacity: 0, transform: 'scale(0.5)' }),
99150
+ animate('400ms cubic-bezier(0.34, 1.56, 0.64, 1)', style({ opacity: 1, transform: 'scale(1)' }))
99151
+ ])
99152
+ ])
99153
+ ] }, changeDetection: 0 }); }
99154
+ }
99155
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SymphiqProfileMetricsAnalysesDashboardComponent, [{
99156
+ type: Component,
99157
+ args: [{ selector: 'symphiq-profile-metrics-analyses-dashboard', standalone: true, imports: [CommonModule, DashboardHeaderComponent, SearchModalComponent, JourneyProgressIndicatorComponent, ConfidenceLevelCardComponent, TooltipContainerComponent, ProfileAnalysisStatusSummaryComponent, ProfileAnalysisCardGridComponent], changeDetection: ChangeDetectionStrategy.OnPush, animations: [
99158
+ trigger('statusBadge', [
99159
+ transition(':enter', [
99160
+ style({ opacity: 0, transform: 'scale(0.8)' }),
99161
+ animate('200ms ease-out', style({ opacity: 1, transform: 'scale(1)' }))
99162
+ ]),
99163
+ transition('* => *', [
99164
+ animate('200ms ease-out', style({ transform: 'scale(1.1)' })),
99165
+ animate('150ms ease-in', style({ transform: 'scale(1)' }))
99166
+ ])
99167
+ ]),
99168
+ trigger('allReviewedBadge', [
99169
+ transition(':enter', [
99170
+ style({ opacity: 0, transform: 'scale(0.5)' }),
99171
+ animate('400ms cubic-bezier(0.34, 1.56, 0.64, 1)', style({ opacity: 1, transform: 'scale(1)' }))
99172
+ ])
99173
+ ])
99174
+ ], template: `
99175
+ <div [class.min-h-screen]="!embedded()" class="relative">
99176
+ <div class="animated-bubbles" [class.light-mode]="isLightMode()"
99177
+ style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
99178
+
99179
+ <!-- Scroll Progress Bar -->
99180
+ <div class="fixed top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30">
99181
+ <div
99182
+ [style.width.%]="scrollProgress()"
99183
+ [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-cyan-500' : 'bg-gradient-to-r from-blue-400 to-cyan-400'"
99184
+ class="h-full transition-all duration-200 ease-out">
99185
+ </div>
99186
+ </div>
99187
+
99188
+ <div class="relative z-[51]">
99189
+ <!-- Dashboard Header -->
99190
+ <symphiq-dashboard-header
99191
+ [title]="'Metric Analysis'"
99192
+ [subtitle]="'Provide context for funnel stage metrics and performance'"
99193
+ [viewMode]="viewMode()"
99194
+ [showControls]="false"
99195
+ ></symphiq-dashboard-header>
99196
+
99197
+ <!-- Journey Progress Indicator (Simplified View Only) -->
99198
+ @if (isSimplifiedView()) {
99199
+ <symphiq-journey-progress-indicator
99200
+ [viewMode]="viewMode()"
99201
+ [currentStepId]="currentStepId()"
99202
+ [showNextStepAction]="forDemo() || allMetricsAnalysisReviewed()"
99203
+ [forDemo]="forDemo()"
99204
+ [maxAccessibleStepId]="maxAccessibleStepId()"
99205
+ (nextStepClick)="nextStepClick.emit()"
99206
+ (stepClick)="stepClick.emit($event)"
99207
+ />
99208
+ }
99209
+
99210
+ <!-- Main Content -->
99211
+ <div class="container mx-auto px-4 sm:px-6 lg:px-8 py-8 md:py-12 relative z-10">
99212
+ <!-- Welcome Banner -->
99213
+ <div [ngClass]="getWelcomeBannerContainerClasses()" class="rounded-2xl border shadow-lg overflow-hidden mb-8">
99214
+ <div class="px-8 py-8">
99215
+ <div class="flex items-start gap-6">
99216
+ <div [ngClass]="getWelcomeBannerIconClasses()"
99217
+ class="flex-shrink-0 w-16 h-16 rounded-2xl flex items-center justify-center">
99218
+ <svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24">
99219
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
99220
+ 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"></path>
99221
+ </svg>
99222
+ </div>
99223
+
99224
+ <div class="flex-1">
99225
+ <h2 [ngClass]="getWelcomeBannerTitleClasses()" class="text-2xl sm:text-3xl font-bold mb-3">
99226
+ Welcome to Your Metric Analysis
99227
+ </h2>
99228
+
99229
+ <!-- Metric & Analysis Status Summary -->
99230
+ @if (profileMetrics() !== undefined || profileAnalyses() !== undefined) {
99231
+ <symphiq-profile-analysis-status-summary
99232
+ [viewMode]="viewMode()"
99233
+ [profileStatusCounts]="metricStatusCounts()"
99234
+ [analysisStatusCounts]="analysisStatusCounts()"
99235
+ [allReviewed]="allMetricsAnalysisReviewed()"
99236
+ [hasItems]="metricCards().length > 0"
99237
+ [config]="metricStatusConfig"
99238
+ />
99239
+ }
99240
+
99241
+ <!-- Description and Confidence Card in Responsive Layout -->
99242
+ <div class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-6">
99243
+ <!-- Description (takes 2 columns on large screens) -->
99244
+ <div class="lg:col-span-2 space-y-3">
99245
+ <p [ngClass]="getWelcomeBannerTextClasses()" class="text-base leading-relaxed">
99246
+ Metric Analysis provides the deepest level of context for your conversion funnel. Each funnel stage metric—from Views and Product Views to Add to Carts, Checkouts, and Purchases—has unique patterns, behaviors, and optimization opportunities. By answering targeted questions about each metric, you help Symphiq understand the specific factors influencing performance at every conversion point.
99247
+ </p>
99248
+ <p [ngClass]="getWelcomeBannerTextClasses()" class="text-base leading-relaxed">
99249
+ <strong class="font-semibold">Why this matters:</strong> This granular context ensures recommendations address the precise bottlenecks in your customer journey. Rather than generic funnel advice, you'll receive metric-specific strategies grounded in your actual traffic patterns, customer behavior, content types, and marketing tactics. This completes the full picture—from business strategy to operational execution to performance reality.
99250
+ </p>
99251
+ </div>
99252
+
99253
+ <!-- Confidence Card (takes 1 column on large screens, full width on mobile) -->
99254
+ <div class="lg:col-span-1">
99255
+ <symphiq-confidence-level-card
99256
+ [viewMode]="viewMode()"
99257
+ currentStepId="metric-analysis"
99258
+ [currentMetric]="getCurrentMetricForConfidence()"
99259
+ />
99260
+ </div>
99261
+ </div>
99262
+
99263
+ <div [ngClass]="getWelcomeBannerHighlightClasses()"
99264
+ class="mt-6 p-5 rounded-xl border-l-4 flex items-start gap-4">
99265
+ <svg class="w-6 h-6 flex-shrink-0 mt-0.5" [ngClass]="getWelcomeBannerHighlightIconClasses()"
99266
+ fill="none" stroke="currentColor" viewBox="0 0 24 24">
99267
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
99268
+ d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
99269
+ </svg>
99270
+ <div class="flex-1">
99271
+ <h3 [ngClass]="getWelcomeBannerHighlightTitleClasses()" class="font-bold text-lg mb-2">
99272
+ What You'll See Below
99273
+ </h3>
99274
+ <ul [ngClass]="getWelcomeBannerHighlightListClasses()" class="space-y-2 text-sm">
99275
+ <li class="flex items-start gap-2">
99276
+ <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
99277
+ <path fill-rule="evenodd"
99278
+ d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
99279
+ clip-rule="evenodd"></path>
99280
+ </svg>
99281
+ <span><strong class="font-semibold">Funnel Stage Metrics</strong> — Each conversion point from Views through Revenue is represented with its own profile</span>
99282
+ </li>
99283
+ <li class="flex items-start gap-2">
99284
+ <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
99285
+ <path fill-rule="evenodd"
99286
+ d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
99287
+ clip-rule="evenodd"></path>
99288
+ </svg>
99289
+ <span><strong class="font-semibold">Context Questions</strong> — Answer targeted questions about traffic sources, customer behavior, content types, and marketing activities for each metric</span>
99290
+ </li>
99291
+ <li class="flex items-start gap-2">
99292
+ <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
99293
+ <path fill-rule="evenodd"
99294
+ d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
99295
+ clip-rule="evenodd"></path>
99296
+ </svg>
99297
+ <span><strong class="font-semibold">Performance Insights</strong> — Unlock analysis showing what's working, what's not, and specific improvement opportunities for each stage</span>
99298
+ </li>
99299
+ </ul>
99300
+ </div>
99301
+ </div>
99302
+
99303
+ <div [ngClass]="getWelcomeBannerNextStepsClasses()"
99304
+ class="mt-6 p-5 rounded-xl border flex items-start gap-4">
99305
+ <svg class="w-6 h-6 flex-shrink-0 mt-0.5" [ngClass]="getWelcomeBannerNextStepsIconClasses()"
99306
+ fill="none" stroke="currentColor" viewBox="0 0 24 24">
99307
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
99308
+ d="M13 7l5 5m0 0l-5 5m5-5H6"></path>
99309
+ </svg>
99310
+ <div class="flex-1">
99311
+ <h3 [ngClass]="getWelcomeBannerNextStepsTitleClasses()" class="font-bold text-lg mb-2">
99312
+ Complete Your Profile
99313
+ </h3>
99314
+ <p [ngClass]="getWelcomeBannerNextStepsTextClasses()" class="text-sm leading-relaxed">
99315
+ You've reached the final onboarding step! Once all metrics are profiled, you'll have complete context coverage. Symphiq will then generate unified recommendations that connect business goals to specific funnel improvements—showing exactly what to do next to drive growth.
99316
+ </p>
99317
+ </div>
99318
+ </div>
99319
+ </div>
99320
+ </div>
99321
+ </div>
99322
+ </div>
99323
+
99324
+ <!-- Metrics Grid -->
99325
+ <symphiq-profile-analysis-card-grid
99326
+ [viewMode]="viewMode()"
99327
+ [cards]="genericCardData()"
99328
+ [config]="metricCardConfig"
99329
+ (cardClick)="handleCardClick($event)"
99330
+ />
99331
+ </div>
99332
+ </div>
99333
+
99334
+ <!-- Search Modal -->
99335
+ @if (showSearchModal()) {
99336
+ <symphiq-search-modal
99337
+ (closeModal)="handleCloseSearchModal()"
99338
+ ></symphiq-search-modal>
99339
+ }
99340
+
99341
+ <symphiq-tooltip-container/>
99342
+ </div>
99343
+ `, styles: [".animated-bubbles{background:linear-gradient(135deg,#3b82f60d,#06b6d40d)}.animated-bubbles.light-mode{background:linear-gradient(135deg,#3b82f608,#06b6d408)}.animated-bubbles:before,.animated-bubbles:after{content:\"\";position:absolute;border-radius:50%;animation:float 20s infinite ease-in-out}.animated-bubbles:before{width:500px;height:500px;background:radial-gradient(circle,rgba(59,130,246,.1) 0%,transparent 70%);top:-250px;right:-250px;animation-delay:-5s}.animated-bubbles:after{width:400px;height:400px;background:radial-gradient(circle,rgba(6,182,212,.1) 0%,transparent 70%);bottom:-200px;left:-200px;animation-delay:-10s}@keyframes float{0%,to{transform:translateY(0) translate(0)}25%{transform:translateY(-50px) translate(50px)}50%{transform:translateY(-100px) translate(-50px)}75%{transform:translateY(-50px) translate(-100px)}}@keyframes review-pulse{0%,to{box-shadow:0 0 #3b82f680}50%{box-shadow:0 0 0 8px #3b82f600}}.animate-review-pulse{animation:review-pulse 2s ease-in-out infinite}@keyframes status-pop{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.status-badge{animation:status-pop .3s ease-out;transition:all .3s ease-out}@keyframes alert-pulse{0%,to{box-shadow:0 0 #ef444466}50%{box-shadow:0 0 0 6px #ef444400}}.animate-alert-pulse{animation:alert-pulse 1.5s ease-in-out infinite}\n"] }]
99344
+ }], null, { requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], createdDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "createdDate", required: false }] }], embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], profileAnalyses: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileAnalyses", required: false }] }], profileMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileMetrics", required: false }] }], itemStatusesProfileMetric: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemStatusesProfileMetric", required: false }] }], itemStatusesProfileAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemStatusesProfileAnalysis", required: false }] }], profile: [{ type: i0.Input, args: [{ isSignal: true, alias: "profile", required: false }] }], funnelAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelAnalysis", required: false }] }], funnelMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelMetrics", required: false }] }], account: [{ type: i0.Input, args: [{ isSignal: true, alias: "account", required: false }] }], profileMetricQuestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileMetricQuestions", required: false }] }], isOnboarded: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOnboarded", required: false }] }], scrollEvent: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollEvent", required: false }] }], scrollElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollElement", required: false }] }], users: [{ type: i0.Input, args: [{ isSignal: true, alias: "users", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], forDemo: [{ type: i0.Input, args: [{ isSignal: true, alias: "forDemo", required: false }] }], currentUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentUser", required: false }] }], maxAccessibleStepId: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxAccessibleStepId", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], displayMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayMode", required: false }] }], currentStepId: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentStepId", required: false }] }], navigateToProfileMetric: [{ type: i0.Output, args: ["navigateToProfileMetric"] }], navigateToProfileAnalysis: [{ type: i0.Output, args: ["navigateToProfileAnalysis"] }], stepClick: [{ type: i0.Output, args: ["stepClick"] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], answerMetricProfileQuestions: [{ type: i0.Output, args: ["answerMetricProfileQuestions"] }], continueMetricProfileQuestions: [{ type: i0.Output, args: ["continueMetricProfileQuestions"] }], profileQuestionAnswerSave: [{ type: i0.Output, args: ["profileQuestionAnswerSave"] }], metricProfileAdminAnswerAction: [{ type: i0.Output, args: ["metricProfileAdminAnswerAction"] }], onScroll: [{
98507
99345
  type: HostListener,
98508
99346
  args: ['window:scroll', ['$event']]
98509
99347
  }] }); })();
98510
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqProfileAnalysisFocusAreaDashboardComponent, { className: "SymphiqProfileAnalysisFocusAreaDashboardComponent", filePath: "lib/components/profile-analysis-focus-area-dashboard/symphiq-profile-analysis-focus-area-dashboard.component.ts", lineNumber: 481 }); })();
99348
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqProfileMetricsAnalysesDashboardComponent, { className: "SymphiqProfileMetricsAnalysesDashboardComponent", filePath: "lib/components/profile-analyses-metrics-dashboard/symphiq-profile-metrics-analyses-dashboard.component.ts", lineNumber: 366 }); })();
98511
99349
 
98512
99350
  const _forTrack0$4 = ($index, $item) => $item.id;
98513
99351
  function ShopProfileCategoryListComponent_For_2_Template(rf, ctx) { if (rf & 1) {
@@ -103675,5 +104513,5 @@ var pieChart_component = /*#__PURE__*/Object.freeze({
103675
104513
  * Generated bundle index. Do not edit.
103676
104514
  */
103677
104515
 
103678
- export { AreaChartComponent, BarChartComponent, BreakdownSectionComponent, BusinessAnalysisModalComponent, BusinessProfileSearchService, ChartCardComponent, ChartContainerComponent, ChartThemeService, CircularProgressComponent, CompetitivePositioningSummaryComponent, CompetitorAnalysisCardComponent, ConfettiService, ConfidenceLevelCardComponent, ContentGenerationProgressComponent, ContentGenerationProgressWithConfettiComponent, CrossDashboardRelationshipsService, DashboardHeaderComponent, DataLoaderService, DisplayModeEnum, FloatingBackButtonComponent, FloatingTocComponent, FocusAreaDetailCardComponent, FocusAreaQuestionComponent, FocusAreaStatusCardComponent, FocusAreaToolsModalComponent, FunnelOrderService, GradeBadgeComponent, HeaderScrollService, HierarchyDisplayComponent, HorizontalBarComponent, IconService, IndeterminateSpinnerComponent, InsightCardComponent, JourneyProgressIndicatorComponent, JourneyStepIdEnum, LineChartComponent, MetricCardComponent, MetricExecutiveSummaryComponent, MetricFormatterService, MetricListItemComponent, MetricReportModalComponent, MetricWelcomeBannerComponent, MobileBottomNavComponent, MobileFABComponent, ModalComponent, ModalService, NapkinVisualPlaceholderComponent, NavigationStateService, OpportunityHighlightBannerComponent, OverallAssessmentComponent, PacingStatusBadgeComponent, PieChartComponent, ProfileItemCardComponent, ProfileSectionComponent, ProfileSubsectionComponent, RelatedContentSidebarComponent, RevenueCalculatorService, RevenueCalculatorWelcomeBannerComponent, ScrollDepthService, ScrollProgressBarComponent, SearchButtonComponent, SearchModalComponent, SectionDividerComponent, SectionNavigationComponent, ShadowElevationDirective, ShopPlatformEnum, ShopProfileCategoryListComponent, ShopProfileQuestionAnswerComponent, ShopProfileQuestionCardComponent, ShopProfileQuestionsModalComponent, ShopProfileStatusCardComponent, ShopProfileStickyFooterComponent, ShopProfileViewToggleComponent, ShopWelcomeBannerComponent, SkeletonBarComponent, SkeletonCardBaseComponent, SkeletonCircleComponent, SkeletonCompetitorCardComponent, SkeletonCustomerSegmentCardComponent, SkeletonFocusAreaCardComponent, SkeletonGenericCardComponent, SkeletonLoaderComponent, SkeletonPriceTierCardComponent, SkeletonProductCategoryCardComponent, SkeletonRegionCardComponent, SkeletonSeasonCardComponent, StickySubscriptionContinueButtonComponent, SubscriptionValuePropositionCardComponent, SymphiqBusinessAnalysisDashboardComponent, SymphiqConnectGaDashboardComponent, SymphiqCreateAccountDashboardComponent, SymphiqFunnelAnalysisDashboardComponent, SymphiqFunnelAnalysisPreviewComponent, SymphiqIconComponent, SymphiqProfileAnalysisFocusAreaDashboardComponent, SymphiqProfileFocusAreaDashboardComponent, SymphiqProfileFocusAreasAnalysesDashboardComponent, SymphiqProfileShopAnalysisDashboardComponent, SymphiqRevenueCalculatorDashboardComponent, SymphiqWelcomeDashboardComponent, TargetChangeBadgeComponent, TooltipContainerComponent, TooltipDataService, TooltipDirective, TooltipService, UserAvatarComponent, UserDisplayComponent, ViewModeService, ViewModeSwitcherModalComponent, ViewportAnimationDirective, VisualizationContainerComponent, calculateFunnelRatios, calculateMetricTargetsFromRevenue, calculateMetricTargetsFromRevenueReverse, calculateRelatedMetricRatios, generateTargetsFromCalculations, getBadgeLabelClasses, getButtonClasses, getCategoryBadgeClasses, getCategoryColor, getCompetitiveBadgeClasses, getContainerClasses, getFooterClasses, getFunnelStageMetrics, getGradeBadgeClasses, getHeaderClasses, getInsightsBadgeClasses, getInsightsCardClasses, getMetricLabelClasses, getMetricMiniCardClasses, getMetricValueClasses, getNarrativeTextClasses, getRevenueCardClasses, getRevenueIconClasses, getStatusBadgeClasses, getStatusDotClasses, getStatusIconClasses, getStatusSummaryClasses, getSubtitleClasses, getTitleClasses, getTrendClasses, getTrendIconClasses, getTrendValueClasses, groupMetricsByFunnelStage, isLightMode, validateRevenueTarget };
104516
+ export { AreaChartComponent, BarChartComponent, BreakdownSectionComponent, BusinessAnalysisModalComponent, BusinessProfileSearchService, ChartCardComponent, ChartContainerComponent, ChartThemeService, CircularProgressComponent, CompetitivePositioningSummaryComponent, CompetitorAnalysisCardComponent, ConfettiService, ConfidenceLevelCardComponent, ContentGenerationProgressComponent, ContentGenerationProgressWithConfettiComponent, CrossDashboardRelationshipsService, DashboardHeaderComponent, DataLoaderService, DisplayModeEnum, FloatingBackButtonComponent, FloatingTocComponent, FocusAreaDetailCardComponent, FocusAreaExecutiveSummaryComponent, FocusAreaQuestionComponent, FocusAreaStatusCardComponent, FocusAreaToolsModalComponent, FunnelOrderService, GradeBadgeComponent, HeaderScrollService, HierarchyDisplayComponent, HorizontalBarComponent, IconService, IndeterminateSpinnerComponent, InsightCardComponent, JourneyProgressIndicatorComponent, JourneyStepIdEnum, LineChartComponent, MetricCardComponent, MetricExecutiveSummaryComponent, MetricFormatterService, MetricListItemComponent, MetricReportModalComponent, MetricWelcomeBannerComponent, MobileBottomNavComponent, MobileFABComponent, ModalComponent, ModalService, NapkinVisualPlaceholderComponent, NavigationStateService, OpportunityHighlightBannerComponent, OverallAssessmentComponent, PacingStatusBadgeComponent, PieChartComponent, ProfileItemCardComponent, ProfileSectionComponent, ProfileSubsectionComponent, RelatedContentSidebarComponent, RevenueCalculatorService, RevenueCalculatorWelcomeBannerComponent, ScrollDepthService, ScrollProgressBarComponent, SearchButtonComponent, SearchModalComponent, SectionDividerComponent, SectionNavigationComponent, ShadowElevationDirective, ShopPlatformEnum, ShopProfileCategoryListComponent, ShopProfileQuestionAnswerComponent, ShopProfileQuestionCardComponent, ShopProfileQuestionsModalComponent, ShopProfileStatusCardComponent, ShopProfileStickyFooterComponent, ShopProfileViewToggleComponent, ShopWelcomeBannerComponent, SkeletonBarComponent, SkeletonCardBaseComponent, SkeletonCircleComponent, SkeletonCompetitorCardComponent, SkeletonCustomerSegmentCardComponent, SkeletonFocusAreaCardComponent, SkeletonGenericCardComponent, SkeletonLoaderComponent, SkeletonPriceTierCardComponent, SkeletonProductCategoryCardComponent, SkeletonRegionCardComponent, SkeletonSeasonCardComponent, StickySubscriptionContinueButtonComponent, SubscriptionValuePropositionCardComponent, SymphiqBusinessAnalysisDashboardComponent, SymphiqConnectGaDashboardComponent, SymphiqCreateAccountDashboardComponent, SymphiqFunnelAnalysisDashboardComponent, SymphiqFunnelAnalysisPreviewComponent, SymphiqIconComponent, SymphiqProfileAnalysisFocusAreaDashboardComponent, SymphiqProfileFocusAreaDashboardComponent, SymphiqProfileFocusAreasAnalysesDashboardComponent, SymphiqProfileMetricsAnalysesDashboardComponent, SymphiqProfileShopAnalysisDashboardComponent, SymphiqRevenueCalculatorDashboardComponent, SymphiqWelcomeDashboardComponent, TargetChangeBadgeComponent, TooltipContainerComponent, TooltipDataService, TooltipDirective, TooltipService, UserAvatarComponent, UserDisplayComponent, ViewModeService, ViewModeSwitcherModalComponent, ViewportAnimationDirective, VisualizationContainerComponent, calculateFunnelRatios, calculateMetricTargetsFromRevenue, calculateMetricTargetsFromRevenueReverse, calculateRelatedMetricRatios, generateTargetsFromCalculations, getBadgeLabelClasses, getButtonClasses, getCategoryBadgeClasses, getCategoryColor, getCompetitiveBadgeClasses, getContainerClasses, getFooterClasses, getFunnelStageMetrics, getGradeBadgeClasses, getHeaderClasses, getInsightsBadgeClasses, getInsightsCardClasses, getMetricLabelClasses, getMetricMiniCardClasses, getMetricValueClasses, getNarrativeTextClasses, getRevenueCardClasses, getRevenueIconClasses, getStatusBadgeClasses, getStatusDotClasses, getStatusIconClasses, getStatusSummaryClasses, getSubtitleClasses, getTitleClasses, getTrendClasses, getTrendIconClasses, getTrendValueClasses, groupMetricsByFunnelStage, isLightMode, validateRevenueTarget };
103679
104517
  //# sourceMappingURL=symphiq-components.mjs.map