@eric-emg/symphiq-components 1.2.231 → 1.2.232

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.
@@ -54795,7 +54795,7 @@ function extractProjectedValue(pacingResponse, metricEnum) {
54795
54795
  }
54796
54796
 
54797
54797
  function PacingStatusBadgeComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
54798
- i0.ɵɵelementStart(0, "div", 0)(1, "div", 2)(2, "span", 3);
54798
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 1)(2, "span", 1);
54799
54799
  i0.ɵɵtext(3);
54800
54800
  i0.ɵɵelementEnd();
54801
54801
  i0.ɵɵtext(4);
@@ -54805,8 +54805,10 @@ function PacingStatusBadgeComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
54805
54805
  i0.ɵɵelementEnd()()();
54806
54806
  } if (rf & 2) {
54807
54807
  const ctx_r0 = i0.ɵɵnextContext();
54808
+ i0.ɵɵclassMap(ctx_r0.containerSizeClasses());
54808
54809
  i0.ɵɵproperty("ngClass", ctx_r0.containerClasses());
54809
54810
  i0.ɵɵadvance();
54811
+ i0.ɵɵclassMap(ctx_r0.overlaySizeClasses());
54810
54812
  i0.ɵɵproperty("ngClass", ctx_r0.overlayBadgeClasses());
54811
54813
  i0.ɵɵadvance();
54812
54814
  i0.ɵɵclassMap(ctx_r0.iconSizeClasses());
@@ -54821,7 +54823,7 @@ function PacingStatusBadgeComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
54821
54823
  i0.ɵɵtextInterpolate(ctx_r0.displayTextWithoutPercentage());
54822
54824
  } }
54823
54825
  function PacingStatusBadgeComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
54824
- i0.ɵɵelementStart(0, "div", 3)(1, "span", 3);
54826
+ i0.ɵɵelementStart(0, "div", 1)(1, "span", 1);
54825
54827
  i0.ɵɵtext(2);
54826
54828
  i0.ɵɵelementEnd();
54827
54829
  i0.ɵɵelementStart(3, "span");
@@ -54855,6 +54857,12 @@ class PacingStatusBadgeComponent {
54855
54857
  const info = this.displayInfo();
54856
54858
  return `${info.bgClass} ${info.borderClass} border`;
54857
54859
  }, ...(ngDevMode ? [{ debugName: "containerClasses" }] : []));
54860
+ this.containerSizeClasses = computed(() => {
54861
+ const compact = this.isCompact();
54862
+ return compact
54863
+ ? 'inline-flex flex-row items-center rounded-full pl-1.5 overflow-visible'
54864
+ : 'inline-flex flex-row items-center rounded-full pl-2 overflow-visible';
54865
+ }, ...(ngDevMode ? [{ debugName: "containerSizeClasses" }] : []));
54858
54866
  this.badgeClasses = computed(() => {
54859
54867
  const info = this.displayInfo();
54860
54868
  return `${info.bgClass} ${info.colorClass} ${info.borderClass}`;
@@ -54863,9 +54871,9 @@ class PacingStatusBadgeComponent {
54863
54871
  const isCompact = this.isCompact();
54864
54872
  const baseClasses = 'inline-flex items-center gap-1.5 font-semibold transition-all';
54865
54873
  if (isCompact) {
54866
- return `${baseClasses} px-2.5 py-1 text-xs`;
54874
+ return `${baseClasses} px-2.5 py-0.5 text-xs`;
54867
54875
  }
54868
- return `${baseClasses} px-3 py-1.5 text-xs`;
54876
+ return `${baseClasses} px-3 py-0.5 text-xs`;
54869
54877
  }, ...(ngDevMode ? [{ debugName: "sizeClasses" }] : []));
54870
54878
  this.fullBadgeSizeClasses = computed(() => {
54871
54879
  const isCompact = this.isCompact();
@@ -54916,15 +54924,32 @@ class PacingStatusBadgeComponent {
54916
54924
  return textWithoutPercentage;
54917
54925
  }, ...(ngDevMode ? [{ debugName: "displayTextWithoutPercentage" }] : []));
54918
54926
  this.overlayBadgeClasses = computed(() => {
54919
- const info = this.displayInfo();
54920
- const isCompact = this.isCompact();
54921
- const sizeClass = isCompact ? 'text-xs' : 'text-sm';
54922
- return `${info.bgClass} ${info.colorClass} ${info.borderClass} ${sizeClass}`;
54927
+ const status = this.status();
54928
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
54929
+ if (status === 'ahead') {
54930
+ return isDark
54931
+ ? 'bg-gradient-to-r from-emerald-700 to-emerald-600 text-emerald-100 border-emerald-500'
54932
+ : 'bg-gradient-to-r from-emerald-600 to-emerald-500 text-white border-emerald-400';
54933
+ }
54934
+ if (status === 'on-pace') {
54935
+ return isDark
54936
+ ? 'bg-gradient-to-r from-amber-700 to-amber-600 text-amber-100 border-amber-500'
54937
+ : 'bg-gradient-to-r from-amber-600 to-amber-500 text-white border-amber-400';
54938
+ }
54939
+ return isDark
54940
+ ? 'bg-gradient-to-r from-red-700 to-red-600 text-red-100 border-red-500'
54941
+ : 'bg-gradient-to-r from-red-600 to-red-500 text-white border-red-400';
54923
54942
  }, ...(ngDevMode ? [{ debugName: "overlayBadgeClasses" }] : []));
54943
+ this.overlaySizeClasses = computed(() => {
54944
+ const compact = this.isCompact();
54945
+ return compact
54946
+ ? 'px-2 py-1.5 rounded text-sm font-extrabold tracking-tight border shadow-md transition-all duration-200 -my-1 -mr-1 z-10 inline-flex items-center gap-0.5'
54947
+ : 'px-2.5 py-2 rounded-md text-sm font-extrabold tracking-tight border-2 shadow-lg transition-all duration-200 -my-1.5 -mr-1 z-10 inline-flex items-center gap-1';
54948
+ }, ...(ngDevMode ? [{ debugName: "overlaySizeClasses" }] : []));
54924
54949
  }
54925
54950
  static { this.ɵfac = function PacingStatusBadgeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PacingStatusBadgeComponent)(); }; }
54926
- 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-row", "items-center", "rounded-lg", 3, "ngClass"], [3, "ngClass", "class"], [1, "px-2.5", "py-0.5", "rounded-md", "font-extrabold", "tracking-tight", "border-2", "shadow-lg", "transition-all", "duration-200", "-my-1", "-mr-1", "z-10", "inline-flex", "items-center", "gap-1", 3, "ngClass"], [3, "ngClass"]], template: function PacingStatusBadgeComponent_Template(rf, ctx) { if (rf & 1) {
54927
- i0.ɵɵconditionalCreate(0, PacingStatusBadgeComponent_Conditional_0_Template, 8, 10, "div", 0)(1, PacingStatusBadgeComponent_Conditional_1_Template, 5, 8, "div", 1);
54951
+ 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: [[3, "ngClass", "class"], [3, "ngClass"]], template: function PacingStatusBadgeComponent_Template(rf, ctx) { if (rf & 1) {
54952
+ i0.ɵɵconditionalCreate(0, PacingStatusBadgeComponent_Conditional_0_Template, 8, 14, "div", 0)(1, PacingStatusBadgeComponent_Conditional_1_Template, 5, 8, "div", 0);
54928
54953
  } if (rf & 2) {
54929
54954
  i0.ɵɵconditional(ctx.showEmphasizedPercentage() && ctx.hasPercentage() ? 0 : 1);
54930
54955
  } }, dependencies: [CommonModule, i1$1.NgClass], encapsulation: 2, changeDetection: 0 }); }
@@ -54936,59 +54961,173 @@ class PacingStatusBadgeComponent {
54936
54961
  standalone: true,
54937
54962
  imports: [CommonModule],
54938
54963
  changeDetection: ChangeDetectionStrategy.OnPush,
54939
- template: `
54940
- @if (showEmphasizedPercentage() && hasPercentage()) {
54941
- <div [ngClass]="containerClasses()" class="inline-flex flex-row items-center rounded-lg">
54942
- <div [ngClass]="overlayBadgeClasses()"
54943
- class="px-2.5 py-0.5 rounded-md font-extrabold tracking-tight border-2 shadow-lg transition-all duration-200 -my-1 -mr-1 z-10 inline-flex items-center gap-1">
54944
- <span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
54945
- {{ iconSymbol() }}
54946
- </span>
54947
- {{ extractPercentage() }}
54948
- </div>
54949
- <div
54950
- [class]="sizeClasses()"
54951
- >
54952
- <span>{{ displayTextWithoutPercentage() }}</span>
54953
- </div>
54954
- </div>
54955
- } @else {
54956
- <div
54957
- [ngClass]="badgeClasses()"
54958
- [class]="fullBadgeSizeClasses()"
54959
- >
54960
- <span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
54961
- {{ iconSymbol() }}
54962
- </span>
54963
- <span>{{ displayText() }}</span>
54964
- </div>
54965
- }
54964
+ template: `
54965
+ @if (showEmphasizedPercentage() && hasPercentage()) {
54966
+ <div [ngClass]="containerClasses()" [class]="containerSizeClasses()">
54967
+ <div [ngClass]="overlayBadgeClasses()" [class]="overlaySizeClasses()">
54968
+ <span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
54969
+ {{ iconSymbol() }}
54970
+ </span>
54971
+ {{ extractPercentage() }}
54972
+ </div>
54973
+ <div
54974
+ [class]="sizeClasses()"
54975
+ >
54976
+ <span>{{ displayTextWithoutPercentage() }}</span>
54977
+ </div>
54978
+ </div>
54979
+ } @else {
54980
+ <div
54981
+ [ngClass]="badgeClasses()"
54982
+ [class]="fullBadgeSizeClasses()"
54983
+ >
54984
+ <span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
54985
+ {{ iconSymbol() }}
54986
+ </span>
54987
+ <span>{{ displayText() }}</span>
54988
+ </div>
54989
+ }
54966
54990
  `
54967
54991
  }]
54968
54992
  }], 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 }] }] }); })();
54969
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PacingStatusBadgeComponent, { className: "PacingStatusBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/pacing-status-badge.component.ts", lineNumber: 40 }); })();
54993
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PacingStatusBadgeComponent, { className: "PacingStatusBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/pacing-status-badge.component.ts", lineNumber: 39 }); })();
54994
+
54995
+ class TargetChangeBadgeComponent {
54996
+ constructor() {
54997
+ this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
54998
+ this.percentageChange = input(0, ...(ngDevMode ? [{ debugName: "percentageChange" }] : []));
54999
+ this.metric = input('', ...(ngDevMode ? [{ debugName: "metric" }] : []));
55000
+ this.priorYear = input(new Date().getFullYear() - 1, ...(ngDevMode ? [{ debugName: "priorYear" }] : []));
55001
+ this.isCompact = input(false, ...(ngDevMode ? [{ debugName: "isCompact" }] : []));
55002
+ this.isDark = computed(() => this.viewMode() === ViewModeEnum.DARK, ...(ngDevMode ? [{ debugName: "isDark" }] : []));
55003
+ this.isIncreaseBad = computed(() => {
55004
+ const metricStr = this.metric();
55005
+ if (!metricStr)
55006
+ return false;
55007
+ return MetricEnumUtil.increaseBad(metricStr);
55008
+ }, ...(ngDevMode ? [{ debugName: "isIncreaseBad" }] : []));
55009
+ this.iconSymbol = computed(() => {
55010
+ const change = this.percentageChange();
55011
+ if (change > 0)
55012
+ return '↗';
55013
+ if (change < 0)
55014
+ return '↘';
55015
+ return '→';
55016
+ }, ...(ngDevMode ? [{ debugName: "iconSymbol" }] : []));
55017
+ this.percentageText = computed(() => {
55018
+ const sign = this.isIncreaseBad() ? '' : '+';
55019
+ const absValue = Math.abs(this.percentageChange());
55020
+ return `${sign}${formatPercentage(absValue, 1)}`;
55021
+ }, ...(ngDevMode ? [{ debugName: "percentageText" }] : []));
55022
+ this.descriptionText = computed(() => {
55023
+ const action = this.isIncreaseBad() ? 'decrease from' : 'increase over';
55024
+ return `${action} ${this.priorYear()}`;
55025
+ }, ...(ngDevMode ? [{ debugName: "descriptionText" }] : []));
55026
+ this.containerClasses = computed(() => {
55027
+ const dark = this.isDark();
55028
+ return dark
55029
+ ? 'bg-purple-500/30 border-purple-400/30'
55030
+ : 'bg-purple-100 border-purple-300';
55031
+ }, ...(ngDevMode ? [{ debugName: "containerClasses" }] : []));
55032
+ this.containerSizeClasses = computed(() => {
55033
+ const compact = this.isCompact();
55034
+ return compact
55035
+ ? 'inline-flex flex-row items-center rounded-full border pl-1.5 overflow-visible'
55036
+ : 'inline-flex flex-row items-center rounded-full border pl-2 overflow-visible';
55037
+ }, ...(ngDevMode ? [{ debugName: "containerSizeClasses" }] : []));
55038
+ this.overlayClasses = computed(() => {
55039
+ const dark = this.isDark();
55040
+ return dark
55041
+ ? 'bg-gradient-to-r from-purple-700 to-purple-600 text-purple-100 border-purple-500'
55042
+ : 'bg-gradient-to-r from-purple-600 to-purple-500 text-white border-purple-400';
55043
+ }, ...(ngDevMode ? [{ debugName: "overlayClasses" }] : []));
55044
+ this.overlaySizeClasses = computed(() => {
55045
+ const compact = this.isCompact();
55046
+ return compact
55047
+ ? 'px-2 py-1.5 rounded text-sm font-extrabold tracking-tight border shadow-md transition-all duration-200 -my-1 -mr-1 z-10 inline-flex items-center gap-0.5'
55048
+ : 'px-2.5 py-2 rounded-md font-extrabold text-base tracking-tight border-2 shadow-lg transition-all duration-200 -my-1.5 -mr-1 z-10 inline-flex items-center gap-1';
55049
+ }, ...(ngDevMode ? [{ debugName: "overlaySizeClasses" }] : []));
55050
+ this.iconSizeClass = computed(() => {
55051
+ return this.isCompact() ? 'text-sm' : 'text-base';
55052
+ }, ...(ngDevMode ? [{ debugName: "iconSizeClass" }] : []));
55053
+ this.descriptionSizeClasses = computed(() => {
55054
+ const compact = this.isCompact();
55055
+ return compact
55056
+ ? 'px-2.5 py-0.5 text-xs font-semibold inline-block'
55057
+ : 'px-3 py-0.5 font-semibold text-xs inline-block';
55058
+ }, ...(ngDevMode ? [{ debugName: "descriptionSizeClasses" }] : []));
55059
+ }
55060
+ static { this.ɵfac = function TargetChangeBadgeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TargetChangeBadgeComponent)(); }; }
55061
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TargetChangeBadgeComponent, selectors: [["symphiq-target-change-badge"]], inputs: { viewMode: [1, "viewMode"], percentageChange: [1, "percentageChange"], metric: [1, "metric"], priorYear: [1, "priorYear"], isCompact: [1, "isCompact"] }, decls: 7, vars: 13, consts: [[3, "ngClass"]], template: function TargetChangeBadgeComponent_Template(rf, ctx) { if (rf & 1) {
55062
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 0)(2, "span");
55063
+ i0.ɵɵtext(3);
55064
+ i0.ɵɵelementEnd();
55065
+ i0.ɵɵtext(4);
55066
+ i0.ɵɵelementEnd();
55067
+ i0.ɵɵelementStart(5, "div");
55068
+ i0.ɵɵtext(6);
55069
+ i0.ɵɵelementEnd()();
55070
+ } if (rf & 2) {
55071
+ i0.ɵɵclassMap(ctx.containerSizeClasses());
55072
+ i0.ɵɵproperty("ngClass", ctx.containerClasses());
55073
+ i0.ɵɵadvance();
55074
+ i0.ɵɵclassMap(ctx.overlaySizeClasses());
55075
+ i0.ɵɵproperty("ngClass", ctx.overlayClasses());
55076
+ i0.ɵɵadvance();
55077
+ i0.ɵɵclassMap(ctx.iconSizeClass());
55078
+ i0.ɵɵadvance();
55079
+ i0.ɵɵtextInterpolate(ctx.iconSymbol());
55080
+ i0.ɵɵadvance();
55081
+ i0.ɵɵtextInterpolate1(" ", ctx.percentageText(), " ");
55082
+ i0.ɵɵadvance();
55083
+ i0.ɵɵclassMap(ctx.descriptionSizeClasses());
55084
+ i0.ɵɵadvance();
55085
+ i0.ɵɵtextInterpolate1(" ", ctx.descriptionText(), " ");
55086
+ } }, dependencies: [CommonModule, i1$1.NgClass], encapsulation: 2, changeDetection: 0 }); }
55087
+ }
55088
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TargetChangeBadgeComponent, [{
55089
+ type: Component,
55090
+ args: [{
55091
+ selector: 'symphiq-target-change-badge',
55092
+ standalone: true,
55093
+ imports: [CommonModule],
55094
+ changeDetection: ChangeDetectionStrategy.OnPush,
55095
+ template: `
55096
+ <div [ngClass]="containerClasses()" [class]="containerSizeClasses()">
55097
+ <div [ngClass]="overlayClasses()" [class]="overlaySizeClasses()">
55098
+ <span [class]="iconSizeClass()">{{ iconSymbol() }}</span>
55099
+ {{ percentageText() }}
55100
+ </div>
55101
+ <div [class]="descriptionSizeClasses()">
55102
+ {{ descriptionText() }}
55103
+ </div>
55104
+ </div>
55105
+ `
55106
+ }]
55107
+ }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], percentageChange: [{ type: i0.Input, args: [{ isSignal: true, alias: "percentageChange", required: false }] }], metric: [{ type: i0.Input, args: [{ isSignal: true, alias: "metric", required: false }] }], priorYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "priorYear", required: false }] }], isCompact: [{ type: i0.Input, args: [{ isSignal: true, alias: "isCompact", required: false }] }] }); })();
55108
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TargetChangeBadgeComponent, { className: "TargetChangeBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/target-change-badge.component.ts", lineNumber: 23 }); })();
54970
55109
 
54971
55110
  const _forTrack0$i = ($index, $item) => $item.stageMetric.metric;
54972
55111
  const _forTrack1$3 = ($index, $item) => $item.calc.metric;
54973
55112
  function FunnelMetricsVisualizationComponent_For_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
54974
55113
  i0.ɵɵelementStart(0, "button", 7);
54975
55114
  i0.ɵɵnamespaceSVG();
54976
- i0.ɵɵelementStart(1, "svg", 16);
54977
- i0.ɵɵelement(2, "path", 17);
55115
+ i0.ɵɵelementStart(1, "svg", 13);
55116
+ i0.ɵɵelement(2, "path", 14);
54978
55117
  i0.ɵɵelementEnd()();
54979
55118
  } if (rf & 2) {
54980
55119
  const stage_r1 = i0.ɵɵnextContext().$implicit;
54981
55120
  const ctx_r1 = i0.ɵɵnextContext();
54982
55121
  i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(stage_r1.stageMetric.description, ctx_r1.getMetricTitle(stage_r1.stageMetric)));
54983
55122
  } }
54984
- function FunnelMetricsVisualizationComponent_For_4_Conditional_25_Template(rf, ctx) { if (rf & 1) {
55123
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_19_Template(rf, ctx) { if (rf & 1) {
54985
55124
  i0.ɵɵelementStart(0, "div")(1, "p", 9);
54986
55125
  i0.ɵɵtext(2);
54987
55126
  i0.ɵɵelementEnd();
54988
55127
  i0.ɵɵelementStart(3, "p", 11);
54989
55128
  i0.ɵɵtext(4);
54990
55129
  i0.ɵɵelementEnd();
54991
- i0.ɵɵelement(5, "symphiq-pacing-status-badge", 18);
55130
+ i0.ɵɵelement(5, "symphiq-pacing-status-badge", 15);
54992
55131
  i0.ɵɵelementEnd();
54993
55132
  } if (rf & 2) {
54994
55133
  const stage_r1 = i0.ɵɵnextContext().$implicit;
@@ -55004,25 +55143,25 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_25_Template(rf, c
55004
55143
  i0.ɵɵadvance();
55005
55144
  i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", stage_r1.pacingInfo.pacingPercentage)("status", stage_r1.pacingInfo.status)("showAsFullText", true)("showEmphasizedPercentage", true);
55006
55145
  } }
55007
- function FunnelMetricsVisualizationComponent_For_4_Conditional_26_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
55008
- i0.ɵɵelementStart(0, "button", 26);
55146
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_20_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
55147
+ i0.ɵɵelementStart(0, "button", 23);
55009
55148
  i0.ɵɵnamespaceSVG();
55010
- i0.ɵɵelementStart(1, "svg", 35);
55011
- i0.ɵɵelement(2, "path", 17);
55149
+ i0.ɵɵelementStart(1, "svg", 29);
55150
+ i0.ɵɵelement(2, "path", 14);
55012
55151
  i0.ɵɵelementEnd()();
55013
55152
  } if (rf & 2) {
55014
55153
  const metric_r3 = i0.ɵɵnextContext().$implicit;
55015
55154
  const ctx_r1 = i0.ɵɵnextContext(3);
55016
55155
  i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(metric_r3.calc.description, ctx_r1.getMetricTitle(metric_r3.calc)));
55017
55156
  } }
55018
- function FunnelMetricsVisualizationComponent_For_4_Conditional_26_For_6_Conditional_23_Template(rf, ctx) { if (rf & 1) {
55019
- i0.ɵɵelementStart(0, "div")(1, "p", 28);
55157
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_20_For_6_Conditional_17_Template(rf, ctx) { if (rf & 1) {
55158
+ i0.ɵɵelementStart(0, "div")(1, "p", 25);
55020
55159
  i0.ɵɵtext(2);
55021
55160
  i0.ɵɵelementEnd();
55022
- i0.ɵɵelementStart(3, "p", 30);
55161
+ i0.ɵɵelementStart(3, "p", 27);
55023
55162
  i0.ɵɵtext(4);
55024
55163
  i0.ɵɵelementEnd();
55025
- i0.ɵɵelement(5, "symphiq-pacing-status-badge", 36);
55164
+ i0.ɵɵelement(5, "symphiq-pacing-status-badge", 30);
55026
55165
  i0.ɵɵelementEnd();
55027
55166
  } if (rf & 2) {
55028
55167
  const metric_r3 = i0.ɵɵnextContext().$implicit;
@@ -55038,33 +55177,27 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_26_For_6_Conditio
55038
55177
  i0.ɵɵadvance();
55039
55178
  i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", metric_r3.pacingInfo.pacingPercentage)("status", metric_r3.pacingInfo.status)("showAsFullText", true)("isCompact", true)("showEmphasizedPercentage", true);
55040
55179
  } }
55041
- function FunnelMetricsVisualizationComponent_For_4_Conditional_26_For_6_Template(rf, ctx) { if (rf & 1) {
55042
- i0.ɵɵelementStart(0, "div", 23)(1, "div", 24)(2, "p", 25);
55180
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_20_For_6_Template(rf, ctx) { if (rf & 1) {
55181
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 21)(2, "p", 22);
55043
55182
  i0.ɵɵtext(3);
55044
55183
  i0.ɵɵelementEnd();
55045
- i0.ɵɵconditionalCreate(4, FunnelMetricsVisualizationComponent_For_4_Conditional_26_For_6_Conditional_4_Template, 3, 2, "button", 26);
55184
+ i0.ɵɵconditionalCreate(4, FunnelMetricsVisualizationComponent_For_4_Conditional_20_For_6_Conditional_4_Template, 3, 2, "button", 23);
55046
55185
  i0.ɵɵelementEnd();
55047
- i0.ɵɵelementStart(5, "div", 27)(6, "div")(7, "p", 28);
55186
+ i0.ɵɵelementStart(5, "div", 24)(6, "div")(7, "p", 25);
55048
55187
  i0.ɵɵtext(8);
55049
55188
  i0.ɵɵelementEnd();
55050
- i0.ɵɵelementStart(9, "p", 29);
55189
+ i0.ɵɵelementStart(9, "p", 26);
55051
55190
  i0.ɵɵtext(10);
55052
55191
  i0.ɵɵelementEnd()();
55053
- i0.ɵɵelementStart(11, "div")(12, "p", 28);
55192
+ i0.ɵɵelementStart(11, "div")(12, "p", 25);
55054
55193
  i0.ɵɵtext(13);
55055
55194
  i0.ɵɵelementEnd();
55056
- i0.ɵɵelementStart(14, "p", 30);
55195
+ i0.ɵɵelementStart(14, "p", 27);
55057
55196
  i0.ɵɵtext(15);
55058
55197
  i0.ɵɵelementEnd();
55059
- i0.ɵɵelementStart(16, "div", 31)(17, "div", 32)(18, "span", 33);
55060
- i0.ɵɵtext(19);
55061
- i0.ɵɵelementEnd();
55062
- i0.ɵɵtext(20);
55198
+ i0.ɵɵelement(16, "symphiq-target-change-badge", 28);
55063
55199
  i0.ɵɵelementEnd();
55064
- i0.ɵɵelementStart(21, "div", 34);
55065
- i0.ɵɵtext(22);
55066
- i0.ɵɵelementEnd()()();
55067
- i0.ɵɵconditionalCreate(23, FunnelMetricsVisualizationComponent_For_4_Conditional_26_For_6_Conditional_23_Template, 6, 10, "div");
55200
+ i0.ɵɵconditionalCreate(17, FunnelMetricsVisualizationComponent_For_4_Conditional_20_For_6_Conditional_17_Template, 6, 10, "div");
55068
55201
  i0.ɵɵelementEnd()();
55069
55202
  } if (rf & 2) {
55070
55203
  const metric_r3 = ctx.$implicit;
@@ -55093,25 +55226,17 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_26_For_6_Template
55093
55226
  i0.ɵɵadvance();
55094
55227
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(metric_r3.calc.targetValue, metric_r3.calc.metric, false), " ");
55095
55228
  i0.ɵɵadvance();
55096
- i0.ɵɵproperty("ngClass", ctx_r1.relatedContainerBadgeClasses());
55097
- i0.ɵɵadvance();
55098
- i0.ɵɵproperty("ngClass", ctx_r1.overlayBadgeClasses(metric_r3.calc.percentageIncrease, metric_r3.calc.metric, true));
55099
- i0.ɵɵadvance(2);
55100
- i0.ɵɵtextInterpolate(ctx_r1.getGrowthIconSymbol(metric_r3.calc.percentageIncrease));
55101
- i0.ɵɵadvance();
55102
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getPercentageOnly(metric_r3.calc.percentageIncrease, metric_r3.calc.metric), " ");
55103
- i0.ɵɵadvance(2);
55104
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getDescriptionOnly(metric_r3.calc.percentageIncrease, metric_r3.calc.metric), " ");
55229
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("percentageChange", metric_r3.calc.percentageIncrease)("metric", metric_r3.calc.metric)("priorYear", ctx_r1.priorYear())("isCompact", true);
55105
55230
  i0.ɵɵadvance();
55106
- i0.ɵɵconditional(metric_r3.pacingInfo ? 23 : -1);
55231
+ i0.ɵɵconditional(metric_r3.pacingInfo ? 17 : -1);
55107
55232
  } }
55108
- function FunnelMetricsVisualizationComponent_For_4_Conditional_26_Template(rf, ctx) { if (rf & 1) {
55109
- i0.ɵɵelement(0, "div", 19);
55110
- i0.ɵɵelementStart(1, "div", 20)(2, "p", 21);
55233
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_20_Template(rf, ctx) { if (rf & 1) {
55234
+ i0.ɵɵelement(0, "div", 16);
55235
+ i0.ɵɵelementStart(1, "div", 17)(2, "p", 18);
55111
55236
  i0.ɵɵtext(3, " Related Metrics ");
55112
55237
  i0.ɵɵelementEnd();
55113
- i0.ɵɵelementStart(4, "div", 22);
55114
- i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_26_For_6_Template, 24, 18, "div", 23, _forTrack1$3);
55238
+ i0.ɵɵelementStart(4, "div", 19);
55239
+ i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_20_For_6_Template, 18, 18, "div", 20, _forTrack1$3);
55115
55240
  i0.ɵɵelementEnd()();
55116
55241
  } if (rf & 2) {
55117
55242
  const stage_r1 = i0.ɵɵnextContext().$implicit;
@@ -55140,17 +55265,11 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
55140
55265
  i0.ɵɵelementStart(16, "p", 11);
55141
55266
  i0.ɵɵtext(17);
55142
55267
  i0.ɵɵelementEnd();
55143
- i0.ɵɵelementStart(18, "div", 12)(19, "div", 13)(20, "span", 14);
55144
- i0.ɵɵtext(21);
55145
- i0.ɵɵelementEnd();
55146
- i0.ɵɵtext(22);
55268
+ i0.ɵɵelement(18, "symphiq-target-change-badge", 12);
55147
55269
  i0.ɵɵelementEnd();
55148
- i0.ɵɵelementStart(23, "div", 15);
55149
- i0.ɵɵtext(24);
55150
- i0.ɵɵelementEnd()()();
55151
- i0.ɵɵconditionalCreate(25, FunnelMetricsVisualizationComponent_For_4_Conditional_25_Template, 6, 9, "div");
55270
+ i0.ɵɵconditionalCreate(19, FunnelMetricsVisualizationComponent_For_4_Conditional_19_Template, 6, 9, "div");
55152
55271
  i0.ɵɵelementEnd();
55153
- i0.ɵɵconditionalCreate(26, FunnelMetricsVisualizationComponent_For_4_Conditional_26_Template, 7, 2);
55272
+ i0.ɵɵconditionalCreate(20, FunnelMetricsVisualizationComponent_For_4_Conditional_20_Template, 7, 2);
55154
55273
  i0.ɵɵelementEnd();
55155
55274
  } if (rf & 2) {
55156
55275
  const stage_r1 = ctx.$implicit;
@@ -55179,19 +55298,11 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
55179
55298
  i0.ɵɵadvance();
55180
55299
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.stageMetric.targetValue, stage_r1.stageMetric.metric, false), " ");
55181
55300
  i0.ɵɵadvance();
55182
- i0.ɵɵproperty("ngClass", ctx_r1.containerBadgeClasses());
55183
- i0.ɵɵadvance();
55184
- i0.ɵɵproperty("ngClass", ctx_r1.overlayBadgeClasses(stage_r1.stageMetric.percentageIncrease, stage_r1.stageMetric.metric));
55185
- i0.ɵɵadvance(2);
55186
- i0.ɵɵtextInterpolate(ctx_r1.getGrowthIconSymbol(stage_r1.stageMetric.percentageIncrease));
55187
- i0.ɵɵadvance();
55188
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getPercentageOnly(stage_r1.stageMetric.percentageIncrease, stage_r1.stageMetric.metric), " ");
55189
- i0.ɵɵadvance(2);
55190
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getDescriptionOnly(stage_r1.stageMetric.percentageIncrease, stage_r1.stageMetric.metric), " ");
55301
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("percentageChange", stage_r1.stageMetric.percentageIncrease)("metric", stage_r1.stageMetric.metric)("priorYear", ctx_r1.priorYear());
55191
55302
  i0.ɵɵadvance();
55192
- i0.ɵɵconditional(stage_r1.pacingInfo ? 25 : -1);
55303
+ i0.ɵɵconditional(stage_r1.pacingInfo ? 19 : -1);
55193
55304
  i0.ɵɵadvance();
55194
- i0.ɵɵconditional(stage_r1.relatedMetrics.length > 0 ? 26 : -1);
55305
+ i0.ɵɵconditional(stage_r1.relatedMetrics.length > 0 ? 20 : -1);
55195
55306
  } }
55196
55307
  class FunnelMetricsVisualizationComponent {
55197
55308
  constructor() {
@@ -55251,21 +55362,6 @@ class FunnelMetricsVisualizationComponent {
55251
55362
  ? 'text-slate-300'
55252
55363
  : 'text-slate-600';
55253
55364
  }
55254
- containerBadgeClasses() {
55255
- return this.viewMode() === ViewModeEnum.DARK
55256
- ? 'bg-purple-500/30 border-purple-400/30'
55257
- : 'bg-purple-100 border-purple-300';
55258
- }
55259
- relatedContainerBadgeClasses() {
55260
- return this.viewMode() === ViewModeEnum.DARK
55261
- ? 'bg-purple-800/60 border-purple-700/50'
55262
- : 'bg-purple-50 border-purple-200';
55263
- }
55264
- percentageBadgeClasses() {
55265
- return this.viewMode() === ViewModeEnum.DARK
55266
- ? 'bg-purple-500/30 text-purple-200 border border-purple-400/30'
55267
- : 'bg-purple-100 text-purple-700 border border-purple-300';
55268
- }
55269
55365
  labelClasses() {
55270
55366
  return this.viewMode() === ViewModeEnum.DARK
55271
55367
  ? 'text-slate-400'
@@ -55306,11 +55402,6 @@ class FunnelMetricsVisualizationComponent {
55306
55402
  ? 'text-slate-200'
55307
55403
  : 'text-slate-800';
55308
55404
  }
55309
- relatedPercentageBadgeClasses() {
55310
- return this.viewMode() === ViewModeEnum.DARK
55311
- ? 'bg-purple-800/60 text-purple-200'
55312
- : 'bg-purple-50 text-purple-800 border border-purple-200';
55313
- }
55314
55405
  relatedLabelClasses() {
55315
55406
  return this.viewMode() === ViewModeEnum.DARK
55316
55407
  ? 'text-slate-300'
@@ -55334,28 +55425,6 @@ class FunnelMetricsVisualizationComponent {
55334
55425
  formatPercentage(value, decimals) {
55335
55426
  return formatPercentage(value, decimals);
55336
55427
  }
55337
- getTargetIncreaseText(percentageIncrease, metric) {
55338
- const sign = MetricEnumUtil.increaseBad(metric) ? '' : '+';
55339
- const absValue = Math.abs(percentageIncrease);
55340
- return `${sign}${formatPercentage(absValue, 1)} increase over ${this.priorYear()}`;
55341
- }
55342
- getPercentageOnly(percentageIncrease, metric) {
55343
- const sign = MetricEnumUtil.increaseBad(metric) ? '' : '+';
55344
- const absValue = Math.abs(percentageIncrease);
55345
- return `${sign}${formatPercentage(absValue, 1)}`;
55346
- }
55347
- getDescriptionOnly(percentageIncrease, metric) {
55348
- return `increase over ${this.priorYear()}`;
55349
- }
55350
- overlayBadgeClasses(percentageIncrease, metric, isCompact = false) {
55351
- const isDark = this.viewMode() === ViewModeEnum.DARK;
55352
- if (isDark) {
55353
- return 'bg-purple-500/30 text-purple-200 border-purple-400/30';
55354
- }
55355
- else {
55356
- return 'bg-purple-100 text-purple-700 border-purple-300';
55357
- }
55358
- }
55359
55428
  formatMetricValue(value, metric, fromUiData = true) {
55360
55429
  if (metric.includes('REVENUE')) {
55361
55430
  return formatCurrency(value);
@@ -55381,197 +55450,180 @@ class FunnelMetricsVisualizationComponent {
55381
55450
  getMarkdownTooltipContent(markdown, title) {
55382
55451
  return { title, markdown };
55383
55452
  }
55384
- getGrowthSign(metric) {
55385
- return MetricEnumUtil.increaseBad(metric) ? '-' : '+';
55386
- }
55387
- getGrowthIconSymbol(percentageIncrease) {
55388
- if (percentageIncrease > 0)
55389
- return '↗';
55390
- if (percentageIncrease < 0)
55391
- return '↘';
55392
- return '→';
55393
- }
55394
55453
  static { this.ɵfac = function FunnelMetricsVisualizationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FunnelMetricsVisualizationComponent)(); }; }
55395
- 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-row", "items-center", "rounded-lg", "border", 3, "ngClass"], [1, "px-2.5", "py-0.5", "rounded-md", "font-extrabold", "text-sm", "tracking-tight", "border-2", "shadow-lg", "transition-all", "duration-200", "-my-1", "-mr-1", "z-10", "inline-flex", "items-center", "gap-1", 3, "ngClass"], [1, "text-sm"], [1, "px-3", "py-1.5", "font-semibold", "text-xs", "inline-block"], ["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, "inline-flex", "flex-row", "items-center", "rounded", "border", 3, "ngClass"], [1, "px-2", "py-0.5", "rounded", "text-xs", "font-extrabold", "tracking-tight", "border", "shadow-md", "transition-all", "duration-200", "-my-0.5", "-mr-1", "z-10", "inline-flex", "items-center", "gap-0.5", 3, "ngClass"], [1, "text-xs"], [1, "px-2.5", "py-1", "text-xs", "font-semibold", "inline-block"], ["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) {
55454
+ 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"], [3, "viewMode", "percentageChange", "metric", "priorYear"], ["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"], [3, "viewMode", "percentageChange", "metric", "priorYear", "isCompact"], ["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) {
55396
55455
  i0.ɵɵelementStart(0, "div", 0);
55397
55456
  i0.ɵɵelement(1, "symphiq-tooltip-container");
55398
55457
  i0.ɵɵelementStart(2, "div", 1);
55399
- i0.ɵɵrepeaterCreate(3, FunnelMetricsVisualizationComponent_For_4_Template, 27, 19, "div", 2, _forTrack0$i);
55458
+ i0.ɵɵrepeaterCreate(3, FunnelMetricsVisualizationComponent_For_4_Template, 21, 18, "div", 2, _forTrack0$i);
55400
55459
  i0.ɵɵelementEnd()();
55401
55460
  } if (rf & 2) {
55402
55461
  i0.ɵɵadvance(3);
55403
55462
  i0.ɵɵrepeater(ctx.funnelStages());
55404
- } }, dependencies: [CommonModule, i1$1.NgClass, PacingStatusBadgeComponent, TooltipDirective, TooltipContainerComponent], encapsulation: 2, changeDetection: 0 }); }
55463
+ } }, dependencies: [CommonModule, i1$1.NgClass, PacingStatusBadgeComponent, TargetChangeBadgeComponent, TooltipDirective, TooltipContainerComponent], encapsulation: 2, changeDetection: 0 }); }
55405
55464
  }
55406
55465
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FunnelMetricsVisualizationComponent, [{
55407
55466
  type: Component,
55408
55467
  args: [{
55409
55468
  selector: 'symphiq-funnel-metrics-visualization',
55410
55469
  standalone: true,
55411
- imports: [CommonModule, PacingStatusBadgeComponent, TooltipDirective, TooltipContainerComponent],
55470
+ imports: [CommonModule, PacingStatusBadgeComponent, TargetChangeBadgeComponent, TooltipDirective, TooltipContainerComponent],
55412
55471
  changeDetection: ChangeDetectionStrategy.OnPush,
55413
- template: `
55414
- <div class="space-y-6">
55415
- <symphiq-tooltip-container />
55416
- <div class="space-y-8">
55417
- @for (stage of funnelStages(); track stage.stageMetric.metric) {
55418
- <div [ngClass]="stageCardClasses()" class="rounded-xl p-6 border-2 transition-all duration-200">
55419
- <div class="flex items-start justify-between mb-6">
55420
- <div class="flex-1">
55421
- <div class="flex items-center gap-2 mb-1">
55422
- <h3 [ngClass]="stageTitleClasses()" class="text-lg font-bold leading-tight m-0">
55423
- {{ getMetricTitle(stage.stageMetric) }}
55424
- </h3>
55425
- @if (stage.stageMetric.description) {
55426
- <button
55427
- type="button"
55428
- [ngClass]="infoIconClasses()"
55429
- class="flex-shrink-0 w-6 h-6 rounded-full inline-flex items-center justify-center transition-colors"
55430
- [libSymphiqTooltip]="getMarkdownTooltipContent(stage.stageMetric.description, getMetricTitle(stage.stageMetric))"
55431
- tooltipType="markdown"
55432
- tooltipPosition="right">
55433
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
55434
- <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" />
55435
- </svg>
55436
- </button>
55437
- }
55438
- </div>
55439
- </div>
55440
- </div>
55441
-
55442
- <div class="grid grid-cols-2 lg:grid-cols-3 gap-6 mb-4">
55443
- <div>
55444
- <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
55445
- {{ priorYear() }} Actual
55446
- </p>
55447
- <p [ngClass]="valueClasses()" class="text-2xl font-bold">
55448
- {{ formatMetricValue(stage.stageMetric.currentValue, stage.stageMetric.metric) }}
55449
- </p>
55450
- </div>
55451
- <div>
55452
- <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
55453
- {{ currentYear() }} Target
55454
- </p>
55455
- <p [ngClass]="targetValueClasses()" class="text-2xl font-bold mb-3">
55456
- {{ formatMetricValue(stage.stageMetric.targetValue, stage.stageMetric.metric, false) }}
55457
- </p>
55458
- <div [ngClass]="containerBadgeClasses()" class="inline-flex flex-row items-center rounded-lg border">
55459
- <div [ngClass]="overlayBadgeClasses(stage.stageMetric.percentageIncrease, stage.stageMetric.metric)"
55460
- class="px-2.5 py-0.5 rounded-md font-extrabold text-sm tracking-tight border-2 shadow-lg transition-all duration-200 -my-1 -mr-1 z-10 inline-flex items-center gap-1">
55461
- <span class="text-sm">{{ getGrowthIconSymbol(stage.stageMetric.percentageIncrease) }}</span>
55462
- {{ getPercentageOnly(stage.stageMetric.percentageIncrease, stage.stageMetric.metric) }}
55463
- </div>
55464
- <div class="px-3 py-1.5 font-semibold text-xs inline-block">
55465
- {{ getDescriptionOnly(stage.stageMetric.percentageIncrease, stage.stageMetric.metric) }}
55466
- </div>
55467
- </div>
55468
- </div>
55469
- @if (stage.pacingInfo) {
55470
- <div>
55471
- <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
55472
- Pace for {{ currentYear() }}
55473
- </p>
55474
- <p [ngClass]="projectedValueClasses()" class="text-2xl font-bold mb-3">
55475
- {{ formatMetricValue(stage.pacingInfo.projectedValue, stage.stageMetric.metric, false) }}
55476
- </p>
55477
- <symphiq-pacing-status-badge
55478
- [viewMode]="viewMode()"
55479
- [pacingPercentage]="stage.pacingInfo.pacingPercentage"
55480
- [status]="stage.pacingInfo.status"
55481
- [showAsFullText]="true"
55482
- [showEmphasizedPercentage]="true"
55483
- />
55484
- </div>
55485
- }
55486
- </div>
55487
-
55488
- @if (stage.relatedMetrics.length > 0) {
55489
- <div [ngClass]="dividerClasses()" class="my-4"></div>
55490
-
55491
- <div class="space-y-3">
55492
- <p [ngClass]="relatedTitleClasses()" class="text-xs font-semibold uppercase tracking-wider mb-3">
55493
- Related Metrics
55494
- </p>
55495
- <div class="grid gap-3">
55496
- @for (metric of stage.relatedMetrics; track metric.calc.metric) {
55497
- <div [ngClass]="relatedMetricCardClasses()" class="p-4 rounded-lg">
55498
- <div class="flex items-center gap-2 mb-4">
55499
- <p [ngClass]="relatedMetricNameClasses()" class="text-xs font-semibold leading-tight">
55500
- {{ getMetricTitle(metric.calc) }}
55501
- </p>
55502
- @if (metric.calc.description) {
55503
- <button
55504
- type="button"
55505
- [ngClass]="infoIconClasses()"
55506
- class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
55507
- [libSymphiqTooltip]="getMarkdownTooltipContent(metric.calc.description, getMetricTitle(metric.calc))"
55508
- tooltipType="markdown"
55509
- tooltipPosition="right">
55510
- <svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
55511
- <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" />
55512
- </svg>
55513
- </button>
55514
- }
55515
- </div>
55516
- <div class="grid grid-cols-2 lg:grid-cols-3 gap-4">
55517
- <div>
55518
- <p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
55519
- {{ priorYear() }} Actual
55520
- </p>
55521
- <p [ngClass]="relatedValueClasses()" class="text-lg font-bold">
55522
- {{ formatMetricValue(metric.calc.currentValue, metric.calc.metric) }}
55523
- </p>
55524
- </div>
55525
- <div>
55526
- <p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
55527
- {{ currentYear() }} Target
55528
- </p>
55529
- <p [ngClass]="relatedTargetValueClasses()" class="text-lg font-bold mb-2">
55530
- {{ formatMetricValue(metric.calc.targetValue, metric.calc.metric, false) }}
55531
- </p>
55532
- <div [ngClass]="relatedContainerBadgeClasses()" class="inline-flex flex-row items-center rounded border">
55533
- <div [ngClass]="overlayBadgeClasses(metric.calc.percentageIncrease, metric.calc.metric, true)"
55534
- class="px-2 py-0.5 rounded text-xs font-extrabold tracking-tight border shadow-md transition-all duration-200 -my-0.5 -mr-1 z-10 inline-flex items-center gap-0.5">
55535
- <span class="text-xs">{{ getGrowthIconSymbol(metric.calc.percentageIncrease) }}</span>
55536
- {{ getPercentageOnly(metric.calc.percentageIncrease, metric.calc.metric) }}
55537
- </div>
55538
- <div class="px-2.5 py-1 text-xs font-semibold inline-block">
55539
- {{ getDescriptionOnly(metric.calc.percentageIncrease, metric.calc.metric) }}
55540
- </div>
55541
- </div>
55542
- </div>
55543
- @if (metric.pacingInfo) {
55544
- <div>
55545
- <p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
55546
- Pace for {{ currentYear() }}
55547
- </p>
55548
- <p [ngClass]="relatedProjectedValueClasses()" class="text-lg font-bold mb-2">
55549
- {{ formatMetricValue(metric.pacingInfo.projectedValue, metric.calc.metric, false) }}
55550
- </p>
55551
- <symphiq-pacing-status-badge
55552
- [viewMode]="viewMode()"
55553
- [pacingPercentage]="metric.pacingInfo.pacingPercentage"
55554
- [status]="metric.pacingInfo.status"
55555
- [showAsFullText]="true"
55556
- [isCompact]="true"
55557
- [showEmphasizedPercentage]="true"
55558
- />
55559
- </div>
55560
- }
55561
- </div>
55562
- </div>
55563
- }
55564
- </div>
55565
- </div>
55566
- }
55567
- </div>
55568
- }
55569
- </div>
55570
- </div>
55472
+ template: `
55473
+ <div class="space-y-6">
55474
+ <symphiq-tooltip-container />
55475
+ <div class="space-y-8">
55476
+ @for (stage of funnelStages(); track stage.stageMetric.metric) {
55477
+ <div [ngClass]="stageCardClasses()" class="rounded-xl p-6 border-2 transition-all duration-200">
55478
+ <div class="flex items-start justify-between mb-6">
55479
+ <div class="flex-1">
55480
+ <div class="flex items-center gap-2 mb-1">
55481
+ <h3 [ngClass]="stageTitleClasses()" class="text-lg font-bold leading-tight m-0">
55482
+ {{ getMetricTitle(stage.stageMetric) }}
55483
+ </h3>
55484
+ @if (stage.stageMetric.description) {
55485
+ <button
55486
+ type="button"
55487
+ [ngClass]="infoIconClasses()"
55488
+ class="flex-shrink-0 w-6 h-6 rounded-full inline-flex items-center justify-center transition-colors"
55489
+ [libSymphiqTooltip]="getMarkdownTooltipContent(stage.stageMetric.description, getMetricTitle(stage.stageMetric))"
55490
+ tooltipType="markdown"
55491
+ tooltipPosition="right">
55492
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
55493
+ <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" />
55494
+ </svg>
55495
+ </button>
55496
+ }
55497
+ </div>
55498
+ </div>
55499
+ </div>
55500
+
55501
+ <div class="grid grid-cols-2 lg:grid-cols-3 gap-6 mb-4">
55502
+ <div>
55503
+ <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
55504
+ {{ priorYear() }} Actual
55505
+ </p>
55506
+ <p [ngClass]="valueClasses()" class="text-2xl font-bold">
55507
+ {{ formatMetricValue(stage.stageMetric.currentValue, stage.stageMetric.metric) }}
55508
+ </p>
55509
+ </div>
55510
+ <div>
55511
+ <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
55512
+ {{ currentYear() }} Target
55513
+ </p>
55514
+ <p [ngClass]="targetValueClasses()" class="text-2xl font-bold mb-3">
55515
+ {{ formatMetricValue(stage.stageMetric.targetValue, stage.stageMetric.metric, false) }}
55516
+ </p>
55517
+ <symphiq-target-change-badge
55518
+ [viewMode]="viewMode()"
55519
+ [percentageChange]="stage.stageMetric.percentageIncrease"
55520
+ [metric]="stage.stageMetric.metric"
55521
+ [priorYear]="priorYear()"
55522
+ />
55523
+ </div>
55524
+ @if (stage.pacingInfo) {
55525
+ <div>
55526
+ <p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
55527
+ Pace for {{ currentYear() }}
55528
+ </p>
55529
+ <p [ngClass]="projectedValueClasses()" class="text-2xl font-bold mb-3">
55530
+ {{ formatMetricValue(stage.pacingInfo.projectedValue, stage.stageMetric.metric, false) }}
55531
+ </p>
55532
+ <symphiq-pacing-status-badge
55533
+ [viewMode]="viewMode()"
55534
+ [pacingPercentage]="stage.pacingInfo.pacingPercentage"
55535
+ [status]="stage.pacingInfo.status"
55536
+ [showAsFullText]="true"
55537
+ [showEmphasizedPercentage]="true"
55538
+ />
55539
+ </div>
55540
+ }
55541
+ </div>
55542
+
55543
+ @if (stage.relatedMetrics.length > 0) {
55544
+ <div [ngClass]="dividerClasses()" class="my-4"></div>
55545
+
55546
+ <div class="space-y-3">
55547
+ <p [ngClass]="relatedTitleClasses()" class="text-xs font-semibold uppercase tracking-wider mb-3">
55548
+ Related Metrics
55549
+ </p>
55550
+ <div class="grid gap-3">
55551
+ @for (metric of stage.relatedMetrics; track metric.calc.metric) {
55552
+ <div [ngClass]="relatedMetricCardClasses()" class="p-4 rounded-lg">
55553
+ <div class="flex items-center gap-2 mb-4">
55554
+ <p [ngClass]="relatedMetricNameClasses()" class="text-xs font-semibold leading-tight">
55555
+ {{ getMetricTitle(metric.calc) }}
55556
+ </p>
55557
+ @if (metric.calc.description) {
55558
+ <button
55559
+ type="button"
55560
+ [ngClass]="infoIconClasses()"
55561
+ class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
55562
+ [libSymphiqTooltip]="getMarkdownTooltipContent(metric.calc.description, getMetricTitle(metric.calc))"
55563
+ tooltipType="markdown"
55564
+ tooltipPosition="right">
55565
+ <svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
55566
+ <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" />
55567
+ </svg>
55568
+ </button>
55569
+ }
55570
+ </div>
55571
+ <div class="grid grid-cols-2 lg:grid-cols-3 gap-4">
55572
+ <div>
55573
+ <p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
55574
+ {{ priorYear() }} Actual
55575
+ </p>
55576
+ <p [ngClass]="relatedValueClasses()" class="text-lg font-bold">
55577
+ {{ formatMetricValue(metric.calc.currentValue, metric.calc.metric) }}
55578
+ </p>
55579
+ </div>
55580
+ <div>
55581
+ <p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
55582
+ {{ currentYear() }} Target
55583
+ </p>
55584
+ <p [ngClass]="relatedTargetValueClasses()" class="text-lg font-bold mb-2">
55585
+ {{ formatMetricValue(metric.calc.targetValue, metric.calc.metric, false) }}
55586
+ </p>
55587
+ <symphiq-target-change-badge
55588
+ [viewMode]="viewMode()"
55589
+ [percentageChange]="metric.calc.percentageIncrease"
55590
+ [metric]="metric.calc.metric"
55591
+ [priorYear]="priorYear()"
55592
+ [isCompact]="true"
55593
+ />
55594
+ </div>
55595
+ @if (metric.pacingInfo) {
55596
+ <div>
55597
+ <p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
55598
+ Pace for {{ currentYear() }}
55599
+ </p>
55600
+ <p [ngClass]="relatedProjectedValueClasses()" class="text-lg font-bold mb-2">
55601
+ {{ formatMetricValue(metric.pacingInfo.projectedValue, metric.calc.metric, false) }}
55602
+ </p>
55603
+ <symphiq-pacing-status-badge
55604
+ [viewMode]="viewMode()"
55605
+ [pacingPercentage]="metric.pacingInfo.pacingPercentage"
55606
+ [status]="metric.pacingInfo.status"
55607
+ [showAsFullText]="true"
55608
+ [isCompact]="true"
55609
+ [showEmphasizedPercentage]="true"
55610
+ />
55611
+ </div>
55612
+ }
55613
+ </div>
55614
+ </div>
55615
+ }
55616
+ </div>
55617
+ </div>
55618
+ }
55619
+ </div>
55620
+ }
55621
+ </div>
55622
+ </div>
55571
55623
  `
55572
55624
  }]
55573
55625
  }], 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 }] }] }); })();
55574
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber: 176 }); })();
55626
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber: 170 }); })();
55575
55627
 
55576
55628
  function StickySubmitBarComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
55577
55629
  i0.ɵɵelementStart(0, "div", 4);
@@ -84478,5 +84530,5 @@ var pieChart_component = /*#__PURE__*/Object.freeze({
84478
84530
  * Generated bundle index. Do not edit.
84479
84531
  */
84480
84532
 
84481
- export { AreaChartComponent, BarChartComponent, BreakdownSectionComponent, BusinessAnalysisModalComponent, BusinessProfileSearchService, ChartCardComponent, ChartContainerComponent, ChartThemeService, CircularProgressComponent, CompetitivePositioningSummaryComponent, CompetitorAnalysisCardComponent, ConfettiService, ConfidenceLevelCardComponent, ContentGenerationProgressComponent, ContentGenerationProgressWithConfettiComponent, CrossDashboardRelationshipsService, DataLoaderService, FloatingBackButtonComponent, FloatingTocComponent, FocusAreaDetailCardComponent, FocusAreaExecutiveSummaryComponent, FocusAreaQuestionComponent, FocusAreaToolsModalComponent, FunnelOrderService, GradeBadgeComponent, HeaderScrollService, HierarchyDisplayComponent, HorizontalBarComponent, IconService, IndeterminateSpinnerComponent, InsightCardComponent, JourneyProgressIndicatorComponent, JourneyStepIdEnum, LineChartComponent, MetricCardComponent, MetricExecutiveSummaryComponent, MetricFormatterService, MetricListItemComponent, MetricWelcomeBannerComponent, MobileBottomNavComponent, MobileFABComponent, ModalComponent, ModalService, NapkinVisualPlaceholderComponent, NavigationStateService, OpportunityHighlightBannerComponent, OverallAssessmentComponent, PieChartComponent, ProfileItemCardComponent, ProfileSectionComponent, ProfileSubsectionComponent, RelatedContentSidebarComponent, RevenueCalculatorService, RevenueCalculatorWelcomeBannerComponent, ScrollDepthService, ScrollProgressBarComponent, SearchButtonComponent, SearchModalComponent, SectionDividerComponent, SectionNavigationComponent, ShadowElevationDirective, ShopPlatformEnum, ShopWelcomeBannerComponent, SkeletonBarComponent, SkeletonCardBaseComponent, SkeletonCircleComponent, SkeletonCompetitorCardComponent, SkeletonCustomerSegmentCardComponent, SkeletonFocusAreaCardComponent, SkeletonGenericCardComponent, SkeletonLoaderComponent, SkeletonPriceTierCardComponent, SkeletonProductCategoryCardComponent, SkeletonRegionCardComponent, SkeletonSeasonCardComponent, SymphiqBusinessAnalysisDashboardComponent, SymphiqConnectGaDashboardComponent, SymphiqCreateAccountDashboardComponent, SymphiqFunnelAnalysisDashboardComponent, SymphiqFunnelAnalysisPreviewComponent, SymphiqIconComponent, SymphiqProfileAnalysisDashboardComponent, SymphiqRevenueCalculatorDashboardComponent, SymphiqWelcomeDashboardComponent, TooltipContainerComponent, TooltipDataService, TooltipDirective, TooltipService, ViewModeService, ViewportAnimationDirective, VisualizationContainerComponent, calculateFunnelRatios, calculateMetricTargetsFromRevenue, calculateMetricTargetsFromRevenueReverse, calculateRelatedMetricRatios, generateTargetsFromCalculations, getBadgeLabelClasses, getButtonClasses, getCategoryBadgeClasses, getCategoryColor, getCompetitiveBadgeClasses, getContainerClasses, getFooterClasses, getFunnelStageMetrics, getGradeBadgeClasses, getHeaderClasses, getInsightsBadgeClasses, getInsightsCardClasses, getMetricLabelClasses, getMetricMiniCardClasses, getMetricValueClasses, getNarrativeTextClasses, getRevenueCardClasses, getRevenueIconClasses, getStatusBadgeClasses, getStatusDotClasses, getStatusIconClasses, getStatusSummaryClasses, getSubtitleClasses, getTitleClasses, getTrendClasses, getTrendIconClasses, getTrendValueClasses, groupMetricsByFunnelStage, isLightMode, validateRevenueTarget };
84533
+ export { AreaChartComponent, BarChartComponent, BreakdownSectionComponent, BusinessAnalysisModalComponent, BusinessProfileSearchService, ChartCardComponent, ChartContainerComponent, ChartThemeService, CircularProgressComponent, CompetitivePositioningSummaryComponent, CompetitorAnalysisCardComponent, ConfettiService, ConfidenceLevelCardComponent, ContentGenerationProgressComponent, ContentGenerationProgressWithConfettiComponent, CrossDashboardRelationshipsService, DataLoaderService, FloatingBackButtonComponent, FloatingTocComponent, FocusAreaDetailCardComponent, FocusAreaExecutiveSummaryComponent, FocusAreaQuestionComponent, FocusAreaToolsModalComponent, FunnelOrderService, GradeBadgeComponent, HeaderScrollService, HierarchyDisplayComponent, HorizontalBarComponent, IconService, IndeterminateSpinnerComponent, InsightCardComponent, JourneyProgressIndicatorComponent, JourneyStepIdEnum, LineChartComponent, MetricCardComponent, MetricExecutiveSummaryComponent, MetricFormatterService, MetricListItemComponent, MetricWelcomeBannerComponent, MobileBottomNavComponent, MobileFABComponent, ModalComponent, ModalService, NapkinVisualPlaceholderComponent, NavigationStateService, OpportunityHighlightBannerComponent, OverallAssessmentComponent, PacingStatusBadgeComponent, PieChartComponent, ProfileItemCardComponent, ProfileSectionComponent, ProfileSubsectionComponent, RelatedContentSidebarComponent, RevenueCalculatorService, RevenueCalculatorWelcomeBannerComponent, ScrollDepthService, ScrollProgressBarComponent, SearchButtonComponent, SearchModalComponent, SectionDividerComponent, SectionNavigationComponent, ShadowElevationDirective, ShopPlatformEnum, ShopWelcomeBannerComponent, SkeletonBarComponent, SkeletonCardBaseComponent, SkeletonCircleComponent, SkeletonCompetitorCardComponent, SkeletonCustomerSegmentCardComponent, SkeletonFocusAreaCardComponent, SkeletonGenericCardComponent, SkeletonLoaderComponent, SkeletonPriceTierCardComponent, SkeletonProductCategoryCardComponent, SkeletonRegionCardComponent, SkeletonSeasonCardComponent, SymphiqBusinessAnalysisDashboardComponent, SymphiqConnectGaDashboardComponent, SymphiqCreateAccountDashboardComponent, SymphiqFunnelAnalysisDashboardComponent, SymphiqFunnelAnalysisPreviewComponent, SymphiqIconComponent, SymphiqProfileAnalysisDashboardComponent, SymphiqRevenueCalculatorDashboardComponent, SymphiqWelcomeDashboardComponent, TargetChangeBadgeComponent, TooltipContainerComponent, TooltipDataService, TooltipDirective, TooltipService, ViewModeService, ViewportAnimationDirective, VisualizationContainerComponent, calculateFunnelRatios, calculateMetricTargetsFromRevenue, calculateMetricTargetsFromRevenueReverse, calculateRelatedMetricRatios, generateTargetsFromCalculations, getBadgeLabelClasses, getButtonClasses, getCategoryBadgeClasses, getCategoryColor, getCompetitiveBadgeClasses, getContainerClasses, getFooterClasses, getFunnelStageMetrics, getGradeBadgeClasses, getHeaderClasses, getInsightsBadgeClasses, getInsightsCardClasses, getMetricLabelClasses, getMetricMiniCardClasses, getMetricValueClasses, getNarrativeTextClasses, getRevenueCardClasses, getRevenueIconClasses, getStatusBadgeClasses, getStatusDotClasses, getStatusIconClasses, getStatusSummaryClasses, getSubtitleClasses, getTitleClasses, getTrendClasses, getTrendIconClasses, getTrendValueClasses, groupMetricsByFunnelStage, isLightMode, validateRevenueTarget };
84482
84534
  //# sourceMappingURL=symphiq-components.mjs.map