@eric-emg/symphiq-components 1.2.227 → 1.2.229

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.
@@ -54794,6 +54794,52 @@ function extractProjectedValue(pacingResponse, metricEnum) {
54794
54794
  return projectedValue;
54795
54795
  }
54796
54796
 
54797
+ function PacingStatusBadgeComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
54798
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 2);
54799
+ i0.ɵɵtext(2);
54800
+ i0.ɵɵelementEnd();
54801
+ i0.ɵɵelementStart(3, "div", 3)(4, "span", 3);
54802
+ i0.ɵɵtext(5);
54803
+ i0.ɵɵelementEnd();
54804
+ i0.ɵɵelementStart(6, "span");
54805
+ i0.ɵɵtext(7);
54806
+ i0.ɵɵelementEnd()()();
54807
+ } if (rf & 2) {
54808
+ const ctx_r0 = i0.ɵɵnextContext();
54809
+ i0.ɵɵadvance();
54810
+ i0.ɵɵproperty("ngClass", ctx_r0.overlayBadgeClasses());
54811
+ i0.ɵɵadvance();
54812
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.extractPercentage(), " ");
54813
+ i0.ɵɵadvance();
54814
+ i0.ɵɵclassMap(ctx_r0.sizeClasses());
54815
+ i0.ɵɵproperty("ngClass", ctx_r0.badgeClasses());
54816
+ i0.ɵɵadvance();
54817
+ i0.ɵɵclassMap(ctx_r0.iconSizeClasses());
54818
+ i0.ɵɵproperty("ngClass", ctx_r0.iconClasses());
54819
+ i0.ɵɵadvance();
54820
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.iconSymbol(), " ");
54821
+ i0.ɵɵadvance(2);
54822
+ i0.ɵɵtextInterpolate(ctx_r0.displayTextWithoutPercentage());
54823
+ } }
54824
+ function PacingStatusBadgeComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
54825
+ i0.ɵɵelementStart(0, "div", 3)(1, "span", 3);
54826
+ i0.ɵɵtext(2);
54827
+ i0.ɵɵelementEnd();
54828
+ i0.ɵɵelementStart(3, "span");
54829
+ i0.ɵɵtext(4);
54830
+ i0.ɵɵelementEnd()();
54831
+ } if (rf & 2) {
54832
+ const ctx_r0 = i0.ɵɵnextContext();
54833
+ i0.ɵɵclassMap(ctx_r0.sizeClasses());
54834
+ i0.ɵɵproperty("ngClass", ctx_r0.badgeClasses());
54835
+ i0.ɵɵadvance();
54836
+ i0.ɵɵclassMap(ctx_r0.iconSizeClasses());
54837
+ i0.ɵɵproperty("ngClass", ctx_r0.iconClasses());
54838
+ i0.ɵɵadvance();
54839
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.iconSymbol(), " ");
54840
+ i0.ɵɵadvance(2);
54841
+ i0.ɵɵtextInterpolate(ctx_r0.displayText());
54842
+ } }
54797
54843
  class PacingStatusBadgeComponent {
54798
54844
  constructor() {
54799
54845
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
@@ -54801,6 +54847,7 @@ class PacingStatusBadgeComponent {
54801
54847
  this.status = input('on-pace', ...(ngDevMode ? [{ debugName: "status" }] : []));
54802
54848
  this.showAsFullText = input(false, ...(ngDevMode ? [{ debugName: "showAsFullText" }] : []));
54803
54849
  this.isCompact = input(false, ...(ngDevMode ? [{ debugName: "isCompact" }] : []));
54850
+ this.showEmphasizedPercentage = input(false, ...(ngDevMode ? [{ debugName: "showEmphasizedPercentage" }] : []));
54804
54851
  this.displayInfo = computed(() => {
54805
54852
  const isDark = this.viewMode() === ViewModeEnum.DARK;
54806
54853
  return getPacingDisplayInfo(this.pacingPercentage(), this.status(), isDark);
@@ -54837,25 +54884,38 @@ class PacingStatusBadgeComponent {
54837
54884
  }
54838
54885
  return this.displayInfo().displayText;
54839
54886
  }, ...(ngDevMode ? [{ debugName: "displayText" }] : []));
54887
+ this.hasPercentage = computed(() => {
54888
+ const fullText = this.showAsFullText()
54889
+ ? formatPacingDisplayFullText(this.pacingPercentage(), this.status())
54890
+ : this.displayInfo().displayText;
54891
+ return /\d+\.?\d*%/.test(fullText);
54892
+ }, ...(ngDevMode ? [{ debugName: "hasPercentage" }] : []));
54893
+ this.extractPercentage = computed(() => {
54894
+ const fullText = this.showAsFullText()
54895
+ ? formatPacingDisplayFullText(this.pacingPercentage(), this.status())
54896
+ : this.displayInfo().displayText;
54897
+ const match = fullText.match(/(\d+\.?\d*%)/);
54898
+ return match ? match[1] : '';
54899
+ }, ...(ngDevMode ? [{ debugName: "extractPercentage" }] : []));
54900
+ this.displayTextWithoutPercentage = computed(() => {
54901
+ const fullText = this.showAsFullText()
54902
+ ? formatPacingDisplayFullText(this.pacingPercentage(), this.status())
54903
+ : this.displayInfo().displayText;
54904
+ const textWithoutPercentage = fullText.replace(/\s*at\s*\d+\.?\d*%\s*/, ' ').replace(/\s+/, ' ');
54905
+ return textWithoutPercentage;
54906
+ }, ...(ngDevMode ? [{ debugName: "displayTextWithoutPercentage" }] : []));
54907
+ this.overlayBadgeClasses = computed(() => {
54908
+ const info = this.displayInfo();
54909
+ const isCompact = this.isCompact();
54910
+ const sizeClass = isCompact ? 'text-xs' : 'text-sm';
54911
+ return `${info.bgClass} ${info.colorClass} ${info.borderClass} ${sizeClass}`;
54912
+ }, ...(ngDevMode ? [{ debugName: "overlayBadgeClasses" }] : []));
54840
54913
  }
54841
54914
  static { this.ɵfac = function PacingStatusBadgeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PacingStatusBadgeComponent)(); }; }
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);
54844
- i0.ɵɵtext(2);
54845
- i0.ɵɵelementEnd();
54846
- i0.ɵɵelementStart(3, "span");
54847
- i0.ɵɵtext(4);
54848
- i0.ɵɵelementEnd()();
54915
+ 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"], showEmphasizedPercentage: [1, "showEmphasizedPercentage"] }, decls: 2, vars: 1, consts: [[1, "inline-flex", "flex-col", "items-start"], [3, "ngClass", "class"], [1, "px-2.5", "py-0.5", "rounded-md", "font-extrabold", "tracking-tight", "border-2", "shadow-lg", "transition-all", "duration-200", "-mb-1", "ml-2", "z-10", 3, "ngClass"], [3, "ngClass"]], template: function PacingStatusBadgeComponent_Template(rf, ctx) { if (rf & 1) {
54916
+ i0.ɵɵconditionalCreate(0, PacingStatusBadgeComponent_Conditional_0_Template, 8, 10, "div", 0)(1, PacingStatusBadgeComponent_Conditional_1_Template, 5, 8, "div", 1);
54849
54917
  } if (rf & 2) {
54850
- i0.ɵɵclassMap(ctx.sizeClasses());
54851
- i0.ɵɵproperty("ngClass", ctx.badgeClasses());
54852
- i0.ɵɵadvance();
54853
- i0.ɵɵclassMap(ctx.iconSizeClasses());
54854
- i0.ɵɵproperty("ngClass", ctx.iconClasses());
54855
- i0.ɵɵadvance();
54856
- i0.ɵɵtextInterpolate1(" ", ctx.iconSymbol(), " ");
54857
- i0.ɵɵadvance(2);
54858
- i0.ɵɵtextInterpolate(ctx.displayText());
54918
+ i0.ɵɵconditional(ctx.showEmphasizedPercentage() && ctx.hasPercentage() ? 0 : 1);
54859
54919
  } }, dependencies: [CommonModule, i1$1.NgClass], encapsulation: 2, changeDetection: 0 }); }
54860
54920
  }
54861
54921
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PacingStatusBadgeComponent, [{
@@ -54866,41 +54926,59 @@ class PacingStatusBadgeComponent {
54866
54926
  imports: [CommonModule],
54867
54927
  changeDetection: ChangeDetectionStrategy.OnPush,
54868
54928
  template: `
54869
- <div
54870
- [ngClass]="badgeClasses()"
54871
- [class]="sizeClasses()"
54872
- >
54873
- <span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
54874
- {{ iconSymbol() }}
54875
- </span>
54876
- <span>{{ displayText() }}</span>
54877
- </div>
54929
+ @if (showEmphasizedPercentage() && hasPercentage()) {
54930
+ <div class="inline-flex flex-col items-start">
54931
+ <div [ngClass]="overlayBadgeClasses()"
54932
+ class="px-2.5 py-0.5 rounded-md font-extrabold tracking-tight border-2 shadow-lg transition-all duration-200 -mb-1 ml-2 z-10">
54933
+ {{ extractPercentage() }}
54934
+ </div>
54935
+ <div
54936
+ [ngClass]="badgeClasses()"
54937
+ [class]="sizeClasses()"
54938
+ >
54939
+ <span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
54940
+ {{ iconSymbol() }}
54941
+ </span>
54942
+ <span>{{ displayTextWithoutPercentage() }}</span>
54943
+ </div>
54944
+ </div>
54945
+ } @else {
54946
+ <div
54947
+ [ngClass]="badgeClasses()"
54948
+ [class]="sizeClasses()"
54949
+ >
54950
+ <span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
54951
+ {{ iconSymbol() }}
54952
+ </span>
54953
+ <span>{{ displayText() }}</span>
54954
+ </div>
54955
+ }
54878
54956
  `
54879
54957
  }]
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 }] }] }); })();
54881
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PacingStatusBadgeComponent, { className: "PacingStatusBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/pacing-status-badge.component.ts", lineNumber: 23 }); })();
54958
+ }], 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 }] }], showEmphasizedPercentage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showEmphasizedPercentage", required: false }] }] }); })();
54959
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PacingStatusBadgeComponent, { className: "PacingStatusBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/pacing-status-badge.component.ts", lineNumber: 41 }); })();
54882
54960
 
54883
54961
  const _forTrack0$i = ($index, $item) => $item.stageMetric.metric;
54884
54962
  const _forTrack1$3 = ($index, $item) => $item.calc.metric;
54885
54963
  function FunnelMetricsVisualizationComponent_For_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
54886
54964
  i0.ɵɵelementStart(0, "button", 7);
54887
54965
  i0.ɵɵnamespaceSVG();
54888
- i0.ɵɵelementStart(1, "svg", 13);
54889
- i0.ɵɵelement(2, "path", 14);
54966
+ i0.ɵɵelementStart(1, "svg", 15);
54967
+ i0.ɵɵelement(2, "path", 16);
54890
54968
  i0.ɵɵelementEnd()();
54891
54969
  } if (rf & 2) {
54892
54970
  const stage_r1 = i0.ɵɵnextContext().$implicit;
54893
54971
  const ctx_r1 = i0.ɵɵnextContext();
54894
54972
  i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(stage_r1.stageMetric.description, ctx_r1.getMetricTitle(stage_r1.stageMetric)));
54895
54973
  } }
54896
- function FunnelMetricsVisualizationComponent_For_4_Conditional_20_Template(rf, ctx) { if (rf & 1) {
54974
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_23_Template(rf, ctx) { if (rf & 1) {
54897
54975
  i0.ɵɵelementStart(0, "div")(1, "p", 9);
54898
54976
  i0.ɵɵtext(2);
54899
54977
  i0.ɵɵelementEnd();
54900
54978
  i0.ɵɵelementStart(3, "p", 11);
54901
54979
  i0.ɵɵtext(4);
54902
54980
  i0.ɵɵelementEnd();
54903
- i0.ɵɵelement(5, "symphiq-pacing-status-badge", 15);
54981
+ i0.ɵɵelement(5, "symphiq-pacing-status-badge", 17);
54904
54982
  i0.ɵɵelementEnd();
54905
54983
  } if (rf & 2) {
54906
54984
  const stage_r1 = i0.ɵɵnextContext().$implicit;
@@ -54914,27 +54992,27 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_20_Template(rf, c
54914
54992
  i0.ɵɵadvance();
54915
54993
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.pacingInfo.projectedValue, stage_r1.stageMetric.metric, false), " ");
54916
54994
  i0.ɵɵadvance();
54917
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", stage_r1.pacingInfo.pacingPercentage)("status", stage_r1.pacingInfo.status)("showAsFullText", true);
54995
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", stage_r1.pacingInfo.pacingPercentage)("status", stage_r1.pacingInfo.status)("showAsFullText", true)("showEmphasizedPercentage", true);
54918
54996
  } }
54919
- function FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
54920
- i0.ɵɵelementStart(0, "button", 23);
54997
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_24_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
54998
+ i0.ɵɵelementStart(0, "button", 25);
54921
54999
  i0.ɵɵnamespaceSVG();
54922
- i0.ɵɵelementStart(1, "svg", 29);
54923
- i0.ɵɵelement(2, "path", 14);
55000
+ i0.ɵɵelementStart(1, "svg", 32);
55001
+ i0.ɵɵelement(2, "path", 16);
54924
55002
  i0.ɵɵelementEnd()();
54925
55003
  } if (rf & 2) {
54926
55004
  const metric_r3 = i0.ɵɵnextContext().$implicit;
54927
55005
  const ctx_r1 = i0.ɵɵnextContext(3);
54928
55006
  i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(metric_r3.calc.description, ctx_r1.getMetricTitle(metric_r3.calc)));
54929
55007
  } }
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);
55008
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_24_For_6_Conditional_21_Template(rf, ctx) { if (rf & 1) {
55009
+ i0.ɵɵelementStart(0, "div")(1, "p", 27);
54932
55010
  i0.ɵɵtext(2);
54933
55011
  i0.ɵɵelementEnd();
54934
- i0.ɵɵelementStart(3, "p", 27);
55012
+ i0.ɵɵelementStart(3, "p", 29);
54935
55013
  i0.ɵɵtext(4);
54936
55014
  i0.ɵɵelementEnd();
54937
- i0.ɵɵelement(5, "symphiq-pacing-status-badge", 30);
55015
+ i0.ɵɵelement(5, "symphiq-pacing-status-badge", 33);
54938
55016
  i0.ɵɵelementEnd();
54939
55017
  } if (rf & 2) {
54940
55018
  const metric_r3 = i0.ɵɵnextContext().$implicit;
@@ -54948,30 +55026,33 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditio
54948
55026
  i0.ɵɵadvance();
54949
55027
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(metric_r3.pacingInfo.projectedValue, metric_r3.calc.metric, false), " ");
54950
55028
  i0.ɵɵadvance();
54951
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", metric_r3.pacingInfo.pacingPercentage)("status", metric_r3.pacingInfo.status)("showAsFullText", true)("isCompact", true);
55029
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", metric_r3.pacingInfo.pacingPercentage)("status", metric_r3.pacingInfo.status)("showAsFullText", true)("isCompact", true)("showEmphasizedPercentage", true);
54952
55030
  } }
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);
55031
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_24_For_6_Template(rf, ctx) { if (rf & 1) {
55032
+ i0.ɵɵelementStart(0, "div", 22)(1, "div", 23)(2, "p", 24);
54955
55033
  i0.ɵɵtext(3);
54956
55034
  i0.ɵɵelementEnd();
54957
- i0.ɵɵconditionalCreate(4, FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditional_4_Template, 3, 2, "button", 23);
55035
+ i0.ɵɵconditionalCreate(4, FunnelMetricsVisualizationComponent_For_4_Conditional_24_For_6_Conditional_4_Template, 3, 2, "button", 25);
54958
55036
  i0.ɵɵelementEnd();
54959
- i0.ɵɵelementStart(5, "div", 24)(6, "div")(7, "p", 25);
55037
+ i0.ɵɵelementStart(5, "div", 26)(6, "div")(7, "p", 27);
54960
55038
  i0.ɵɵtext(8);
54961
55039
  i0.ɵɵelementEnd();
54962
- i0.ɵɵelementStart(9, "p", 26);
55040
+ i0.ɵɵelementStart(9, "p", 28);
54963
55041
  i0.ɵɵtext(10);
54964
55042
  i0.ɵɵelementEnd()();
54965
- i0.ɵɵelementStart(11, "div")(12, "p", 25);
55043
+ i0.ɵɵelementStart(11, "div")(12, "p", 27);
54966
55044
  i0.ɵɵtext(13);
54967
55045
  i0.ɵɵelementEnd();
54968
- i0.ɵɵelementStart(14, "p", 27);
55046
+ i0.ɵɵelementStart(14, "p", 29);
54969
55047
  i0.ɵɵtext(15);
54970
55048
  i0.ɵɵelementEnd();
54971
- i0.ɵɵelementStart(16, "div", 28);
54972
- i0.ɵɵtext(17);
54973
- i0.ɵɵelementEnd()();
54974
- i0.ɵɵconditionalCreate(18, FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditional_18_Template, 6, 9, "div");
55049
+ i0.ɵɵelementStart(16, "div", 12)(17, "div", 30);
55050
+ i0.ɵɵtext(18);
55051
+ i0.ɵɵelementEnd();
55052
+ i0.ɵɵelementStart(19, "div", 31);
55053
+ i0.ɵɵtext(20);
55054
+ i0.ɵɵelementEnd()()();
55055
+ i0.ɵɵconditionalCreate(21, FunnelMetricsVisualizationComponent_For_4_Conditional_24_For_6_Conditional_21_Template, 6, 10, "div");
54975
55056
  i0.ɵɵelementEnd()();
54976
55057
  } if (rf & 2) {
54977
55058
  const metric_r3 = ctx.$implicit;
@@ -54999,20 +55080,24 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Template
54999
55080
  i0.ɵɵproperty("ngClass", ctx_r1.relatedTargetValueClasses());
55000
55081
  i0.ɵɵadvance();
55001
55082
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(metric_r3.calc.targetValue, metric_r3.calc.metric, false), " ");
55083
+ i0.ɵɵadvance(2);
55084
+ i0.ɵɵproperty("ngClass", ctx_r1.overlayBadgeClasses(metric_r3.calc.percentageIncrease, metric_r3.calc.metric, true));
55085
+ i0.ɵɵadvance();
55086
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getPercentageOnly(metric_r3.calc.percentageIncrease, metric_r3.calc.metric), " ");
55002
55087
  i0.ɵɵadvance();
55003
55088
  i0.ɵɵproperty("ngClass", ctx_r1.relatedPercentageBadgeClasses());
55004
55089
  i0.ɵɵadvance();
55005
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getTargetIncreaseText(metric_r3.calc.percentageIncrease, metric_r3.calc.metric), " ");
55090
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getDescriptionOnly(metric_r3.calc.percentageIncrease, metric_r3.calc.metric), " ");
55006
55091
  i0.ɵɵadvance();
55007
- i0.ɵɵconditional(metric_r3.pacingInfo ? 18 : -1);
55092
+ i0.ɵɵconditional(metric_r3.pacingInfo ? 21 : -1);
55008
55093
  } }
55009
- function FunnelMetricsVisualizationComponent_For_4_Conditional_21_Template(rf, ctx) { if (rf & 1) {
55010
- i0.ɵɵelement(0, "div", 16);
55011
- i0.ɵɵelementStart(1, "div", 17)(2, "p", 18);
55094
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_24_Template(rf, ctx) { if (rf & 1) {
55095
+ i0.ɵɵelement(0, "div", 18);
55096
+ i0.ɵɵelementStart(1, "div", 19)(2, "p", 20);
55012
55097
  i0.ɵɵtext(3, " Related Metrics ");
55013
55098
  i0.ɵɵelementEnd();
55014
- i0.ɵɵelementStart(4, "div", 19);
55015
- i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Template, 19, 15, "div", 20, _forTrack1$3);
55099
+ i0.ɵɵelementStart(4, "div", 21);
55100
+ i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_24_For_6_Template, 22, 17, "div", 22, _forTrack1$3);
55016
55101
  i0.ɵɵelementEnd()();
55017
55102
  } if (rf & 2) {
55018
55103
  const stage_r1 = i0.ɵɵnextContext().$implicit;
@@ -55041,12 +55126,15 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
55041
55126
  i0.ɵɵelementStart(16, "p", 11);
55042
55127
  i0.ɵɵtext(17);
55043
55128
  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");
55129
+ i0.ɵɵelementStart(18, "div", 12)(19, "div", 13);
55130
+ i0.ɵɵtext(20);
55131
+ i0.ɵɵelementEnd();
55132
+ i0.ɵɵelementStart(21, "div", 14);
55133
+ i0.ɵɵtext(22);
55134
+ i0.ɵɵelementEnd()()();
55135
+ i0.ɵɵconditionalCreate(23, FunnelMetricsVisualizationComponent_For_4_Conditional_23_Template, 6, 9, "div");
55048
55136
  i0.ɵɵelementEnd();
55049
- i0.ɵɵconditionalCreate(21, FunnelMetricsVisualizationComponent_For_4_Conditional_21_Template, 7, 2);
55137
+ i0.ɵɵconditionalCreate(24, FunnelMetricsVisualizationComponent_For_4_Conditional_24_Template, 7, 2);
55050
55138
  i0.ɵɵelementEnd();
55051
55139
  } if (rf & 2) {
55052
55140
  const stage_r1 = ctx.$implicit;
@@ -55074,14 +55162,18 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
55074
55162
  i0.ɵɵproperty("ngClass", ctx_r1.targetValueClasses());
55075
55163
  i0.ɵɵadvance();
55076
55164
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.stageMetric.targetValue, stage_r1.stageMetric.metric, false), " ");
55165
+ i0.ɵɵadvance(2);
55166
+ i0.ɵɵproperty("ngClass", ctx_r1.overlayBadgeClasses(stage_r1.stageMetric.percentageIncrease, stage_r1.stageMetric.metric));
55167
+ i0.ɵɵadvance();
55168
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getPercentageOnly(stage_r1.stageMetric.percentageIncrease, stage_r1.stageMetric.metric), " ");
55077
55169
  i0.ɵɵadvance();
55078
55170
  i0.ɵɵproperty("ngClass", ctx_r1.percentageBadgeClasses());
55079
55171
  i0.ɵɵadvance();
55080
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getTargetIncreaseText(stage_r1.stageMetric.percentageIncrease, stage_r1.stageMetric.metric), " ");
55172
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getDescriptionOnly(stage_r1.stageMetric.percentageIncrease, stage_r1.stageMetric.metric), " ");
55081
55173
  i0.ɵɵadvance();
55082
- i0.ɵɵconditional(stage_r1.pacingInfo ? 20 : -1);
55174
+ i0.ɵɵconditional(stage_r1.pacingInfo ? 23 : -1);
55083
55175
  i0.ɵɵadvance();
55084
- i0.ɵɵconditional(stage_r1.relatedMetrics.length > 0 ? 21 : -1);
55176
+ i0.ɵɵconditional(stage_r1.relatedMetrics.length > 0 ? 24 : -1);
55085
55177
  } }
55086
55178
  class FunnelMetricsVisualizationComponent {
55087
55179
  constructor() {
@@ -55219,6 +55311,23 @@ class FunnelMetricsVisualizationComponent {
55219
55311
  const absValue = Math.abs(percentageIncrease);
55220
55312
  return `${sign}${formatPercentage(absValue, 1)} increase over ${this.priorYear()}`;
55221
55313
  }
55314
+ getPercentageOnly(percentageIncrease, metric) {
55315
+ const sign = MetricEnumUtil.increaseBad(metric) ? '' : '+';
55316
+ const absValue = Math.abs(percentageIncrease);
55317
+ return `${sign}${formatPercentage(absValue, 1)}`;
55318
+ }
55319
+ getDescriptionOnly(percentageIncrease, metric) {
55320
+ return `increase over ${this.priorYear()}`;
55321
+ }
55322
+ overlayBadgeClasses(percentageIncrease, metric, isCompact = false) {
55323
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
55324
+ if (isDark) {
55325
+ return 'bg-purple-500/30 text-purple-200 border-purple-400/30';
55326
+ }
55327
+ else {
55328
+ return 'bg-purple-100 text-purple-700 border-purple-300';
55329
+ }
55330
+ }
55222
55331
  formatMetricValue(value, metric, fromUiData = true) {
55223
55332
  if (metric.includes('REVENUE')) {
55224
55333
  return formatCurrency(value);
@@ -55248,11 +55357,11 @@ class FunnelMetricsVisualizationComponent {
55248
55357
  return MetricEnumUtil.increaseBad(metric) ? '-' : '+';
55249
55358
  }
55250
55359
  static { this.ɵfac = function FunnelMetricsVisualizationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FunnelMetricsVisualizationComponent)(); }; }
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) {
55360
+ 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-2", "lg: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, "inline-flex", "flex-col", "items-start"], [1, "px-2.5", "py-0.5", "rounded-md", "font-extrabold", "text-sm", "tracking-tight", "border-2", "shadow-lg", "transition-all", "duration-200", "-mb-1", "ml-2", "z-10", 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", "showEmphasizedPercentage"], [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-2", "lg: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", "py-0.5", "rounded", "text-xs", "font-extrabold", "tracking-tight", "border", "shadow-md", "transition-all", "duration-200", "-mb-1", "ml-1.5", "z-10", 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", "showEmphasizedPercentage"]], template: function FunnelMetricsVisualizationComponent_Template(rf, ctx) { if (rf & 1) {
55252
55361
  i0.ɵɵelementStart(0, "div", 0);
55253
55362
  i0.ɵɵelement(1, "symphiq-tooltip-container");
55254
55363
  i0.ɵɵelementStart(2, "div", 1);
55255
- i0.ɵɵrepeaterCreate(3, FunnelMetricsVisualizationComponent_For_4_Template, 22, 16, "div", 2, _forTrack0$i);
55364
+ i0.ɵɵrepeaterCreate(3, FunnelMetricsVisualizationComponent_For_4_Template, 25, 18, "div", 2, _forTrack0$i);
55256
55365
  i0.ɵɵelementEnd()();
55257
55366
  } if (rf & 2) {
55258
55367
  i0.ɵɵadvance(3);
@@ -55295,7 +55404,7 @@ class FunnelMetricsVisualizationComponent {
55295
55404
  </div>
55296
55405
  </div>
55297
55406
 
55298
- <div class="grid grid-cols-3 gap-6 mb-4">
55407
+ <div class="grid grid-cols-2 lg:grid-cols-3 gap-6 mb-4">
55299
55408
  <div>
55300
55409
  <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
55301
55410
  {{ priorYear() }} Actual
@@ -55311,8 +55420,14 @@ class FunnelMetricsVisualizationComponent {
55311
55420
  <p [ngClass]="targetValueClasses()" class="text-2xl font-bold mb-3">
55312
55421
  {{ formatMetricValue(stage.stageMetric.targetValue, stage.stageMetric.metric, false) }}
55313
55422
  </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) }}
55423
+ <div class="inline-flex flex-col items-start">
55424
+ <div [ngClass]="overlayBadgeClasses(stage.stageMetric.percentageIncrease, stage.stageMetric.metric)"
55425
+ class="px-2.5 py-0.5 rounded-md font-extrabold text-sm tracking-tight border-2 shadow-lg transition-all duration-200 -mb-1 ml-2 z-10">
55426
+ {{ getPercentageOnly(stage.stageMetric.percentageIncrease, stage.stageMetric.metric) }}
55427
+ </div>
55428
+ <div [ngClass]="percentageBadgeClasses()" class="px-3 py-1.5 rounded-lg font-semibold text-xs inline-block">
55429
+ {{ getDescriptionOnly(stage.stageMetric.percentageIncrease, stage.stageMetric.metric) }}
55430
+ </div>
55316
55431
  </div>
55317
55432
  </div>
55318
55433
  @if (stage.pacingInfo) {
@@ -55328,6 +55443,7 @@ class FunnelMetricsVisualizationComponent {
55328
55443
  [pacingPercentage]="stage.pacingInfo.pacingPercentage"
55329
55444
  [status]="stage.pacingInfo.status"
55330
55445
  [showAsFullText]="true"
55446
+ [showEmphasizedPercentage]="true"
55331
55447
  />
55332
55448
  </div>
55333
55449
  }
@@ -55361,7 +55477,7 @@ class FunnelMetricsVisualizationComponent {
55361
55477
  </button>
55362
55478
  }
55363
55479
  </div>
55364
- <div class="grid grid-cols-3 gap-4">
55480
+ <div class="grid grid-cols-2 lg:grid-cols-3 gap-4">
55365
55481
  <div>
55366
55482
  <p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
55367
55483
  {{ priorYear() }} Actual
@@ -55377,8 +55493,14 @@ class FunnelMetricsVisualizationComponent {
55377
55493
  <p [ngClass]="relatedTargetValueClasses()" class="text-lg font-bold mb-2">
55378
55494
  {{ formatMetricValue(metric.calc.targetValue, metric.calc.metric, false) }}
55379
55495
  </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) }}
55496
+ <div class="inline-flex flex-col items-start">
55497
+ <div [ngClass]="overlayBadgeClasses(metric.calc.percentageIncrease, metric.calc.metric, true)"
55498
+ class="px-2 py-0.5 rounded text-xs font-extrabold tracking-tight border shadow-md transition-all duration-200 -mb-1 ml-1.5 z-10">
55499
+ {{ getPercentageOnly(metric.calc.percentageIncrease, metric.calc.metric) }}
55500
+ </div>
55501
+ <div [ngClass]="relatedPercentageBadgeClasses()" class="px-2.5 py-1 rounded text-xs font-semibold inline-block">
55502
+ {{ getDescriptionOnly(metric.calc.percentageIncrease, metric.calc.metric) }}
55503
+ </div>
55382
55504
  </div>
55383
55505
  </div>
55384
55506
  @if (metric.pacingInfo) {
@@ -55395,6 +55517,7 @@ class FunnelMetricsVisualizationComponent {
55395
55517
  [status]="metric.pacingInfo.status"
55396
55518
  [showAsFullText]="true"
55397
55519
  [isCompact]="true"
55520
+ [showEmphasizedPercentage]="true"
55398
55521
  />
55399
55522
  </div>
55400
55523
  }
@@ -55411,7 +55534,7 @@ class FunnelMetricsVisualizationComponent {
55411
55534
  `
55412
55535
  }]
55413
55536
  }], 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 }] }] }); })();
55414
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber: 160 }); })();
55537
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber: 174 }); })();
55415
55538
 
55416
55539
  function StickySubmitBarComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
55417
55540
  i0.ɵɵelementStart(0, "div", 4);