@eric-emg/symphiq-components 1.2.172 → 1.2.174

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.
@@ -55707,58 +55707,298 @@ function formatNumber(value) {
55707
55707
  });
55708
55708
  }
55709
55709
 
55710
+ function calculatePacingStatus(currentValue, priorValue, targetValue) {
55711
+ if (targetValue !== undefined && targetValue > 0) {
55712
+ const targetGrowth = ((targetValue - priorValue) / priorValue) * 100;
55713
+ const actualGrowth = ((currentValue - priorValue) / priorValue) * 100;
55714
+ if (actualGrowth >= targetGrowth * 1.05)
55715
+ return 'ahead';
55716
+ if (actualGrowth >= targetGrowth * 0.95)
55717
+ return 'on-pace';
55718
+ return 'behind';
55719
+ }
55720
+ if (currentValue >= priorValue * 1.05)
55721
+ return 'ahead';
55722
+ if (currentValue >= priorValue * 0.95)
55723
+ return 'on-pace';
55724
+ return 'behind';
55725
+ }
55726
+ function getPacingColor(pacingPercentage) {
55727
+ if (pacingPercentage >= 5)
55728
+ return 'text-emerald-600';
55729
+ if (pacingPercentage >= -5)
55730
+ return 'text-amber-600';
55731
+ return 'text-red-600';
55732
+ }
55733
+ function getPacingColorDark(pacingPercentage) {
55734
+ if (pacingPercentage >= 5)
55735
+ return 'text-emerald-400';
55736
+ if (pacingPercentage >= -5)
55737
+ return 'text-amber-400';
55738
+ return 'text-red-400';
55739
+ }
55740
+ function getPacingBgClass(status, isDark) {
55741
+ if (status === 'ahead') {
55742
+ return isDark ? 'bg-emerald-900/30' : 'bg-emerald-50';
55743
+ }
55744
+ if (status === 'on-pace') {
55745
+ return isDark ? 'bg-amber-900/30' : 'bg-amber-50';
55746
+ }
55747
+ return isDark ? 'bg-red-900/30' : 'bg-red-50';
55748
+ }
55749
+ function getPacingTextClass(status, isDark) {
55750
+ if (status === 'ahead') {
55751
+ return isDark ? 'text-emerald-300' : 'text-emerald-700';
55752
+ }
55753
+ if (status === 'on-pace') {
55754
+ return isDark ? 'text-amber-300' : 'text-amber-700';
55755
+ }
55756
+ return isDark ? 'text-red-300' : 'text-red-700';
55757
+ }
55758
+ function getPacingBorderClass(status, isDark) {
55759
+ if (status === 'ahead') {
55760
+ return isDark ? 'border-emerald-500/30' : 'border-emerald-300';
55761
+ }
55762
+ if (status === 'on-pace') {
55763
+ return isDark ? 'border-amber-500/30' : 'border-amber-300';
55764
+ }
55765
+ return isDark ? 'border-red-500/30' : 'border-red-300';
55766
+ }
55767
+ function formatPacingDisplay(pacingPercentage) {
55768
+ const sign = pacingPercentage >= 0 ? '+' : '';
55769
+ const formatted = Math.abs(pacingPercentage).toFixed(1);
55770
+ if (pacingPercentage >= 5) {
55771
+ return `${sign}${formatted}% ahead`;
55772
+ }
55773
+ if (pacingPercentage >= -5) {
55774
+ return `${sign}${formatted}% on pace`;
55775
+ }
55776
+ return `${sign}${formatted}% behind`;
55777
+ }
55778
+ function calculateGapToTarget(projectedValue, targetValue) {
55779
+ const amount = targetValue - projectedValue;
55780
+ const percentage = projectedValue > 0 ? (amount / projectedValue) * 100 : 0;
55781
+ return { amount, percentage };
55782
+ }
55783
+ function projectFullYearValue(ytdValue, dayOfYear) {
55784
+ const daysInYear = 365;
55785
+ if (dayOfYear === 0 || dayOfYear > daysInYear)
55786
+ return ytdValue;
55787
+ return (ytdValue / dayOfYear) * daysInYear;
55788
+ }
55789
+ function getPacingDisplayInfo(pacingPercentage, status, isDark) {
55790
+ const displayText = formatPacingDisplay(pacingPercentage);
55791
+ const colorClass = getPacingTextClass(status, isDark);
55792
+ const bgClass = getPacingBgClass(status, isDark);
55793
+ const borderClass = getPacingBorderClass(status, isDark);
55794
+ let iconClass = '';
55795
+ if (status === 'ahead') {
55796
+ iconClass = 'heroicons-solid-arrow-trending-up';
55797
+ }
55798
+ else if (status === 'on-pace') {
55799
+ iconClass = 'heroicons-solid-arrow-right';
55800
+ }
55801
+ else {
55802
+ iconClass = 'heroicons-solid-arrow-trending-down';
55803
+ }
55804
+ return {
55805
+ status,
55806
+ colorClass,
55807
+ bgClass,
55808
+ borderClass,
55809
+ iconClass,
55810
+ displayText
55811
+ };
55812
+ }
55813
+ function calculateMetricPacing(metric) {
55814
+ const currentValue = metric.currentValue || 0;
55815
+ const priorYtdValue = metric.priorYtdValue || 0;
55816
+ const targetValue = metric.targetValue;
55817
+ const pacingPercentage = metric.pacingPercentage ||
55818
+ (priorYtdValue > 0 ? ((currentValue - priorYtdValue) / priorYtdValue) * 100 : 0);
55819
+ const projectedValue = metric.projectedValue || currentValue;
55820
+ const status = calculatePacingStatus(currentValue, priorYtdValue, targetValue);
55821
+ return {
55822
+ pacingPercentage,
55823
+ status,
55824
+ projectedValue
55825
+ };
55826
+ }
55827
+
55828
+ class PacingStatusBadgeComponent {
55829
+ constructor() {
55830
+ this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
55831
+ this.pacingPercentage = input(0, ...(ngDevMode ? [{ debugName: "pacingPercentage" }] : []));
55832
+ this.status = input('on-pace', ...(ngDevMode ? [{ debugName: "status" }] : []));
55833
+ this.displayInfo = computed(() => {
55834
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
55835
+ return getPacingDisplayInfo(this.pacingPercentage(), this.status(), isDark);
55836
+ }, ...(ngDevMode ? [{ debugName: "displayInfo" }] : []));
55837
+ this.badgeClasses = computed(() => {
55838
+ const info = this.displayInfo();
55839
+ return `${info.bgClass} ${info.colorClass} ${info.borderClass}`;
55840
+ }, ...(ngDevMode ? [{ debugName: "badgeClasses" }] : []));
55841
+ this.iconClasses = computed(() => {
55842
+ return this.displayInfo().colorClass;
55843
+ }, ...(ngDevMode ? [{ debugName: "iconClasses" }] : []));
55844
+ this.iconSymbol = computed(() => {
55845
+ const status = this.status();
55846
+ if (status === 'ahead')
55847
+ return '↗';
55848
+ if (status === 'behind')
55849
+ return '↘';
55850
+ return '→';
55851
+ }, ...(ngDevMode ? [{ debugName: "iconSymbol" }] : []));
55852
+ this.displayText = computed(() => {
55853
+ return this.displayInfo().displayText;
55854
+ }, ...(ngDevMode ? [{ debugName: "displayText" }] : []));
55855
+ }
55856
+ static { this.ɵfac = function PacingStatusBadgeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PacingStatusBadgeComponent)(); }; }
55857
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PacingStatusBadgeComponent, selectors: [["symphiq-pacing-status-badge"]], inputs: { viewMode: [1, "viewMode"], pacingPercentage: [1, "pacingPercentage"], status: [1, "status"] }, decls: 5, vars: 4, consts: [[1, "inline-flex", "items-center", "gap-2", "px-3", "py-1.5", "rounded-lg", "border", "font-semibold", "text-sm", "transition-all", 3, "ngClass"], [1, "text-lg", 3, "ngClass"]], template: function PacingStatusBadgeComponent_Template(rf, ctx) { if (rf & 1) {
55858
+ i0.ɵɵelementStart(0, "div", 0)(1, "span", 1);
55859
+ i0.ɵɵtext(2);
55860
+ i0.ɵɵelementEnd();
55861
+ i0.ɵɵelementStart(3, "span");
55862
+ i0.ɵɵtext(4);
55863
+ i0.ɵɵelementEnd()();
55864
+ } if (rf & 2) {
55865
+ i0.ɵɵproperty("ngClass", ctx.badgeClasses());
55866
+ i0.ɵɵadvance();
55867
+ i0.ɵɵproperty("ngClass", ctx.iconClasses());
55868
+ i0.ɵɵadvance();
55869
+ i0.ɵɵtextInterpolate1(" ", ctx.iconSymbol(), " ");
55870
+ i0.ɵɵadvance(2);
55871
+ i0.ɵɵtextInterpolate(ctx.displayText());
55872
+ } }, dependencies: [CommonModule, i1$1.NgClass], encapsulation: 2, changeDetection: 0 }); }
55873
+ }
55874
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PacingStatusBadgeComponent, [{
55875
+ type: Component,
55876
+ args: [{
55877
+ selector: 'symphiq-pacing-status-badge',
55878
+ standalone: true,
55879
+ imports: [CommonModule],
55880
+ changeDetection: ChangeDetectionStrategy.OnPush,
55881
+ template: `
55882
+ <div
55883
+ [ngClass]="badgeClasses()"
55884
+ class="inline-flex items-center gap-2 px-3 py-1.5 rounded-lg border font-semibold text-sm transition-all"
55885
+ >
55886
+ <span [ngClass]="iconClasses()" class="text-lg">
55887
+ {{ iconSymbol() }}
55888
+ </span>
55889
+ <span>{{ displayText() }}</span>
55890
+ </div>
55891
+ `
55892
+ }]
55893
+ }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], pacingPercentage: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingPercentage", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }] }); })();
55894
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PacingStatusBadgeComponent, { className: "PacingStatusBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/pacing-status-badge.component.ts", lineNumber: 23 }); })();
55895
+
55710
55896
  const _forTrack0$i = ($index, $item) => $item.stageMetric.metric;
55711
- const _forTrack1$3 = ($index, $item) => $item.metric;
55712
- function FunnelMetricsVisualizationComponent_For_3_Conditional_20_For_6_Template(rf, ctx) { if (rf & 1) {
55713
- i0.ɵɵelementStart(0, "div", 15)(1, "div", 16)(2, "p", 17);
55714
- i0.ɵɵtext(3);
55897
+ const _forTrack1$3 = ($index, $item) => $item.calc.metric;
55898
+ function FunnelMetricsVisualizationComponent_For_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
55899
+ i0.ɵɵelement(0, "symphiq-pacing-status-badge", 8);
55900
+ } if (rf & 2) {
55901
+ const stage_r1 = i0.ɵɵnextContext().$implicit;
55902
+ const ctx_r1 = i0.ɵɵnextContext();
55903
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", stage_r1.pacingInfo.pacingPercentage)("status", stage_r1.pacingInfo.status);
55904
+ } }
55905
+ function FunnelMetricsVisualizationComponent_For_3_Conditional_17_Template(rf, ctx) { if (rf & 1) {
55906
+ i0.ɵɵelementStart(0, "div")(1, "p", 11);
55907
+ i0.ɵɵtext(2);
55715
55908
  i0.ɵɵelementEnd();
55716
- i0.ɵɵelementStart(4, "span", 18);
55717
- i0.ɵɵtext(5);
55909
+ i0.ɵɵelementStart(3, "p", 12);
55910
+ i0.ɵɵtext(4);
55718
55911
  i0.ɵɵelementEnd()();
55719
- i0.ɵɵelementStart(6, "div", 19)(7, "div")(8, "p", 20);
55720
- i0.ɵɵtext(9);
55912
+ } if (rf & 2) {
55913
+ const stage_r1 = i0.ɵɵnextContext().$implicit;
55914
+ const ctx_r1 = i0.ɵɵnextContext();
55915
+ i0.ɵɵadvance();
55916
+ i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
55917
+ i0.ɵɵadvance();
55918
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.currentYear(), " Projected ");
55919
+ i0.ɵɵadvance();
55920
+ i0.ɵɵproperty("ngClass", ctx_r1.projectedValueClasses());
55921
+ i0.ɵɵadvance();
55922
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.pacingInfo.projectedValue, stage_r1.stageMetric.metric), " ");
55923
+ } }
55924
+ function FunnelMetricsVisualizationComponent_For_3_Conditional_23_For_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
55925
+ i0.ɵɵelement(0, "symphiq-pacing-status-badge", 8);
55926
+ } if (rf & 2) {
55927
+ const metric_r3 = i0.ɵɵnextContext().$implicit;
55928
+ const ctx_r1 = i0.ɵɵnextContext(3);
55929
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", metric_r3.pacingInfo.pacingPercentage)("status", metric_r3.pacingInfo.status);
55930
+ } }
55931
+ function FunnelMetricsVisualizationComponent_For_3_Conditional_23_For_6_Conditional_12_Template(rf, ctx) { if (rf & 1) {
55932
+ i0.ɵɵelementStart(0, "div")(1, "p", 23);
55933
+ i0.ɵɵtext(2);
55721
55934
  i0.ɵɵelementEnd()();
55722
- i0.ɵɵelementStart(10, "div")(11, "p", 20);
55723
- i0.ɵɵtext(12);
55935
+ } if (rf & 2) {
55936
+ const metric_r3 = i0.ɵɵnextContext().$implicit;
55937
+ const ctx_r1 = i0.ɵɵnextContext(3);
55938
+ i0.ɵɵadvance();
55939
+ i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
55940
+ i0.ɵɵadvance();
55941
+ i0.ɵɵtextInterpolate1("Proj: ", ctx_r1.formatMetricValue(metric_r3.pacingInfo.projectedValue, metric_r3.calc.metric));
55942
+ } }
55943
+ function FunnelMetricsVisualizationComponent_For_3_Conditional_23_For_6_Template(rf, ctx) { if (rf & 1) {
55944
+ i0.ɵɵelementStart(0, "div", 17)(1, "div", 18)(2, "p", 19);
55945
+ i0.ɵɵtext(3);
55946
+ i0.ɵɵelementEnd();
55947
+ i0.ɵɵelementStart(4, "div", 20);
55948
+ i0.ɵɵconditionalCreate(5, FunnelMetricsVisualizationComponent_For_3_Conditional_23_For_6_Conditional_5_Template, 1, 3, "symphiq-pacing-status-badge", 8);
55949
+ i0.ɵɵelementStart(6, "span", 21);
55950
+ i0.ɵɵtext(7);
55951
+ i0.ɵɵelementEnd()()();
55952
+ i0.ɵɵelementStart(8, "div", 22)(9, "div")(10, "p", 23);
55953
+ i0.ɵɵtext(11);
55954
+ i0.ɵɵelementEnd()();
55955
+ i0.ɵɵconditionalCreate(12, FunnelMetricsVisualizationComponent_For_3_Conditional_23_For_6_Conditional_12_Template, 3, 2, "div");
55956
+ i0.ɵɵelementStart(13, "div")(14, "p", 23);
55957
+ i0.ɵɵtext(15);
55724
55958
  i0.ɵɵelementEnd()()()();
55725
55959
  } if (rf & 2) {
55726
- const metric_r1 = ctx.$implicit;
55960
+ const metric_r3 = ctx.$implicit;
55727
55961
  const ctx_r1 = i0.ɵɵnextContext(3);
55728
55962
  i0.ɵɵproperty("ngClass", ctx_r1.relatedMetricCardClasses());
55729
55963
  i0.ɵɵadvance(2);
55730
55964
  i0.ɵɵproperty("ngClass", ctx_r1.relatedMetricNameClasses());
55731
55965
  i0.ɵɵadvance();
55732
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getMetricTitle(metric_r1), " ");
55966
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getMetricTitle(metric_r3.calc), " ");
55967
+ i0.ɵɵadvance(2);
55968
+ i0.ɵɵconditional(metric_r3.pacingInfo ? 5 : -1);
55733
55969
  i0.ɵɵadvance();
55734
55970
  i0.ɵɵproperty("ngClass", ctx_r1.relatedPercentageBadgeClasses());
55735
55971
  i0.ɵɵadvance();
55736
- i0.ɵɵtextInterpolate1(" +", ctx_r1.formatPercentage(metric_r1.percentageIncrease, 1), " ");
55737
- i0.ɵɵadvance(3);
55972
+ i0.ɵɵtextInterpolate1(" +", ctx_r1.formatPercentage(metric_r3.calc.percentageIncrease, 1), " ");
55973
+ i0.ɵɵadvance();
55974
+ i0.ɵɵproperty("ngClass", metric_r3.pacingInfo ? "grid-cols-3" : "grid-cols-2");
55975
+ i0.ɵɵadvance(2);
55738
55976
  i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
55739
55977
  i0.ɵɵadvance();
55740
- i0.ɵɵtextInterpolate1("Prior: ", ctx_r1.formatMetricValue(metric_r1.currentValue, metric_r1.metric));
55978
+ i0.ɵɵtextInterpolate2("", ctx_r1.priorYear(), ": ", ctx_r1.formatMetricValue(metric_r3.calc.currentValue, metric_r3.calc.metric));
55979
+ i0.ɵɵadvance();
55980
+ i0.ɵɵconditional(metric_r3.pacingInfo ? 12 : -1);
55741
55981
  i0.ɵɵadvance(2);
55742
55982
  i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
55743
55983
  i0.ɵɵadvance();
55744
- i0.ɵɵtextInterpolate1("Target: ", ctx_r1.formatMetricValue(metric_r1.targetValue, metric_r1.metric));
55984
+ i0.ɵɵtextInterpolate1("Target: ", ctx_r1.formatMetricValue(metric_r3.calc.targetValue, metric_r3.calc.metric));
55745
55985
  } }
55746
- function FunnelMetricsVisualizationComponent_For_3_Conditional_20_Template(rf, ctx) { if (rf & 1) {
55747
- i0.ɵɵelement(0, "div", 11);
55748
- i0.ɵɵelementStart(1, "div", 12)(2, "p", 13);
55986
+ function FunnelMetricsVisualizationComponent_For_3_Conditional_23_Template(rf, ctx) { if (rf & 1) {
55987
+ i0.ɵɵelement(0, "div", 13);
55988
+ i0.ɵɵelementStart(1, "div", 14)(2, "p", 15);
55749
55989
  i0.ɵɵtext(3, " Related Metrics ");
55750
55990
  i0.ɵɵelementEnd();
55751
- i0.ɵɵelementStart(4, "div", 14);
55752
- i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_3_Conditional_20_For_6_Template, 13, 9, "div", 15, _forTrack1$3);
55991
+ i0.ɵɵelementStart(4, "div", 16);
55992
+ i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_3_Conditional_23_For_6_Template, 16, 13, "div", 17, _forTrack1$3);
55753
55993
  i0.ɵɵelementEnd()();
55754
55994
  } if (rf & 2) {
55755
- const stage_r3 = i0.ɵɵnextContext().$implicit;
55995
+ const stage_r1 = i0.ɵɵnextContext().$implicit;
55756
55996
  const ctx_r1 = i0.ɵɵnextContext();
55757
55997
  i0.ɵɵproperty("ngClass", ctx_r1.dividerClasses());
55758
55998
  i0.ɵɵadvance(2);
55759
55999
  i0.ɵɵproperty("ngClass", ctx_r1.relatedTitleClasses());
55760
56000
  i0.ɵɵadvance(3);
55761
- i0.ɵɵrepeater(stage_r3.relatedMetrics);
56001
+ i0.ɵɵrepeater(stage_r1.relatedMetrics);
55762
56002
  } }
55763
56003
  function FunnelMetricsVisualizationComponent_For_3_Template(rf, ctx) { if (rf & 1) {
55764
56004
  i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "div", 4)(3, "h3", 5);
@@ -55768,65 +56008,91 @@ function FunnelMetricsVisualizationComponent_For_3_Template(rf, ctx) { if (rf &
55768
56008
  i0.ɵɵtext(6);
55769
56009
  i0.ɵɵelementEnd()();
55770
56010
  i0.ɵɵelementStart(7, "div", 7);
55771
- i0.ɵɵtext(8);
55772
- i0.ɵɵelementEnd()();
55773
- i0.ɵɵelementStart(9, "div", 8)(10, "div")(11, "p", 9);
55774
- i0.ɵɵtext(12, " Prior Year ");
55775
- i0.ɵɵelementEnd();
55776
- i0.ɵɵelementStart(13, "p", 10);
56011
+ i0.ɵɵconditionalCreate(8, FunnelMetricsVisualizationComponent_For_3_Conditional_8_Template, 1, 3, "symphiq-pacing-status-badge", 8);
56012
+ i0.ɵɵelementStart(9, "div", 9);
56013
+ i0.ɵɵtext(10);
56014
+ i0.ɵɵelementEnd()()();
56015
+ i0.ɵɵelementStart(11, "div", 10)(12, "div")(13, "p", 11);
55777
56016
  i0.ɵɵtext(14);
56017
+ i0.ɵɵelementEnd();
56018
+ i0.ɵɵelementStart(15, "p", 12);
56019
+ i0.ɵɵtext(16);
55778
56020
  i0.ɵɵelementEnd()();
55779
- i0.ɵɵelementStart(15, "div")(16, "p", 9);
55780
- i0.ɵɵtext(17, " Target ");
56021
+ i0.ɵɵconditionalCreate(17, FunnelMetricsVisualizationComponent_For_3_Conditional_17_Template, 5, 4, "div");
56022
+ i0.ɵɵelementStart(18, "div")(19, "p", 11);
56023
+ i0.ɵɵtext(20);
55781
56024
  i0.ɵɵelementEnd();
55782
- i0.ɵɵelementStart(18, "p", 10);
55783
- i0.ɵɵtext(19);
56025
+ i0.ɵɵelementStart(21, "p", 12);
56026
+ i0.ɵɵtext(22);
55784
56027
  i0.ɵɵelementEnd()()();
55785
- i0.ɵɵconditionalCreate(20, FunnelMetricsVisualizationComponent_For_3_Conditional_20_Template, 7, 2);
56028
+ i0.ɵɵconditionalCreate(23, FunnelMetricsVisualizationComponent_For_3_Conditional_23_Template, 7, 2);
55786
56029
  i0.ɵɵelementEnd();
55787
56030
  } if (rf & 2) {
55788
- const stage_r3 = ctx.$implicit;
56031
+ const stage_r1 = ctx.$implicit;
55789
56032
  const ctx_r1 = i0.ɵɵnextContext();
55790
56033
  i0.ɵɵproperty("ngClass", ctx_r1.stageCardClasses());
55791
56034
  i0.ɵɵadvance(3);
55792
56035
  i0.ɵɵproperty("ngClass", ctx_r1.stageTitleClasses());
55793
56036
  i0.ɵɵadvance();
55794
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getMetricTitle(stage_r3.stageMetric), " ");
56037
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getMetricTitle(stage_r1.stageMetric), " ");
55795
56038
  i0.ɵɵadvance();
55796
56039
  i0.ɵɵproperty("ngClass", ctx_r1.stageDescriptionClasses());
55797
56040
  i0.ɵɵadvance();
55798
- i0.ɵɵtextInterpolate1(" ", stage_r3.stageMetric.description, " ");
56041
+ i0.ɵɵtextInterpolate1(" ", stage_r1.stageMetric.description, " ");
56042
+ i0.ɵɵadvance(2);
56043
+ i0.ɵɵconditional(stage_r1.pacingInfo ? 8 : -1);
55799
56044
  i0.ɵɵadvance();
55800
56045
  i0.ɵɵproperty("ngClass", ctx_r1.percentageBadgeClasses());
55801
56046
  i0.ɵɵadvance();
55802
- i0.ɵɵtextInterpolate1(" +", ctx_r1.formatPercentage(stage_r3.stageMetric.percentageIncrease, 1), " ");
56047
+ i0.ɵɵtextInterpolate1(" +", ctx_r1.formatPercentage(stage_r1.stageMetric.percentageIncrease, 1), " ");
55803
56048
  i0.ɵɵadvance(3);
55804
56049
  i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
55805
- i0.ɵɵadvance(2);
56050
+ i0.ɵɵadvance();
56051
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.priorYear(), " Actual ");
56052
+ i0.ɵɵadvance();
55806
56053
  i0.ɵɵproperty("ngClass", ctx_r1.valueClasses());
55807
56054
  i0.ɵɵadvance();
55808
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r3.stageMetric.currentValue, stage_r3.stageMetric.metric), " ");
56055
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.stageMetric.currentValue, stage_r1.stageMetric.metric), " ");
56056
+ i0.ɵɵadvance();
56057
+ i0.ɵɵconditional(stage_r1.pacingInfo ? 17 : -1);
55809
56058
  i0.ɵɵadvance(2);
55810
56059
  i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
55811
- i0.ɵɵadvance(2);
56060
+ i0.ɵɵadvance();
56061
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.currentYear(), " Target ");
56062
+ i0.ɵɵadvance();
55812
56063
  i0.ɵɵproperty("ngClass", ctx_r1.targetValueClasses());
55813
56064
  i0.ɵɵadvance();
55814
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r3.stageMetric.targetValue, stage_r3.stageMetric.metric), " ");
56065
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.stageMetric.targetValue, stage_r1.stageMetric.metric), " ");
55815
56066
  i0.ɵɵadvance();
55816
- i0.ɵɵconditional(stage_r3.relatedMetrics.length > 0 ? 20 : -1);
56067
+ i0.ɵɵconditional(stage_r1.relatedMetrics.length > 0 ? 23 : -1);
55817
56068
  } }
55818
56069
  class FunnelMetricsVisualizationComponent {
55819
56070
  constructor() {
55820
56071
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
55821
56072
  this.calculations = input([], ...(ngDevMode ? [{ debugName: "calculations" }] : []));
56073
+ this.pacingMetrics = input([], ...(ngDevMode ? [{ debugName: "pacingMetrics" }] : []));
56074
+ this.currentYear = computed(() => new Date().getFullYear(), ...(ngDevMode ? [{ debugName: "currentYear" }] : []));
56075
+ this.priorYear = computed(() => new Date().getFullYear() - 1, ...(ngDevMode ? [{ debugName: "priorYear" }] : []));
55822
56076
  this.funnelStages = computed(() => {
55823
56077
  const calcs = this.calculations();
56078
+ const pacing = this.pacingMetrics();
55824
56079
  const grouped = new Map();
55825
56080
  const stageMetrics = calcs.filter(c => c.isFunnelStage);
55826
56081
  const relatedMetrics = calcs.filter(c => !c.isFunnelStage);
55827
56082
  stageMetrics.forEach(stageMetric => {
55828
56083
  const related = relatedMetrics.filter(rm => rm.funnelMetric === stageMetric.metric);
55829
- grouped.set(stageMetric.metric, { stageMetric, relatedMetrics: related });
56084
+ const stagePacingMetric = pacing.find(p => p.metric === stageMetric.metric);
56085
+ const stagePacingInfo = stagePacingMetric ? calculateMetricPacing(stagePacingMetric) : null;
56086
+ const relatedWithPacing = related.map(relMetric => {
56087
+ const relPacingMetric = pacing.find(p => p.metric === relMetric.metric);
56088
+ const relPacingInfo = relPacingMetric ? calculateMetricPacing(relPacingMetric) : null;
56089
+ return { calc: relMetric, pacingInfo: relPacingInfo };
56090
+ });
56091
+ grouped.set(stageMetric.metric, {
56092
+ stageMetric,
56093
+ relatedMetrics: relatedWithPacing,
56094
+ pacingInfo: stagePacingInfo
56095
+ });
55830
56096
  });
55831
56097
  return Array.from(grouped.values()).sort((a, b) => {
55832
56098
  const aInd = a.stageMetric.funnelInd ?? 999;
@@ -55870,6 +56136,11 @@ class FunnelMetricsVisualizationComponent {
55870
56136
  ? 'text-purple-300'
55871
56137
  : 'text-purple-700';
55872
56138
  }
56139
+ projectedValueClasses() {
56140
+ return this.viewMode() === ViewModeEnum.DARK
56141
+ ? 'text-amber-300'
56142
+ : 'text-amber-700';
56143
+ }
55873
56144
  dividerClasses() {
55874
56145
  return this.viewMode() === ViewModeEnum.DARK
55875
56146
  ? 'border-t border-purple-500/20'
@@ -55922,21 +56193,21 @@ class FunnelMetricsVisualizationComponent {
55922
56193
  .join(' ');
55923
56194
  }
55924
56195
  static { this.ɵfac = function FunnelMetricsVisualizationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FunnelMetricsVisualizationComponent)(); }; }
55925
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FunnelMetricsVisualizationComponent, selectors: [["symphiq-funnel-metrics-visualization"]], inputs: { viewMode: [1, "viewMode"], calculations: [1, "calculations"] }, decls: 4, vars: 0, consts: [[1, "space-y-6"], [1, "space-y-3"], [1, "rounded-xl", "p-6", "border-2", "transition-all", "duration-200", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "mb-4"], [1, "flex-1"], [1, "text-lg", "font-bold", "mb-1", 3, "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "px-4", "py-2", "rounded-lg", "font-bold", "text-sm", 3, "ngClass"], [1, "grid", "grid-cols-2", "gap-4", "mb-4"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], [1, "my-4", 3, "ngClass"], [1, "space-y-2"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "mb-3", 3, "ngClass"], [1, "grid", "gap-2"], [1, "p-3", "rounded-lg", 3, "ngClass"], [1, "flex", "items-center", "justify-between", "mb-2"], [1, "text-sm", "font-semibold", "flex-1", 3, "ngClass"], [1, "px-2", "py-1", "rounded", "text-xs", "font-bold", 3, "ngClass"], [1, "grid", "grid-cols-2", "gap-2", "text-xs"], [3, "ngClass"]], template: function FunnelMetricsVisualizationComponent_Template(rf, ctx) { if (rf & 1) {
56196
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FunnelMetricsVisualizationComponent, selectors: [["symphiq-funnel-metrics-visualization"]], inputs: { viewMode: [1, "viewMode"], calculations: [1, "calculations"], pacingMetrics: [1, "pacingMetrics"] }, decls: 4, vars: 0, consts: [[1, "space-y-6"], [1, "space-y-3"], [1, "rounded-xl", "p-6", "border-2", "transition-all", "duration-200", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "mb-4"], [1, "flex-1"], [1, "text-lg", "font-bold", "mb-1", 3, "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "flex", "items-center", "gap-3"], [3, "viewMode", "pacingPercentage", "status"], [1, "px-4", "py-2", "rounded-lg", "font-bold", "text-sm", 3, "ngClass"], [1, "grid", "grid-cols-3", "gap-4", "mb-4"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], [1, "my-4", 3, "ngClass"], [1, "space-y-2"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "mb-3", 3, "ngClass"], [1, "grid", "gap-2"], [1, "p-3", "rounded-lg", 3, "ngClass"], [1, "flex", "items-center", "justify-between", "mb-2"], [1, "text-sm", "font-semibold", "flex-1", 3, "ngClass"], [1, "flex", "items-center", "gap-2"], [1, "px-2", "py-1", "rounded", "text-xs", "font-bold", 3, "ngClass"], [1, "grid", "gap-2", "text-xs", 3, "ngClass"], [3, "ngClass"]], template: function FunnelMetricsVisualizationComponent_Template(rf, ctx) { if (rf & 1) {
55926
56197
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
55927
- i0.ɵɵrepeaterCreate(2, FunnelMetricsVisualizationComponent_For_3_Template, 21, 14, "div", 2, _forTrack0$i);
56198
+ i0.ɵɵrepeaterCreate(2, FunnelMetricsVisualizationComponent_For_3_Template, 24, 18, "div", 2, _forTrack0$i);
55928
56199
  i0.ɵɵelementEnd()();
55929
56200
  } if (rf & 2) {
55930
56201
  i0.ɵɵadvance(2);
55931
56202
  i0.ɵɵrepeater(ctx.funnelStages());
55932
- } }, dependencies: [CommonModule, i1$1.NgClass], encapsulation: 2, changeDetection: 0 }); }
56203
+ } }, dependencies: [CommonModule, i1$1.NgClass, PacingStatusBadgeComponent], encapsulation: 2, changeDetection: 0 }); }
55933
56204
  }
55934
56205
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FunnelMetricsVisualizationComponent, [{
55935
56206
  type: Component,
55936
56207
  args: [{
55937
56208
  selector: 'symphiq-funnel-metrics-visualization',
55938
56209
  standalone: true,
55939
- imports: [CommonModule],
56210
+ imports: [CommonModule, PacingStatusBadgeComponent],
55940
56211
  changeDetection: ChangeDetectionStrategy.OnPush,
55941
56212
  template: `
55942
56213
  <div class="space-y-6">
@@ -55952,23 +56223,42 @@ class FunnelMetricsVisualizationComponent {
55952
56223
  {{ stage.stageMetric.description }}
55953
56224
  </p>
55954
56225
  </div>
55955
- <div [ngClass]="percentageBadgeClasses()" class="px-4 py-2 rounded-lg font-bold text-sm">
55956
- +{{ formatPercentage(stage.stageMetric.percentageIncrease, 1) }}
56226
+ <div class="flex items-center gap-3">
56227
+ @if (stage.pacingInfo) {
56228
+ <symphiq-pacing-status-badge
56229
+ [viewMode]="viewMode()"
56230
+ [pacingPercentage]="stage.pacingInfo.pacingPercentage"
56231
+ [status]="stage.pacingInfo.status"
56232
+ />
56233
+ }
56234
+ <div [ngClass]="percentageBadgeClasses()" class="px-4 py-2 rounded-lg font-bold text-sm">
56235
+ +{{ formatPercentage(stage.stageMetric.percentageIncrease, 1) }}
56236
+ </div>
55957
56237
  </div>
55958
56238
  </div>
55959
56239
 
55960
- <div class="grid grid-cols-2 gap-4 mb-4">
56240
+ <div class="grid grid-cols-3 gap-4 mb-4">
55961
56241
  <div>
55962
56242
  <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
55963
- Prior Year
56243
+ {{ priorYear() }} Actual
55964
56244
  </p>
55965
56245
  <p [ngClass]="valueClasses()" class="text-2xl font-bold">
55966
56246
  {{ formatMetricValue(stage.stageMetric.currentValue, stage.stageMetric.metric) }}
55967
56247
  </p>
55968
56248
  </div>
56249
+ @if (stage.pacingInfo) {
56250
+ <div>
56251
+ <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
56252
+ {{ currentYear() }} Projected
56253
+ </p>
56254
+ <p [ngClass]="projectedValueClasses()" class="text-2xl font-bold">
56255
+ {{ formatMetricValue(stage.pacingInfo.projectedValue, stage.stageMetric.metric) }}
56256
+ </p>
56257
+ </div>
56258
+ }
55969
56259
  <div>
55970
56260
  <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
55971
- Target
56261
+ {{ currentYear() }} Target
55972
56262
  </p>
55973
56263
  <p [ngClass]="targetValueClasses()" class="text-2xl font-bold">
55974
56264
  {{ formatMetricValue(stage.stageMetric.targetValue, stage.stageMetric.metric) }}
@@ -55984,22 +56274,36 @@ class FunnelMetricsVisualizationComponent {
55984
56274
  Related Metrics
55985
56275
  </p>
55986
56276
  <div class="grid gap-2">
55987
- @for (metric of stage.relatedMetrics; track metric.metric) {
56277
+ @for (metric of stage.relatedMetrics; track metric.calc.metric) {
55988
56278
  <div [ngClass]="relatedMetricCardClasses()" class="p-3 rounded-lg">
55989
56279
  <div class="flex items-center justify-between mb-2">
55990
56280
  <p [ngClass]="relatedMetricNameClasses()" class="text-sm font-semibold flex-1">
55991
- {{ getMetricTitle(metric) }}
56281
+ {{ getMetricTitle(metric.calc) }}
55992
56282
  </p>
55993
- <span [ngClass]="relatedPercentageBadgeClasses()" class="px-2 py-1 rounded text-xs font-bold">
55994
- +{{ formatPercentage(metric.percentageIncrease, 1) }}
55995
- </span>
56283
+ <div class="flex items-center gap-2">
56284
+ @if (metric.pacingInfo) {
56285
+ <symphiq-pacing-status-badge
56286
+ [viewMode]="viewMode()"
56287
+ [pacingPercentage]="metric.pacingInfo.pacingPercentage"
56288
+ [status]="metric.pacingInfo.status"
56289
+ />
56290
+ }
56291
+ <span [ngClass]="relatedPercentageBadgeClasses()" class="px-2 py-1 rounded text-xs font-bold">
56292
+ +{{ formatPercentage(metric.calc.percentageIncrease, 1) }}
56293
+ </span>
56294
+ </div>
55996
56295
  </div>
55997
- <div class="grid grid-cols-2 gap-2 text-xs">
56296
+ <div class="grid gap-2 text-xs" [ngClass]="metric.pacingInfo ? 'grid-cols-3' : 'grid-cols-2'">
55998
56297
  <div>
55999
- <p [ngClass]="relatedLabelClasses()">Prior: {{ formatMetricValue(metric.currentValue, metric.metric) }}</p>
56298
+ <p [ngClass]="relatedLabelClasses()">{{ priorYear() }}: {{ formatMetricValue(metric.calc.currentValue, metric.calc.metric) }}</p>
56000
56299
  </div>
56300
+ @if (metric.pacingInfo) {
56301
+ <div>
56302
+ <p [ngClass]="relatedLabelClasses()">Proj: {{ formatMetricValue(metric.pacingInfo.projectedValue, metric.calc.metric) }}</p>
56303
+ </div>
56304
+ }
56001
56305
  <div>
56002
- <p [ngClass]="relatedLabelClasses()">Target: {{ formatMetricValue(metric.targetValue, metric.metric) }}</p>
56306
+ <p [ngClass]="relatedLabelClasses()">Target: {{ formatMetricValue(metric.calc.targetValue, metric.calc.metric) }}</p>
56003
56307
  </div>
56004
56308
  </div>
56005
56309
  </div>
@@ -56013,8 +56317,8 @@ class FunnelMetricsVisualizationComponent {
56013
56317
  </div>
56014
56318
  `
56015
56319
  }]
56016
- }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], calculations: [{ type: i0.Input, args: [{ isSignal: true, alias: "calculations", required: false }] }] }); })();
56017
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber: 87 }); })();
56320
+ }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], calculations: [{ type: i0.Input, args: [{ isSignal: true, alias: "calculations", required: false }] }], pacingMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingMetrics", required: false }] }] }); })();
56321
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber: 122 }); })();
56018
56322
 
56019
56323
  function StickySubmitBarComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
56020
56324
  i0.ɵɵelementStart(0, "div", 4);
@@ -57000,120 +57304,163 @@ class RevenueCalculatorService {
57000
57304
  }]
57001
57305
  }], null, null); })();
57002
57306
 
57003
- function InitialTargetSettingComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
57004
- const _r1 = i0.ɵɵgetCurrentView();
57005
- i0.ɵɵelementStart(0, "div", 9)(1, "span", 16);
57307
+ function InitialTargetSettingComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
57308
+ i0.ɵɵelementStart(0, "p", 7);
57309
+ i0.ɵɵtext(1);
57310
+ i0.ɵɵelementEnd();
57311
+ } if (rf & 2) {
57312
+ const ctx_r0 = i0.ɵɵnextContext();
57313
+ i0.ɵɵproperty("ngClass", ctx_r0.priorYearLabelClasses());
57314
+ i0.ɵɵadvance();
57315
+ i0.ɵɵtextInterpolate1(" Current Pace Projection: ", ctx_r0.formatCurrency(ctx_r0.currentPaceProjection()), " ");
57316
+ } }
57317
+ function InitialTargetSettingComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
57318
+ const _r2 = i0.ɵɵgetCurrentView();
57319
+ i0.ɵɵelementStart(0, "div", 10)(1, "span", 17);
57006
57320
  i0.ɵɵtext(2, " $ ");
57007
57321
  i0.ɵɵelementEnd();
57008
- i0.ɵɵelementStart(3, "input", 17);
57009
- i0.ɵɵtwoWayListener("ngModelChange", function InitialTargetSettingComponent_Conditional_16_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.absoluteInput, $event) || (ctx_r1.absoluteInput = $event); return i0.ɵɵresetView($event); });
57010
- i0.ɵɵlistener("ngModelChange", function InitialTargetSettingComponent_Conditional_16_Template_input_ngModelChange_3_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onAbsoluteInputChange()); });
57322
+ i0.ɵɵelementStart(3, "input", 18);
57323
+ i0.ɵɵtwoWayListener("ngModelChange", function InitialTargetSettingComponent_Conditional_18_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.absoluteInput, $event) || (ctx_r0.absoluteInput = $event); return i0.ɵɵresetView($event); });
57324
+ i0.ɵɵlistener("ngModelChange", function InitialTargetSettingComponent_Conditional_18_Template_input_ngModelChange_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onAbsoluteInputChange()); });
57011
57325
  i0.ɵɵelementEnd()();
57012
57326
  } if (rf & 2) {
57013
- const ctx_r1 = i0.ɵɵnextContext();
57327
+ const ctx_r0 = i0.ɵɵnextContext();
57014
57328
  i0.ɵɵadvance();
57015
- i0.ɵɵproperty("ngClass", ctx_r1.inputPrefixClasses());
57329
+ i0.ɵɵproperty("ngClass", ctx_r0.inputPrefixClasses());
57016
57330
  i0.ɵɵadvance(2);
57017
- i0.ɵɵtwoWayProperty("ngModel", ctx_r1.absoluteInput);
57018
- i0.ɵɵproperty("ngClass", ctx_r1.inputClasses());
57331
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r0.absoluteInput);
57332
+ i0.ɵɵproperty("ngClass", ctx_r0.inputClasses());
57019
57333
  } }
57020
- function InitialTargetSettingComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
57334
+ function InitialTargetSettingComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
57021
57335
  const _r3 = i0.ɵɵgetCurrentView();
57022
- i0.ɵɵelementStart(0, "div", 9)(1, "input", 18);
57023
- i0.ɵɵtwoWayListener("ngModelChange", function InitialTargetSettingComponent_Conditional_17_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.percentageInput, $event) || (ctx_r1.percentageInput = $event); return i0.ɵɵresetView($event); });
57024
- i0.ɵɵlistener("ngModelChange", function InitialTargetSettingComponent_Conditional_17_Template_input_ngModelChange_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onPercentageInputChange()); });
57336
+ i0.ɵɵelementStart(0, "div", 10)(1, "input", 19);
57337
+ i0.ɵɵtwoWayListener("ngModelChange", function InitialTargetSettingComponent_Conditional_19_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.percentageInput, $event) || (ctx_r0.percentageInput = $event); return i0.ɵɵresetView($event); });
57338
+ i0.ɵɵlistener("ngModelChange", function InitialTargetSettingComponent_Conditional_19_Template_input_ngModelChange_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onPercentageInputChange()); });
57025
57339
  i0.ɵɵelementEnd();
57026
- i0.ɵɵelementStart(2, "span", 19);
57340
+ i0.ɵɵelementStart(2, "span", 20);
57027
57341
  i0.ɵɵtext(3, " % ");
57028
57342
  i0.ɵɵelementEnd()();
57029
57343
  } if (rf & 2) {
57030
- const ctx_r1 = i0.ɵɵnextContext();
57344
+ const ctx_r0 = i0.ɵɵnextContext();
57031
57345
  i0.ɵɵadvance();
57032
- i0.ɵɵtwoWayProperty("ngModel", ctx_r1.percentageInput);
57033
- i0.ɵɵproperty("ngClass", ctx_r1.inputClasses());
57346
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r0.percentageInput);
57347
+ i0.ɵɵproperty("ngClass", ctx_r0.inputClasses());
57034
57348
  i0.ɵɵadvance();
57035
- i0.ɵɵproperty("ngClass", ctx_r1.inputSuffixClasses());
57349
+ i0.ɵɵproperty("ngClass", ctx_r0.inputSuffixClasses());
57036
57350
  } }
57037
- function InitialTargetSettingComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
57038
- i0.ɵɵelementStart(0, "div", 10)(1, "div", 20)(2, "div")(3, "p", 21);
57351
+ function InitialTargetSettingComponent_Conditional_20_Conditional_18_Template(rf, ctx) { if (rf & 1) {
57352
+ i0.ɵɵelementStart(0, "div", 24)(1, "div")(2, "p", 22);
57353
+ i0.ɵɵtext(3, " Gap to Close ");
57354
+ i0.ɵɵelementEnd();
57355
+ i0.ɵɵelementStart(4, "p", 25);
57356
+ i0.ɵɵtext(5);
57357
+ i0.ɵɵelementEnd()();
57358
+ i0.ɵɵelementStart(6, "div")(7, "p", 22);
57359
+ i0.ɵɵtext(8, " Additional Growth Needed ");
57360
+ i0.ɵɵelementEnd();
57361
+ i0.ɵɵelementStart(9, "p", 25);
57362
+ i0.ɵɵtext(10);
57363
+ i0.ɵɵelementEnd()()();
57364
+ } if (rf & 2) {
57365
+ const ctx_r0 = i0.ɵɵnextContext(2);
57366
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedDividerClasses());
57367
+ i0.ɵɵadvance(2);
57368
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedLabelClasses());
57369
+ i0.ɵɵadvance(2);
57370
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedSecondaryClasses());
57371
+ i0.ɵɵadvance();
57372
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.formatCurrency(ctx_r0.absValue(ctx_r0.gapToClose().amount)), " ");
57373
+ i0.ɵɵadvance(2);
57374
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedLabelClasses());
57375
+ i0.ɵɵadvance(2);
57376
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedSecondaryClasses());
57377
+ i0.ɵɵadvance();
57378
+ i0.ɵɵtextInterpolate2(" ", ctx_r0.gapToClose().amount > 0 ? "+" : "", "", ctx_r0.formatPercentage(ctx_r0.gapToClose().percentage, 1), " ");
57379
+ } }
57380
+ function InitialTargetSettingComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
57381
+ i0.ɵɵelementStart(0, "div", 11)(1, "div", 21)(2, "div")(3, "p", 22);
57039
57382
  i0.ɵɵtext(4);
57040
57383
  i0.ɵɵelementEnd();
57041
- i0.ɵɵelementStart(5, "p", 22);
57384
+ i0.ɵɵelementStart(5, "p", 23);
57042
57385
  i0.ɵɵtext(6);
57043
57386
  i0.ɵɵelementEnd()();
57044
- i0.ɵɵelementStart(7, "div", 23)(8, "div")(9, "p", 21);
57387
+ i0.ɵɵelementStart(7, "div", 24)(8, "div")(9, "p", 22);
57045
57388
  i0.ɵɵtext(10, " Increase Amount ");
57046
57389
  i0.ɵɵelementEnd();
57047
- i0.ɵɵelementStart(11, "p", 24);
57390
+ i0.ɵɵelementStart(11, "p", 25);
57048
57391
  i0.ɵɵtext(12);
57049
57392
  i0.ɵɵelementEnd()();
57050
- i0.ɵɵelementStart(13, "div")(14, "p", 21);
57393
+ i0.ɵɵelementStart(13, "div")(14, "p", 22);
57051
57394
  i0.ɵɵtext(15, " % Growth ");
57052
57395
  i0.ɵɵelementEnd();
57053
- i0.ɵɵelementStart(16, "p", 24);
57396
+ i0.ɵɵelementStart(16, "p", 25);
57054
57397
  i0.ɵɵtext(17);
57055
- i0.ɵɵelementEnd()()()()();
57398
+ i0.ɵɵelementEnd()()();
57399
+ i0.ɵɵconditionalCreate(18, InitialTargetSettingComponent_Conditional_20_Conditional_18_Template, 11, 8, "div", 24);
57400
+ i0.ɵɵelementEnd()();
57056
57401
  } if (rf & 2) {
57057
- const ctx_r1 = i0.ɵɵnextContext();
57058
- i0.ɵɵproperty("ngClass", ctx_r1.calculatedValuesCardClasses());
57402
+ const ctx_r0 = i0.ɵɵnextContext();
57403
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedValuesCardClasses());
57059
57404
  i0.ɵɵadvance(3);
57060
- i0.ɵɵproperty("ngClass", ctx_r1.calculatedLabelClasses());
57405
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedLabelClasses());
57061
57406
  i0.ɵɵadvance();
57062
- i0.ɵɵtextInterpolate1(" ", ctx_r1.currentYear(), " Revenue Target ");
57407
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.currentYear(), " Revenue Target ");
57063
57408
  i0.ɵɵadvance();
57064
- i0.ɵɵproperty("ngClass", ctx_r1.calculatedValueClasses());
57409
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedValueClasses());
57065
57410
  i0.ɵɵadvance();
57066
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCurrency(ctx_r1.calculatedRevenue()), " ");
57411
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.formatCurrency(ctx_r0.calculatedRevenue()), " ");
57067
57412
  i0.ɵɵadvance();
57068
- i0.ɵɵproperty("ngClass", ctx_r1.calculatedDividerClasses());
57413
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedDividerClasses());
57069
57414
  i0.ɵɵadvance(2);
57070
- i0.ɵɵproperty("ngClass", ctx_r1.calculatedLabelClasses());
57415
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedLabelClasses());
57071
57416
  i0.ɵɵadvance(2);
57072
- i0.ɵɵproperty("ngClass", ctx_r1.calculatedSecondaryClasses());
57417
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedSecondaryClasses());
57073
57418
  i0.ɵɵadvance();
57074
- i0.ɵɵtextInterpolate1(" ", ctx_r1.formatCurrency(ctx_r1.calculatedRevenue() - ctx_r1.priorYearRevenue()), " ");
57419
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.formatCurrency(ctx_r0.calculatedRevenue() - ctx_r0.priorYearRevenue()), " ");
57075
57420
  i0.ɵɵadvance(2);
57076
- i0.ɵɵproperty("ngClass", ctx_r1.calculatedLabelClasses());
57421
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedLabelClasses());
57077
57422
  i0.ɵɵadvance(2);
57078
- i0.ɵɵproperty("ngClass", ctx_r1.calculatedSecondaryClasses());
57423
+ i0.ɵɵproperty("ngClass", ctx_r0.calculatedSecondaryClasses());
57424
+ i0.ɵɵadvance();
57425
+ i0.ɵɵtextInterpolate1(" +", ctx_r0.formatPercentage(ctx_r0.percentageIncrease(), 1), " ");
57079
57426
  i0.ɵɵadvance();
57080
- i0.ɵɵtextInterpolate1(" +", ctx_r1.formatPercentage(ctx_r1.percentageIncrease(), 1), " ");
57427
+ i0.ɵɵconditional(ctx_r0.currentPaceProjection() > 0 && ctx_r0.gapToClose().amount !== 0 ? 18 : -1);
57081
57428
  } }
57082
- function InitialTargetSettingComponent_Conditional_23_Template(rf, ctx) { if (rf & 1) {
57083
- i0.ɵɵelement(0, "symphiq-area-chart", 13);
57429
+ function InitialTargetSettingComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
57430
+ i0.ɵɵelement(0, "symphiq-area-chart", 14);
57084
57431
  } if (rf & 2) {
57085
- const ctx_r1 = i0.ɵɵnextContext();
57086
- i0.ɵɵproperty("chart", ctx_r1.revenueChartData())("showAxisLabels", true)("viewMode", ctx_r1.viewMode())("currencySymbol", "$");
57432
+ const ctx_r0 = i0.ɵɵnextContext();
57433
+ i0.ɵɵproperty("chart", ctx_r0.revenueChartData())("showAxisLabels", true)("viewMode", ctx_r0.viewMode())("currencySymbol", "$");
57087
57434
  } }
57088
- function InitialTargetSettingComponent_Conditional_24_Template(rf, ctx) { if (rf & 1) {
57089
- i0.ɵɵelementStart(0, "div", 14)(1, "p", 25);
57435
+ function InitialTargetSettingComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
57436
+ i0.ɵɵelementStart(0, "div", 15)(1, "p", 26);
57090
57437
  i0.ɵɵtext(2, " No revenue data available ");
57091
57438
  i0.ɵɵelementEnd()();
57092
57439
  } if (rf & 2) {
57093
- const ctx_r1 = i0.ɵɵnextContext();
57440
+ const ctx_r0 = i0.ɵɵnextContext();
57094
57441
  i0.ɵɵadvance();
57095
- i0.ɵɵproperty("ngClass", ctx_r1.noDataClasses());
57442
+ i0.ɵɵproperty("ngClass", ctx_r0.noDataClasses());
57096
57443
  } }
57097
- function InitialTargetSettingComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
57098
- i0.ɵɵelementStart(0, "div", 1)(1, "div", 26)(2, "h2", 27);
57444
+ function InitialTargetSettingComponent_Conditional_27_Template(rf, ctx) { if (rf & 1) {
57445
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 27)(2, "h2", 28);
57099
57446
  i0.ɵɵtext(3, " Contributing Metrics ");
57100
57447
  i0.ɵɵelementEnd();
57101
- i0.ɵɵelementStart(4, "p", 25);
57448
+ i0.ɵɵelementStart(4, "p", 26);
57102
57449
  i0.ɵɵtext(5);
57103
57450
  i0.ɵɵelementEnd()();
57104
- i0.ɵɵelement(6, "symphiq-funnel-metrics-visualization", 28);
57451
+ i0.ɵɵelement(6, "symphiq-funnel-metrics-visualization", 29);
57105
57452
  i0.ɵɵelementEnd();
57106
57453
  } if (rf & 2) {
57107
- const ctx_r1 = i0.ɵɵnextContext();
57108
- i0.ɵɵproperty("ngClass", ctx_r1.sectionCardClasses());
57454
+ const ctx_r0 = i0.ɵɵnextContext();
57455
+ i0.ɵɵproperty("ngClass", ctx_r0.sectionCardClasses());
57109
57456
  i0.ɵɵadvance(2);
57110
- i0.ɵɵproperty("ngClass", ctx_r1.sectionTitleClasses());
57457
+ i0.ɵɵproperty("ngClass", ctx_r0.sectionTitleClasses());
57111
57458
  i0.ɵɵadvance(2);
57112
- i0.ɵɵproperty("ngClass", ctx_r1.sectionDescriptionClasses());
57459
+ i0.ɵɵproperty("ngClass", ctx_r0.sectionDescriptionClasses());
57113
57460
  i0.ɵɵadvance();
57114
- i0.ɵɵtextInterpolate1(" To achieve your revenue target of ", ctx_r1.formatCurrency(ctx_r1.calculatedRevenue()), ", the following metrics need to improve by these amounts. These improvements compound through your funnel to drive revenue growth. ");
57461
+ i0.ɵɵtextInterpolate1(" To achieve your revenue target of ", ctx_r0.formatCurrency(ctx_r0.calculatedRevenue()), ", the following metrics need to improve by these amounts. These improvements compound through your funnel to drive revenue growth. ");
57115
57462
  i0.ɵɵadvance();
57116
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("calculations", ctx_r1.metricCalculations());
57463
+ i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("calculations", ctx_r0.metricCalculations())("pacingMetrics", ctx_r0.pacingMetrics());
57117
57464
  } }
57118
57465
  class InitialTargetSettingComponent {
57119
57466
  constructor() {
@@ -57123,7 +57470,9 @@ class InitialTargetSettingComponent {
57123
57470
  this.mainUiData = input(undefined, ...(ngDevMode ? [{ debugName: "mainUiData" }] : []));
57124
57471
  this.yoyUiData = input(undefined, ...(ngDevMode ? [{ debugName: "yoyUiData" }] : []));
57125
57472
  this.trendUiData = input(undefined, ...(ngDevMode ? [{ debugName: "trendUiData" }] : []));
57126
- this.shopId = input(0, ...(ngDevMode ? [{ debugName: "shopId" }] : []));
57473
+ this.shopId = input(undefined, ...(ngDevMode ? [{ debugName: "shopId" }] : []));
57474
+ this.pacingMetrics = input([], ...(ngDevMode ? [{ debugName: "pacingMetrics" }] : []));
57475
+ this.dataResults = input([], ...(ngDevMode ? [{ debugName: "dataResults" }] : []));
57127
57476
  this.targetsCreated = output();
57128
57477
  this.inputMode = signal('absolute', ...(ngDevMode ? [{ debugName: "inputMode" }] : []));
57129
57478
  this.absoluteInput = signal(0, ...(ngDevMode ? [{ debugName: "absoluteInput" }] : []));
@@ -57132,6 +57481,19 @@ class InitialTargetSettingComponent {
57132
57481
  this.priorYearRevenue = computed(() => {
57133
57482
  return sumMetricFromUiData(this.yoyUiData(), MetricEnum.PURCHASE_REVENUE);
57134
57483
  }, ...(ngDevMode ? [{ debugName: "priorYearRevenue" }] : []));
57484
+ this.currentPaceProjection = computed(() => {
57485
+ const revenuePacing = this.pacingMetrics().find(m => m.metric === MetricEnum.PURCHASE_REVENUE);
57486
+ return revenuePacing?.projectedValue || 0;
57487
+ }, ...(ngDevMode ? [{ debugName: "currentPaceProjection" }] : []));
57488
+ this.gapToClose = computed(() => {
57489
+ const target = this.calculatedRevenue();
57490
+ const projection = this.currentPaceProjection();
57491
+ if (target === 0 || projection === 0)
57492
+ return { amount: 0, percentage: 0 };
57493
+ const amount = target - projection;
57494
+ const percentage = (amount / projection) * 100;
57495
+ return { amount, percentage };
57496
+ }, ...(ngDevMode ? [{ debugName: "gapToClose" }] : []));
57135
57497
  this.calculatedRevenue = computed(() => {
57136
57498
  const mode = this.inputMode();
57137
57499
  const priorRevenue = this.priorYearRevenue();
@@ -57237,6 +57599,9 @@ class InitialTargetSettingComponent {
57237
57599
  formatPercentage(value, decimals) {
57238
57600
  return formatPercentage(value, decimals);
57239
57601
  }
57602
+ absValue(value) {
57603
+ return Math.abs(value);
57604
+ }
57240
57605
  sectionCardClasses() {
57241
57606
  return this.viewMode() === ViewModeEnum.DARK
57242
57607
  ? 'bg-slate-800/40 border-slate-700/50'
@@ -57329,37 +57694,39 @@ class InitialTargetSettingComponent {
57329
57694
  : 'text-slate-400';
57330
57695
  }
57331
57696
  static { this.ɵfac = function InitialTargetSettingComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || InitialTargetSettingComponent)(); }; }
57332
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: InitialTargetSettingComponent, selectors: [["symphiq-initial-target-setting"]], inputs: { viewMode: [1, "viewMode"], funnelMetrics: [1, "funnelMetrics"], mainUiData: [1, "mainUiData"], yoyUiData: [1, "yoyUiData"], trendUiData: [1, "trendUiData"], shopId: [1, "shopId"] }, outputs: { targetsCreated: "targetsCreated" }, decls: 27, vars: 20, consts: [[1, "space-y-8", "pb-32"], [1, "rounded-2xl", "border", "shadow-lg", "p-8", 3, "ngClass"], [1, "text-2xl", "font-bold", "mb-6", 3, "ngClass"], [1, "grid", "lg:grid-cols-2", "gap-8"], [1, "space-y-6"], [1, "block", "text-sm", "font-semibold", "mb-2", 3, "ngClass"], [1, "text-xs", "mb-3", 3, "ngClass"], [1, "flex", "gap-2", "mb-4"], [1, "flex-1", "py-2", "px-4", "rounded-lg", "text-sm", "font-semibold", "transition-all", 3, "click", "ngClass"], [1, "relative"], [1, "p-6", "rounded-xl", "border-2", 3, "ngClass"], [1, "text-sm", "font-semibold", "mb-3", 3, "ngClass"], [1, "rounded-xl", "border", "p-4", 3, "ngClass"], [3, "chart", "showAxisLabels", "viewMode", "currencySymbol"], [1, "h-64", "flex", "items-center", "justify-center"], [3, "submitClick", "viewMode", "isValid", "isSubmitting", "validationMessage", "buttonText"], [1, "absolute", "left-4", "top-1/2", "-translate-y-1/2", "text-xl", "font-bold", 3, "ngClass"], ["type", "number", "placeholder", "0", "min", "0", "step", "1000", 1, "w-full", "pl-10", "pr-4", "py-4", "rounded-xl", "text-2xl", "font-bold", "border-2", "transition-all", 3, "ngModelChange", "ngModel", "ngClass"], ["type", "number", "placeholder", "0", "min", "0", "max", "1000", "step", "0.1", 1, "w-full", "pr-10", "pl-4", "py-4", "rounded-xl", "text-2xl", "font-bold", "border-2", "transition-all", 3, "ngModelChange", "ngModel", "ngClass"], [1, "absolute", "right-4", "top-1/2", "-translate-y-1/2", "text-xl", "font-bold", 3, "ngClass"], [1, "space-y-4"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-3xl", "font-bold", 3, "ngClass"], [1, "grid", "grid-cols-2", "gap-4", "pt-4", 3, "ngClass"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "mb-6"], [1, "text-2xl", "font-bold", "mb-2", 3, "ngClass"], [3, "viewMode", "calculations"]], template: function InitialTargetSettingComponent_Template(rf, ctx) { if (rf & 1) {
57697
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: InitialTargetSettingComponent, selectors: [["symphiq-initial-target-setting"]], inputs: { viewMode: [1, "viewMode"], funnelMetrics: [1, "funnelMetrics"], mainUiData: [1, "mainUiData"], yoyUiData: [1, "yoyUiData"], trendUiData: [1, "trendUiData"], shopId: [1, "shopId"], pacingMetrics: [1, "pacingMetrics"], dataResults: [1, "dataResults"] }, outputs: { targetsCreated: "targetsCreated" }, decls: 29, vars: 21, consts: [[1, "space-y-8", "pb-32"], [1, "rounded-2xl", "border", "shadow-lg", "p-8", 3, "ngClass"], [1, "text-2xl", "font-bold", "mb-6", 3, "ngClass"], [1, "grid", "lg:grid-cols-2", "gap-8"], [1, "space-y-6"], [1, "block", "text-sm", "font-semibold", "mb-2", 3, "ngClass"], [1, "space-y-1", "mb-4"], [1, "text-xs", 3, "ngClass"], [1, "flex", "gap-2", "mb-4"], [1, "flex-1", "py-2", "px-4", "rounded-lg", "text-sm", "font-semibold", "transition-all", 3, "click", "ngClass"], [1, "relative"], [1, "p-6", "rounded-xl", "border-2", 3, "ngClass"], [1, "text-sm", "font-semibold", "mb-3", 3, "ngClass"], [1, "rounded-xl", "border", "p-4", 3, "ngClass"], [3, "chart", "showAxisLabels", "viewMode", "currencySymbol"], [1, "h-64", "flex", "items-center", "justify-center"], [3, "submitClick", "viewMode", "isValid", "isSubmitting", "validationMessage", "buttonText"], [1, "absolute", "left-4", "top-1/2", "-translate-y-1/2", "text-xl", "font-bold", 3, "ngClass"], ["type", "number", "placeholder", "0", "min", "0", "step", "1000", 1, "w-full", "pl-10", "pr-4", "py-4", "rounded-xl", "text-2xl", "font-bold", "border-2", "transition-all", 3, "ngModelChange", "ngModel", "ngClass"], ["type", "number", "placeholder", "0", "min", "0", "max", "1000", "step", "0.1", 1, "w-full", "pr-10", "pl-4", "py-4", "rounded-xl", "text-2xl", "font-bold", "border-2", "transition-all", 3, "ngModelChange", "ngModel", "ngClass"], [1, "absolute", "right-4", "top-1/2", "-translate-y-1/2", "text-xl", "font-bold", 3, "ngClass"], [1, "space-y-4"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-3xl", "font-bold", 3, "ngClass"], [1, "grid", "grid-cols-2", "gap-4", "pt-4", 3, "ngClass"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "mb-6"], [1, "text-2xl", "font-bold", "mb-2", 3, "ngClass"], [3, "viewMode", "calculations", "pacingMetrics"]], template: function InitialTargetSettingComponent_Template(rf, ctx) { if (rf & 1) {
57333
57698
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h2", 2);
57334
57699
  i0.ɵɵtext(3, " Calculate Your Revenue Target ");
57335
57700
  i0.ɵɵelementEnd();
57336
57701
  i0.ɵɵelementStart(4, "div", 3)(5, "div", 4)(6, "div")(7, "label", 5);
57337
57702
  i0.ɵɵtext(8);
57338
57703
  i0.ɵɵelementEnd();
57339
- i0.ɵɵelementStart(9, "p", 6);
57340
- i0.ɵɵtext(10);
57704
+ i0.ɵɵelementStart(9, "div", 6)(10, "p", 7);
57705
+ i0.ɵɵtext(11);
57706
+ i0.ɵɵelementEnd();
57707
+ i0.ɵɵconditionalCreate(12, InitialTargetSettingComponent_Conditional_12_Template, 2, 2, "p", 7);
57341
57708
  i0.ɵɵelementEnd();
57342
- i0.ɵɵelementStart(11, "div", 7)(12, "button", 8);
57343
- i0.ɵɵlistener("click", function InitialTargetSettingComponent_Template_button_click_12_listener() { return ctx.setInputMode("absolute"); });
57344
- i0.ɵɵtext(13, " Absolute Amount ");
57709
+ i0.ɵɵelementStart(13, "div", 8)(14, "button", 9);
57710
+ i0.ɵɵlistener("click", function InitialTargetSettingComponent_Template_button_click_14_listener() { return ctx.setInputMode("absolute"); });
57711
+ i0.ɵɵtext(15, " Absolute Amount ");
57345
57712
  i0.ɵɵelementEnd();
57346
- i0.ɵɵelementStart(14, "button", 8);
57347
- i0.ɵɵlistener("click", function InitialTargetSettingComponent_Template_button_click_14_listener() { return ctx.setInputMode("percentage"); });
57348
- i0.ɵɵtext(15, " % Increase ");
57713
+ i0.ɵɵelementStart(16, "button", 9);
57714
+ i0.ɵɵlistener("click", function InitialTargetSettingComponent_Template_button_click_16_listener() { return ctx.setInputMode("percentage"); });
57715
+ i0.ɵɵtext(17, " % Increase ");
57349
57716
  i0.ɵɵelementEnd()();
57350
- i0.ɵɵconditionalCreate(16, InitialTargetSettingComponent_Conditional_16_Template, 4, 3, "div", 9)(17, InitialTargetSettingComponent_Conditional_17_Template, 4, 3, "div", 9);
57717
+ i0.ɵɵconditionalCreate(18, InitialTargetSettingComponent_Conditional_18_Template, 4, 3, "div", 10)(19, InitialTargetSettingComponent_Conditional_19_Template, 4, 3, "div", 10);
57351
57718
  i0.ɵɵelementEnd();
57352
- i0.ɵɵconditionalCreate(18, InitialTargetSettingComponent_Conditional_18_Template, 18, 12, "div", 10);
57719
+ i0.ɵɵconditionalCreate(20, InitialTargetSettingComponent_Conditional_20_Template, 19, 13, "div", 11);
57353
57720
  i0.ɵɵelementEnd();
57354
- i0.ɵɵelementStart(19, "div")(20, "p", 11);
57355
- i0.ɵɵtext(21, " Year-over-Year Revenue Trend ");
57721
+ i0.ɵɵelementStart(21, "div")(22, "p", 12);
57722
+ i0.ɵɵtext(23, " Year-over-Year Revenue Trend ");
57356
57723
  i0.ɵɵelementEnd();
57357
- i0.ɵɵelementStart(22, "div", 12);
57358
- i0.ɵɵconditionalCreate(23, InitialTargetSettingComponent_Conditional_23_Template, 1, 4, "symphiq-area-chart", 13)(24, InitialTargetSettingComponent_Conditional_24_Template, 3, 1, "div", 14);
57724
+ i0.ɵɵelementStart(24, "div", 13);
57725
+ i0.ɵɵconditionalCreate(25, InitialTargetSettingComponent_Conditional_25_Template, 1, 4, "symphiq-area-chart", 14)(26, InitialTargetSettingComponent_Conditional_26_Template, 3, 1, "div", 15);
57359
57726
  i0.ɵɵelementEnd()()()();
57360
- i0.ɵɵconditionalCreate(25, InitialTargetSettingComponent_Conditional_25_Template, 7, 6, "div", 1);
57361
- i0.ɵɵelementStart(26, "symphiq-sticky-submit-bar", 15);
57362
- i0.ɵɵlistener("submitClick", function InitialTargetSettingComponent_Template_symphiq_sticky_submit_bar_submitClick_26_listener() { return ctx.handleSubmit(); });
57727
+ i0.ɵɵconditionalCreate(27, InitialTargetSettingComponent_Conditional_27_Template, 7, 7, "div", 1);
57728
+ i0.ɵɵelementStart(28, "symphiq-sticky-submit-bar", 16);
57729
+ i0.ɵɵlistener("submitClick", function InitialTargetSettingComponent_Template_symphiq_sticky_submit_bar_submitClick_28_listener() { return ctx.handleSubmit(); });
57363
57730
  i0.ɵɵelementEnd()();
57364
57731
  } if (rf & 2) {
57365
57732
  i0.ɵɵadvance();
@@ -57370,26 +57737,28 @@ class InitialTargetSettingComponent {
57370
57737
  i0.ɵɵproperty("ngClass", ctx.labelClasses());
57371
57738
  i0.ɵɵadvance();
57372
57739
  i0.ɵɵtextInterpolate1(" ", ctx.currentYear(), " Revenue ");
57373
- i0.ɵɵadvance();
57740
+ i0.ɵɵadvance(2);
57374
57741
  i0.ɵɵproperty("ngClass", ctx.priorYearLabelClasses());
57375
57742
  i0.ɵɵadvance();
57376
57743
  i0.ɵɵtextInterpolate2(" ", ctx.priorYear(), " Revenue: ", ctx.formatCurrency(ctx.priorYearRevenue()), " ");
57744
+ i0.ɵɵadvance();
57745
+ i0.ɵɵconditional(ctx.currentPaceProjection() > 0 ? 12 : -1);
57377
57746
  i0.ɵɵadvance(2);
57378
57747
  i0.ɵɵproperty("ngClass", ctx.inputModeButtonClasses("absolute"));
57379
57748
  i0.ɵɵadvance(2);
57380
57749
  i0.ɵɵproperty("ngClass", ctx.inputModeButtonClasses("percentage"));
57381
57750
  i0.ɵɵadvance(2);
57382
- i0.ɵɵconditional(ctx.inputMode() === "absolute" ? 16 : 17);
57751
+ i0.ɵɵconditional(ctx.inputMode() === "absolute" ? 18 : 19);
57383
57752
  i0.ɵɵadvance(2);
57384
- i0.ɵɵconditional(ctx.calculatedRevenue() > 0 ? 18 : -1);
57753
+ i0.ɵɵconditional(ctx.calculatedRevenue() > 0 ? 20 : -1);
57385
57754
  i0.ɵɵadvance(2);
57386
57755
  i0.ɵɵproperty("ngClass", ctx.chartTitleClasses());
57387
57756
  i0.ɵɵadvance(2);
57388
57757
  i0.ɵɵproperty("ngClass", ctx.chartContainerClasses());
57389
57758
  i0.ɵɵadvance();
57390
- i0.ɵɵconditional(ctx.revenueChartData() ? 23 : 24);
57759
+ i0.ɵɵconditional(ctx.revenueChartData() ? 25 : 26);
57391
57760
  i0.ɵɵadvance(2);
57392
- i0.ɵɵconditional(ctx.showMetricsVisualization() ? 25 : -1);
57761
+ i0.ɵɵconditional(ctx.showMetricsVisualization() ? 27 : -1);
57393
57762
  i0.ɵɵadvance();
57394
57763
  i0.ɵɵproperty("viewMode", ctx.viewMode())("isValid", ctx.isValid())("isSubmitting", ctx.isSubmitting())("validationMessage", ctx.validationMessage())("buttonText", "Set Revenue Targets");
57395
57764
  } }, dependencies: [CommonModule, i1$1.NgClass, FormsModule, i2$1.DefaultValueAccessor, i2$1.NumberValueAccessor, i2$1.NgControlStatus, i2$1.MinValidator, i2$1.MaxValidator, i2$1.NgModel, FunnelMetricsVisualizationComponent,
@@ -57422,9 +57791,16 @@ class InitialTargetSettingComponent {
57422
57791
  <label [ngClass]="labelClasses()" class="block text-sm font-semibold mb-2">
57423
57792
  {{ currentYear() }} Revenue
57424
57793
  </label>
57425
- <p [ngClass]="priorYearLabelClasses()" class="text-xs mb-3">
57426
- {{ priorYear() }} Revenue: {{ formatCurrency(priorYearRevenue()) }}
57427
- </p>
57794
+ <div class="space-y-1 mb-4">
57795
+ <p [ngClass]="priorYearLabelClasses()" class="text-xs">
57796
+ {{ priorYear() }} Revenue: {{ formatCurrency(priorYearRevenue()) }}
57797
+ </p>
57798
+ @if (currentPaceProjection() > 0) {
57799
+ <p [ngClass]="priorYearLabelClasses()" class="text-xs">
57800
+ Current Pace Projection: {{ formatCurrency(currentPaceProjection()) }}
57801
+ </p>
57802
+ }
57803
+ </div>
57428
57804
 
57429
57805
  <div class="flex gap-2 mb-4">
57430
57806
  <button
@@ -57504,6 +57880,26 @@ class InitialTargetSettingComponent {
57504
57880
  </p>
57505
57881
  </div>
57506
57882
  </div>
57883
+ @if (currentPaceProjection() > 0 && gapToClose().amount !== 0) {
57884
+ <div class="grid grid-cols-2 gap-4 pt-4" [ngClass]="calculatedDividerClasses()">
57885
+ <div>
57886
+ <p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
57887
+ Gap to Close
57888
+ </p>
57889
+ <p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
57890
+ {{ formatCurrency(absValue(gapToClose().amount)) }}
57891
+ </p>
57892
+ </div>
57893
+ <div>
57894
+ <p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
57895
+ Additional Growth Needed
57896
+ </p>
57897
+ <p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
57898
+ {{ gapToClose().amount > 0 ? '+' : '' }}{{ formatPercentage(gapToClose().percentage, 1) }}
57899
+ </p>
57900
+ </div>
57901
+ </div>
57902
+ }
57507
57903
  </div>
57508
57904
  </div>
57509
57905
  }
@@ -57547,6 +57943,7 @@ class InitialTargetSettingComponent {
57547
57943
  <symphiq-funnel-metrics-visualization
57548
57944
  [viewMode]="viewMode()"
57549
57945
  [calculations]="metricCalculations()"
57946
+ [pacingMetrics]="pacingMetrics()"
57550
57947
  />
57551
57948
  </div>
57552
57949
  }
@@ -57562,8 +57959,8 @@ class InitialTargetSettingComponent {
57562
57959
  </div>
57563
57960
  `
57564
57961
  }]
57565
- }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", 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 }] }], shopId: [{ type: i0.Input, args: [{ isSignal: true, alias: "shopId", required: false }] }], targetsCreated: [{ type: i0.Output, args: ["targetsCreated"] }] }); })();
57566
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber: 179 }); })();
57962
+ }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", 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 }] }], shopId: [{ type: i0.Input, args: [{ isSignal: true, alias: "shopId", required: false }] }], pacingMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingMetrics", required: false }] }], dataResults: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataResults", required: false }] }], targetsCreated: [{ type: i0.Output, args: ["targetsCreated"] }] }); })();
57963
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber: 215 }); })();
57567
57964
 
57568
57965
  function IndeterminateSpinnerComponent_For_5_Template(rf, ctx) { if (rf & 1) {
57569
57966
  i0.ɵɵelement(0, "div", 5);
@@ -57743,7 +58140,7 @@ function SymphiqRevenueCalculatorDashboardComponent_Conditional_25_Template(rf,
57743
58140
  const ctx_r0 = i0.ɵɵnextContext();
57744
58141
  i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("dataLoadStatus", ctx_r0.dataLoadStatus() ?? ctx_r0.ShopDataLoadStatusEnum.NOT_LOADED)("hasTargets", false);
57745
58142
  i0.ɵɵadvance(2);
57746
- i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("funnelMetrics", ctx_r0.funnelMetrics() ?? i0.ɵɵpureFunction0(9, _c0$q))("mainUiData", ctx_r0.mainUiData())("yoyUiData", ctx_r0.yoyUiData())("trendUiData", ctx_r0.trendUiData())("shopId", ctx_r0.shopId() ?? 0);
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());
57747
58144
  } }
57748
58145
  function SymphiqRevenueCalculatorDashboardComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
57749
58146
  i0.ɵɵelement(0, "symphiq-revenue-calculator-welcome-banner", 14);
@@ -57782,6 +58179,8 @@ class SymphiqRevenueCalculatorDashboardComponent {
57782
58179
  this.mainUiData = input(undefined, ...(ngDevMode ? [{ debugName: "mainUiData" }] : []));
57783
58180
  this.yoyUiData = input(undefined, ...(ngDevMode ? [{ debugName: "yoyUiData" }] : []));
57784
58181
  this.trendUiData = input(undefined, ...(ngDevMode ? [{ debugName: "trendUiData" }] : []));
58182
+ this.pacingMetrics = input([], ...(ngDevMode ? [{ debugName: "pacingMetrics" }] : []));
58183
+ this.dataResults = input([], ...(ngDevMode ? [{ debugName: "dataResults" }] : []));
57785
58184
  this.shopId = input(0, ...(ngDevMode ? [{ debugName: "shopId" }] : []));
57786
58185
  this.embedded = input(false, ...(ngDevMode ? [{ debugName: "embedded" }] : []));
57787
58186
  this.scrollEvent = input(...(ngDevMode ? [undefined, { debugName: "scrollEvent" }] : []));
@@ -57898,7 +58297,7 @@ class SymphiqRevenueCalculatorDashboardComponent {
57898
58297
  static { this.ɵfac = function SymphiqRevenueCalculatorDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SymphiqRevenueCalculatorDashboardComponent)(); }; }
57899
58298
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SymphiqRevenueCalculatorDashboardComponent, selectors: [["symphiq-revenue-calculator-dashboard"]], hostBindings: function SymphiqRevenueCalculatorDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
57900
58299
  i0.ɵɵlistener("scroll", function SymphiqRevenueCalculatorDashboardComponent_scroll_HostBindingHandler($event) { return ctx.onWindowScroll($event); }, i0.ɵɵresolveWindow);
57901
- } }, 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"], 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"], [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) {
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) {
57902
58301
  i0.ɵɵelementStart(0, "div", 0)(1, "div");
57903
58302
  i0.ɵɵelement(2, "div", 1);
57904
58303
  i0.ɵɵelementEnd();
@@ -57916,7 +58315,7 @@ class SymphiqRevenueCalculatorDashboardComponent {
57916
58315
  i0.ɵɵlistener("stepClick", function SymphiqRevenueCalculatorDashboardComponent_Template_symphiq_journey_progress_indicator_stepClick_20_listener($event) { return ctx.stepClick.emit($event); })("nextStepClick", function SymphiqRevenueCalculatorDashboardComponent_Template_symphiq_journey_progress_indicator_nextStepClick_20_listener() { return ctx.nextStepClick.emit(); });
57917
58316
  i0.ɵɵelementEnd();
57918
58317
  i0.ɵɵelementStart(21, "main", 11)(22, "div", 6);
57919
- i0.ɵɵconditionalCreate(23, SymphiqRevenueCalculatorDashboardComponent_Conditional_23_Template, 2, 1, "div", 12)(24, SymphiqRevenueCalculatorDashboardComponent_Conditional_24_Template, 10, 8)(25, SymphiqRevenueCalculatorDashboardComponent_Conditional_25_Template, 3, 10)(26, SymphiqRevenueCalculatorDashboardComponent_Conditional_26_Template, 10, 7);
58318
+ i0.ɵɵconditionalCreate(23, SymphiqRevenueCalculatorDashboardComponent_Conditional_23_Template, 2, 1, "div", 12)(24, SymphiqRevenueCalculatorDashboardComponent_Conditional_24_Template, 10, 8)(25, SymphiqRevenueCalculatorDashboardComponent_Conditional_25_Template, 3, 12)(26, SymphiqRevenueCalculatorDashboardComponent_Conditional_26_Template, 10, 7);
57920
58319
  i0.ɵɵelementEnd()()()();
57921
58320
  } if (rf & 2) {
57922
58321
  i0.ɵɵproperty("ngClass", ctx.getContainerClasses());
@@ -57965,179 +58364,181 @@ class SymphiqRevenueCalculatorDashboardComponent {
57965
58364
  IndeterminateSpinnerComponent
57966
58365
  ],
57967
58366
  changeDetection: ChangeDetectionStrategy.OnPush,
57968
- template: `
57969
- <div [ngClass]="getContainerClasses()">
57970
- <!-- Scroll Progress Bar -->
57971
- <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'">
57972
- <div
57973
- [style.width.%]="scrollProgress()"
57974
- [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
57975
- class="h-full transition-all duration-200 ease-out">
57976
- </div>
57977
- </div>
57978
-
57979
- <!-- Animated Background Bubbles -->
57980
- <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>
57981
-
57982
- <div class="relative z-[51]">
57983
- <header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50">
57984
- <!-- Expanded Header -->
57985
- <div
57986
- class="transition-all duration-300 ease-in-out overflow-hidden"
57987
- [class.max-h-0]="headerScrollService.isScrolled()"
57988
- [class.opacity-0]="headerScrollService.isScrolled()"
57989
- [class.max-h-96]="!headerScrollService.isScrolled()"
57990
- [class.opacity-100]="!headerScrollService.isScrolled()">
57991
- <div
57992
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"
57993
- [class.pointer-events-none]="headerScrollService.isScrolled()"
57994
- [class.pointer-events-auto]="!headerScrollService.isScrolled()">
57995
- <div class="flex items-center justify-between">
57996
- <div>
57997
- <h1 [ngClass]="getMainTitleClasses()">
57998
- Revenue Calculator
57999
- </h1>
58000
- <p [ngClass]="getSubtitleClasses()">
58001
- Set Metric-Level Targets for Bottom-Up Revenue Planning
58002
- </p>
58003
- </div>
58004
- </div>
58005
- </div>
58006
- </div>
58007
-
58008
- <!-- Condensed Header -->
58009
- <div
58010
- class="transition-all duration-300 ease-in-out overflow-hidden"
58011
- [class.max-h-0]="!headerScrollService.isScrolled()"
58012
- [class.opacity-0]="!headerScrollService.isScrolled()"
58013
- [class.max-h-20]="headerScrollService.isScrolled()"
58014
- [class.opacity-100]="headerScrollService.isScrolled()">
58015
- <div
58016
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"
58017
- [class.pointer-events-none]="!headerScrollService.isScrolled()"
58018
- [class.pointer-events-auto]="headerScrollService.isScrolled()">
58019
- <div class="flex items-center justify-between">
58020
- <div class="flex-1 min-w-0 mr-4">
58021
- <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'">
58022
- Revenue Calculator
58023
- </h1>
58024
- </div>
58025
- </div>
58026
- </div>
58027
- </div>
58028
- </header>
58029
-
58030
- <!-- Journey Progress Indicator -->
58031
- <symphiq-journey-progress-indicator
58032
- [viewMode]="viewMode()"
58033
- [currentStepId]="JourneyStepIdEnum.REVENUE_CALCULATOR"
58034
- [showNextStepAction]="hasCurrentYearTargets()"
58035
- [forDemo]="forDemo()"
58036
- [maxAccessibleStepId]="maxAccessibleStepId()"
58037
- (stepClick)="stepClick.emit($event)"
58038
- (nextStepClick)="nextStepClick.emit()"
58039
- />
58040
-
58041
- <main class="relative">
58042
- <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
58043
-
58044
- <!-- State 1: Pure Loading (isLoading = true) -->
58045
- @if (isLoading()) {
58046
- <div class="flex items-center justify-center min-h-[400px]">
58047
- <symphiq-indeterminate-spinner
58048
- [viewMode]="viewMode()"
58049
- size="large"
58050
- />
58051
- </div>
58052
- }
58053
-
58054
- <!-- State 2: Data Loading Message (isLoading = false && dataLoadStatus !== FULLY_LOADED) -->
58055
- @else if (dataLoadStatus() !== ShopDataLoadStatusEnum.FULLY_LOADED) {
58056
- <symphiq-revenue-calculator-welcome-banner
58057
- [viewMode]="viewMode()"
58058
- [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58059
- [hasTargets]="false"
58060
- />
58061
-
58062
- <!-- Loading Message Card -->
58063
- <div [ngClass]="loadingMessageContainerClasses()" class="mt-8 rounded-2xl border shadow-lg overflow-hidden">
58064
- <div [ngClass]="loadingMessageContentClasses()" class="px-8 py-12">
58065
- <div class="flex flex-col items-center text-center space-y-6">
58066
- <symphiq-indeterminate-spinner
58067
- [viewMode]="viewMode()"
58068
- size="large"
58069
- />
58070
- <div class="space-y-2">
58071
- <h3 [ngClass]="loadingTitleClasses()" class="text-xl font-bold">
58072
- Downloading Your Google Analytics 4 Data
58073
- </h3>
58074
- <p [ngClass]="loadingTextClasses()" class="text-sm max-w-md">
58075
- Symphiq is fetching your historical metrics to establish baseline performance. This may take a moment as we gather your funnel data.
58076
- </p>
58077
- </div>
58078
- </div>
58079
- </div>
58080
- </div>
58081
- }
58082
-
58083
- <!-- State 3a: Initial Target Setting (isLoading = false && dataLoadStatus === FULLY_LOADED && !hasCurrentYearTargets) -->
58084
- @else if (!hasCurrentYearTargets()) {
58085
- <symphiq-revenue-calculator-welcome-banner
58086
- [viewMode]="viewMode()"
58087
- [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58088
- [hasTargets]="false"
58089
- />
58090
-
58091
- <div class="mt-8">
58092
- <symphiq-initial-target-setting
58093
- [viewMode]="viewMode()"
58094
- [funnelMetrics]="funnelMetrics() ?? []"
58095
- [mainUiData]="mainUiData()"
58096
- [yoyUiData]="yoyUiData()"
58097
- [trendUiData]="trendUiData()"
58098
- [shopId]="shopId() ?? 0"
58099
- (targetsCreated)="targetsCreated.emit($event)"
58100
- />
58101
- </div>
58102
- }
58103
-
58104
- <!-- State 3b: Final Dashboard (isLoading = false && dataLoadStatus === FULLY_LOADED && hasCurrentYearTargets) -->
58105
- @else {
58106
- <symphiq-revenue-calculator-welcome-banner
58107
- [viewMode]="viewMode()"
58108
- [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58109
- [hasTargets]="true"
58110
- />
58111
-
58112
- <!-- Placeholder for Revenue Calculator Content -->
58113
- <div [ngClass]="placeholderContainerClasses()" class="mt-8 rounded-2xl border-2 border-dashed p-12">
58114
- <div class="text-center space-y-4">
58115
- <div class="flex justify-center">
58116
- <svg [ngClass]="placeholderIconClasses()" class="w-16 h-16" fill="none" stroke="currentColor" viewBox="0 0 24 24">
58117
- <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>
58118
- </svg>
58119
- </div>
58120
- <h3 [ngClass]="placeholderTitleClasses()" class="text-2xl font-bold">
58121
- Revenue Calculator Dashboard
58122
- </h3>
58123
- <p [ngClass]="placeholderTextClasses()" class="text-base max-w-2xl mx-auto">
58124
- Your targets are set! The full revenue calculator dashboard with pacing and insights will be displayed here.
58125
- </p>
58126
- </div>
58127
- </div>
58128
- }
58129
-
58130
- </div>
58131
- </main>
58132
- </div>
58133
- </div>
58367
+ template: `
58368
+ <div [ngClass]="getContainerClasses()">
58369
+ <!-- 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'">
58371
+ <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">
58375
+ </div>
58376
+ </div>
58377
+
58378
+ <!-- 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>
58380
+
58381
+ <div class="relative z-[51]">
58382
+ <header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50">
58383
+ <!-- Expanded Header -->
58384
+ <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()">
58390
+ <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()">
58394
+ <div class="flex items-center justify-between">
58395
+ <div>
58396
+ <h1 [ngClass]="getMainTitleClasses()">
58397
+ Revenue Calculator
58398
+ </h1>
58399
+ <p [ngClass]="getSubtitleClasses()">
58400
+ Set Metric-Level Targets for Bottom-Up Revenue Planning
58401
+ </p>
58402
+ </div>
58403
+ </div>
58404
+ </div>
58405
+ </div>
58406
+
58407
+ <!-- Condensed Header -->
58408
+ <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()">
58414
+ <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()">
58418
+ <div class="flex items-center justify-between">
58419
+ <div class="flex-1 min-w-0 mr-4">
58420
+ <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'">
58421
+ Revenue Calculator
58422
+ </h1>
58423
+ </div>
58424
+ </div>
58425
+ </div>
58426
+ </div>
58427
+ </header>
58428
+
58429
+ <!-- Journey Progress Indicator -->
58430
+ <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()"
58438
+ />
58439
+
58440
+ <main class="relative">
58441
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
58442
+
58443
+ <!-- State 1: Pure Loading (isLoading = true) -->
58444
+ @if (isLoading()) {
58445
+ <div class="flex items-center justify-center min-h-[400px]">
58446
+ <symphiq-indeterminate-spinner
58447
+ [viewMode]="viewMode()"
58448
+ size="large"
58449
+ />
58450
+ </div>
58451
+ }
58452
+
58453
+ <!-- State 2: Data Loading Message (isLoading = false && dataLoadStatus !== FULLY_LOADED) -->
58454
+ @else if (dataLoadStatus() !== ShopDataLoadStatusEnum.FULLY_LOADED) {
58455
+ <symphiq-revenue-calculator-welcome-banner
58456
+ [viewMode]="viewMode()"
58457
+ [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58458
+ [hasTargets]="false"
58459
+ />
58460
+
58461
+ <!-- Loading Message Card -->
58462
+ <div [ngClass]="loadingMessageContainerClasses()" class="mt-8 rounded-2xl border shadow-lg overflow-hidden">
58463
+ <div [ngClass]="loadingMessageContentClasses()" class="px-8 py-12">
58464
+ <div class="flex flex-col items-center text-center space-y-6">
58465
+ <symphiq-indeterminate-spinner
58466
+ [viewMode]="viewMode()"
58467
+ size="large"
58468
+ />
58469
+ <div class="space-y-2">
58470
+ <h3 [ngClass]="loadingTitleClasses()" class="text-xl font-bold">
58471
+ Downloading Your Google Analytics 4 Data
58472
+ </h3>
58473
+ <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.
58475
+ </p>
58476
+ </div>
58477
+ </div>
58478
+ </div>
58479
+ </div>
58480
+ }
58481
+
58482
+ <!-- State 3a: Initial Target Setting (isLoading = false && dataLoadStatus === FULLY_LOADED && !hasCurrentYearTargets) -->
58483
+ @else if (!hasCurrentYearTargets()) {
58484
+ <symphiq-revenue-calculator-welcome-banner
58485
+ [viewMode]="viewMode()"
58486
+ [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58487
+ [hasTargets]="false"
58488
+ />
58489
+
58490
+ <div class="mt-8">
58491
+ <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)"
58501
+ />
58502
+ </div>
58503
+ }
58504
+
58505
+ <!-- State 3b: Final Dashboard (isLoading = false && dataLoadStatus === FULLY_LOADED && hasCurrentYearTargets) -->
58506
+ @else {
58507
+ <symphiq-revenue-calculator-welcome-banner
58508
+ [viewMode]="viewMode()"
58509
+ [dataLoadStatus]="dataLoadStatus() ?? ShopDataLoadStatusEnum.NOT_LOADED"
58510
+ [hasTargets]="true"
58511
+ />
58512
+
58513
+ <!-- Placeholder for Revenue Calculator Content -->
58514
+ <div [ngClass]="placeholderContainerClasses()" class="mt-8 rounded-2xl border-2 border-dashed p-12">
58515
+ <div class="text-center space-y-4">
58516
+ <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>
58519
+ </svg>
58520
+ </div>
58521
+ <h3 [ngClass]="placeholderTitleClasses()" class="text-2xl font-bold">
58522
+ Revenue Calculator Dashboard
58523
+ </h3>
58524
+ <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.
58526
+ </p>
58527
+ </div>
58528
+ </div>
58529
+ }
58530
+
58531
+ </div>
58532
+ </main>
58533
+ </div>
58534
+ </div>
58134
58535
  `
58135
58536
  }]
58136
- }], () => [], { 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 }] }], 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: [{
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: [{
58137
58538
  type: HostListener,
58138
58539
  args: ['window:scroll', ['$event']]
58139
58540
  }] }); })();
58140
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqRevenueCalculatorDashboardComponent, { className: "SymphiqRevenueCalculatorDashboardComponent", filePath: "lib/components/revenue-calculator-dashboard/symphiq-revenue-calculator-dashboard.component.ts", lineNumber: 203 }); })();
58541
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqRevenueCalculatorDashboardComponent, { className: "SymphiqRevenueCalculatorDashboardComponent", filePath: "lib/components/revenue-calculator-dashboard/symphiq-revenue-calculator-dashboard.component.ts", lineNumber: 213 }); })();
58141
58542
 
58142
58543
  function HierarchyDisplayComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
58143
58544
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 1);