@eric-emg/symphiq-components 1.2.175 → 1.2.176

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.
@@ -55824,6 +55824,29 @@ function calculateMetricPacing(metric) {
55824
55824
  projectedValue
55825
55825
  };
55826
55826
  }
55827
+ function extractMetricPacing(pacingResponse, metricEnum) {
55828
+ if (!pacingResponse)
55829
+ return null;
55830
+ const soFarMetric = pacingResponse.soFarMetricValues?.find(m => m.metric === metricEnum);
55831
+ const projectedMetric = pacingResponse.projectedMetricValues?.find(m => m.metric === metricEnum);
55832
+ const lastYearMetrics = pacingResponse.lastYearMetricValuesMonthly?.filter(m => m.metric === metricEnum) || [];
55833
+ if (!soFarMetric && !projectedMetric)
55834
+ return null;
55835
+ const currentValue = soFarMetric?.value ? parseFloat(soFarMetric.value) : 0;
55836
+ const projectedValue = projectedMetric?.value ? parseFloat(projectedMetric.value) : 0;
55837
+ const priorYtdValue = lastYearMetrics.reduce((sum, m) => {
55838
+ return sum + (m.value ? parseFloat(m.value) : 0);
55839
+ }, 0);
55840
+ const pacingPercentage = priorYtdValue > 0 ? ((currentValue - priorYtdValue) / priorYtdValue) * 100 : 0;
55841
+ return {
55842
+ metric: metricEnum,
55843
+ currentValue,
55844
+ priorYtdValue,
55845
+ projectedValue,
55846
+ pacingPercentage,
55847
+ ytdVariancePercent: pacingPercentage
55848
+ };
55849
+ }
55827
55850
 
55828
55851
  class PacingStatusBadgeComponent {
55829
55852
  constructor() {
@@ -56070,21 +56093,21 @@ class FunnelMetricsVisualizationComponent {
56070
56093
  constructor() {
56071
56094
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
56072
56095
  this.calculations = input([], ...(ngDevMode ? [{ debugName: "calculations" }] : []));
56073
- this.pacingMetrics = input([], ...(ngDevMode ? [{ debugName: "pacingMetrics" }] : []));
56096
+ this.pacingMetrics = input(undefined, ...(ngDevMode ? [{ debugName: "pacingMetrics" }] : []));
56074
56097
  this.currentYear = computed(() => new Date().getFullYear(), ...(ngDevMode ? [{ debugName: "currentYear" }] : []));
56075
56098
  this.priorYear = computed(() => new Date().getFullYear() - 1, ...(ngDevMode ? [{ debugName: "priorYear" }] : []));
56076
56099
  this.funnelStages = computed(() => {
56077
56100
  const calcs = this.calculations();
56078
- const pacing = this.pacingMetrics();
56101
+ const pacingResponse = this.pacingMetrics();
56079
56102
  const grouped = new Map();
56080
56103
  const stageMetrics = calcs.filter(c => c.isFunnelStage);
56081
56104
  const relatedMetrics = calcs.filter(c => !c.isFunnelStage);
56082
56105
  stageMetrics.forEach(stageMetric => {
56083
56106
  const related = relatedMetrics.filter(rm => rm.funnelMetric === stageMetric.metric);
56084
- const stagePacingMetric = pacing.find(p => p.metric === stageMetric.metric);
56107
+ const stagePacingMetric = extractMetricPacing(pacingResponse, stageMetric.metric);
56085
56108
  const stagePacingInfo = stagePacingMetric ? calculateMetricPacing(stagePacingMetric) : null;
56086
56109
  const relatedWithPacing = related.map(relMetric => {
56087
- const relPacingMetric = pacing.find(p => p.metric === relMetric.metric);
56110
+ const relPacingMetric = extractMetricPacing(pacingResponse, relMetric.metric);
56088
56111
  const relPacingInfo = relPacingMetric ? calculateMetricPacing(relPacingMetric) : null;
56089
56112
  return { calc: relMetric, pacingInfo: relPacingInfo };
56090
56113
  });
@@ -57471,7 +57494,7 @@ class InitialTargetSettingComponent {
57471
57494
  this.yoyUiData = input(undefined, ...(ngDevMode ? [{ debugName: "yoyUiData" }] : []));
57472
57495
  this.trendUiData = input(undefined, ...(ngDevMode ? [{ debugName: "trendUiData" }] : []));
57473
57496
  this.shopId = input(undefined, ...(ngDevMode ? [{ debugName: "shopId" }] : []));
57474
- this.pacingMetrics = input([], ...(ngDevMode ? [{ debugName: "pacingMetrics" }] : []));
57497
+ this.pacingMetrics = input(undefined, ...(ngDevMode ? [{ debugName: "pacingMetrics" }] : []));
57475
57498
  this.dataResults = input([], ...(ngDevMode ? [{ debugName: "dataResults" }] : []));
57476
57499
  this.targetsCreated = output();
57477
57500
  this.inputMode = signal('absolute', ...(ngDevMode ? [{ debugName: "inputMode" }] : []));
@@ -57482,8 +57505,11 @@ class InitialTargetSettingComponent {
57482
57505
  return sumMetricFromUiData(this.yoyUiData(), MetricEnum.PURCHASE_REVENUE);
57483
57506
  }, ...(ngDevMode ? [{ debugName: "priorYearRevenue" }] : []));
57484
57507
  this.currentPaceProjection = computed(() => {
57485
- const revenuePacing = this.pacingMetrics().find(m => m.metric === MetricEnum.PURCHASE_REVENUE);
57486
- return revenuePacing?.projectedValue || 0;
57508
+ const pacingData = this.pacingMetrics();
57509
+ if (!pacingData || !pacingData.projectedMetricValues)
57510
+ return 0;
57511
+ const revenueMetric = pacingData.projectedMetricValues.find(m => m.metric === MetricEnum.PURCHASE_REVENUE);
57512
+ return revenueMetric?.value ? parseFloat(revenueMetric.value) : 0;
57487
57513
  }, ...(ngDevMode ? [{ debugName: "currentPaceProjection" }] : []));
57488
57514
  this.gapToClose = computed(() => {
57489
57515
  const target = this.calculatedRevenue();
@@ -58140,7 +58166,7 @@ function SymphiqRevenueCalculatorDashboardComponent_Conditional_25_Template(rf,
58140
58166
  const ctx_r0 = i0.ɵɵnextContext();
58141
58167
  i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("dataLoadStatus", ctx_r0.dataLoadStatus() ?? ctx_r0.ShopDataLoadStatusEnum.NOT_LOADED)("hasTargets", false);
58142
58168
  i0.ɵɵadvance(2);
58143
- i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("funnelMetrics", ctx_r0.funnelMetrics() ?? i0.ɵɵpureFunction0(11, _c0$q))("mainUiData", ctx_r0.mainUiData())("yoyUiData", ctx_r0.yoyUiData())("trendUiData", ctx_r0.trendUiData())("shopId", ctx_r0.shopId())("pacingMetrics", ctx_r0.pacingMetrics())("dataResults", ctx_r0.dataResults());
58169
+ i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("funnelMetrics", ctx_r0.funnelMetrics() ?? i0.ɵɵpureFunction0(11, _c0$q))("mainUiData", ctx_r0.mainUiData())("yoyUiData", ctx_r0.yoyUiData())("trendUiData", ctx_r0.trendUiData())("shopId", ctx_r0.shopId())("pacingMetrics", ctx_r0.pacingResponse())("dataResults", ctx_r0.dataResults());
58144
58170
  } }
58145
58171
  function SymphiqRevenueCalculatorDashboardComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
58146
58172
  i0.ɵɵelement(0, "symphiq-revenue-calculator-welcome-banner", 14);
@@ -58179,7 +58205,7 @@ class SymphiqRevenueCalculatorDashboardComponent {
58179
58205
  this.mainUiData = input(undefined, ...(ngDevMode ? [{ debugName: "mainUiData" }] : []));
58180
58206
  this.yoyUiData = input(undefined, ...(ngDevMode ? [{ debugName: "yoyUiData" }] : []));
58181
58207
  this.trendUiData = input(undefined, ...(ngDevMode ? [{ debugName: "trendUiData" }] : []));
58182
- this.pacingMetrics = input([], ...(ngDevMode ? [{ debugName: "pacingMetrics" }] : []));
58208
+ this.pacingResponse = input(undefined, ...(ngDevMode ? [{ debugName: "pacingResponse" }] : []));
58183
58209
  this.dataResults = input([], ...(ngDevMode ? [{ debugName: "dataResults" }] : []));
58184
58210
  this.shopId = input(0, ...(ngDevMode ? [{ debugName: "shopId" }] : []));
58185
58211
  this.embedded = input(false, ...(ngDevMode ? [{ debugName: "embedded" }] : []));
@@ -58297,7 +58323,7 @@ class SymphiqRevenueCalculatorDashboardComponent {
58297
58323
  static { this.ɵfac = function SymphiqRevenueCalculatorDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SymphiqRevenueCalculatorDashboardComponent)(); }; }
58298
58324
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SymphiqRevenueCalculatorDashboardComponent, selectors: [["symphiq-revenue-calculator-dashboard"]], hostBindings: function SymphiqRevenueCalculatorDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
58299
58325
  i0.ɵɵlistener("scroll", function SymphiqRevenueCalculatorDashboardComponent_scroll_HostBindingHandler($event) { return ctx.onWindowScroll($event); }, i0.ɵɵresolveWindow);
58300
- } }, inputs: { viewMode: [1, "viewMode"], isLoading: [1, "isLoading"], dataLoadStatus: [1, "dataLoadStatus"], targets: [1, "targets"], funnelMetrics: [1, "funnelMetrics"], mainUiData: [1, "mainUiData"], yoyUiData: [1, "yoyUiData"], trendUiData: [1, "trendUiData"], pacingMetrics: [1, "pacingMetrics"], dataResults: [1, "dataResults"], shopId: [1, "shopId"], embedded: [1, "embedded"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], forDemo: [1, "forDemo"], maxAccessibleStepId: [1, "maxAccessibleStepId"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick", targetsCreated: "targetsCreated" }, decls: 27, vars: 42, consts: [[3, "ngClass"], [1, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "animated-bubbles", 2, "position", "fixed", "top", "0", "left", "0", "right", "0", "bottom", "0", "width", "100vw", "height", "100vh", "z-index", "1", "pointer-events", "none"], [1, "relative", "z-[51]"], [1, "sticky", "top-0", "z-50", 3, "ngClass"], [1, "transition-all", "duration-300", "ease-in-out", "overflow-hidden"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-8"], [1, "flex", "items-center", "justify-between"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-3"], [1, "flex-1", "min-w-0", "mr-4"], [3, "stepClick", "nextStepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "relative"], [1, "flex", "items-center", "justify-center", "min-h-[400px]"], ["size", "large", 3, "viewMode"], [3, "viewMode", "dataLoadStatus", "hasTargets"], [1, "mt-8", "rounded-2xl", "border", "shadow-lg", "overflow-hidden", 3, "ngClass"], [1, "px-8", "py-12", 3, "ngClass"], [1, "flex", "flex-col", "items-center", "text-center", "space-y-6"], [1, "space-y-2"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "text-sm", "max-w-md", 3, "ngClass"], [1, "mt-8"], [3, "targetsCreated", "viewMode", "funnelMetrics", "mainUiData", "yoyUiData", "trendUiData", "shopId", "pacingMetrics", "dataResults"], [1, "mt-8", "rounded-2xl", "border-2", "border-dashed", "p-12", 3, "ngClass"], [1, "text-center", "space-y-4"], [1, "flex", "justify-center"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-16", "h-16", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z"], [1, "text-2xl", "font-bold", 3, "ngClass"], [1, "text-base", "max-w-2xl", "mx-auto", 3, "ngClass"]], template: function SymphiqRevenueCalculatorDashboardComponent_Template(rf, ctx) { if (rf & 1) {
58326
+ } }, inputs: { viewMode: [1, "viewMode"], isLoading: [1, "isLoading"], dataLoadStatus: [1, "dataLoadStatus"], targets: [1, "targets"], funnelMetrics: [1, "funnelMetrics"], mainUiData: [1, "mainUiData"], yoyUiData: [1, "yoyUiData"], trendUiData: [1, "trendUiData"], pacingResponse: [1, "pacingResponse"], dataResults: [1, "dataResults"], shopId: [1, "shopId"], embedded: [1, "embedded"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], forDemo: [1, "forDemo"], maxAccessibleStepId: [1, "maxAccessibleStepId"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick", targetsCreated: "targetsCreated" }, decls: 27, vars: 42, consts: [[3, "ngClass"], [1, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "animated-bubbles", 2, "position", "fixed", "top", "0", "left", "0", "right", "0", "bottom", "0", "width", "100vw", "height", "100vh", "z-index", "1", "pointer-events", "none"], [1, "relative", "z-[51]"], [1, "sticky", "top-0", "z-50", 3, "ngClass"], [1, "transition-all", "duration-300", "ease-in-out", "overflow-hidden"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-8"], [1, "flex", "items-center", "justify-between"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-3"], [1, "flex-1", "min-w-0", "mr-4"], [3, "stepClick", "nextStepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "relative"], [1, "flex", "items-center", "justify-center", "min-h-[400px]"], ["size", "large", 3, "viewMode"], [3, "viewMode", "dataLoadStatus", "hasTargets"], [1, "mt-8", "rounded-2xl", "border", "shadow-lg", "overflow-hidden", 3, "ngClass"], [1, "px-8", "py-12", 3, "ngClass"], [1, "flex", "flex-col", "items-center", "text-center", "space-y-6"], [1, "space-y-2"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "text-sm", "max-w-md", 3, "ngClass"], [1, "mt-8"], [3, "targetsCreated", "viewMode", "funnelMetrics", "mainUiData", "yoyUiData", "trendUiData", "shopId", "pacingMetrics", "dataResults"], [1, "mt-8", "rounded-2xl", "border-2", "border-dashed", "p-12", 3, "ngClass"], [1, "text-center", "space-y-4"], [1, "flex", "justify-center"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-16", "h-16", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z"], [1, "text-2xl", "font-bold", 3, "ngClass"], [1, "text-base", "max-w-2xl", "mx-auto", 3, "ngClass"]], template: function SymphiqRevenueCalculatorDashboardComponent_Template(rf, ctx) { if (rf & 1) {
58301
58327
  i0.ɵɵelementStart(0, "div", 0)(1, "div");
58302
58328
  i0.ɵɵelement(2, "div", 1);
58303
58329
  i0.ɵɵelementEnd();
@@ -58367,30 +58393,32 @@ class SymphiqRevenueCalculatorDashboardComponent {
58367
58393
  template: `
58368
58394
  <div [ngClass]="getContainerClasses()">
58369
58395
  <!-- Scroll Progress Bar -->
58370
- <div [class]="embedded() ? 'sticky top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30' : 'fixed top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30'">
58396
+ <div
58397
+ [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'">
58371
58398
  <div
58372
- [style.width.%]="scrollProgress()"
58373
- [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
58374
- class="h-full transition-all duration-200 ease-out">
58399
+ [style.width.%]="scrollProgress()"
58400
+ [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
58401
+ class="h-full transition-all duration-200 ease-out">
58375
58402
  </div>
58376
58403
  </div>
58377
58404
 
58378
58405
  <!-- Animated Background Bubbles -->
58379
- <div class="animated-bubbles" [class.light-mode]="isLightMode()" style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
58406
+ <div class="animated-bubbles" [class.light-mode]="isLightMode()"
58407
+ style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
58380
58408
 
58381
58409
  <div class="relative z-[51]">
58382
58410
  <header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50">
58383
58411
  <!-- Expanded Header -->
58384
58412
  <div
58385
- class="transition-all duration-300 ease-in-out overflow-hidden"
58386
- [class.max-h-0]="headerScrollService.isScrolled()"
58387
- [class.opacity-0]="headerScrollService.isScrolled()"
58388
- [class.max-h-96]="!headerScrollService.isScrolled()"
58389
- [class.opacity-100]="!headerScrollService.isScrolled()">
58413
+ class="transition-all duration-300 ease-in-out overflow-hidden"
58414
+ [class.max-h-0]="headerScrollService.isScrolled()"
58415
+ [class.opacity-0]="headerScrollService.isScrolled()"
58416
+ [class.max-h-96]="!headerScrollService.isScrolled()"
58417
+ [class.opacity-100]="!headerScrollService.isScrolled()">
58390
58418
  <div
58391
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"
58392
- [class.pointer-events-none]="headerScrollService.isScrolled()"
58393
- [class.pointer-events-auto]="!headerScrollService.isScrolled()">
58419
+ class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"
58420
+ [class.pointer-events-none]="headerScrollService.isScrolled()"
58421
+ [class.pointer-events-auto]="!headerScrollService.isScrolled()">
58394
58422
  <div class="flex items-center justify-between">
58395
58423
  <div>
58396
58424
  <h1 [ngClass]="getMainTitleClasses()">
@@ -58406,15 +58434,15 @@ class SymphiqRevenueCalculatorDashboardComponent {
58406
58434
 
58407
58435
  <!-- Condensed Header -->
58408
58436
  <div
58409
- class="transition-all duration-300 ease-in-out overflow-hidden"
58410
- [class.max-h-0]="!headerScrollService.isScrolled()"
58411
- [class.opacity-0]="!headerScrollService.isScrolled()"
58412
- [class.max-h-20]="headerScrollService.isScrolled()"
58413
- [class.opacity-100]="headerScrollService.isScrolled()">
58437
+ class="transition-all duration-300 ease-in-out overflow-hidden"
58438
+ [class.max-h-0]="!headerScrollService.isScrolled()"
58439
+ [class.opacity-0]="!headerScrollService.isScrolled()"
58440
+ [class.max-h-20]="headerScrollService.isScrolled()"
58441
+ [class.opacity-100]="headerScrollService.isScrolled()">
58414
58442
  <div
58415
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"
58416
- [class.pointer-events-none]="!headerScrollService.isScrolled()"
58417
- [class.pointer-events-auto]="headerScrollService.isScrolled()">
58443
+ class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"
58444
+ [class.pointer-events-none]="!headerScrollService.isScrolled()"
58445
+ [class.pointer-events-auto]="headerScrollService.isScrolled()">
58418
58446
  <div class="flex items-center justify-between">
58419
58447
  <div class="flex-1 min-w-0 mr-4">
58420
58448
  <h1 [ngClass]="isLightMode() ? 'text-xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent truncate' : 'text-xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent truncate'">
@@ -58428,13 +58456,13 @@ class SymphiqRevenueCalculatorDashboardComponent {
58428
58456
 
58429
58457
  <!-- Journey Progress Indicator -->
58430
58458
  <symphiq-journey-progress-indicator
58431
- [viewMode]="viewMode()"
58432
- [currentStepId]="JourneyStepIdEnum.REVENUE_CALCULATOR"
58433
- [showNextStepAction]="hasCurrentYearTargets()"
58434
- [forDemo]="forDemo()"
58435
- [maxAccessibleStepId]="maxAccessibleStepId()"
58436
- (stepClick)="stepClick.emit($event)"
58437
- (nextStepClick)="nextStepClick.emit()"
58459
+ [viewMode]="viewMode()"
58460
+ [currentStepId]="JourneyStepIdEnum.REVENUE_CALCULATOR"
58461
+ [showNextStepAction]="hasCurrentYearTargets()"
58462
+ [forDemo]="forDemo()"
58463
+ [maxAccessibleStepId]="maxAccessibleStepId()"
58464
+ (stepClick)="stepClick.emit($event)"
58465
+ (nextStepClick)="nextStepClick.emit()"
58438
58466
  />
58439
58467
 
58440
58468
  <main class="relative">
@@ -58444,8 +58472,8 @@ class SymphiqRevenueCalculatorDashboardComponent {
58444
58472
  @if (isLoading()) {
58445
58473
  <div class="flex items-center justify-center min-h-[400px]">
58446
58474
  <symphiq-indeterminate-spinner
58447
- [viewMode]="viewMode()"
58448
- size="large"
58475
+ [viewMode]="viewMode()"
58476
+ size="large"
58449
58477
  />
58450
58478
  </div>
58451
58479
  }
@@ -58453,25 +58481,27 @@ class SymphiqRevenueCalculatorDashboardComponent {
58453
58481
  <!-- State 2: Data Loading Message (isLoading = false && dataLoadStatus !== FULLY_LOADED) -->
58454
58482
  @else if (dataLoadStatus() !== ShopDataLoadStatusEnum.FULLY_LOADED) {
58455
58483
  <symphiq-revenue-calculator-welcome-banner
58456
- [viewMode]="viewMode()"
58457
- [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58458
- [hasTargets]="false"
58484
+ [viewMode]="viewMode()"
58485
+ [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58486
+ [hasTargets]="false"
58459
58487
  />
58460
58488
 
58461
58489
  <!-- Loading Message Card -->
58462
- <div [ngClass]="loadingMessageContainerClasses()" class="mt-8 rounded-2xl border shadow-lg overflow-hidden">
58490
+ <div [ngClass]="loadingMessageContainerClasses()"
58491
+ class="mt-8 rounded-2xl border shadow-lg overflow-hidden">
58463
58492
  <div [ngClass]="loadingMessageContentClasses()" class="px-8 py-12">
58464
58493
  <div class="flex flex-col items-center text-center space-y-6">
58465
58494
  <symphiq-indeterminate-spinner
58466
- [viewMode]="viewMode()"
58467
- size="large"
58495
+ [viewMode]="viewMode()"
58496
+ size="large"
58468
58497
  />
58469
58498
  <div class="space-y-2">
58470
58499
  <h3 [ngClass]="loadingTitleClasses()" class="text-xl font-bold">
58471
58500
  Downloading Your Google Analytics 4 Data
58472
58501
  </h3>
58473
58502
  <p [ngClass]="loadingTextClasses()" class="text-sm max-w-md">
58474
- Symphiq is fetching your historical metrics to establish baseline performance. This may take a moment as we gather your funnel data.
58503
+ Symphiq is fetching your historical metrics to establish baseline performance. This may take a
58504
+ moment as we gather your funnel data.
58475
58505
  </p>
58476
58506
  </div>
58477
58507
  </div>
@@ -58482,22 +58512,22 @@ class SymphiqRevenueCalculatorDashboardComponent {
58482
58512
  <!-- State 3a: Initial Target Setting (isLoading = false && dataLoadStatus === FULLY_LOADED && !hasCurrentYearTargets) -->
58483
58513
  @else if (!hasCurrentYearTargets()) {
58484
58514
  <symphiq-revenue-calculator-welcome-banner
58485
- [viewMode]="viewMode()"
58486
- [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58487
- [hasTargets]="false"
58515
+ [viewMode]="viewMode()"
58516
+ [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58517
+ [hasTargets]="false"
58488
58518
  />
58489
58519
 
58490
58520
  <div class="mt-8">
58491
58521
  <symphiq-initial-target-setting
58492
- [viewMode]="viewMode()"
58493
- [funnelMetrics]="funnelMetrics() ?? []"
58494
- [mainUiData]="mainUiData()"
58495
- [yoyUiData]="yoyUiData()"
58496
- [trendUiData]="trendUiData()"
58497
- [shopId]="shopId()"
58498
- [pacingMetrics]="pacingMetrics()"
58499
- [dataResults]="dataResults()"
58500
- (targetsCreated)="targetsCreated.emit($event)"
58522
+ [viewMode]="viewMode()"
58523
+ [funnelMetrics]="funnelMetrics() ?? []"
58524
+ [mainUiData]="mainUiData()"
58525
+ [yoyUiData]="yoyUiData()"
58526
+ [trendUiData]="trendUiData()"
58527
+ [shopId]="shopId()"
58528
+ [pacingMetrics]="pacingResponse()"
58529
+ [dataResults]="dataResults()"
58530
+ (targetsCreated)="targetsCreated.emit($event)"
58501
58531
  />
58502
58532
  </div>
58503
58533
  }
@@ -58505,24 +58535,27 @@ class SymphiqRevenueCalculatorDashboardComponent {
58505
58535
  <!-- State 3b: Final Dashboard (isLoading = false && dataLoadStatus === FULLY_LOADED && hasCurrentYearTargets) -->
58506
58536
  @else {
58507
58537
  <symphiq-revenue-calculator-welcome-banner
58508
- [viewMode]="viewMode()"
58509
- [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58510
- [hasTargets]="true"
58538
+ [viewMode]="viewMode()"
58539
+ [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58540
+ [hasTargets]="true"
58511
58541
  />
58512
58542
 
58513
58543
  <!-- Placeholder for Revenue Calculator Content -->
58514
58544
  <div [ngClass]="placeholderContainerClasses()" class="mt-8 rounded-2xl border-2 border-dashed p-12">
58515
58545
  <div class="text-center space-y-4">
58516
58546
  <div class="flex justify-center">
58517
- <svg [ngClass]="placeholderIconClasses()" class="w-16 h-16" fill="none" stroke="currentColor" viewBox="0 0 24 24">
58518
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z"></path>
58547
+ <svg [ngClass]="placeholderIconClasses()" class="w-16 h-16" fill="none" stroke="currentColor"
58548
+ viewBox="0 0 24 24">
58549
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
58550
+ d="M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z"></path>
58519
58551
  </svg>
58520
58552
  </div>
58521
58553
  <h3 [ngClass]="placeholderTitleClasses()" class="text-2xl font-bold">
58522
58554
  Revenue Calculator Dashboard
58523
58555
  </h3>
58524
58556
  <p [ngClass]="placeholderTextClasses()" class="text-base max-w-2xl mx-auto">
58525
- Your targets are set! The full revenue calculator dashboard with pacing and insights will be displayed here.
58557
+ Your targets are set! The full revenue calculator dashboard with pacing and insights will be
58558
+ displayed here.
58526
58559
  </p>
58527
58560
  </div>
58528
58561
  </div>
@@ -58534,11 +58567,11 @@ class SymphiqRevenueCalculatorDashboardComponent {
58534
58567
  </div>
58535
58568
  `
58536
58569
  }]
58537
- }], () => [], { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], dataLoadStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataLoadStatus", required: false }] }], targets: [{ type: i0.Input, args: [{ isSignal: true, alias: "targets", required: false }] }], funnelMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelMetrics", required: false }] }], mainUiData: [{ type: i0.Input, args: [{ isSignal: true, alias: "mainUiData", required: false }] }], yoyUiData: [{ type: i0.Input, args: [{ isSignal: true, alias: "yoyUiData", required: false }] }], trendUiData: [{ type: i0.Input, args: [{ isSignal: true, alias: "trendUiData", required: false }] }], pacingMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingMetrics", required: false }] }], dataResults: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataResults", required: false }] }], shopId: [{ type: i0.Input, args: [{ isSignal: true, alias: "shopId", 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 }] }], forDemo: [{ type: i0.Input, args: [{ isSignal: true, alias: "forDemo", required: false }] }], maxAccessibleStepId: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxAccessibleStepId", required: false }] }], stepClick: [{ type: i0.Output, args: ["stepClick"] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], targetsCreated: [{ type: i0.Output, args: ["targetsCreated"] }], onWindowScroll: [{
58570
+ }], () => [], { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], dataLoadStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataLoadStatus", required: false }] }], targets: [{ type: i0.Input, args: [{ isSignal: true, alias: "targets", required: false }] }], funnelMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelMetrics", required: false }] }], mainUiData: [{ type: i0.Input, args: [{ isSignal: true, alias: "mainUiData", required: false }] }], yoyUiData: [{ type: i0.Input, args: [{ isSignal: true, alias: "yoyUiData", required: false }] }], trendUiData: [{ type: i0.Input, args: [{ isSignal: true, alias: "trendUiData", required: false }] }], pacingResponse: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingResponse", required: false }] }], dataResults: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataResults", required: false }] }], shopId: [{ type: i0.Input, args: [{ isSignal: true, alias: "shopId", 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 }] }], forDemo: [{ type: i0.Input, args: [{ isSignal: true, alias: "forDemo", required: false }] }], maxAccessibleStepId: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxAccessibleStepId", required: false }] }], stepClick: [{ type: i0.Output, args: ["stepClick"] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], targetsCreated: [{ type: i0.Output, args: ["targetsCreated"] }], onWindowScroll: [{
58538
58571
  type: HostListener,
58539
58572
  args: ['window:scroll', ['$event']]
58540
58573
  }] }); })();
58541
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqRevenueCalculatorDashboardComponent, { className: "SymphiqRevenueCalculatorDashboardComponent", filePath: "lib/components/revenue-calculator-dashboard/symphiq-revenue-calculator-dashboard.component.ts", lineNumber: 213 }); })();
58574
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqRevenueCalculatorDashboardComponent, { className: "SymphiqRevenueCalculatorDashboardComponent", filePath: "lib/components/revenue-calculator-dashboard/symphiq-revenue-calculator-dashboard.component.ts", lineNumber: 220 }); })();
58542
58575
 
58543
58576
  function HierarchyDisplayComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
58544
58577
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 1);