@eric-emg/symphiq-components 1.2.176 → 1.2.177

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.
@@ -55402,7 +55402,7 @@ class RevenueCalculatorWelcomeBannerComponent {
55402
55402
  const isLoaded = this.isDataFullyLoaded();
55403
55403
  const hasTargets = this.hasTargets();
55404
55404
  if (!isLoaded) {
55405
- return "We're currently downloading your Google Analytics 4 data to establish your baseline metrics. Once your data is loaded, you'll be able to set targets for each metric and see how those improvements translate to revenue growth. This bottom-up approach ensures your revenue targets are grounded in achievable metric improvements.";
55405
+ return "We're currently downloading your Google Analytics 4 data to establish your baseline metrics. Once your data is loaded, you'll set your target revenue for the year, and Symphiq will calculate the specific metric improvements needed to reach it. You can then adjust individual metrics to align with your team's capacity and strategic priorities.";
55406
55406
  }
55407
55407
  if (isLoaded && !hasTargets) {
55408
55408
  return "Now that we have your data, it's time to set your revenue target for this year. Enter your desired revenue goal below, and we'll automatically calculate the required improvements for each funnel metric. This ensures your revenue targets are grounded in achievable, metric-level improvements.";
@@ -55486,12 +55486,12 @@ class RevenueCalculatorWelcomeBannerComponent {
55486
55486
  i0.ɵɵtext(8, " Welcome to Your Revenue Calculator ");
55487
55487
  i0.ɵɵelementEnd();
55488
55488
  i0.ɵɵelementStart(9, "div", 8)(10, "p", 9);
55489
- i0.ɵɵtext(11, " The Revenue Calculator empowers you to set metric-level targets using a bottom-up approach. Instead of working backwards from a revenue goal, you'll set realistic targets for each funnel metric, allowing Symphiq to calculate your projected revenue based on achievable improvements at every conversion stage. ");
55489
+ i0.ɵɵtext(11, " The Revenue Calculator empowers you to achieve your revenue goals with precision. Start by setting your target revenue for the year, and Symphiq will automatically calculate the specific metric improvements needed across your funnel. You can then refine individual metric targets to match your team's capabilities and strategic focus. ");
55490
55490
  i0.ɵɵelementEnd();
55491
55491
  i0.ɵɵelementStart(12, "p", 9)(13, "strong", 10);
55492
55492
  i0.ɵɵtext(14, "Why this matters:");
55493
55493
  i0.ɵɵelementEnd();
55494
- i0.ɵɵtext(15, " Bottom-up revenue targeting provides clarity and accountability. By setting specific goals for metrics like add-to-cart rate or checkout conversion, your team knows exactly what needs to improve. This precision enables you to simulate different growth scenarios and understand which metric improvements will have the greatest impact on your revenue. ");
55494
+ i0.ɵɵtext(15, " This approach bridges strategy and execution. By starting with your revenue ambition and translating it into specific, measurable metric targets, your team gains clarity on exactly what needs to improve. You maintain full control to adjust targets based on your resources, historical performance, and growth opportunities at each funnel stage. ");
55495
55495
  i0.ɵɵelementEnd()();
55496
55496
  i0.ɵɵelementStart(16, "div", 11);
55497
55497
  i0.ɵɵnamespaceSVG();
@@ -55509,9 +55509,9 @@ class RevenueCalculatorWelcomeBannerComponent {
55509
55509
  i0.ɵɵelementEnd();
55510
55510
  i0.ɵɵnamespaceHTML();
55511
55511
  i0.ɵɵelementStart(26, "span")(27, "strong", 10);
55512
- i0.ɵɵtext(28, "Metric-Level Target Setting");
55512
+ i0.ɵɵtext(28, "Revenue Target Input");
55513
55513
  i0.ɵɵelementEnd();
55514
- i0.ɵɵtext(29, " \u2014 Set specific percentage improvements for each funnel metric based on your baseline performance");
55514
+ i0.ɵɵtext(29, " \u2014 Set your desired revenue goal for the year, either as an absolute amount or percentage increase");
55515
55515
  i0.ɵɵelementEnd()();
55516
55516
  i0.ɵɵelementStart(30, "li", 16);
55517
55517
  i0.ɵɵnamespaceSVG();
@@ -55520,9 +55520,9 @@ class RevenueCalculatorWelcomeBannerComponent {
55520
55520
  i0.ɵɵelementEnd();
55521
55521
  i0.ɵɵnamespaceHTML();
55522
55522
  i0.ɵɵelementStart(33, "span")(34, "strong", 10);
55523
- i0.ɵɵtext(35, "Revenue Simulation Tools");
55523
+ i0.ɵɵtext(35, "Automatic Metric Distribution");
55524
55524
  i0.ɵɵelementEnd();
55525
- i0.ɵɵtext(36, " \u2014 See real-time revenue projections as you adjust metric targets to understand growth scenarios");
55525
+ i0.ɵɵtext(36, " \u2014 See calculated metric improvements needed across your funnel to achieve your revenue target");
55526
55526
  i0.ɵɵelementEnd()();
55527
55527
  i0.ɵɵelementStart(37, "li", 16);
55528
55528
  i0.ɵɵnamespaceSVG();
@@ -55531,9 +55531,9 @@ class RevenueCalculatorWelcomeBannerComponent {
55531
55531
  i0.ɵɵelementEnd();
55532
55532
  i0.ɵɵnamespaceHTML();
55533
55533
  i0.ɵɵelementStart(40, "span")(41, "strong", 10);
55534
- i0.ɵɵtext(42, "Funnel Stage Impact Visualization");
55534
+ i0.ɵɵtext(42, "Target Refinement Controls");
55535
55535
  i0.ɵɵelementEnd();
55536
- i0.ɵɵtext(43, " \u2014 Visualize how metric improvements cascade through your funnel to drive revenue growth");
55536
+ i0.ɵɵtext(43, " \u2014 Adjust individual metric targets to align with your team's capacity and strategic priorities");
55537
55537
  i0.ɵɵelementEnd()()()()();
55538
55538
  i0.ɵɵelementStart(44, "div", 19);
55539
55539
  i0.ɵɵnamespaceSVG();
@@ -55604,10 +55604,10 @@ class RevenueCalculatorWelcomeBannerComponent {
55604
55604
  <!-- Description (full width, no confidence card) -->
55605
55605
  <div class="space-y-3 mb-6">
55606
55606
  <p [ngClass]="textClasses()" class="text-base leading-relaxed">
55607
- The Revenue Calculator empowers you to set metric-level targets using a bottom-up approach. Instead of working backwards from a revenue goal, you'll set realistic targets for each funnel metric, allowing Symphiq to calculate your projected revenue based on achievable improvements at every conversion stage.
55607
+ The Revenue Calculator empowers you to achieve your revenue goals with precision. Start by setting your target revenue for the year, and Symphiq will automatically calculate the specific metric improvements needed across your funnel. You can then refine individual metric targets to match your team's capabilities and strategic focus.
55608
55608
  </p>
55609
55609
  <p [ngClass]="textClasses()" class="text-base leading-relaxed">
55610
- <strong class="font-semibold">Why this matters:</strong> Bottom-up revenue targeting provides clarity and accountability. By setting specific goals for metrics like add-to-cart rate or checkout conversion, your team knows exactly what needs to improve. This precision enables you to simulate different growth scenarios and understand which metric improvements will have the greatest impact on your revenue.
55610
+ <strong class="font-semibold">Why this matters:</strong> This approach bridges strategy and execution. By starting with your revenue ambition and translating it into specific, measurable metric targets, your team gains clarity on exactly what needs to improve. You maintain full control to adjust targets based on your resources, historical performance, and growth opportunities at each funnel stage.
55611
55611
  </p>
55612
55612
  </div>
55613
55613
 
@@ -55624,19 +55624,19 @@ class RevenueCalculatorWelcomeBannerComponent {
55624
55624
  <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
55625
55625
  <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>
55626
55626
  </svg>
55627
- <span><strong class="font-semibold">Metric-Level Target Setting</strong> — Set specific percentage improvements for each funnel metric based on your baseline performance</span>
55627
+ <span><strong class="font-semibold">Revenue Target Input</strong> — Set your desired revenue goal for the year, either as an absolute amount or percentage increase</span>
55628
55628
  </li>
55629
55629
  <li class="flex items-start gap-2">
55630
55630
  <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
55631
55631
  <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>
55632
55632
  </svg>
55633
- <span><strong class="font-semibold">Revenue Simulation Tools</strong> — See real-time revenue projections as you adjust metric targets to understand growth scenarios</span>
55633
+ <span><strong class="font-semibold">Automatic Metric Distribution</strong> — See calculated metric improvements needed across your funnel to achieve your revenue target</span>
55634
55634
  </li>
55635
55635
  <li class="flex items-start gap-2">
55636
55636
  <svg class="w-5 h-5 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
55637
55637
  <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>
55638
55638
  </svg>
55639
- <span><strong class="font-semibold">Funnel Stage Impact Visualization</strong> — Visualize how metric improvements cascade through your funnel to drive revenue growth</span>
55639
+ <span><strong class="font-semibold">Target Refinement Controls</strong> — Adjust individual metric targets to align with your team's capacity and strategic priorities</span>
55640
55640
  </li>
55641
55641
  </ul>
55642
55642
  </div>
@@ -58196,7 +58196,6 @@ function SymphiqRevenueCalculatorDashboardComponent_Conditional_26_Template(rf,
58196
58196
  } }
58197
58197
  class SymphiqRevenueCalculatorDashboardComponent {
58198
58198
  constructor() {
58199
- this.headerScrollService = inject(HeaderScrollService);
58200
58199
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
58201
58200
  this.isLoading = input(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
58202
58201
  this.dataLoadStatus = input(ShopDataLoadStatusEnum.NOT_LOADED, ...(ngDevMode ? [{ debugName: "dataLoadStatus" }] : []));
@@ -58219,6 +58218,8 @@ class SymphiqRevenueCalculatorDashboardComponent {
58219
58218
  this.JourneyStepIdEnum = JourneyStepIdEnum;
58220
58219
  this.ShopDataLoadStatusEnum = ShopDataLoadStatusEnum;
58221
58220
  this.scrollProgress = signal(0, ...(ngDevMode ? [{ debugName: "scrollProgress" }] : []));
58221
+ this.isScrolled = signal(false, ...(ngDevMode ? [{ debugName: "isScrolled" }] : []));
58222
+ this.isProgrammaticScroll = false;
58222
58223
  this.isLightMode = computed(() => this.viewMode() === ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "isLightMode" }] : []));
58223
58224
  this.hasCurrentYearTargets = computed(() => {
58224
58225
  const targets = this.targets() ?? [];
@@ -58236,15 +58237,29 @@ class SymphiqRevenueCalculatorDashboardComponent {
58236
58237
  effect(() => {
58237
58238
  const event = this.scrollEvent();
58238
58239
  if (event?.detail) {
58239
- this.updateScrollProgress(event.detail.scrollTop);
58240
+ const scrollTop = event.detail.scrollTop;
58241
+ this.updateScrollProgress(scrollTop);
58242
+ if (!this.isProgrammaticScroll) {
58243
+ const COLLAPSE_THRESHOLD = 20;
58244
+ const EXPAND_THRESHOLD = 10;
58245
+ const currentState = this.isScrolled();
58246
+ if (!currentState && scrollTop > COLLAPSE_THRESHOLD) {
58247
+ this.isScrolled.set(true);
58248
+ }
58249
+ else if (currentState && scrollTop < EXPAND_THRESHOLD) {
58250
+ this.isScrolled.set(false);
58251
+ }
58252
+ }
58240
58253
  }
58241
58254
  }, { allowSignalWrites: true });
58242
58255
  }
58243
58256
  ngAfterViewInit() {
58244
- this.headerScrollService.resetState();
58257
+ this.isScrolled.set(false);
58258
+ this.scrollProgress.set(0);
58245
58259
  }
58246
58260
  ngOnDestroy() {
58247
- this.headerScrollService.resetState();
58261
+ this.isScrolled.set(false);
58262
+ this.scrollProgress.set(0);
58248
58263
  }
58249
58264
  onWindowScroll() {
58250
58265
  if (!this.embedded()) {
@@ -58332,7 +58347,7 @@ class SymphiqRevenueCalculatorDashboardComponent {
58332
58347
  i0.ɵɵtext(11, " Revenue Calculator ");
58333
58348
  i0.ɵɵelementEnd();
58334
58349
  i0.ɵɵelementStart(12, "p", 0);
58335
- i0.ɵɵtext(13, " Set Metric-Level Targets for Bottom-Up Revenue Planning ");
58350
+ i0.ɵɵtext(13, " Set Your Revenue Target and See Required Metric Improvements ");
58336
58351
  i0.ɵɵelementEnd()()()()();
58337
58352
  i0.ɵɵelementStart(14, "div", 5)(15, "div", 8)(16, "div", 7)(17, "div", 9)(18, "h1", 0);
58338
58353
  i0.ɵɵtext(19, " Revenue Calculator ");
@@ -58355,17 +58370,17 @@ class SymphiqRevenueCalculatorDashboardComponent {
58355
58370
  i0.ɵɵadvance(2);
58356
58371
  i0.ɵɵproperty("ngClass", ctx.getHeaderClasses());
58357
58372
  i0.ɵɵadvance();
58358
- i0.ɵɵclassProp("max-h-0", ctx.headerScrollService.isScrolled())("opacity-0", ctx.headerScrollService.isScrolled())("max-h-96", !ctx.headerScrollService.isScrolled())("opacity-100", !ctx.headerScrollService.isScrolled());
58373
+ i0.ɵɵclassProp("max-h-0", ctx.isScrolled())("opacity-0", ctx.isScrolled())("max-h-96", !ctx.isScrolled())("opacity-100", !ctx.isScrolled());
58359
58374
  i0.ɵɵadvance();
58360
- i0.ɵɵclassProp("pointer-events-none", ctx.headerScrollService.isScrolled())("pointer-events-auto", !ctx.headerScrollService.isScrolled());
58375
+ i0.ɵɵclassProp("pointer-events-none", ctx.isScrolled())("pointer-events-auto", !ctx.isScrolled());
58361
58376
  i0.ɵɵadvance(3);
58362
58377
  i0.ɵɵproperty("ngClass", ctx.getMainTitleClasses());
58363
58378
  i0.ɵɵadvance(2);
58364
58379
  i0.ɵɵproperty("ngClass", ctx.getSubtitleClasses());
58365
58380
  i0.ɵɵadvance(2);
58366
- i0.ɵɵclassProp("max-h-0", !ctx.headerScrollService.isScrolled())("opacity-0", !ctx.headerScrollService.isScrolled())("max-h-20", ctx.headerScrollService.isScrolled())("opacity-100", ctx.headerScrollService.isScrolled());
58381
+ i0.ɵɵclassProp("max-h-0", !ctx.isScrolled())("opacity-0", !ctx.isScrolled())("max-h-20", ctx.isScrolled())("opacity-100", ctx.isScrolled());
58367
58382
  i0.ɵɵadvance();
58368
- i0.ɵɵclassProp("pointer-events-none", !ctx.headerScrollService.isScrolled())("pointer-events-auto", ctx.headerScrollService.isScrolled());
58383
+ i0.ɵɵclassProp("pointer-events-none", !ctx.isScrolled())("pointer-events-auto", ctx.isScrolled());
58369
58384
  i0.ɵɵadvance(3);
58370
58385
  i0.ɵɵproperty("ngClass", ctx.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");
58371
58386
  i0.ɵɵadvance(2);
@@ -58411,21 +58426,21 @@ class SymphiqRevenueCalculatorDashboardComponent {
58411
58426
  <!-- Expanded Header -->
58412
58427
  <div
58413
58428
  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()">
58429
+ [class.max-h-0]="isScrolled()"
58430
+ [class.opacity-0]="isScrolled()"
58431
+ [class.max-h-96]="!isScrolled()"
58432
+ [class.opacity-100]="!isScrolled()">
58418
58433
  <div
58419
58434
  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()">
58435
+ [class.pointer-events-none]="isScrolled()"
58436
+ [class.pointer-events-auto]="!isScrolled()">
58422
58437
  <div class="flex items-center justify-between">
58423
58438
  <div>
58424
58439
  <h1 [ngClass]="getMainTitleClasses()">
58425
58440
  Revenue Calculator
58426
58441
  </h1>
58427
58442
  <p [ngClass]="getSubtitleClasses()">
58428
- Set Metric-Level Targets for Bottom-Up Revenue Planning
58443
+ Set Your Revenue Target and See Required Metric Improvements
58429
58444
  </p>
58430
58445
  </div>
58431
58446
  </div>
@@ -58435,14 +58450,14 @@ class SymphiqRevenueCalculatorDashboardComponent {
58435
58450
  <!-- Condensed Header -->
58436
58451
  <div
58437
58452
  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()">
58453
+ [class.max-h-0]="!isScrolled()"
58454
+ [class.opacity-0]="!isScrolled()"
58455
+ [class.max-h-20]="isScrolled()"
58456
+ [class.opacity-100]="isScrolled()">
58442
58457
  <div
58443
58458
  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()">
58459
+ [class.pointer-events-none]="!isScrolled()"
58460
+ [class.pointer-events-auto]="isScrolled()">
58446
58461
  <div class="flex items-center justify-between">
58447
58462
  <div class="flex-1 min-w-0 mr-4">
58448
58463
  <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'">
@@ -58571,7 +58586,7 @@ class SymphiqRevenueCalculatorDashboardComponent {
58571
58586
  type: HostListener,
58572
58587
  args: ['window:scroll', ['$event']]
58573
58588
  }] }); })();
58574
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqRevenueCalculatorDashboardComponent, { className: "SymphiqRevenueCalculatorDashboardComponent", filePath: "lib/components/revenue-calculator-dashboard/symphiq-revenue-calculator-dashboard.component.ts", lineNumber: 220 }); })();
58589
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqRevenueCalculatorDashboardComponent, { className: "SymphiqRevenueCalculatorDashboardComponent", filePath: "lib/components/revenue-calculator-dashboard/symphiq-revenue-calculator-dashboard.component.ts", lineNumber: 219 }); })();
58575
58590
 
58576
58591
  function HierarchyDisplayComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
58577
58592
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 1);