@eric-emg/symphiq-components 1.2.225 → 1.2.227

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.
@@ -54722,6 +54722,16 @@ function formatPacingDisplay(pacingPercentage) {
54722
54722
  }
54723
54723
  return `${sign}${formatted}% behind`;
54724
54724
  }
54725
+ function formatPacingDisplayFullText(pacingPercentage, status) {
54726
+ const formatted = Math.abs(pacingPercentage).toFixed(1);
54727
+ if (status === 'ahead') {
54728
+ return `Pacing at ${formatted}% above target`;
54729
+ }
54730
+ if (status === 'on-pace') {
54731
+ return `Pacing on target`;
54732
+ }
54733
+ return `Pacing at ${formatted}% below target`;
54734
+ }
54725
54735
  function calculateGapToTarget(projectedValue, targetValue) {
54726
54736
  const amount = targetValue - projectedValue;
54727
54737
  const percentage = projectedValue > 0 ? (amount / projectedValue) * 100 : 0;
@@ -54789,6 +54799,8 @@ class PacingStatusBadgeComponent {
54789
54799
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
54790
54800
  this.pacingPercentage = input(0, ...(ngDevMode ? [{ debugName: "pacingPercentage" }] : []));
54791
54801
  this.status = input('on-pace', ...(ngDevMode ? [{ debugName: "status" }] : []));
54802
+ this.showAsFullText = input(false, ...(ngDevMode ? [{ debugName: "showAsFullText" }] : []));
54803
+ this.isCompact = input(false, ...(ngDevMode ? [{ debugName: "isCompact" }] : []));
54792
54804
  this.displayInfo = computed(() => {
54793
54805
  const isDark = this.viewMode() === ViewModeEnum.DARK;
54794
54806
  return getPacingDisplayInfo(this.pacingPercentage(), this.status(), isDark);
@@ -54797,9 +54809,20 @@ class PacingStatusBadgeComponent {
54797
54809
  const info = this.displayInfo();
54798
54810
  return `${info.bgClass} ${info.colorClass} ${info.borderClass}`;
54799
54811
  }, ...(ngDevMode ? [{ debugName: "badgeClasses" }] : []));
54812
+ this.sizeClasses = computed(() => {
54813
+ const isCompact = this.isCompact();
54814
+ const baseClasses = 'inline-flex items-center gap-1.5 rounded-lg border font-semibold transition-all';
54815
+ if (isCompact) {
54816
+ return `${baseClasses} px-2.5 py-1 text-xs`;
54817
+ }
54818
+ return `${baseClasses} px-3 py-1.5 text-xs`;
54819
+ }, ...(ngDevMode ? [{ debugName: "sizeClasses" }] : []));
54800
54820
  this.iconClasses = computed(() => {
54801
54821
  return this.displayInfo().colorClass;
54802
54822
  }, ...(ngDevMode ? [{ debugName: "iconClasses" }] : []));
54823
+ this.iconSizeClasses = computed(() => {
54824
+ return this.isCompact() ? 'text-sm' : 'text-base';
54825
+ }, ...(ngDevMode ? [{ debugName: "iconSizeClasses" }] : []));
54803
54826
  this.iconSymbol = computed(() => {
54804
54827
  const status = this.status();
54805
54828
  if (status === 'ahead')
@@ -54809,20 +54832,25 @@ class PacingStatusBadgeComponent {
54809
54832
  return '→';
54810
54833
  }, ...(ngDevMode ? [{ debugName: "iconSymbol" }] : []));
54811
54834
  this.displayText = computed(() => {
54835
+ if (this.showAsFullText()) {
54836
+ return formatPacingDisplayFullText(this.pacingPercentage(), this.status());
54837
+ }
54812
54838
  return this.displayInfo().displayText;
54813
54839
  }, ...(ngDevMode ? [{ debugName: "displayText" }] : []));
54814
54840
  }
54815
54841
  static { this.ɵfac = function PacingStatusBadgeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PacingStatusBadgeComponent)(); }; }
54816
- 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) {
54817
- i0.ɵɵelementStart(0, "div", 0)(1, "span", 1);
54842
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PacingStatusBadgeComponent, selectors: [["symphiq-pacing-status-badge"]], inputs: { viewMode: [1, "viewMode"], pacingPercentage: [1, "pacingPercentage"], status: [1, "status"], showAsFullText: [1, "showAsFullText"], isCompact: [1, "isCompact"] }, decls: 5, vars: 8, consts: [[3, "ngClass"]], template: function PacingStatusBadgeComponent_Template(rf, ctx) { if (rf & 1) {
54843
+ i0.ɵɵelementStart(0, "div", 0)(1, "span", 0);
54818
54844
  i0.ɵɵtext(2);
54819
54845
  i0.ɵɵelementEnd();
54820
54846
  i0.ɵɵelementStart(3, "span");
54821
54847
  i0.ɵɵtext(4);
54822
54848
  i0.ɵɵelementEnd()();
54823
54849
  } if (rf & 2) {
54850
+ i0.ɵɵclassMap(ctx.sizeClasses());
54824
54851
  i0.ɵɵproperty("ngClass", ctx.badgeClasses());
54825
54852
  i0.ɵɵadvance();
54853
+ i0.ɵɵclassMap(ctx.iconSizeClasses());
54826
54854
  i0.ɵɵproperty("ngClass", ctx.iconClasses());
54827
54855
  i0.ɵɵadvance();
54828
54856
  i0.ɵɵtextInterpolate1(" ", ctx.iconSymbol(), " ");
@@ -54840,16 +54868,16 @@ class PacingStatusBadgeComponent {
54840
54868
  template: `
54841
54869
  <div
54842
54870
  [ngClass]="badgeClasses()"
54843
- class="inline-flex items-center gap-2 px-3 py-1.5 rounded-lg border font-semibold text-sm transition-all"
54871
+ [class]="sizeClasses()"
54844
54872
  >
54845
- <span [ngClass]="iconClasses()" class="text-lg">
54873
+ <span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
54846
54874
  {{ iconSymbol() }}
54847
54875
  </span>
54848
54876
  <span>{{ displayText() }}</span>
54849
54877
  </div>
54850
54878
  `
54851
54879
  }]
54852
- }], 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 }] }] }); })();
54880
+ }], 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 }] }], showAsFullText: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAsFullText", required: false }] }], isCompact: [{ type: i0.Input, args: [{ isSignal: true, alias: "isCompact", required: false }] }] }); })();
54853
54881
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PacingStatusBadgeComponent, { className: "PacingStatusBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/pacing-status-badge.component.ts", lineNumber: 23 }); })();
54854
54882
 
54855
54883
  const _forTrack0$i = ($index, $item) => $item.stageMetric.metric;
@@ -54857,124 +54885,134 @@ const _forTrack1$3 = ($index, $item) => $item.calc.metric;
54857
54885
  function FunnelMetricsVisualizationComponent_For_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
54858
54886
  i0.ɵɵelementStart(0, "button", 7);
54859
54887
  i0.ɵɵnamespaceSVG();
54860
- i0.ɵɵelementStart(1, "svg", 14);
54861
- i0.ɵɵelement(2, "path", 15);
54888
+ i0.ɵɵelementStart(1, "svg", 13);
54889
+ i0.ɵɵelement(2, "path", 14);
54862
54890
  i0.ɵɵelementEnd()();
54863
54891
  } if (rf & 2) {
54864
54892
  const stage_r1 = i0.ɵɵnextContext().$implicit;
54865
54893
  const ctx_r1 = i0.ɵɵnextContext();
54866
54894
  i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(stage_r1.stageMetric.description, ctx_r1.getMetricTitle(stage_r1.stageMetric)));
54867
54895
  } }
54868
- function FunnelMetricsVisualizationComponent_For_4_Conditional_8_Template(rf, ctx) { if (rf & 1) {
54869
- i0.ɵɵelement(0, "symphiq-pacing-status-badge", 9);
54870
- } if (rf & 2) {
54871
- const stage_r1 = i0.ɵɵnextContext().$implicit;
54872
- const ctx_r1 = i0.ɵɵnextContext();
54873
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", stage_r1.pacingInfo.pacingPercentage)("status", stage_r1.pacingInfo.status);
54874
- } }
54875
- function FunnelMetricsVisualizationComponent_For_4_Conditional_17_Template(rf, ctx) { if (rf & 1) {
54876
- i0.ɵɵelementStart(0, "div")(1, "p", 12);
54896
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_20_Template(rf, ctx) { if (rf & 1) {
54897
+ i0.ɵɵelementStart(0, "div")(1, "p", 9);
54877
54898
  i0.ɵɵtext(2);
54878
54899
  i0.ɵɵelementEnd();
54879
- i0.ɵɵelementStart(3, "p", 13);
54900
+ i0.ɵɵelementStart(3, "p", 11);
54880
54901
  i0.ɵɵtext(4);
54881
- i0.ɵɵelementEnd()();
54902
+ i0.ɵɵelementEnd();
54903
+ i0.ɵɵelement(5, "symphiq-pacing-status-badge", 15);
54904
+ i0.ɵɵelementEnd();
54882
54905
  } if (rf & 2) {
54883
54906
  const stage_r1 = i0.ɵɵnextContext().$implicit;
54884
54907
  const ctx_r1 = i0.ɵɵnextContext();
54885
54908
  i0.ɵɵadvance();
54886
54909
  i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
54887
54910
  i0.ɵɵadvance();
54888
- i0.ɵɵtextInterpolate1(" ", ctx_r1.currentYear(), " Projected ");
54911
+ i0.ɵɵtextInterpolate1(" Pace for ", ctx_r1.currentYear(), " ");
54889
54912
  i0.ɵɵadvance();
54890
54913
  i0.ɵɵproperty("ngClass", ctx_r1.projectedValueClasses());
54891
54914
  i0.ɵɵadvance();
54892
54915
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.pacingInfo.projectedValue, stage_r1.stageMetric.metric, false), " ");
54916
+ i0.ɵɵadvance();
54917
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", stage_r1.pacingInfo.pacingPercentage)("status", stage_r1.pacingInfo.status)("showAsFullText", true);
54893
54918
  } }
54894
- function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
54895
- i0.ɵɵelementStart(0, "button", 24);
54919
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
54920
+ i0.ɵɵelementStart(0, "button", 23);
54896
54921
  i0.ɵɵnamespaceSVG();
54897
54922
  i0.ɵɵelementStart(1, "svg", 29);
54898
- i0.ɵɵelement(2, "path", 15);
54923
+ i0.ɵɵelement(2, "path", 14);
54899
54924
  i0.ɵɵelementEnd()();
54900
54925
  } if (rf & 2) {
54901
54926
  const metric_r3 = i0.ɵɵnextContext().$implicit;
54902
54927
  const ctx_r1 = i0.ɵɵnextContext(3);
54903
54928
  i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(metric_r3.calc.description, ctx_r1.getMetricTitle(metric_r3.calc)));
54904
54929
  } }
54905
- function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_7_Template(rf, ctx) { if (rf & 1) {
54906
- i0.ɵɵelement(0, "symphiq-pacing-status-badge", 9);
54907
- } if (rf & 2) {
54908
- const metric_r3 = i0.ɵɵnextContext().$implicit;
54909
- const ctx_r1 = i0.ɵɵnextContext(3);
54910
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", metric_r3.pacingInfo.pacingPercentage)("status", metric_r3.pacingInfo.status);
54911
- } }
54912
- function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_14_Template(rf, ctx) { if (rf & 1) {
54913
- i0.ɵɵelementStart(0, "div")(1, "p", 28);
54930
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditional_18_Template(rf, ctx) { if (rf & 1) {
54931
+ i0.ɵɵelementStart(0, "div")(1, "p", 25);
54914
54932
  i0.ɵɵtext(2);
54915
- i0.ɵɵelementEnd()();
54933
+ i0.ɵɵelementEnd();
54934
+ i0.ɵɵelementStart(3, "p", 27);
54935
+ i0.ɵɵtext(4);
54936
+ i0.ɵɵelementEnd();
54937
+ i0.ɵɵelement(5, "symphiq-pacing-status-badge", 30);
54938
+ i0.ɵɵelementEnd();
54916
54939
  } if (rf & 2) {
54917
54940
  const metric_r3 = i0.ɵɵnextContext().$implicit;
54918
54941
  const ctx_r1 = i0.ɵɵnextContext(3);
54919
54942
  i0.ɵɵadvance();
54920
54943
  i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
54921
54944
  i0.ɵɵadvance();
54922
- i0.ɵɵtextInterpolate1("Proj: ", ctx_r1.formatMetricValue(metric_r3.pacingInfo.projectedValue, metric_r3.calc.metric, false));
54945
+ i0.ɵɵtextInterpolate1(" Pace for ", ctx_r1.currentYear(), " ");
54946
+ i0.ɵɵadvance();
54947
+ i0.ɵɵproperty("ngClass", ctx_r1.relatedProjectedValueClasses());
54948
+ i0.ɵɵadvance();
54949
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(metric_r3.pacingInfo.projectedValue, metric_r3.calc.metric, false), " ");
54950
+ i0.ɵɵadvance();
54951
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", metric_r3.pacingInfo.pacingPercentage)("status", metric_r3.pacingInfo.status)("showAsFullText", true)("isCompact", true);
54923
54952
  } }
54924
- function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Template(rf, ctx) { if (rf & 1) {
54925
- i0.ɵɵelementStart(0, "div", 20)(1, "div", 21)(2, "div", 22)(3, "p", 23);
54926
- i0.ɵɵtext(4);
54953
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Template(rf, ctx) { if (rf & 1) {
54954
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 21)(2, "p", 22);
54955
+ i0.ɵɵtext(3);
54927
54956
  i0.ɵɵelementEnd();
54928
- i0.ɵɵconditionalCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_5_Template, 3, 2, "button", 24);
54957
+ i0.ɵɵconditionalCreate(4, FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditional_4_Template, 3, 2, "button", 23);
54929
54958
  i0.ɵɵelementEnd();
54930
- i0.ɵɵelementStart(6, "div", 25);
54931
- i0.ɵɵconditionalCreate(7, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_7_Template, 1, 3, "symphiq-pacing-status-badge", 9);
54932
- i0.ɵɵelementStart(8, "span", 26);
54933
- i0.ɵɵtext(9);
54934
- i0.ɵɵelementEnd()()();
54935
- i0.ɵɵelementStart(10, "div", 27)(11, "div")(12, "p", 28);
54936
- i0.ɵɵtext(13);
54959
+ i0.ɵɵelementStart(5, "div", 24)(6, "div")(7, "p", 25);
54960
+ i0.ɵɵtext(8);
54961
+ i0.ɵɵelementEnd();
54962
+ i0.ɵɵelementStart(9, "p", 26);
54963
+ i0.ɵɵtext(10);
54937
54964
  i0.ɵɵelementEnd()();
54938
- i0.ɵɵconditionalCreate(14, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_14_Template, 3, 2, "div");
54939
- i0.ɵɵelementStart(15, "div")(16, "p", 28);
54965
+ i0.ɵɵelementStart(11, "div")(12, "p", 25);
54966
+ i0.ɵɵtext(13);
54967
+ i0.ɵɵelementEnd();
54968
+ i0.ɵɵelementStart(14, "p", 27);
54969
+ i0.ɵɵtext(15);
54970
+ i0.ɵɵelementEnd();
54971
+ i0.ɵɵelementStart(16, "div", 28);
54940
54972
  i0.ɵɵtext(17);
54941
- i0.ɵɵelementEnd()()()();
54973
+ i0.ɵɵelementEnd()();
54974
+ i0.ɵɵconditionalCreate(18, FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditional_18_Template, 6, 9, "div");
54975
+ i0.ɵɵelementEnd()();
54942
54976
  } if (rf & 2) {
54943
54977
  const metric_r3 = ctx.$implicit;
54944
54978
  const ctx_r1 = i0.ɵɵnextContext(3);
54945
54979
  i0.ɵɵproperty("ngClass", ctx_r1.relatedMetricCardClasses());
54946
- i0.ɵɵadvance(3);
54980
+ i0.ɵɵadvance(2);
54947
54981
  i0.ɵɵproperty("ngClass", ctx_r1.relatedMetricNameClasses());
54948
54982
  i0.ɵɵadvance();
54949
54983
  i0.ɵɵtextInterpolate1(" ", ctx_r1.getMetricTitle(metric_r3.calc), " ");
54950
54984
  i0.ɵɵadvance();
54951
- i0.ɵɵconditional(metric_r3.calc.description ? 5 : -1);
54952
- i0.ɵɵadvance(2);
54953
- i0.ɵɵconditional(metric_r3.pacingInfo ? 7 : -1);
54985
+ i0.ɵɵconditional(metric_r3.calc.description ? 4 : -1);
54986
+ i0.ɵɵadvance(3);
54987
+ i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
54954
54988
  i0.ɵɵadvance();
54955
- i0.ɵɵproperty("ngClass", ctx_r1.relatedPercentageBadgeClasses());
54989
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.priorYear(), " Actual ");
54956
54990
  i0.ɵɵadvance();
54957
- i0.ɵɵtextInterpolate2(" ", ctx_r1.getGrowthSign(metric_r3.calc.metric), "", ctx_r1.formatPercentage(ctx_r1.Math.abs(metric_r3.calc.percentageIncrease), 1), " ");
54991
+ i0.ɵɵproperty("ngClass", ctx_r1.relatedValueClasses());
54958
54992
  i0.ɵɵadvance();
54959
- i0.ɵɵproperty("ngClass", metric_r3.pacingInfo ? "grid-cols-3" : "grid-cols-2");
54993
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(metric_r3.calc.currentValue, metric_r3.calc.metric), " ");
54960
54994
  i0.ɵɵadvance(2);
54961
54995
  i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
54962
54996
  i0.ɵɵadvance();
54963
- i0.ɵɵtextInterpolate2("", ctx_r1.priorYear(), ": ", ctx_r1.formatMetricValue(metric_r3.calc.currentValue, metric_r3.calc.metric));
54997
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.currentYear(), " Target ");
54998
+ i0.ɵɵadvance();
54999
+ i0.ɵɵproperty("ngClass", ctx_r1.relatedTargetValueClasses());
54964
55000
  i0.ɵɵadvance();
54965
- i0.ɵɵconditional(metric_r3.pacingInfo ? 14 : -1);
54966
- i0.ɵɵadvance(2);
54967
- i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
55001
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(metric_r3.calc.targetValue, metric_r3.calc.metric, false), " ");
54968
55002
  i0.ɵɵadvance();
54969
- i0.ɵɵtextInterpolate1("Target: ", ctx_r1.formatMetricValue(metric_r3.calc.targetValue, metric_r3.calc.metric, false));
55003
+ i0.ɵɵproperty("ngClass", ctx_r1.relatedPercentageBadgeClasses());
55004
+ i0.ɵɵadvance();
55005
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getTargetIncreaseText(metric_r3.calc.percentageIncrease, metric_r3.calc.metric), " ");
55006
+ i0.ɵɵadvance();
55007
+ i0.ɵɵconditional(metric_r3.pacingInfo ? 18 : -1);
54970
55008
  } }
54971
- function FunnelMetricsVisualizationComponent_For_4_Conditional_23_Template(rf, ctx) { if (rf & 1) {
55009
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_21_Template(rf, ctx) { if (rf & 1) {
54972
55010
  i0.ɵɵelement(0, "div", 16);
54973
55011
  i0.ɵɵelementStart(1, "div", 17)(2, "p", 18);
54974
55012
  i0.ɵɵtext(3, " Related Metrics ");
54975
55013
  i0.ɵɵelementEnd();
54976
55014
  i0.ɵɵelementStart(4, "div", 19);
54977
- i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Template, 18, 15, "div", 20, _forTrack1$3);
55015
+ i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Template, 19, 15, "div", 20, _forTrack1$3);
54978
55016
  i0.ɵɵelementEnd()();
54979
55017
  } if (rf & 2) {
54980
55018
  const stage_r1 = i0.ɵɵnextContext().$implicit;
@@ -54990,26 +55028,25 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
54990
55028
  i0.ɵɵtext(5);
54991
55029
  i0.ɵɵelementEnd();
54992
55030
  i0.ɵɵconditionalCreate(6, FunnelMetricsVisualizationComponent_For_4_Conditional_6_Template, 3, 2, "button", 7);
54993
- i0.ɵɵelementEnd()();
54994
- i0.ɵɵelementStart(7, "div", 8);
54995
- i0.ɵɵconditionalCreate(8, FunnelMetricsVisualizationComponent_For_4_Conditional_8_Template, 1, 3, "symphiq-pacing-status-badge", 9);
54996
- i0.ɵɵelementStart(9, "div", 10);
54997
- i0.ɵɵtext(10);
54998
55031
  i0.ɵɵelementEnd()()();
54999
- i0.ɵɵelementStart(11, "div", 11)(12, "div")(13, "p", 12);
55000
- i0.ɵɵtext(14);
55032
+ i0.ɵɵelementStart(7, "div", 8)(8, "div")(9, "p", 9);
55033
+ i0.ɵɵtext(10);
55001
55034
  i0.ɵɵelementEnd();
55002
- i0.ɵɵelementStart(15, "p", 13);
55003
- i0.ɵɵtext(16);
55035
+ i0.ɵɵelementStart(11, "p", 10);
55036
+ i0.ɵɵtext(12);
55004
55037
  i0.ɵɵelementEnd()();
55005
- i0.ɵɵconditionalCreate(17, FunnelMetricsVisualizationComponent_For_4_Conditional_17_Template, 5, 4, "div");
55006
- i0.ɵɵelementStart(18, "div")(19, "p", 12);
55007
- i0.ɵɵtext(20);
55038
+ i0.ɵɵelementStart(13, "div")(14, "p", 9);
55039
+ i0.ɵɵtext(15);
55008
55040
  i0.ɵɵelementEnd();
55009
- i0.ɵɵelementStart(21, "p", 13);
55010
- i0.ɵɵtext(22);
55011
- i0.ɵɵelementEnd()()();
55012
- i0.ɵɵconditionalCreate(23, FunnelMetricsVisualizationComponent_For_4_Conditional_23_Template, 7, 2);
55041
+ i0.ɵɵelementStart(16, "p", 11);
55042
+ i0.ɵɵtext(17);
55043
+ i0.ɵɵelementEnd();
55044
+ i0.ɵɵelementStart(18, "div", 12);
55045
+ i0.ɵɵtext(19);
55046
+ i0.ɵɵelementEnd()();
55047
+ i0.ɵɵconditionalCreate(20, FunnelMetricsVisualizationComponent_For_4_Conditional_20_Template, 6, 8, "div");
55048
+ i0.ɵɵelementEnd();
55049
+ i0.ɵɵconditionalCreate(21, FunnelMetricsVisualizationComponent_For_4_Conditional_21_Template, 7, 2);
55013
55050
  i0.ɵɵelementEnd();
55014
55051
  } if (rf & 2) {
55015
55052
  const stage_r1 = ctx.$implicit;
@@ -55021,12 +55058,6 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
55021
55058
  i0.ɵɵtextInterpolate1(" ", ctx_r1.getMetricTitle(stage_r1.stageMetric), " ");
55022
55059
  i0.ɵɵadvance();
55023
55060
  i0.ɵɵconditional(stage_r1.stageMetric.description ? 6 : -1);
55024
- i0.ɵɵadvance(2);
55025
- i0.ɵɵconditional(stage_r1.pacingInfo ? 8 : -1);
55026
- i0.ɵɵadvance();
55027
- i0.ɵɵproperty("ngClass", ctx_r1.percentageBadgeClasses());
55028
- i0.ɵɵadvance();
55029
- i0.ɵɵtextInterpolate2(" ", ctx_r1.getGrowthSign(stage_r1.stageMetric.metric), "", ctx_r1.formatPercentage(ctx_r1.Math.abs(stage_r1.stageMetric.percentageIncrease), 1), " ");
55030
55061
  i0.ɵɵadvance(3);
55031
55062
  i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
55032
55063
  i0.ɵɵadvance();
@@ -55035,8 +55066,6 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
55035
55066
  i0.ɵɵproperty("ngClass", ctx_r1.valueClasses());
55036
55067
  i0.ɵɵadvance();
55037
55068
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.stageMetric.currentValue, stage_r1.stageMetric.metric), " ");
55038
- i0.ɵɵadvance();
55039
- i0.ɵɵconditional(stage_r1.pacingInfo ? 17 : -1);
55040
55069
  i0.ɵɵadvance(2);
55041
55070
  i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
55042
55071
  i0.ɵɵadvance();
@@ -55046,7 +55075,13 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
55046
55075
  i0.ɵɵadvance();
55047
55076
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.stageMetric.targetValue, stage_r1.stageMetric.metric, false), " ");
55048
55077
  i0.ɵɵadvance();
55049
- i0.ɵɵconditional(stage_r1.relatedMetrics.length > 0 ? 23 : -1);
55078
+ i0.ɵɵproperty("ngClass", ctx_r1.percentageBadgeClasses());
55079
+ i0.ɵɵadvance();
55080
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getTargetIncreaseText(stage_r1.stageMetric.percentageIncrease, stage_r1.stageMetric.metric), " ");
55081
+ i0.ɵɵadvance();
55082
+ i0.ɵɵconditional(stage_r1.pacingInfo ? 20 : -1);
55083
+ i0.ɵɵadvance();
55084
+ i0.ɵɵconditional(stage_r1.relatedMetrics.length > 0 ? 21 : -1);
55050
55085
  } }
55051
55086
  class FunnelMetricsVisualizationComponent {
55052
55087
  constructor() {
@@ -55153,17 +55188,37 @@ class FunnelMetricsVisualizationComponent {
55153
55188
  }
55154
55189
  relatedPercentageBadgeClasses() {
55155
55190
  return this.viewMode() === ViewModeEnum.DARK
55156
- ? 'bg-purple-900/50 text-purple-300'
55157
- : 'bg-purple-50 text-purple-700';
55191
+ ? 'bg-purple-800/60 text-purple-200'
55192
+ : 'bg-purple-50 text-purple-800 border border-purple-200';
55158
55193
  }
55159
55194
  relatedLabelClasses() {
55160
55195
  return this.viewMode() === ViewModeEnum.DARK
55161
- ? 'text-slate-400'
55162
- : 'text-slate-600';
55196
+ ? 'text-slate-300'
55197
+ : 'text-slate-700';
55198
+ }
55199
+ relatedValueClasses() {
55200
+ return this.viewMode() === ViewModeEnum.DARK
55201
+ ? 'text-white'
55202
+ : 'text-slate-950';
55203
+ }
55204
+ relatedTargetValueClasses() {
55205
+ return this.viewMode() === ViewModeEnum.DARK
55206
+ ? 'text-purple-200'
55207
+ : 'text-purple-800';
55208
+ }
55209
+ relatedProjectedValueClasses() {
55210
+ return this.viewMode() === ViewModeEnum.DARK
55211
+ ? 'text-amber-200'
55212
+ : 'text-amber-800';
55163
55213
  }
55164
55214
  formatPercentage(value, decimals) {
55165
55215
  return formatPercentage(value, decimals);
55166
55216
  }
55217
+ getTargetIncreaseText(percentageIncrease, metric) {
55218
+ const sign = MetricEnumUtil.increaseBad(metric) ? '' : '+';
55219
+ const absValue = Math.abs(percentageIncrease);
55220
+ return `${sign}${formatPercentage(absValue, 1)} increase over ${this.priorYear()}`;
55221
+ }
55167
55222
  formatMetricValue(value, metric, fromUiData = true) {
55168
55223
  if (metric.includes('REVENUE')) {
55169
55224
  return formatCurrency(value);
@@ -55193,11 +55248,11 @@ class FunnelMetricsVisualizationComponent {
55193
55248
  return MetricEnumUtil.increaseBad(metric) ? '-' : '+';
55194
55249
  }
55195
55250
  static { this.ɵfac = function FunnelMetricsVisualizationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FunnelMetricsVisualizationComponent)(); }; }
55196
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FunnelMetricsVisualizationComponent, selectors: [["symphiq-funnel-metrics-visualization"]], inputs: { viewMode: [1, "viewMode"], calculations: [1, "calculations"], pacingMetrics: [1, "pacingMetrics"] }, decls: 5, vars: 0, consts: [[1, "space-y-6"], [1, "space-y-8"], [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, "flex", "items-center", "gap-2", "mb-1"], [1, "text-lg", "font-bold", "leading-tight", "m-0", 3, "ngClass"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "right", 1, "flex-shrink-0", "w-6", "h-6", "rounded-full", "inline-flex", "items-center", "justify-center", "transition-colors", 3, "ngClass", "libSymphiqTooltip"], [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"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [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, "flex", "items-center", "gap-2", "flex-1"], [1, "text-sm", "font-semibold", "leading-tight", 3, "ngClass"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "right", 1, "flex-shrink-0", "w-5", "h-5", "rounded-full", "inline-flex", "items-center", "justify-center", "transition-colors", 3, "ngClass", "libSymphiqTooltip"], [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"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3.5", "h-3.5"]], template: function FunnelMetricsVisualizationComponent_Template(rf, ctx) { if (rf & 1) {
55251
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FunnelMetricsVisualizationComponent, selectors: [["symphiq-funnel-metrics-visualization"]], inputs: { viewMode: [1, "viewMode"], calculations: [1, "calculations"], pacingMetrics: [1, "pacingMetrics"] }, decls: 5, vars: 0, consts: [[1, "space-y-6"], [1, "space-y-8"], [1, "rounded-xl", "p-6", "border-2", "transition-all", "duration-200", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "mb-6"], [1, "flex-1"], [1, "flex", "items-center", "gap-2", "mb-1"], [1, "text-lg", "font-bold", "leading-tight", "m-0", 3, "ngClass"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "right", 1, "flex-shrink-0", "w-6", "h-6", "rounded-full", "inline-flex", "items-center", "justify-center", "transition-colors", 3, "ngClass", "libSymphiqTooltip"], [1, "grid", "grid-cols-3", "gap-6", "mb-4"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-2", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], [1, "text-2xl", "font-bold", "mb-3", 3, "ngClass"], [1, "px-3", "py-1.5", "rounded-lg", "font-semibold", "text-xs", "inline-block", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [3, "viewMode", "pacingPercentage", "status", "showAsFullText"], [1, "my-4", 3, "ngClass"], [1, "space-y-3"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "mb-3", 3, "ngClass"], [1, "grid", "gap-3"], [1, "p-4", "rounded-lg", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "mb-4"], [1, "text-xs", "font-semibold", "leading-tight", 3, "ngClass"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "right", 1, "flex-shrink-0", "w-5", "h-5", "rounded-full", "inline-flex", "items-center", "justify-center", "transition-colors", 3, "ngClass", "libSymphiqTooltip"], [1, "grid", "grid-cols-3", "gap-4"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1.5", 3, "ngClass"], [1, "text-lg", "font-bold", 3, "ngClass"], [1, "text-lg", "font-bold", "mb-2", 3, "ngClass"], [1, "px-2.5", "py-1", "rounded", "text-xs", "font-semibold", "inline-block", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3.5", "h-3.5"], [3, "viewMode", "pacingPercentage", "status", "showAsFullText", "isCompact"]], template: function FunnelMetricsVisualizationComponent_Template(rf, ctx) { if (rf & 1) {
55197
55252
  i0.ɵɵelementStart(0, "div", 0);
55198
55253
  i0.ɵɵelement(1, "symphiq-tooltip-container");
55199
55254
  i0.ɵɵelementStart(2, "div", 1);
55200
- i0.ɵɵrepeaterCreate(3, FunnelMetricsVisualizationComponent_For_4_Template, 24, 18, "div", 2, _forTrack0$i);
55255
+ i0.ɵɵrepeaterCreate(3, FunnelMetricsVisualizationComponent_For_4_Template, 22, 16, "div", 2, _forTrack0$i);
55201
55256
  i0.ɵɵelementEnd()();
55202
55257
  } if (rf & 2) {
55203
55258
  i0.ɵɵadvance(3);
@@ -55211,144 +55266,152 @@ class FunnelMetricsVisualizationComponent {
55211
55266
  standalone: true,
55212
55267
  imports: [CommonModule, PacingStatusBadgeComponent, TooltipDirective, TooltipContainerComponent],
55213
55268
  changeDetection: ChangeDetectionStrategy.OnPush,
55214
- template: `
55215
- <div class="space-y-6">
55216
- <symphiq-tooltip-container />
55217
- <div class="space-y-8">
55218
- @for (stage of funnelStages(); track stage.stageMetric.metric) {
55219
- <div [ngClass]="stageCardClasses()" class="rounded-xl p-6 border-2 transition-all duration-200">
55220
- <div class="flex items-start justify-between mb-4">
55221
- <div class="flex-1">
55222
- <div class="flex items-center gap-2 mb-1">
55223
- <h3 [ngClass]="stageTitleClasses()" class="text-lg font-bold leading-tight m-0">
55224
- {{ getMetricTitle(stage.stageMetric) }}
55225
- </h3>
55226
- @if (stage.stageMetric.description) {
55227
- <button
55228
- type="button"
55229
- [ngClass]="infoIconClasses()"
55230
- class="flex-shrink-0 w-6 h-6 rounded-full inline-flex items-center justify-center transition-colors"
55231
- [libSymphiqTooltip]="getMarkdownTooltipContent(stage.stageMetric.description, getMetricTitle(stage.stageMetric))"
55232
- tooltipType="markdown"
55233
- tooltipPosition="right">
55234
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
55235
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
55236
- </svg>
55237
- </button>
55238
- }
55239
- </div>
55240
- </div>
55241
- <div class="flex items-center gap-3">
55242
- @if (stage.pacingInfo) {
55243
- <symphiq-pacing-status-badge
55244
- [viewMode]="viewMode()"
55245
- [pacingPercentage]="stage.pacingInfo.pacingPercentage"
55246
- [status]="stage.pacingInfo.status"
55247
- />
55248
- }
55249
- <div [ngClass]="percentageBadgeClasses()" class="px-4 py-2 rounded-lg font-bold text-sm">
55250
- {{ getGrowthSign(stage.stageMetric.metric) }}{{ formatPercentage(Math.abs(stage.stageMetric.percentageIncrease), 1) }}
55251
- </div>
55252
- </div>
55253
- </div>
55254
-
55255
- <div class="grid grid-cols-3 gap-4 mb-4">
55256
- <div>
55257
- <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
55258
- {{ priorYear() }} Actual
55259
- </p>
55260
- <p [ngClass]="valueClasses()" class="text-2xl font-bold">
55261
- {{ formatMetricValue(stage.stageMetric.currentValue, stage.stageMetric.metric) }}
55262
- </p>
55263
- </div>
55264
- @if (stage.pacingInfo) {
55265
- <div>
55266
- <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
55267
- {{ currentYear() }} Projected
55268
- </p>
55269
- <p [ngClass]="projectedValueClasses()" class="text-2xl font-bold">
55270
- {{ formatMetricValue(stage.pacingInfo.projectedValue, stage.stageMetric.metric, false) }}
55271
- </p>
55272
- </div>
55273
- }
55274
- <div>
55275
- <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
55276
- {{ currentYear() }} Target
55277
- </p>
55278
- <p [ngClass]="targetValueClasses()" class="text-2xl font-bold">
55279
- {{ formatMetricValue(stage.stageMetric.targetValue, stage.stageMetric.metric, false) }}
55280
- </p>
55281
- </div>
55282
- </div>
55283
-
55284
- @if (stage.relatedMetrics.length > 0) {
55285
- <div [ngClass]="dividerClasses()" class="my-4"></div>
55286
-
55287
- <div class="space-y-2">
55288
- <p [ngClass]="relatedTitleClasses()" class="text-xs font-semibold uppercase tracking-wider mb-3">
55289
- Related Metrics
55290
- </p>
55291
- <div class="grid gap-2">
55292
- @for (metric of stage.relatedMetrics; track metric.calc.metric) {
55293
- <div [ngClass]="relatedMetricCardClasses()" class="p-3 rounded-lg">
55294
- <div class="flex items-center justify-between mb-2">
55295
- <div class="flex items-center gap-2 flex-1">
55296
- <p [ngClass]="relatedMetricNameClasses()" class="text-sm font-semibold leading-tight">
55297
- {{ getMetricTitle(metric.calc) }}
55298
- </p>
55299
- @if (metric.calc.description) {
55300
- <button
55301
- type="button"
55302
- [ngClass]="infoIconClasses()"
55303
- class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
55304
- [libSymphiqTooltip]="getMarkdownTooltipContent(metric.calc.description, getMetricTitle(metric.calc))"
55305
- tooltipType="markdown"
55306
- tooltipPosition="right">
55307
- <svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
55308
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
55309
- </svg>
55310
- </button>
55311
- }
55312
- </div>
55313
- <div class="flex items-center gap-2">
55314
- @if (metric.pacingInfo) {
55315
- <symphiq-pacing-status-badge
55316
- [viewMode]="viewMode()"
55317
- [pacingPercentage]="metric.pacingInfo.pacingPercentage"
55318
- [status]="metric.pacingInfo.status"
55319
- />
55320
- }
55321
- <span [ngClass]="relatedPercentageBadgeClasses()" class="px-2 py-1 rounded text-xs font-bold">
55322
- {{ getGrowthSign(metric.calc.metric) }}{{ formatPercentage(Math.abs(metric.calc.percentageIncrease), 1) }}
55323
- </span>
55324
- </div>
55325
- </div>
55326
- <div class="grid gap-2 text-xs" [ngClass]="metric.pacingInfo ? 'grid-cols-3' : 'grid-cols-2'">
55327
- <div>
55328
- <p [ngClass]="relatedLabelClasses()">{{ priorYear() }}: {{ formatMetricValue(metric.calc.currentValue, metric.calc.metric) }}</p>
55329
- </div>
55330
- @if (metric.pacingInfo) {
55331
- <div>
55332
- <p [ngClass]="relatedLabelClasses()">Proj: {{ formatMetricValue(metric.pacingInfo.projectedValue, metric.calc.metric, false) }}</p>
55333
- </div>
55334
- }
55335
- <div>
55336
- <p [ngClass]="relatedLabelClasses()">Target: {{ formatMetricValue(metric.calc.targetValue, metric.calc.metric, false) }}</p>
55337
- </div>
55338
- </div>
55339
- </div>
55340
- }
55341
- </div>
55342
- </div>
55343
- }
55344
- </div>
55345
- }
55346
- </div>
55347
- </div>
55269
+ template: `
55270
+ <div class="space-y-6">
55271
+ <symphiq-tooltip-container />
55272
+ <div class="space-y-8">
55273
+ @for (stage of funnelStages(); track stage.stageMetric.metric) {
55274
+ <div [ngClass]="stageCardClasses()" class="rounded-xl p-6 border-2 transition-all duration-200">
55275
+ <div class="flex items-start justify-between mb-6">
55276
+ <div class="flex-1">
55277
+ <div class="flex items-center gap-2 mb-1">
55278
+ <h3 [ngClass]="stageTitleClasses()" class="text-lg font-bold leading-tight m-0">
55279
+ {{ getMetricTitle(stage.stageMetric) }}
55280
+ </h3>
55281
+ @if (stage.stageMetric.description) {
55282
+ <button
55283
+ type="button"
55284
+ [ngClass]="infoIconClasses()"
55285
+ class="flex-shrink-0 w-6 h-6 rounded-full inline-flex items-center justify-center transition-colors"
55286
+ [libSymphiqTooltip]="getMarkdownTooltipContent(stage.stageMetric.description, getMetricTitle(stage.stageMetric))"
55287
+ tooltipType="markdown"
55288
+ tooltipPosition="right">
55289
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
55290
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
55291
+ </svg>
55292
+ </button>
55293
+ }
55294
+ </div>
55295
+ </div>
55296
+ </div>
55297
+
55298
+ <div class="grid grid-cols-3 gap-6 mb-4">
55299
+ <div>
55300
+ <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
55301
+ {{ priorYear() }} Actual
55302
+ </p>
55303
+ <p [ngClass]="valueClasses()" class="text-2xl font-bold">
55304
+ {{ formatMetricValue(stage.stageMetric.currentValue, stage.stageMetric.metric) }}
55305
+ </p>
55306
+ </div>
55307
+ <div>
55308
+ <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
55309
+ {{ currentYear() }} Target
55310
+ </p>
55311
+ <p [ngClass]="targetValueClasses()" class="text-2xl font-bold mb-3">
55312
+ {{ formatMetricValue(stage.stageMetric.targetValue, stage.stageMetric.metric, false) }}
55313
+ </p>
55314
+ <div [ngClass]="percentageBadgeClasses()" class="px-3 py-1.5 rounded-lg font-semibold text-xs inline-block">
55315
+ {{ getTargetIncreaseText(stage.stageMetric.percentageIncrease, stage.stageMetric.metric) }}
55316
+ </div>
55317
+ </div>
55318
+ @if (stage.pacingInfo) {
55319
+ <div>
55320
+ <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
55321
+ Pace for {{ currentYear() }}
55322
+ </p>
55323
+ <p [ngClass]="projectedValueClasses()" class="text-2xl font-bold mb-3">
55324
+ {{ formatMetricValue(stage.pacingInfo.projectedValue, stage.stageMetric.metric, false) }}
55325
+ </p>
55326
+ <symphiq-pacing-status-badge
55327
+ [viewMode]="viewMode()"
55328
+ [pacingPercentage]="stage.pacingInfo.pacingPercentage"
55329
+ [status]="stage.pacingInfo.status"
55330
+ [showAsFullText]="true"
55331
+ />
55332
+ </div>
55333
+ }
55334
+ </div>
55335
+
55336
+ @if (stage.relatedMetrics.length > 0) {
55337
+ <div [ngClass]="dividerClasses()" class="my-4"></div>
55338
+
55339
+ <div class="space-y-3">
55340
+ <p [ngClass]="relatedTitleClasses()" class="text-xs font-semibold uppercase tracking-wider mb-3">
55341
+ Related Metrics
55342
+ </p>
55343
+ <div class="grid gap-3">
55344
+ @for (metric of stage.relatedMetrics; track metric.calc.metric) {
55345
+ <div [ngClass]="relatedMetricCardClasses()" class="p-4 rounded-lg">
55346
+ <div class="flex items-center gap-2 mb-4">
55347
+ <p [ngClass]="relatedMetricNameClasses()" class="text-xs font-semibold leading-tight">
55348
+ {{ getMetricTitle(metric.calc) }}
55349
+ </p>
55350
+ @if (metric.calc.description) {
55351
+ <button
55352
+ type="button"
55353
+ [ngClass]="infoIconClasses()"
55354
+ class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
55355
+ [libSymphiqTooltip]="getMarkdownTooltipContent(metric.calc.description, getMetricTitle(metric.calc))"
55356
+ tooltipType="markdown"
55357
+ tooltipPosition="right">
55358
+ <svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
55359
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
55360
+ </svg>
55361
+ </button>
55362
+ }
55363
+ </div>
55364
+ <div class="grid grid-cols-3 gap-4">
55365
+ <div>
55366
+ <p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
55367
+ {{ priorYear() }} Actual
55368
+ </p>
55369
+ <p [ngClass]="relatedValueClasses()" class="text-lg font-bold">
55370
+ {{ formatMetricValue(metric.calc.currentValue, metric.calc.metric) }}
55371
+ </p>
55372
+ </div>
55373
+ <div>
55374
+ <p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
55375
+ {{ currentYear() }} Target
55376
+ </p>
55377
+ <p [ngClass]="relatedTargetValueClasses()" class="text-lg font-bold mb-2">
55378
+ {{ formatMetricValue(metric.calc.targetValue, metric.calc.metric, false) }}
55379
+ </p>
55380
+ <div [ngClass]="relatedPercentageBadgeClasses()" class="px-2.5 py-1 rounded text-xs font-semibold inline-block">
55381
+ {{ getTargetIncreaseText(metric.calc.percentageIncrease, metric.calc.metric) }}
55382
+ </div>
55383
+ </div>
55384
+ @if (metric.pacingInfo) {
55385
+ <div>
55386
+ <p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
55387
+ Pace for {{ currentYear() }}
55388
+ </p>
55389
+ <p [ngClass]="relatedProjectedValueClasses()" class="text-lg font-bold mb-2">
55390
+ {{ formatMetricValue(metric.pacingInfo.projectedValue, metric.calc.metric, false) }}
55391
+ </p>
55392
+ <symphiq-pacing-status-badge
55393
+ [viewMode]="viewMode()"
55394
+ [pacingPercentage]="metric.pacingInfo.pacingPercentage"
55395
+ [status]="metric.pacingInfo.status"
55396
+ [showAsFullText]="true"
55397
+ [isCompact]="true"
55398
+ />
55399
+ </div>
55400
+ }
55401
+ </div>
55402
+ </div>
55403
+ }
55404
+ </div>
55405
+ </div>
55406
+ }
55407
+ </div>
55408
+ }
55409
+ </div>
55410
+ </div>
55348
55411
  `
55349
55412
  }]
55350
55413
  }], 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 }] }] }); })();
55351
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber: 152 }); })();
55414
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber: 160 }); })();
55352
55415
 
55353
55416
  function StickySubmitBarComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
55354
55417
  i0.ɵɵelementStart(0, "div", 4);
@@ -56355,6 +56418,24 @@ function InitialTargetSettingComponent_Conditional_36_Conditional_29_Template(rf
56355
56418
  function InitialTargetSettingComponent_Conditional_36_Conditional_30_Template(rf, ctx) { if (rf & 1) {
56356
56419
  i0.ɵɵtext(0, " -- ");
56357
56420
  } }
56421
+ function InitialTargetSettingComponent_Conditional_36_Conditional_31_Conditional_11_Template(rf, ctx) { if (rf & 1) {
56422
+ i0.ɵɵtext(0);
56423
+ } if (rf & 2) {
56424
+ const ctx_r0 = i0.ɵɵnextContext(3);
56425
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.formatCurrency(ctx_r0.animatedGapAmount()), " ");
56426
+ } }
56427
+ function InitialTargetSettingComponent_Conditional_36_Conditional_31_Conditional_12_Template(rf, ctx) { if (rf & 1) {
56428
+ i0.ɵɵtext(0, " -- ");
56429
+ } }
56430
+ function InitialTargetSettingComponent_Conditional_36_Conditional_31_Conditional_21_Template(rf, ctx) { if (rf & 1) {
56431
+ i0.ɵɵtext(0);
56432
+ } if (rf & 2) {
56433
+ const ctx_r0 = i0.ɵɵnextContext(3);
56434
+ i0.ɵɵtextInterpolate2(" ", ctx_r0.gapToClose().amount > 0 ? "+" : "", "", ctx_r0.formatPercentage(ctx_r0.animatedGapPercentage(), 1), " ");
56435
+ } }
56436
+ function InitialTargetSettingComponent_Conditional_36_Conditional_31_Conditional_22_Template(rf, ctx) { if (rf & 1) {
56437
+ i0.ɵɵtext(0, " -- ");
56438
+ } }
56358
56439
  function InitialTargetSettingComponent_Conditional_36_Conditional_31_Template(rf, ctx) { if (rf & 1) {
56359
56440
  const _r8 = i0.ɵɵgetCurrentView();
56360
56441
  i0.ɵɵelementStart(0, "div", 56)(1, "div", 57);
@@ -56368,20 +56449,20 @@ function InitialTargetSettingComponent_Conditional_36_Conditional_31_Template(rf
56368
56449
  i0.ɵɵtext(9, " Gap to Close ");
56369
56450
  i0.ɵɵelementEnd();
56370
56451
  i0.ɵɵelementStart(10, "p", 62);
56371
- i0.ɵɵtext(11);
56452
+ i0.ɵɵconditionalCreate(11, InitialTargetSettingComponent_Conditional_36_Conditional_31_Conditional_11_Template, 1, 1)(12, InitialTargetSettingComponent_Conditional_36_Conditional_31_Conditional_12_Template, 1, 0);
56372
56453
  i0.ɵɵelementEnd()();
56373
- i0.ɵɵelementStart(12, "div")(13, "div", 64)(14, "p", 14);
56374
- i0.ɵɵtext(15, " Additional Growth Needed ");
56454
+ i0.ɵɵelementStart(13, "div")(14, "div", 64)(15, "p", 14);
56455
+ i0.ɵɵtext(16, " Additional Growth Needed ");
56375
56456
  i0.ɵɵelementEnd();
56376
- i0.ɵɵelementStart(16, "button", 37);
56377
- i0.ɵɵlistener("click", function InitialTargetSettingComponent_Conditional_36_Conditional_31_Template_button_click_16_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
56457
+ i0.ɵɵelementStart(17, "button", 37);
56458
+ i0.ɵɵlistener("click", function InitialTargetSettingComponent_Conditional_36_Conditional_31_Template_button_click_17_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
56378
56459
  i0.ɵɵnamespaceSVG();
56379
- i0.ɵɵelementStart(17, "svg", 38);
56380
- i0.ɵɵelement(18, "path", 39);
56460
+ i0.ɵɵelementStart(18, "svg", 38);
56461
+ i0.ɵɵelement(19, "path", 39);
56381
56462
  i0.ɵɵelementEnd()()();
56382
56463
  i0.ɵɵnamespaceHTML();
56383
- i0.ɵɵelementStart(19, "p", 62);
56384
- i0.ɵɵtext(20);
56464
+ i0.ɵɵelementStart(20, "p", 62);
56465
+ i0.ɵɵconditionalCreate(21, InitialTargetSettingComponent_Conditional_36_Conditional_31_Conditional_21_Template, 1, 2)(22, InitialTargetSettingComponent_Conditional_36_Conditional_31_Conditional_22_Template, 1, 0);
56385
56466
  i0.ɵɵelementEnd()()()();
56386
56467
  } if (rf & 2) {
56387
56468
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -56398,15 +56479,15 @@ function InitialTargetSettingComponent_Conditional_36_Conditional_31_Template(rf
56398
56479
  i0.ɵɵadvance(2);
56399
56480
  i0.ɵɵproperty("ngClass", ctx_r0.calculatedSecondaryClasses());
56400
56481
  i0.ɵɵadvance();
56401
- i0.ɵɵtextInterpolate1(" ", ctx_r0.formatCurrency(ctx_r0.animatedGapAmount()), " ");
56402
- i0.ɵɵadvance(3);
56482
+ i0.ɵɵconditional(ctx_r0.isTargetValid() ? 11 : 12);
56483
+ i0.ɵɵadvance(4);
56403
56484
  i0.ɵɵproperty("ngClass", ctx_r0.calculatedLabelClasses());
56404
56485
  i0.ɵɵadvance(2);
56405
56486
  i0.ɵɵproperty("ngClass", ctx_r0.infoIconClasses())("libSymphiqTooltip", ctx_r0.additionalGrowthTooltip);
56406
56487
  i0.ɵɵadvance(3);
56407
56488
  i0.ɵɵproperty("ngClass", ctx_r0.calculatedSecondaryClasses());
56408
56489
  i0.ɵɵadvance();
56409
- i0.ɵɵtextInterpolate2(" ", ctx_r0.gapToClose().amount > 0 ? "+" : "", "", ctx_r0.formatPercentage(ctx_r0.animatedGapPercentage(), 1), " ");
56490
+ i0.ɵɵconditional(ctx_r0.isTargetValid() ? 21 : 22);
56410
56491
  } }
56411
56492
  function InitialTargetSettingComponent_Conditional_36_Template(rf, ctx) { if (rf & 1) {
56412
56493
  i0.ɵɵelementStart(0, "div", 50)(1, "div")(2, "div", 51)(3, "div")(4, "p", 14);
@@ -56436,7 +56517,7 @@ function InitialTargetSettingComponent_Conditional_36_Template(rf, ctx) { if (rf
56436
56517
  i0.ɵɵelementStart(28, "p", 62);
56437
56518
  i0.ɵɵconditionalCreate(29, InitialTargetSettingComponent_Conditional_36_Conditional_29_Template, 1, 1)(30, InitialTargetSettingComponent_Conditional_36_Conditional_30_Template, 1, 0);
56438
56519
  i0.ɵɵelementEnd()()()();
56439
- i0.ɵɵconditionalCreate(31, InitialTargetSettingComponent_Conditional_36_Conditional_31_Template, 21, 13, "div", 56);
56520
+ i0.ɵɵconditionalCreate(31, InitialTargetSettingComponent_Conditional_36_Conditional_31_Template, 23, 12, "div", 56);
56440
56521
  i0.ɵɵelementEnd()()()();
56441
56522
  } if (rf & 2) {
56442
56523
  const ctx_r0 = i0.ɵɵnextContext();
@@ -56447,7 +56528,7 @@ function InitialTargetSettingComponent_Conditional_36_Template(rf, ctx) { if (rf
56447
56528
  i0.ɵɵadvance();
56448
56529
  i0.ɵɵtextInterpolate1(" ", ctx_r0.currentYear(), " Revenue Target ");
56449
56530
  i0.ɵɵadvance();
56450
- i0.ɵɵclassProp("text-3xl", ctx_r0.calculationState() !== "results" || ctx_r0.detailsExpanded())("text-lg", ctx_r0.calculationState() === "results" && !ctx_r0.detailsExpanded());
56531
+ i0.ɵɵclassProp("lg:text-3xl", ctx_r0.calculationState() !== "results" || ctx_r0.detailsExpanded());
56451
56532
  i0.ɵɵproperty("ngClass", ctx_r0.calculatedValueClasses());
56452
56533
  i0.ɵɵadvance();
56453
56534
  i0.ɵɵconditional(ctx_r0.calculationState() === "results" && ctx_r0.targets() === undefined && ctx_r0.submittedAbsoluteInput() !== null ? 7 : 8);
@@ -56476,7 +56557,7 @@ function InitialTargetSettingComponent_Conditional_36_Template(rf, ctx) { if (rf
56476
56557
  i0.ɵɵadvance();
56477
56558
  i0.ɵɵconditional(ctx_r0.isTargetValid() ? 29 : 30);
56478
56559
  i0.ɵɵadvance(2);
56479
- i0.ɵɵconditional(ctx_r0.currentPaceProjection() > 0 && ctx_r0.gapToClose().amount !== 0 && ctx_r0.isTargetValid() ? 31 : -1);
56560
+ i0.ɵɵconditional(ctx_r0.currentPaceProjection() > 0 ? 31 : -1);
56480
56561
  } }
56481
56562
  function InitialTargetSettingComponent_Conditional_37_Conditional_4_Template(rf, ctx) { if (rf & 1) {
56482
56563
  i0.ɵɵelement(0, "symphiq-area-chart", 23);
@@ -57077,7 +57158,7 @@ class InitialTargetSettingComponent {
57077
57158
  let _t;
57078
57159
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.absoluteInputRef = _t.first);
57079
57160
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.percentageInputRef = _t.first);
57080
- } }, inputs: { viewMode: [1, "viewMode"], funnelMetrics: [1, "funnelMetrics"], mainUiData: [1, "mainUiData"], trendUiData: [1, "trendUiData"], shopId: [1, "shopId"], pacingMetrics: [1, "pacingMetrics"], dataResults: [1, "dataResults"], reverseCalculationResponse: [1, "reverseCalculationResponse"], targets: [1, "targets"] }, outputs: { targetsCreated: "targetsCreated", calculateRevenueRequest: "calculateRevenueRequest" }, decls: 42, vars: 44, consts: [["absoluteInputRef", ""], ["percentageInputRef", ""], [1, "space-y-8", "pb-32"], [1, "rounded-2xl", "border", "shadow-lg", "p-8", 3, "click", "ngClass"], [1, "flex", "items-center", "justify-between", "mb-6"], [1, "text-2xl", "font-bold", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", "chevron-rotate", 3, "chevron-rotate-expanded", "ngClass"], [1, "flex", "flex-col", "gap-4"], [1, "grid", "lg:grid-cols-2", "gap-4"], [1, "p-6", "rounded-xl", "border-2", 3, "click", "ngClass"], [1, "flex", "flex-wrap", "gap-4", "place-content-between"], [1, "flex", "items-center", "gap-2"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", 3, "ngClass"], [1, "text-lg", "font-bold", 3, "ngClass"], [1, "form-area-collapse"], [1, "form-area-content"], [1, "space-y-6"], [1, "chart-in-column"], [1, "chart-in-column-content"], [1, "text-sm", "font-semibold", "mb-3", 3, "ngClass"], [1, "rounded-xl", "border", "p-4", 3, "ngClass"], [3, "chart", "showAxisLabels", "viewMode", "currencySymbol", "height"], [1, "h-64", "flex", "items-center", "justify-center"], [1, "calculated-card-enter", "order-first", "lg:order-last"], [1, "calculated-card-content"], [1, "p-6", "rounded-xl", "border-2", 3, "ngClass", "h-full"], [1, "w-full"], [1, "metrics-section-enter"], [1, "metrics-section-content"], [1, "rounded-2xl", "border", "shadow-lg", "p-8", 3, "ngClass"], [3, "submitClick", "cancelClick", "viewMode", "isValid", "isSubmitting", "validationMessage", "buttonText", "showCancelButton"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", "chevron-rotate", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"], [1, "flex", "items-center", "gap-1"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "top", 1, "flex-shrink-0", "w-4", "h-4", "rounded-full", "inline-flex", "items-center", "justify-center", "transition-colors", 3, "click", "ngClass", "libSymphiqTooltip"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "flex", "gap-2"], [1, "flex-1", "py-2", "px-4", "rounded-lg", "text-sm", "font-semibold", "transition-all", 3, "click", "ngClass"], [1, "relative"], [1, "flex", "justify-end"], [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, "px-4", "py-2", "rounded-lg", "text-sm", "font-semibold", "transition-all", 3, "click", "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "p-6", "rounded-xl", "border-2", 3, "ngClass"], [1, "flex", "items-center", "justify-between"], [1, "font-bold", "transition-all", "duration-300", 3, "ngClass"], [1, "px-4", "py-2", "rounded-lg", "text-sm", "font-semibold", "transition-all", "whitespace-nowrap", 3, "ngClass"], [1, "details-collapse"], [1, "details-collapse-content"], [1, "relative", "pt-6", "mt-6"], [1, "absolute", "top-0", "left-0", "right-0", "flex", "items-center", "-translate-y-1/2"], [1, "flex-1", "h-px", 3, "ngClass"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-semibold", "whitespace-nowrap", 3, "ngClass"], [1, "grid", "grid-cols-2", "gap-4", "pt-2"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "px-4", "py-2", "rounded-lg", "text-sm", "font-semibold", "transition-all", "whitespace-nowrap", 3, "click", "ngClass"], [1, "flex", "items-center", "gap-1", "mb-1"], [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) {
57161
+ } }, inputs: { viewMode: [1, "viewMode"], funnelMetrics: [1, "funnelMetrics"], mainUiData: [1, "mainUiData"], trendUiData: [1, "trendUiData"], shopId: [1, "shopId"], pacingMetrics: [1, "pacingMetrics"], dataResults: [1, "dataResults"], reverseCalculationResponse: [1, "reverseCalculationResponse"], targets: [1, "targets"] }, outputs: { targetsCreated: "targetsCreated", calculateRevenueRequest: "calculateRevenueRequest" }, decls: 42, vars: 44, consts: [["absoluteInputRef", ""], ["percentageInputRef", ""], [1, "space-y-8", "pb-32"], [1, "rounded-2xl", "border", "shadow-lg", "p-8", 3, "click", "ngClass"], [1, "flex", "items-center", "justify-between", "mb-6"], [1, "text-2xl", "font-bold", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", "chevron-rotate", 3, "chevron-rotate-expanded", "ngClass"], [1, "flex", "flex-col", "gap-4"], [1, "grid", "lg:grid-cols-2", "gap-4"], [1, "p-6", "rounded-xl", "border-2", 3, "click", "ngClass"], [1, "flex", "flex-wrap", "gap-4", "place-content-between"], [1, "flex", "items-center", "gap-2"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", 3, "ngClass"], [1, "text-lg", "font-bold", 3, "ngClass"], [1, "form-area-collapse"], [1, "form-area-content"], [1, "space-y-6"], [1, "chart-in-column"], [1, "chart-in-column-content"], [1, "text-sm", "font-semibold", "mb-3", 3, "ngClass"], [1, "rounded-xl", "border", "p-4", 3, "ngClass"], [3, "chart", "showAxisLabels", "viewMode", "currencySymbol", "height"], [1, "h-64", "flex", "items-center", "justify-center"], [1, "calculated-card-enter", "order-first", "lg:order-last"], [1, "calculated-card-content"], [1, "p-6", "rounded-xl", "border-2", 3, "ngClass", "h-full"], [1, "w-full"], [1, "metrics-section-enter"], [1, "metrics-section-content"], [1, "rounded-2xl", "border", "shadow-lg", "p-8", 3, "ngClass"], [3, "submitClick", "cancelClick", "viewMode", "isValid", "isSubmitting", "validationMessage", "buttonText", "showCancelButton"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", "chevron-rotate", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"], [1, "flex", "items-center", "gap-1"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "top", 1, "flex-shrink-0", "w-4", "h-4", "rounded-full", "inline-flex", "items-center", "justify-center", "transition-colors", 3, "click", "ngClass", "libSymphiqTooltip"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "flex", "gap-2"], [1, "flex-1", "py-2", "px-4", "rounded-lg", "text-sm", "font-semibold", "transition-all", 3, "click", "ngClass"], [1, "relative"], [1, "flex", "justify-end"], [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, "px-4", "py-2", "rounded-lg", "text-sm", "font-semibold", "transition-all", 3, "click", "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "p-6", "rounded-xl", "border-2", 3, "ngClass"], [1, "flex", "items-center", "justify-between"], [1, "font-bold", "transition-all", "duration-300", "text-lg", 3, "ngClass"], [1, "px-4", "py-2", "rounded-lg", "text-sm", "font-semibold", "transition-all", "whitespace-nowrap", 3, "ngClass"], [1, "details-collapse"], [1, "details-collapse-content"], [1, "relative", "pt-6", "mt-6"], [1, "absolute", "top-0", "left-0", "right-0", "flex", "items-center", "-translate-y-1/2"], [1, "flex-1", "h-px", 3, "ngClass"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-semibold", "whitespace-nowrap", 3, "ngClass"], [1, "grid", "grid-cols-2", "gap-4", "pt-2"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "px-4", "py-2", "rounded-lg", "text-sm", "font-semibold", "transition-all", "whitespace-nowrap", 3, "click", "ngClass"], [1, "flex", "items-center", "gap-1", "mb-1"], [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) {
57081
57162
  i0.ɵɵelementStart(0, "div", 2);
57082
57163
  i0.ɵɵelement(1, "symphiq-tooltip-container");
57083
57164
  i0.ɵɵelementStart(2, "div", 3);
@@ -57113,7 +57194,7 @@ class InitialTargetSettingComponent {
57113
57194
  i0.ɵɵconditionalCreate(32, InitialTargetSettingComponent_Conditional_32_Template, 1, 5, "symphiq-area-chart", 23)(33, InitialTargetSettingComponent_Conditional_33_Template, 3, 1, "div", 24);
57114
57195
  i0.ɵɵelementEnd()()()()();
57115
57196
  i0.ɵɵelementStart(34, "div", 25)(35, "div", 26);
57116
- i0.ɵɵconditionalCreate(36, InitialTargetSettingComponent_Conditional_36_Template, 32, 25, "div", 27);
57197
+ i0.ɵɵconditionalCreate(36, InitialTargetSettingComponent_Conditional_36_Template, 32, 23, "div", 27);
57117
57198
  i0.ɵɵelementEnd()()();
57118
57199
  i0.ɵɵconditionalCreate(37, InitialTargetSettingComponent_Conditional_37_Template, 6, 3, "div", 28);
57119
57200
  i0.ɵɵelementEnd()();
@@ -57126,7 +57207,7 @@ class InitialTargetSettingComponent {
57126
57207
  } if (rf & 2) {
57127
57208
  i0.ɵɵadvance(2);
57128
57209
  i0.ɵɵstyleProp("top", ctx.calculationState() === "results" ? "148px" : "auto");
57129
- i0.ɵɵclassProp("cursor-pointer", ctx.calculationState() === "results")("sticky", ctx.calculationState() === "results")("z-30", ctx.calculationState() === "results");
57210
+ i0.ɵɵclassProp("cursor-pointer", ctx.calculationState() === "results")("lg:sticky", ctx.calculationState() === "results")("z-30", ctx.calculationState() === "results");
57130
57211
  i0.ɵɵproperty("ngClass", ctx.sectionCardClasses(true));
57131
57212
  i0.ɵɵadvance(2);
57132
57213
  i0.ɵɵproperty("ngClass", ctx.sectionTitleClasses());
@@ -57194,7 +57275,7 @@ class InitialTargetSettingComponent {
57194
57275
  <symphiq-tooltip-container />
57195
57276
  <div [ngClass]="sectionCardClasses(true)" class="rounded-2xl border shadow-lg p-8"
57196
57277
  [class.cursor-pointer]="calculationState() === 'results'"
57197
- [class.sticky]="calculationState() === 'results'"
57278
+ [class.lg:sticky]="calculationState() === 'results'"
57198
57279
  [style.top]="calculationState() === 'results' ? '148px' : 'auto'"
57199
57280
  [class.z-30]="calculationState() === 'results'"
57200
57281
  (click)="onCardClick()">
@@ -57377,9 +57458,8 @@ class InitialTargetSettingComponent {
57377
57458
  <p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
57378
57459
  {{ currentYear() }} Revenue Target
57379
57460
  </p>
57380
- <p [ngClass]="calculatedValueClasses()" class="font-bold transition-all duration-300"
57381
- [class.text-3xl]="calculationState() !== 'results' || detailsExpanded()"
57382
- [class.text-lg]="calculationState() === 'results' && !detailsExpanded()">
57461
+ <p [ngClass]="calculatedValueClasses()" class="font-bold transition-all duration-300 text-lg"
57462
+ [class.lg:text-3xl]="calculationState() !== 'results' || detailsExpanded()">
57383
57463
  @if (calculationState() === 'results' && targets() === undefined && submittedAbsoluteInput() !== null) {
57384
57464
  > {{ formatCurrency(submittedAbsoluteInput()!) }}
57385
57465
  } @else {
@@ -57435,7 +57515,7 @@ class InitialTargetSettingComponent {
57435
57515
  </div>
57436
57516
  </div>
57437
57517
 
57438
- @if (currentPaceProjection() > 0 && gapToClose().amount !== 0 && isTargetValid()) {
57518
+ @if (currentPaceProjection() > 0) {
57439
57519
  <div class="relative pt-6 mt-6">
57440
57520
  <div class="absolute top-0 left-0 right-0 flex items-center -translate-y-1/2">
57441
57521
  <div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
@@ -57450,7 +57530,11 @@ class InitialTargetSettingComponent {
57450
57530
  Gap to Close
57451
57531
  </p>
57452
57532
  <p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
57453
- {{ formatCurrency(animatedGapAmount()) }}
57533
+ @if (isTargetValid()) {
57534
+ {{ formatCurrency(animatedGapAmount()) }}
57535
+ } @else {
57536
+ --
57537
+ }
57454
57538
  </p>
57455
57539
  </div>
57456
57540
  <div>
@@ -57472,7 +57556,11 @@ class InitialTargetSettingComponent {
57472
57556
  </button>
57473
57557
  </div>
57474
57558
  <p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
57475
- {{ gapToClose().amount > 0 ? '+' : '' }}{{ formatPercentage(animatedGapPercentage(), 1) }}
57559
+ @if (isTargetValid()) {
57560
+ {{ gapToClose().amount > 0 ? '+' : '' }}{{ formatPercentage(animatedGapPercentage(), 1) }}
57561
+ } @else {
57562
+ --
57563
+ }
57476
57564
  </p>
57477
57565
  </div>
57478
57566
  </div>
@@ -57561,7 +57649,7 @@ class InitialTargetSettingComponent {
57561
57649
  type: ViewChild,
57562
57650
  args: ['percentageInputRef']
57563
57651
  }], 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 }] }], 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 }] }], reverseCalculationResponse: [{ type: i0.Input, args: [{ isSignal: true, alias: "reverseCalculationResponse", required: false }] }], targets: [{ type: i0.Input, args: [{ isSignal: true, alias: "targets", required: false }] }], targetsCreated: [{ type: i0.Output, args: ["targetsCreated"] }], calculateRevenueRequest: [{ type: i0.Output, args: ["calculateRevenueRequest"] }] }); })();
57564
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber: 513 }); })();
57652
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber: 520 }); })();
57565
57653
 
57566
57654
  function IndeterminateSpinnerComponent_For_5_Template(rf, ctx) { if (rf & 1) {
57567
57655
  i0.ɵɵelement(0, "div", 5);