@eric-emg/symphiq-components 1.2.528 → 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.
@@ -64072,17 +64072,24 @@ function SymphiqRevenueCalculatorDashboardComponent_Conditional_10_Template(rf,
64072
64072
  i0.ɵɵadvance(2);
64073
64073
  i0.ɵɵproperty("ngClass", ctx_r0.loadingTextClasses());
64074
64074
  } }
64075
- function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
64075
+ function SymphiqRevenueCalculatorDashboardComponent_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
64076
64076
  const _r2 = i0.ɵɵgetCurrentView();
64077
- i0.ɵɵelement(0, "symphiq-revenue-calculator-welcome-banner", 18);
64078
- i0.ɵɵelementStart(1, "div", 19)(2, "symphiq-initial-target-setting", 20);
64079
- 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()); });
64080
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);
64081
64088
  } if (rf & 2) {
64082
64089
  const ctx_r0 = i0.ɵɵnextContext();
64083
64090
  i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("dataLoadStatus", ctx_r0.dataLoadStatus() ?? ctx_r0.ShopDataLoadStatusEnum.NOT_LOADED)("hasTargets", ctx_r0.hasCurrentYearTargets())("isOnboarded", ctx_r0.isOnboarded());
64084
- i0.ɵɵadvance(2);
64085
- 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);
64086
64093
  } }
64087
64094
  function SymphiqRevenueCalculatorDashboardComponent_Conditional_12_Conditional_5_Template(rf, ctx) { if (rf & 1) {
64088
64095
  i0.ɵɵnamespaceSVG();
@@ -64295,7 +64302,7 @@ class SymphiqRevenueCalculatorDashboardComponent {
64295
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(); });
64296
64303
  i0.ɵɵelementEnd();
64297
64304
  i0.ɵɵelementStart(7, "main", 6)(8, "div", 7);
64298
- 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);
64299
64306
  i0.ɵɵelementEnd()();
64300
64307
  i0.ɵɵconditionalCreate(12, SymphiqRevenueCalculatorDashboardComponent_Conditional_12_Template, 7, 7, "div", 9);
64301
64308
  i0.ɵɵelementEnd()();
@@ -64424,30 +64431,32 @@ class SymphiqRevenueCalculatorDashboardComponent {
64424
64431
  [isOnboarded]="isOnboarded()"
64425
64432
  />
64426
64433
 
64427
- <div class="mt-8">
64428
- <symphiq-initial-target-setting
64429
- [viewMode]="viewMode()"
64430
- [funnelMetrics]="funnelMetrics() ?? []"
64431
- [mainUiData]="mainUiData()"
64432
- [trendUiData]="trendUiData()"
64433
- [shopId]="shopId()"
64434
- [pacingResponse]="pacingResponse()"
64435
- [dataResults]="dataResults()"
64436
- [calculateRevenueReverseResponse]="calculateRevenueReverseResponse()"
64437
- [calculateRevenueResponse]="calculateRevenueResponse()"
64438
- [isCalculatingTargets]="isCalculatingTargets()"
64439
- [targets]="targets()"
64440
- [targetHistories]="targetHistories() ?? []"
64441
- [users]="users() ?? []"
64442
- (targetsCreated)="onTargetsCreated($event)"
64443
- (calculateRevenueReverseRequest)="calculateRevenueReverseRequest.emit($event)"
64444
- (calculateRevenueRequest)="onCalculateRevenueRequest($event)"
64445
- (editRelatedMetricTarget)="editRelatedMetricTarget.emit($event)"
64446
- (saveTargetsClick)="saveTargetsClick.emit()"
64447
- (targetsUpdated)="targetsUpdated.emit($event)"
64448
- (discardChangesClick)="discardChangesClick.emit()"
64449
- />
64450
- </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
+ }
64451
64460
  }
64452
64461
 
64453
64462
  </div>
@@ -64491,7 +64500,7 @@ class SymphiqRevenueCalculatorDashboardComponent {
64491
64500
  type: HostListener,
64492
64501
  args: ['window:scroll', ['$event']]
64493
64502
  }] }); })();
64494
- (() => { (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 }); })();
64495
64504
 
64496
64505
  function HierarchyDisplayComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
64497
64506
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 1);
@@ -84912,39 +84921,39 @@ class FocusAreaHealthIndicatorComponent {
84912
84921
  standalone: true,
84913
84922
  imports: [CommonModule, SymphiqIconComponent],
84914
84923
  changeDetection: ChangeDetectionStrategy.OnPush,
84915
- template: `
84916
- <div [ngClass]="containerClasses()" class="rounded-xl p-6 border">
84917
- <div class="flex items-start gap-4">
84918
- <div [ngClass]="iconContainerClasses()" class="flex-shrink-0 w-12 h-12 rounded-xl flex items-center justify-center">
84919
- <symphiq-icon [icon]="healthIcon()" size="w-6 h-6" />
84920
- </div>
84921
- <div class="flex-1">
84922
- <div class="flex items-center justify-between mb-2">
84923
- <h3 [ngClass]="titleClasses()" class="text-sm font-semibold uppercase tracking-wider">
84924
- Focus Area Health
84925
- </h3>
84926
- <span [ngClass]="healthBadgeClasses()" class="px-3 py-1 rounded-full text-xs font-bold uppercase">
84927
- {{ healthLabel() }}
84928
- </span>
84929
- </div>
84930
-
84931
- <!-- Health Meter -->
84932
- <div class="mb-3">
84933
- <div [ngClass]="meterBackgroundClasses()" class="h-2 rounded-full overflow-hidden">
84934
- <div
84935
- [ngClass]="meterFillClasses()"
84936
- [style.width.%]="healthPercentage()"
84937
- class="h-full transition-all duration-500 ease-out rounded-full"
84938
- ></div>
84939
- </div>
84940
- </div>
84941
-
84942
- <p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed">
84943
- {{ healthDescription() }}
84944
- </p>
84945
- </div>
84946
- </div>
84947
- </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>
84948
84957
  `
84949
84958
  }]
84950
84959
  }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], health: [{ type: i0.Input, args: [{ isSignal: true, alias: "health", required: false }] }] }); })();
@@ -85314,177 +85323,177 @@ class FocusAreaExecutiveSummaryComponent {
85314
85323
  RelatedGoalChipsComponent
85315
85324
  ],
85316
85325
  changeDetection: ChangeDetectionStrategy.OnPush,
85317
- template: `
85318
- <section id="section-executive-summary" class="space-y-6 scroll-mt-24">
85319
- <!-- Summary Banner -->
85320
- <div [ngClass]="getBannerClasses()" class="rounded-2xl p-8 shadow-xl">
85321
- <div class="space-y-6">
85322
- <div class="flex items-start justify-between gap-4">
85323
- <div class="flex-1">
85324
- <h2 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold mb-3">
85325
- Executive Summary
85326
- </h2>
85327
- <p [ngClass]="getTextClasses()" class="text-lg leading-relaxed">
85328
- {{ summary()?.gradeRationale }}
85329
- </p>
85330
- </div>
85331
- @if (summary()?.overallGrade) {
85332
- <symphiq-grade-badge
85333
- [grade]="summary()!.overallGrade!"
85334
- [gradeRationale]="summary()!.gradeRationale || ''"
85335
- [viewMode]="viewMode()"
85336
- />
85337
- }
85338
- </div>
85339
-
85340
- @if (summary()?.narrative) {
85341
- <div [ngClass]="getNarrativeClasses()" class="rounded-xl p-6">
85342
- <h3 [ngClass]="getSubheadingClasses()" class="text-lg font-semibold mb-3">
85343
- Analysis Narrative
85344
- </h3>
85345
- <div class="relative">
85346
- @if (summary()?.napkinVisual?.enabled) {
85347
- <div class="mb-6 lg:float-left lg:mr-6 lg:mb-4 lg:max-w-[66%]">
85348
- <symphiq-napkin-visual-placeholder
85349
- [visual]="summary()!.napkinVisual!"
85350
- [viewMode]="viewMode()"
85351
- />
85352
- </div>
85353
- }
85354
- <p [ngClass]="getTextClasses()" class="text-sm leading-relaxed whitespace-pre-line">
85355
- {{ summary()?.narrative }}
85356
- </p>
85357
- <div class="clear-both"></div>
85358
- </div>
85359
- </div>
85360
- }
85361
-
85362
- <!-- Health and Top Priorities -->
85363
- <div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
85364
- <!-- Health Indicator -->
85365
- <div class="lg:col-span-1">
85366
- @if (summary()?.focusAreaHealth) {
85367
- <symphiq-focus-area-health-indicator
85368
- [viewMode]="viewMode()"
85369
- [health]="summary()?.focusAreaHealth"
85370
- />
85371
- }
85372
- </div>
85373
-
85374
- <!-- Quick Stats -->
85375
- <div class="lg:col-span-2 grid grid-cols-2 gap-4">
85376
- <button
85377
- type="button"
85378
- (click)="onTopPrioritiesClick()"
85379
- [ngClass]="getTopPrioritiesStatCardClasses()"
85380
- class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
85381
- <div [ngClass]="getTopPrioritiesStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
85382
- Top Priorities
85383
- </div>
85384
- <div [ngClass]="getTopPrioritiesStatValueClasses()" class="text-3xl font-bold mb-2">
85385
- {{ summary()?.topPriorities?.length || 0 }}
85386
- </div>
85387
- <div class="flex items-center gap-1.5 text-xs font-medium">
85388
- <span [ngClass]="getTopPrioritiesButtonTextClasses()">View Details</span>
85389
- <symphiq-icon
85390
- [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }"
85391
- size="w-4 h-4"
85392
- [ngClass]="getTopPrioritiesButtonTextClasses()"
85393
- class="transition-transform group-hover:translate-x-1"
85394
- />
85395
- </div>
85396
- </button>
85397
-
85398
- <button
85399
- type="button"
85400
- (click)="scrollToQuickWins()"
85401
- [ngClass]="getQuickWinsStatCardClasses()"
85402
- class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
85403
- <div [ngClass]="getQuickWinsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
85404
- Quick Wins
85405
- </div>
85406
- <div [ngClass]="getQuickWinsStatValueClasses()" class="text-3xl font-bold mb-2">
85407
- {{ summary()?.quickWins?.length || 0 }}
85408
- </div>
85409
- <div class="flex items-center gap-1.5 text-xs font-medium">
85410
- <span [ngClass]="getQuickWinsButtonTextClasses()">Details Below</span>
85411
- <symphiq-icon
85412
- [icon]="{ name: 'chevron-down', source: IconSourceEnum.HEROICONS }"
85413
- size="w-4 h-4"
85414
- [ngClass]="getQuickWinsButtonTextClasses()"
85415
- class="transition-transform group-hover:translate-y-1 animate-bounce"
85416
- />
85417
- </div>
85418
- </button>
85419
- </div>
85420
- </div>
85421
- </div>
85422
- </div>
85423
-
85424
- <!-- Top Priorities Grid - Hidden, now shown in modal -->
85425
- <!-- Top priorities are now displayed in a modal instead of inline -->
85426
-
85427
- <!-- Quick Wins -->
85428
- @if (summary()?.quickWins?.length) {
85429
- <div id="quick-wins-section" class="space-y-4 scroll-mt-24">
85430
- <h3 [ngClass]="getSectionTitleClasses()" class="text-xl font-bold">
85431
- Quick Wins
85432
- </h3>
85433
- <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
85434
- @for (win of summary()!.quickWins!; track $index) {
85435
- <div [ngClass]="getQuickWinCardClasses()"
85436
- class="rounded-xl p-6 transition-all duration-300">
85437
- <div class="space-y-4">
85438
- <div class="flex items-start gap-3">
85439
- <span [ngClass]="getNumberBadgeClasses()"
85440
- class="flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center text-sm font-bold">
85441
- {{ $index + 1 }}
85442
- </span>
85443
- <p [ngClass]="getQuickWinTextClasses()" class="font-semibold leading-tight flex-1">
85444
- {{ win.action }}
85445
- </p>
85446
- </div>
85447
-
85448
- <div class="flex flex-wrap gap-2">
85449
- <span [ngClass]="getEffortBadgeClasses(win.effort)"
85450
- class="px-3 py-1 rounded-full text-xs font-semibold">
85451
- {{ formatLabel(win.effort) }} Effort
85452
- </span>
85453
- <span [ngClass]="getImpactBadgeClasses(win.impact)"
85454
- class="px-3 py-1 rounded-full text-xs font-semibold">
85455
- {{ formatLabel(win.impact) }} Impact
85456
- </span>
85457
- </div>
85458
-
85459
- @if (win.estimatedTimeframe) {
85460
- <div class="flex items-center gap-2 text-sm" [ngClass]="getMetaTextClasses()">
85461
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
85462
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
85463
- d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
85464
- </svg>
85465
- <span>{{ win.estimatedTimeframe }}</span>
85466
- </div>
85467
- }
85468
-
85469
- @if (win.relatedGoalId && allGoals()) {
85470
- <div class="space-y-2">
85471
- <h4 [ngClass]="getMetaTextClasses()" class="text-xs font-semibold uppercase tracking-wider">
85472
- Related Goal
85473
- </h4>
85474
- <symphiq-related-goal-chips
85475
- [relatedGoalIds]="[win.relatedGoalId]"
85476
- [allGoals]="allGoals()"
85477
- [viewMode]="viewMode()"
85478
- />
85479
- </div>
85480
- }
85481
- </div>
85482
- </div>
85483
- }
85484
- </div>
85485
- </div>
85486
- }
85487
- </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>
85488
85497
  `
85489
85498
  }]
85490
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"] }] }); })();
@@ -85897,158 +85906,158 @@ class CollapsibleAnalysisSectionGroupComponent {
85897
85906
  standalone: true,
85898
85907
  imports: [CommonModule, SymphiqIconComponent, ProfileSectionContentComponent, NapkinVisualPlaceholderComponent, FocusAreaExecutiveSummaryComponent, MetricExecutiveSummaryComponent],
85899
85908
  changeDetection: ChangeDetectionStrategy.OnPush,
85900
- template: `
85901
- <div [ngClass]="containerClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
85902
- <div [ngClass]="headerClasses()" class="px-6 py-5 border-b">
85903
- <div class="flex items-center justify-between">
85904
- <div class="flex items-center gap-3">
85905
- <div [ngClass]="iconContainerClasses()" class="p-2.5 rounded-lg">
85906
- <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
85907
- <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>
85908
- </svg>
85909
- </div>
85910
- <div>
85911
- <h2 [ngClass]="titleClasses()" class="text-xl font-bold">
85912
- Supporting Business Context
85913
- </h2>
85914
- <p [ngClass]="subtitleClasses()" class="text-sm mt-0.5">
85915
- Operational insights and competitive analysis
85916
- </p>
85917
- </div>
85918
- </div>
85919
- </div>
85920
- </div>
85921
-
85922
- <div [ngClass]="contentClasses()" class="p-6">
85923
- <div [ngClass]="infoBoxClasses()" class="mb-6 p-4 rounded-xl border flex items-start gap-3">
85924
- <svg class="w-5 h-5 flex-shrink-0 mt-0.5" [ngClass]="infoIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
85925
- <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>
85926
- </svg>
85927
- <div class="flex-1">
85928
- <h4 [ngClass]="infoTitleClasses()" class="font-semibold text-sm mb-1">
85929
- {{ getDescriptionTitle() }}
85930
- </h4>
85931
- <p [ngClass]="infoTextClasses()" class="text-sm leading-relaxed">
85932
- {{ getDescriptionText() }}
85933
- </p>
85934
- </div>
85935
- </div>
85936
-
85937
- <div class="space-y-3">
85938
- @for (section of sections(); track section.id; let idx = $index) {
85939
- <div [id]="'collapsible-section-' + idx" [ngClass]="sectionCardClasses()" class="rounded-xl border overflow-hidden transition-all duration-200">
85940
- <button
85941
- type="button"
85942
- (click)="toggleSection(idx)"
85943
- [ngClass]="sectionHeaderClasses(section, idx)"
85944
- class="cursor-pointer w-full px-5 py-4 flex items-center justify-between gap-4 text-left transition-colors duration-200">
85945
- <div class="flex items-center gap-3 flex-1 min-w-0">
85946
- @if (section.icon) {
85947
- <div [ngClass]="sectionIconContainerClasses(idx)" class="p-2 rounded-lg flex-shrink-0 transition-colors duration-200">
85948
- <symphiq-icon [icon]="section.icon" size="w-4 h-4"></symphiq-icon>
85949
- </div>
85950
- }
85951
- <div class="flex-1 min-w-0">
85952
- <h3 [ngClass]="sectionTitleClasses(idx)" class="font-semibold transition-colors duration-200">
85953
- {{ section.title }}
85954
- </h3>
85955
- @if (section.description) {
85956
- <p [ngClass]="sectionDescriptionClasses(idx)" class="text-sm mt-0.5 line-clamp-1 transition-colors duration-200">
85957
- {{ formatDescription(section.description) }}
85958
- </p>
85959
- }
85960
- </div>
85961
- </div>
85962
- <svg
85963
- [ngClass]="chevronClasses(idx)"
85964
- [class.rotate-180]="expandedSections()[idx]"
85965
- class="w-5 h-5 flex-shrink-0 transition-transform duration-200"
85966
- fill="none"
85967
- stroke="currentColor"
85968
- viewBox="0 0 24 24">
85969
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
85970
- </svg>
85971
- </button>
85972
-
85973
- <div
85974
- class="grid transition-[grid-template-rows] duration-300 ease-in-out"
85975
- [style.grid-template-rows]="expandedSections()[idx] ? '1fr' : '0fr'">
85976
- <div class="overflow-hidden">
85977
- <div [ngClass]="sectionContentClasses()" class="border-t p-6">
85978
- <!-- Metric Executive Summary -->
85979
- @if (section.id === 'metric-executive-summary' && metricExecutiveSummary()) {
85980
- <symphiq-metric-executive-summary
85981
- [viewMode]="viewMode()"
85982
- [summary]="metricExecutiveSummary()!"
85983
- [metricName]="metricName() || ''"
85984
- [allGoals]="allGoals()"
85985
- (topPrioritiesClick)="handleMetricTopPrioritiesClick()"
85986
- (priorityDetailClick)="handleMetricPriorityDetailClick($event)"
85987
- />
85988
- } @else if (section.id === 'focus-area-executive-summary' && focusAreaExecutiveSummary()) {
85989
- <symphiq-focus-area-executive-summary
85990
- [viewMode]="viewMode()"
85991
- [summary]="focusAreaExecutiveSummary()!"
85992
- [allGoals]="allGoals()"
85993
- (topPrioritiesClick)="handleTopPrioritiesClick()"
85994
- (priorityDetailClick)="handlePriorityDetailClick($event)"
85995
- />
85996
- } @else {
85997
- <!-- Description and Napkin Visual (if available) - Alternating layout -->
85998
- @if (section.description || (section.visual && section.visual.enabled)) {
85999
- <div class="mb-6">
86000
- <div class="relative">
86001
- @if (section.visual && section.visual.enabled) {
86002
- @if (idx % 2 === 0) {
86003
- <!-- Even index: Napkin on left -->
86004
- <div class="mb-6 lg:float-left lg:mr-6 lg:mb-4 lg:max-w-[50%]">
86005
- <symphiq-napkin-visual-placeholder
86006
- [visual]="section.visual"
86007
- [viewMode]="viewMode()"
86008
- />
86009
- </div>
86010
- } @else {
86011
- <!-- Odd index: Napkin on right -->
86012
- <div class="mb-6 lg:float-right lg:ml-6 lg:mb-4 lg:max-w-[50%]">
86013
- <symphiq-napkin-visual-placeholder
86014
- [visual]="section.visual"
86015
- [viewMode]="viewMode()"
86016
- />
86017
- </div>
86018
- }
86019
- }
86020
-
86021
- <!-- Description -->
86022
- @if (section.description) {
86023
- <p [ngClass]="descriptionTextClasses()" class="text-sm leading-relaxed whitespace-pre-line">
86024
- {{ formatDescription(section.description) }}
86025
- </p>
86026
- }
86027
- <div class="clear-both"></div>
86028
- </div>
86029
- </div>
86030
- }
86031
-
86032
- <symphiq-profile-section-content
86033
- [section]="section"
86034
- [viewMode]="viewMode()"
86035
- [sectionIndex]="idx"
86036
- [executiveSummary]="executiveSummary()"
86037
- [allGoals]="allGoals()"
86038
- [allMetrics]="allMetrics()"
86039
- [allCharts]="allCharts()"
86040
- [allInsights]="allInsights()"
86041
- [businessProfile]="businessProfile()"
86042
- />
86043
- }
86044
- </div>
86045
- </div>
86046
- </div>
86047
- </div>
86048
- }
86049
- </div>
86050
- </div>
86051
- </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>
86052
86061
  `
86053
86062
  }]
86054
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 }] }] }); })();
@@ -97182,93 +97191,93 @@ class FocusAreaWelcomeBannerComponent {
97182
97191
  standalone: true,
97183
97192
  imports: [CommonModule, SymphiqIconComponent],
97184
97193
  changeDetection: ChangeDetectionStrategy.OnPush,
97185
- template: `
97186
- <div [ngClass]="containerClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
97187
- <div [ngClass]="contentClasses()" class="px-8 py-8">
97188
- <div class="flex items-start gap-6">
97189
- <div [ngClass]="iconContainerClasses()" class="flex-shrink-0 w-16 h-16 rounded-2xl flex items-center justify-center">
97190
- <symphiq-icon [icon]="focusAreaIcon()" size="w-8 h-8" />
97191
- </div>
97192
-
97193
- <div class="flex-1">
97194
- <h2 [ngClass]="titleClasses()" class="text-2xl sm:text-3xl font-bold mb-3">
97195
- @if (isOnboarded()) {
97196
- Your {{ focusAreaDisplayName() }} Analysis
97197
- } @else {
97198
- Welcome to Your {{ focusAreaDisplayName() }} Analysis
97199
- }
97200
- </h2>
97201
-
97202
- <!-- Description -->
97203
- <div class="space-y-3 mb-6">
97204
- <p [ngClass]="textClasses()" class="text-base leading-relaxed">
97205
- {{ 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.
97206
- </p>
97207
- <p [ngClass]="textClasses()" class="text-base leading-relaxed">
97208
- <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.
97209
- </p>
97210
- </div>
97211
-
97212
- <div [ngClass]="highlightBoxClasses()" class="mt-6 p-5 rounded-xl border-l-4 flex items-start gap-4">
97213
- <svg class="w-6 h-6 flex-shrink-0 mt-0.5" [ngClass]="highlightIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
97214
- <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>
97215
- </svg>
97216
- <div class="flex-1">
97217
- <h3 [ngClass]="highlightTitleClasses()" class="font-bold text-lg mb-2">
97218
- What You'll See Below
97219
- </h3>
97220
- <ul [ngClass]="highlightListClasses()" class="space-y-2 text-sm">
97221
- <li class="flex items-start gap-2">
97222
- <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
97223
- <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>
97224
- </svg>
97225
- <span><strong class="font-semibold">Focus Area Health</strong> — Current maturity and performance assessment for {{ focusAreaDisplayName() | lowercase }}</span>
97226
- </li>
97227
- <li class="flex items-start gap-2">
97228
- <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
97229
- <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>
97230
- </svg>
97231
- <span><strong class="font-semibold">Top Priorities</strong> — High-impact improvements specific to this operational domain</span>
97232
- </li>
97233
- <li class="flex items-start gap-2">
97234
- <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
97235
- <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>
97236
- </svg>
97237
- <span><strong class="font-semibold">Tactical Roadmap</strong> — Step-by-step goals, strategies, and recommendations for domain optimization</span>
97238
- </li>
97239
- </ul>
97240
- </div>
97241
- </div>
97242
-
97243
- <div [ngClass]="nextStepsBoxClasses()" class="mt-6 p-5 rounded-xl border flex items-start gap-4">
97244
- <svg class="w-6 h-6 flex-shrink-0 mt-0.5" [ngClass]="nextStepsIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
97245
- @if (isOnboarded()) {
97246
- <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>
97247
- } @else {
97248
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"></path>
97249
- }
97250
- </svg>
97251
- <div class="flex-1">
97252
- <h3 [ngClass]="nextStepsTitleClasses()" class="font-bold mb-1">
97253
- @if (isOnboarded()) {
97254
- Keep Your Focus Area Updated
97255
- } @else {
97256
- Continue Your Journey
97257
- }
97258
- </h3>
97259
- <p [ngClass]="nextStepsTextClasses()" class="text-sm leading-relaxed">
97260
- @if (isOnboarded()) {
97261
- 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.
97262
- } @else {
97263
- 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.
97264
- }
97265
- </p>
97266
- </div>
97267
- </div>
97268
- </div>
97269
- </div>
97270
- </div>
97271
- </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>
97272
97281
  `
97273
97282
  }]
97274
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 }] }] }); })();
@@ -98162,351 +98171,1181 @@ class SymphiqProfileAnalysisFocusAreaDashboardComponent {
98162
98171
  MarkAsReviewedFooterComponent
98163
98172
  ],
98164
98173
  changeDetection: ChangeDetectionStrategy.OnPush,
98165
- template: `
98166
- <div [ngClass]="getContainerClasses()" [class.min-h-screen]="!embedded()" class="relative">
98167
- <div class="animated-bubbles" [class.light-mode]="isLightMode()"
98168
- style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
98169
-
98170
- <!-- Scroll Progress Bar -->
98171
- <div
98172
- [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'">
98173
- <div
98174
- [style.width.%]="scrollProgress()"
98175
- [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
98176
- class="h-full transition-all duration-200 ease-out">
98177
- </div>
98178
- </div>
98179
-
98180
- <div class="relative z-[51]">
98181
- <!-- Dashboard Header -->
98182
- <symphiq-dashboard-header
98183
- [title]="getAnalysisSubtitle()"
98184
- [subtitle]="''"
98185
- [currentSection]="'Focus Area'"
98186
- [viewMode]="viewMode()"
98187
- [viewModeLabel]="displayModeLabel()"
98188
- [isLoading]="isLoading()"
98189
- [requestedByUser]="requestedByUser()"
98190
- [createdDate]="profileAnalysis()?.selfContentCompletedDate"
98191
- [showControls]="shouldShowHeaderControls()"
98192
- (searchClick)="openSearch()"
98193
- (viewModeClick)="openViewModeSwitcher()"
98194
- />
98195
-
98196
- <!-- Main Content -->
98197
- <main class="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 space-y-12"
98198
- [class.pb-32]="shouldShowReviewFooter()">
98199
-
98200
- <!-- Welcome Banner (Simplified View Only) -->
98201
- @if (isSimplifiedView()) {
98202
- <div class="mb-12">
98203
- <symphiq-focus-area-welcome-banner
98204
- [viewMode]="viewMode()"
98205
- [focusAreaDomain]="focusAreaDomain()"
98206
- [focusAreaName]="focusAreaName()"
98207
- />
98208
- </div>
98209
-
98210
- <!-- Loading Card -->
98211
- @if (isLoading()) {
98212
- <div [ngClass]="isLightMode() ? 'bg-white/80 border-slate-200' : 'bg-slate-800/80 border-slate-700'"
98213
- class="rounded-2xl border shadow-lg p-8 backdrop-blur-sm">
98214
- <div class="flex flex-col items-center justify-center space-y-4">
98215
- <symphiq-indeterminate-spinner [viewMode]="viewMode()" size="large" />
98216
- <div class="text-center">
98217
- <h3 [ngClass]="isLightMode() ? 'text-slate-900' : 'text-white'" class="text-lg font-semibold mb-1">
98218
- Loading Your Focus Area Analysis
98219
- </h3>
98220
- <p [ngClass]="isLightMode() ? 'text-slate-600' : 'text-slate-400'" class="text-sm">
98221
- Please wait while we prepare your personalized insights...
98222
- </p>
98223
- </div>
98224
- </div>
98225
- </div>
98226
- }
98227
- }
98228
-
98229
- <!-- Simplified View Content -->
98230
- @if (isSimplifiedView()) {
98231
- <!-- Strategic Insights & Goals -->
98232
- @if (profileAnalysis()) {
98233
- <div class="mb-8">
98234
- @if (isProfileAnalysisGenerating()) {
98235
- <div [ngClass]="getProgressCardClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
98236
- <symphiq-content-generation-progress
98237
- [itemStatus]="itemStatusProfileAnalysis()"
98238
- [viewMode]="viewMode()"
98239
- title="Generating Your Focus Area Analysis"
98240
- subtitle="We're analyzing your data to create your personalized analysis. It will appear when ready."
98241
- />
98242
- </div>
98243
- } @else {
98244
- <symphiq-strategic-goals-tiled-grid
98245
- [goals]="strategicRoadmapGoals()"
98246
- [viewMode]="viewMode()"
98247
- (viewMoreClick)="openGoalModal($event)"
98248
- />
98249
- }
98250
- </div>
98251
- }
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 }); })();
98252
98519
 
98253
- <!-- Supporting Business Context -->
98254
- @if (nonStrategicSections().length > 0) {
98255
- <div>
98256
- <symphiq-collapsible-analysis-section-group
98257
- [sections]="nonStrategicSections()"
98258
- [viewMode]="viewMode()"
98259
- [focusAreaExecutiveSummary]="focusAreaExecutiveSummary()"
98260
- [allGoals]="allGoals()"
98261
- [allMetrics]="allMetrics()"
98262
- [allCharts]="allCharts()"
98263
- [allInsights]="allInsights()"
98264
- [businessProfile]="profile()"
98265
- />
98266
- </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;
98267
98604
  }
98268
- }
98269
-
98270
- <!-- Compact & Expanded View Content -->
98271
- @if (!isSimplifiedView()) {
98272
- <!-- Focus Area Executive Summary -->
98273
- @if (focusAreaExecutiveSummary(); as summary) {
98274
- <symphiq-focus-area-executive-summary
98275
- [viewMode]="viewMode()"
98276
- [summary]="summary"
98277
- [allGoals]="allGoals()"
98278
- (topPrioritiesClick)="handleTopPrioritiesClick()"
98279
- (priorityDetailClick)="handlePriorityDetailClick($event)"
98280
- />
98605
+ if (!scrollEvent || !isEmbedded) {
98606
+ return;
98281
98607
  }
98282
-
98283
- <!-- Divider Before First Section -->
98284
- @if (sections(); as sectionList) {
98285
- @if (sectionList.length > 0 && sectionList[0].icon) {
98286
- <symphiq-section-divider
98287
- [viewMode]="viewMode()"
98288
- [sectionIcon]="sectionList[0].icon"
98289
- />
98290
- }
98608
+ const detail = scrollEvent.detail;
98609
+ if (!detail) {
98610
+ return;
98291
98611
  }
98292
-
98293
- <!-- Profile Analysis Sections -->
98294
- @if (sections(); as sectionList) {
98295
- <section class="space-y-8">
98296
- @for (section of sectionList; track section.id; let idx = $index; let last = $last) {
98297
- <div [id]="'section-' + section.id" [ngClass]="getSectionCardClasses()"
98298
- class="rounded-xl p-8 scroll-mt-24">
98299
- <!-- Icon and Title -->
98300
- <div class="flex items-start gap-3 mb-6">
98301
- @if (section.icon) {
98302
- <div [ngClass]="getSectionIconClasses()"
98303
- class="flex-shrink-0 w-12 h-12 rounded-xl flex items-center justify-center">
98304
- <symphiq-icon [icon]="section.icon" size="w-6 h-6"></symphiq-icon>
98305
- </div>
98306
- }
98307
- <div class="flex-1">
98308
- <h3 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold">
98309
- {{ section.title }}
98310
- </h3>
98311
- </div>
98312
- </div>
98313
-
98314
- <!-- Description and Visual Side-by-Side -->
98315
- @if (section.description || (section.visual && section.visual.enabled)) {
98316
- <div class="mb-6 flex flex-col lg:flex-row gap-6 items-start"
98317
- [class.lg:flex-row-reverse]="idx % 2 === 0">
98318
- @if (section.visual && section.visual.enabled) {
98319
- <div class="w-full lg:w-2/3">
98320
- <symphiq-napkin-visual-placeholder
98321
- [visual]="section.visual"
98322
- [viewMode]="viewMode()"
98323
- />
98324
- </div>
98325
- }
98326
- @if (section.description) {
98327
- <div class="w-full"
98328
- [class.lg:w-1/3]="section.visual && section.visual.enabled" [class.lg:w-full]="!section.visual || !section.visual.enabled">
98329
- <p [ngClass]="getSectionDescriptionClasses()"
98330
- class="text-sm leading-relaxed whitespace-pre-line">
98331
- {{ section.description }}
98332
- </p>
98333
- </div>
98334
- }
98335
- </div>
98336
- }
98337
-
98338
- <!-- Section Content -->
98339
- <symphiq-profile-section-content
98340
- [section]="section"
98341
- [viewMode]="viewMode()"
98342
- [sectionIndex]="idx"
98343
- [allGoals]="allGoals()"
98344
- [allMetrics]="allMetrics()"
98345
- [allCharts]="allCharts()"
98346
- [allInsights]="allInsights()"
98347
- [businessProfile]="profile()"
98348
- />
98349
- </div>
98350
-
98351
- <!-- Section Divider (between sections) -->
98352
- @if (!last) {
98353
- <symphiq-section-divider
98354
- [viewMode]="viewMode()"
98355
- [sectionIcon]="sectionList[idx + 1].icon"
98356
- />
98357
- }
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)));
98358
98622
  }
98359
- </section>
98360
98623
  }
98361
- }
98362
-
98363
- </main>
98364
-
98365
- <!-- Table of Contents (Compact & Expanded Views) -->
98366
- @if (!isSimplifiedView() && sections()) {
98367
- <symphiq-floating-toc
98368
- [sections]="tocSections()"
98369
- [viewMode]="viewMode()"
98370
- [embedded]="embedded()"
98371
- [scrollElement]="scrollElement() ?? undefined"
98372
- />
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;
98373
98892
  }
98374
-
98375
- <!-- Section Navigation Dots (Compact & Expanded Views) -->
98376
- @if (!isSimplifiedView() && sections()) {
98377
- <symphiq-section-navigation
98378
- [sections]="tocSections()"
98379
- [viewMode]="viewMode()"
98380
- [embedded]="embedded()"
98381
- [scrollElement]="scrollElement() ?? undefined"
98382
- />
98893
+ if (completedCards.length === cards.length) {
98894
+ return cards[cards.length - 1]?.metricEnum;
98383
98895
  }
98384
-
98385
- <!-- Search Modal -->
98386
- <symphiq-search-modal
98387
- [isOpen]="isSearchOpen()"
98388
- [isLightMode]="isLightMode()"
98389
- (close)="closeSearch()"
98390
- />
98391
-
98392
- <!-- View Mode Switcher Modal -->
98393
- <symphiq-view-mode-switcher-modal
98394
- [isOpen]="isViewModeSwitcherOpen()"
98395
- [currentMode]="currentDisplayMode()"
98396
- [viewMode]="viewMode()"
98397
- (close)="closeViewModeSwitcher()"
98398
- (modeSelected)="handleDisplayModeChange($event)"
98399
- />
98400
-
98401
- <!-- Profile Analysis Modal -->
98402
- <symphiq-profile-analysis-modal
98403
- [isLightMode]="isLightMode()"
98404
- [allMetrics]="allMetrics()"
98405
- [allInsights]="allInsights()"
98406
- [allBusinessInsights]="allBusinessInsights()"
98407
- [allCharts]="allCharts()"
98408
- >
98409
- @if (modalType() === 'goal-detail' && getGoalDetailData(); as data) {
98410
- <symphiq-goal-card
98411
- [goal]="data.goal"
98412
- [viewMode]="data.viewMode"
98413
- [isInModal]="true"
98414
- [allMetrics]="allMetrics()"
98415
- [allCharts]="allCharts()"
98416
- [allInsights]="allInsights()"
98417
- [currentModalState]="getCurrentModalState()"
98418
- [businessProfile]="profile()"
98419
- />
98420
- }
98421
- @if (modalType() === 'goal-objectives' && getGoalDetailData(); as data) {
98422
- <symphiq-goal-objectives-modal-content
98423
- [goal]="data.goal"
98424
- [viewMode]="data.viewMode"
98425
- />
98426
- }
98427
- @if (modalType() === 'objective-strategies' && getObjectiveStrategiesData(); as data) {
98428
- <symphiq-objective-strategies-modal-content
98429
- [objective]="data.objective"
98430
- [goalTitle]="data.goalTitle"
98431
- [viewMode]="data.viewMode"
98432
- />
98433
- }
98434
- @if (modalType() === 'strategy-recommendations' && getStrategyRecommendationsData(); as data) {
98435
- <symphiq-strategy-recommendations-modal-content
98436
- [strategy]="data.strategy"
98437
- [objectiveTitle]="data.objectiveTitle"
98438
- [goalTitle]="data.goalTitle"
98439
- [viewMode]="data.viewMode"
98440
- [expandedRecommendationId]="data.expandedRecommendationId"
98441
- [allMetrics]="allMetrics()"
98442
- [allCharts]="allCharts()"
98443
- [allInsights]="allInsights()"
98444
- [allBusinessInsights]="allBusinessInsights()"
98445
- [currentModalState]="getCurrentModalState()"
98446
- />
98447
- }
98448
- @if (modalType() === 'category-detail' && getCategoryDetailData(); as data) {
98449
- <symphiq-category-detail-modal-content
98450
- [category]="data.category"
98451
- [viewMode]="data.viewMode"
98452
- [scrollToSection]="data.scrollToSection"
98453
- />
98454
- }
98455
- @if (modalType() === 'strength-detail' && getStrengthDetailData(); as data) {
98456
- <symphiq-strength-detail-modal-content
98457
- [strength]="data.strength"
98458
- [viewMode]="data.viewMode"
98459
- [allFunnelStrengths]="funnelStrengths()"
98460
- [currentModalState]="getCurrentModalState()"
98461
- />
98462
- }
98463
- @if (modalType() === 'gap-detail' && getGapDetailData(); as data) {
98464
- <symphiq-gap-detail-modal-content
98465
- [gap]="data.gap"
98466
- [viewMode]="data.viewMode"
98467
- [allGoals]="allGoals()"
98468
- [allWeaknesses]="funnelWeaknesses()"
98469
- [currentModalState]="getCurrentModalState()"
98470
- />
98471
- }
98472
- @if (modalType() === 'opportunity-detail' && getOpportunityDetailData(); as data) {
98473
- <symphiq-opportunity-detail-modal-content
98474
- [opportunity]="data.opportunity"
98475
- [viewMode]="data.viewMode"
98476
- [allStrengths]="funnelStrengths()"
98477
- [currentModalState]="getCurrentModalState()"
98478
- />
98479
- }
98480
- </symphiq-profile-analysis-modal>
98481
-
98482
- <!-- Funnel Analysis Modal -->
98483
- <symphiq-funnel-analysis-modal
98484
- #funnelModalComponent
98485
- />
98486
-
98487
- <!-- Mark as Reviewed Sticky Footer -->
98488
- <symphiq-mark-as-reviewed-footer
98489
- [viewMode]="viewMode()"
98490
- [reviewStatus]="profileAnalysis()?.reviewStatus"
98491
- [selfContentStatus]="profileAnalysis()?.selfContentStatus"
98492
- [isMarkingAsReviewed]="isMarkingAsReviewed()"
98493
- (markAsReviewedClick)="handleMarkAsReviewedClick()"
98494
- />
98495
-
98496
- <!-- Tooltip Container -->
98497
- <symphiq-tooltip-container />
98498
- </div>
98499
- </div>
98500
- `
98501
- }]
98502
- }], null, { funnelModalComponent: [{
98503
- type: ViewChild,
98504
- args: ['funnelModalComponent']
98505
- }], 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: [{
98506
99345
  type: HostListener,
98507
99346
  args: ['window:scroll', ['$event']]
98508
99347
  }] }); })();
98509
- (() => { (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 }); })();
98510
99349
 
98511
99350
  const _forTrack0$4 = ($index, $item) => $item.id;
98512
99351
  function ShopProfileCategoryListComponent_For_2_Template(rf, ctx) { if (rf & 1) {
@@ -103674,5 +104513,5 @@ var pieChart_component = /*#__PURE__*/Object.freeze({
103674
104513
  * Generated bundle index. Do not edit.
103675
104514
  */
103676
104515
 
103677
- 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, 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 };
103678
104517
  //# sourceMappingURL=symphiq-components.mjs.map