@eric-emg/symphiq-components 1.2.224 → 1.2.226
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.
- package/fesm2022/symphiq-components.mjs +297 -231
- package/fesm2022/symphiq-components.mjs.map +1 -1
- package/index.d.ts +11 -11
- package/package.json +1 -1
- package/src/styles.css +328 -322
- package/styles.css +16 -15
|
@@ -54722,6 +54722,16 @@ function formatPacingDisplay(pacingPercentage) {
|
|
|
54722
54722
|
}
|
|
54723
54723
|
return `${sign}${formatted}% behind`;
|
|
54724
54724
|
}
|
|
54725
|
+
function formatPacingDisplayFullText(pacingPercentage, status) {
|
|
54726
|
+
const formatted = Math.abs(pacingPercentage).toFixed(1);
|
|
54727
|
+
if (status === 'ahead') {
|
|
54728
|
+
return `Pacing at ${formatted}% above target`;
|
|
54729
|
+
}
|
|
54730
|
+
if (status === 'on-pace') {
|
|
54731
|
+
return `Pacing on target`;
|
|
54732
|
+
}
|
|
54733
|
+
return `Pacing at ${formatted}% below target`;
|
|
54734
|
+
}
|
|
54725
54735
|
function calculateGapToTarget(projectedValue, targetValue) {
|
|
54726
54736
|
const amount = targetValue - projectedValue;
|
|
54727
54737
|
const percentage = projectedValue > 0 ? (amount / projectedValue) * 100 : 0;
|
|
@@ -54789,6 +54799,8 @@ class PacingStatusBadgeComponent {
|
|
|
54789
54799
|
this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
|
|
54790
54800
|
this.pacingPercentage = input(0, ...(ngDevMode ? [{ debugName: "pacingPercentage" }] : []));
|
|
54791
54801
|
this.status = input('on-pace', ...(ngDevMode ? [{ debugName: "status" }] : []));
|
|
54802
|
+
this.showAsFullText = input(false, ...(ngDevMode ? [{ debugName: "showAsFullText" }] : []));
|
|
54803
|
+
this.isCompact = input(false, ...(ngDevMode ? [{ debugName: "isCompact" }] : []));
|
|
54792
54804
|
this.displayInfo = computed(() => {
|
|
54793
54805
|
const isDark = this.viewMode() === ViewModeEnum.DARK;
|
|
54794
54806
|
return getPacingDisplayInfo(this.pacingPercentage(), this.status(), isDark);
|
|
@@ -54797,9 +54809,20 @@ class PacingStatusBadgeComponent {
|
|
|
54797
54809
|
const info = this.displayInfo();
|
|
54798
54810
|
return `${info.bgClass} ${info.colorClass} ${info.borderClass}`;
|
|
54799
54811
|
}, ...(ngDevMode ? [{ debugName: "badgeClasses" }] : []));
|
|
54812
|
+
this.sizeClasses = computed(() => {
|
|
54813
|
+
const isCompact = this.isCompact();
|
|
54814
|
+
const baseClasses = 'inline-flex items-center gap-1.5 rounded-lg border font-semibold transition-all';
|
|
54815
|
+
if (isCompact) {
|
|
54816
|
+
return `${baseClasses} px-2.5 py-1 text-2xs`;
|
|
54817
|
+
}
|
|
54818
|
+
return `${baseClasses} px-3 py-1.5 text-xs`;
|
|
54819
|
+
}, ...(ngDevMode ? [{ debugName: "sizeClasses" }] : []));
|
|
54800
54820
|
this.iconClasses = computed(() => {
|
|
54801
54821
|
return this.displayInfo().colorClass;
|
|
54802
54822
|
}, ...(ngDevMode ? [{ debugName: "iconClasses" }] : []));
|
|
54823
|
+
this.iconSizeClasses = computed(() => {
|
|
54824
|
+
return this.isCompact() ? 'text-sm' : 'text-base';
|
|
54825
|
+
}, ...(ngDevMode ? [{ debugName: "iconSizeClasses" }] : []));
|
|
54803
54826
|
this.iconSymbol = computed(() => {
|
|
54804
54827
|
const status = this.status();
|
|
54805
54828
|
if (status === 'ahead')
|
|
@@ -54809,20 +54832,25 @@ class PacingStatusBadgeComponent {
|
|
|
54809
54832
|
return '→';
|
|
54810
54833
|
}, ...(ngDevMode ? [{ debugName: "iconSymbol" }] : []));
|
|
54811
54834
|
this.displayText = computed(() => {
|
|
54835
|
+
if (this.showAsFullText()) {
|
|
54836
|
+
return formatPacingDisplayFullText(this.pacingPercentage(), this.status());
|
|
54837
|
+
}
|
|
54812
54838
|
return this.displayInfo().displayText;
|
|
54813
54839
|
}, ...(ngDevMode ? [{ debugName: "displayText" }] : []));
|
|
54814
54840
|
}
|
|
54815
54841
|
static { this.ɵfac = function PacingStatusBadgeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PacingStatusBadgeComponent)(); }; }
|
|
54816
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PacingStatusBadgeComponent, selectors: [["symphiq-pacing-status-badge"]], inputs: { viewMode: [1, "viewMode"], pacingPercentage: [1, "pacingPercentage"], status: [1, "status"]
|
|
54817
|
-
i0.ɵɵelementStart(0, "div", 0)(1, "span",
|
|
54842
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PacingStatusBadgeComponent, selectors: [["symphiq-pacing-status-badge"]], inputs: { viewMode: [1, "viewMode"], pacingPercentage: [1, "pacingPercentage"], status: [1, "status"], showAsFullText: [1, "showAsFullText"], isCompact: [1, "isCompact"] }, decls: 5, vars: 8, consts: [[3, "ngClass"]], template: function PacingStatusBadgeComponent_Template(rf, ctx) { if (rf & 1) {
|
|
54843
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "span", 0);
|
|
54818
54844
|
i0.ɵɵtext(2);
|
|
54819
54845
|
i0.ɵɵelementEnd();
|
|
54820
54846
|
i0.ɵɵelementStart(3, "span");
|
|
54821
54847
|
i0.ɵɵtext(4);
|
|
54822
54848
|
i0.ɵɵelementEnd()();
|
|
54823
54849
|
} if (rf & 2) {
|
|
54850
|
+
i0.ɵɵclassMap(ctx.sizeClasses());
|
|
54824
54851
|
i0.ɵɵproperty("ngClass", ctx.badgeClasses());
|
|
54825
54852
|
i0.ɵɵadvance();
|
|
54853
|
+
i0.ɵɵclassMap(ctx.iconSizeClasses());
|
|
54826
54854
|
i0.ɵɵproperty("ngClass", ctx.iconClasses());
|
|
54827
54855
|
i0.ɵɵadvance();
|
|
54828
54856
|
i0.ɵɵtextInterpolate1(" ", ctx.iconSymbol(), " ");
|
|
@@ -54840,16 +54868,16 @@ class PacingStatusBadgeComponent {
|
|
|
54840
54868
|
template: `
|
|
54841
54869
|
<div
|
|
54842
54870
|
[ngClass]="badgeClasses()"
|
|
54843
|
-
class="
|
|
54871
|
+
[class]="sizeClasses()"
|
|
54844
54872
|
>
|
|
54845
|
-
<span [ngClass]="iconClasses()" class="
|
|
54873
|
+
<span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
|
|
54846
54874
|
{{ iconSymbol() }}
|
|
54847
54875
|
</span>
|
|
54848
54876
|
<span>{{ displayText() }}</span>
|
|
54849
54877
|
</div>
|
|
54850
54878
|
`
|
|
54851
54879
|
}]
|
|
54852
|
-
}], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], pacingPercentage: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingPercentage", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }] }); })();
|
|
54880
|
+
}], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], pacingPercentage: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingPercentage", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], showAsFullText: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAsFullText", required: false }] }], isCompact: [{ type: i0.Input, args: [{ isSignal: true, alias: "isCompact", required: false }] }] }); })();
|
|
54853
54881
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PacingStatusBadgeComponent, { className: "PacingStatusBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/pacing-status-badge.component.ts", lineNumber: 23 }); })();
|
|
54854
54882
|
|
|
54855
54883
|
const _forTrack0$i = ($index, $item) => $item.stageMetric.metric;
|
|
@@ -54857,124 +54885,134 @@ const _forTrack1$3 = ($index, $item) => $item.calc.metric;
|
|
|
54857
54885
|
function FunnelMetricsVisualizationComponent_For_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
54858
54886
|
i0.ɵɵelementStart(0, "button", 7);
|
|
54859
54887
|
i0.ɵɵnamespaceSVG();
|
|
54860
|
-
i0.ɵɵelementStart(1, "svg",
|
|
54861
|
-
i0.ɵɵelement(2, "path",
|
|
54888
|
+
i0.ɵɵelementStart(1, "svg", 13);
|
|
54889
|
+
i0.ɵɵelement(2, "path", 14);
|
|
54862
54890
|
i0.ɵɵelementEnd()();
|
|
54863
54891
|
} if (rf & 2) {
|
|
54864
54892
|
const stage_r1 = i0.ɵɵnextContext().$implicit;
|
|
54865
54893
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
54866
54894
|
i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(stage_r1.stageMetric.description, ctx_r1.getMetricTitle(stage_r1.stageMetric)));
|
|
54867
54895
|
} }
|
|
54868
|
-
function
|
|
54869
|
-
i0.ɵɵ
|
|
54870
|
-
} if (rf & 2) {
|
|
54871
|
-
const stage_r1 = i0.ɵɵnextContext().$implicit;
|
|
54872
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
54873
|
-
i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", stage_r1.pacingInfo.pacingPercentage)("status", stage_r1.pacingInfo.status);
|
|
54874
|
-
} }
|
|
54875
|
-
function FunnelMetricsVisualizationComponent_For_4_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
54876
|
-
i0.ɵɵelementStart(0, "div")(1, "p", 12);
|
|
54896
|
+
function FunnelMetricsVisualizationComponent_For_4_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
54897
|
+
i0.ɵɵelementStart(0, "div")(1, "p", 9);
|
|
54877
54898
|
i0.ɵɵtext(2);
|
|
54878
54899
|
i0.ɵɵelementEnd();
|
|
54879
|
-
i0.ɵɵelementStart(3, "p",
|
|
54900
|
+
i0.ɵɵelementStart(3, "p", 11);
|
|
54880
54901
|
i0.ɵɵtext(4);
|
|
54881
|
-
i0.ɵɵelementEnd()
|
|
54902
|
+
i0.ɵɵelementEnd();
|
|
54903
|
+
i0.ɵɵelement(5, "symphiq-pacing-status-badge", 15);
|
|
54904
|
+
i0.ɵɵelementEnd();
|
|
54882
54905
|
} if (rf & 2) {
|
|
54883
54906
|
const stage_r1 = i0.ɵɵnextContext().$implicit;
|
|
54884
54907
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
54885
54908
|
i0.ɵɵadvance();
|
|
54886
54909
|
i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
|
|
54887
54910
|
i0.ɵɵadvance();
|
|
54888
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.currentYear(), "
|
|
54911
|
+
i0.ɵɵtextInterpolate1(" Pace for ", ctx_r1.currentYear(), " ");
|
|
54889
54912
|
i0.ɵɵadvance();
|
|
54890
54913
|
i0.ɵɵproperty("ngClass", ctx_r1.projectedValueClasses());
|
|
54891
54914
|
i0.ɵɵadvance();
|
|
54892
54915
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.pacingInfo.projectedValue, stage_r1.stageMetric.metric, false), " ");
|
|
54916
|
+
i0.ɵɵadvance();
|
|
54917
|
+
i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", stage_r1.pacingInfo.pacingPercentage)("status", stage_r1.pacingInfo.status)("showAsFullText", true);
|
|
54893
54918
|
} }
|
|
54894
|
-
function
|
|
54895
|
-
i0.ɵɵelementStart(0, "button",
|
|
54919
|
+
function FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
54920
|
+
i0.ɵɵelementStart(0, "button", 23);
|
|
54896
54921
|
i0.ɵɵnamespaceSVG();
|
|
54897
54922
|
i0.ɵɵelementStart(1, "svg", 29);
|
|
54898
|
-
i0.ɵɵelement(2, "path",
|
|
54923
|
+
i0.ɵɵelement(2, "path", 14);
|
|
54899
54924
|
i0.ɵɵelementEnd()();
|
|
54900
54925
|
} if (rf & 2) {
|
|
54901
54926
|
const metric_r3 = i0.ɵɵnextContext().$implicit;
|
|
54902
54927
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
54903
54928
|
i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(metric_r3.calc.description, ctx_r1.getMetricTitle(metric_r3.calc)));
|
|
54904
54929
|
} }
|
|
54905
|
-
function
|
|
54906
|
-
i0.ɵɵ
|
|
54907
|
-
} if (rf & 2) {
|
|
54908
|
-
const metric_r3 = i0.ɵɵnextContext().$implicit;
|
|
54909
|
-
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
54910
|
-
i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", metric_r3.pacingInfo.pacingPercentage)("status", metric_r3.pacingInfo.status);
|
|
54911
|
-
} }
|
|
54912
|
-
function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
54913
|
-
i0.ɵɵelementStart(0, "div")(1, "p", 28);
|
|
54930
|
+
function FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
54931
|
+
i0.ɵɵelementStart(0, "div")(1, "p", 25);
|
|
54914
54932
|
i0.ɵɵtext(2);
|
|
54915
|
-
i0.ɵɵelementEnd()
|
|
54933
|
+
i0.ɵɵelementEnd();
|
|
54934
|
+
i0.ɵɵelementStart(3, "p", 27);
|
|
54935
|
+
i0.ɵɵtext(4);
|
|
54936
|
+
i0.ɵɵelementEnd();
|
|
54937
|
+
i0.ɵɵelement(5, "symphiq-pacing-status-badge", 30);
|
|
54938
|
+
i0.ɵɵelementEnd();
|
|
54916
54939
|
} if (rf & 2) {
|
|
54917
54940
|
const metric_r3 = i0.ɵɵnextContext().$implicit;
|
|
54918
54941
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
54919
54942
|
i0.ɵɵadvance();
|
|
54920
54943
|
i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
|
|
54921
54944
|
i0.ɵɵadvance();
|
|
54922
|
-
i0.ɵɵtextInterpolate1("
|
|
54945
|
+
i0.ɵɵtextInterpolate1(" Pace for ", ctx_r1.currentYear(), " ");
|
|
54946
|
+
i0.ɵɵadvance();
|
|
54947
|
+
i0.ɵɵproperty("ngClass", ctx_r1.relatedProjectedValueClasses());
|
|
54948
|
+
i0.ɵɵadvance();
|
|
54949
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(metric_r3.pacingInfo.projectedValue, metric_r3.calc.metric, false), " ");
|
|
54950
|
+
i0.ɵɵadvance();
|
|
54951
|
+
i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", metric_r3.pacingInfo.pacingPercentage)("status", metric_r3.pacingInfo.status)("showAsFullText", true)("isCompact", true);
|
|
54923
54952
|
} }
|
|
54924
|
-
function
|
|
54925
|
-
i0.ɵɵelementStart(0, "div", 20)(1, "div", 21)(2, "
|
|
54926
|
-
i0.ɵɵtext(
|
|
54953
|
+
function FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
54954
|
+
i0.ɵɵelementStart(0, "div", 20)(1, "div", 21)(2, "p", 22);
|
|
54955
|
+
i0.ɵɵtext(3);
|
|
54927
54956
|
i0.ɵɵelementEnd();
|
|
54928
|
-
i0.ɵɵconditionalCreate(
|
|
54957
|
+
i0.ɵɵconditionalCreate(4, FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditional_4_Template, 3, 2, "button", 23);
|
|
54929
54958
|
i0.ɵɵelementEnd();
|
|
54930
|
-
i0.ɵɵelementStart(6, "div", 25);
|
|
54931
|
-
i0.ɵɵ
|
|
54932
|
-
i0.ɵɵ
|
|
54933
|
-
i0.ɵɵ
|
|
54934
|
-
i0.ɵɵ
|
|
54935
|
-
i0.ɵɵelementStart(10, "div", 27)(11, "div")(12, "p", 28);
|
|
54936
|
-
i0.ɵɵtext(13);
|
|
54959
|
+
i0.ɵɵelementStart(5, "div", 24)(6, "div")(7, "p", 25);
|
|
54960
|
+
i0.ɵɵtext(8);
|
|
54961
|
+
i0.ɵɵelementEnd();
|
|
54962
|
+
i0.ɵɵelementStart(9, "p", 26);
|
|
54963
|
+
i0.ɵɵtext(10);
|
|
54937
54964
|
i0.ɵɵelementEnd()();
|
|
54938
|
-
i0.ɵɵ
|
|
54939
|
-
i0.ɵɵ
|
|
54965
|
+
i0.ɵɵelementStart(11, "div")(12, "p", 25);
|
|
54966
|
+
i0.ɵɵtext(13);
|
|
54967
|
+
i0.ɵɵelementEnd();
|
|
54968
|
+
i0.ɵɵelementStart(14, "p", 27);
|
|
54969
|
+
i0.ɵɵtext(15);
|
|
54970
|
+
i0.ɵɵelementEnd();
|
|
54971
|
+
i0.ɵɵelementStart(16, "div", 28);
|
|
54940
54972
|
i0.ɵɵtext(17);
|
|
54941
|
-
i0.ɵɵelementEnd()()
|
|
54973
|
+
i0.ɵɵelementEnd()();
|
|
54974
|
+
i0.ɵɵconditionalCreate(18, FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Conditional_18_Template, 6, 9, "div");
|
|
54975
|
+
i0.ɵɵelementEnd()();
|
|
54942
54976
|
} if (rf & 2) {
|
|
54943
54977
|
const metric_r3 = ctx.$implicit;
|
|
54944
54978
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
54945
54979
|
i0.ɵɵproperty("ngClass", ctx_r1.relatedMetricCardClasses());
|
|
54946
|
-
i0.ɵɵadvance(
|
|
54980
|
+
i0.ɵɵadvance(2);
|
|
54947
54981
|
i0.ɵɵproperty("ngClass", ctx_r1.relatedMetricNameClasses());
|
|
54948
54982
|
i0.ɵɵadvance();
|
|
54949
54983
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.getMetricTitle(metric_r3.calc), " ");
|
|
54950
54984
|
i0.ɵɵadvance();
|
|
54951
|
-
i0.ɵɵconditional(metric_r3.calc.description ?
|
|
54952
|
-
i0.ɵɵadvance(
|
|
54953
|
-
i0.ɵɵ
|
|
54985
|
+
i0.ɵɵconditional(metric_r3.calc.description ? 4 : -1);
|
|
54986
|
+
i0.ɵɵadvance(3);
|
|
54987
|
+
i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
|
|
54954
54988
|
i0.ɵɵadvance();
|
|
54955
|
-
i0.ɵɵ
|
|
54989
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.priorYear(), " Actual ");
|
|
54956
54990
|
i0.ɵɵadvance();
|
|
54957
|
-
i0.ɵɵ
|
|
54991
|
+
i0.ɵɵproperty("ngClass", ctx_r1.relatedValueClasses());
|
|
54958
54992
|
i0.ɵɵadvance();
|
|
54959
|
-
i0.ɵɵ
|
|
54993
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(metric_r3.calc.currentValue, metric_r3.calc.metric), " ");
|
|
54960
54994
|
i0.ɵɵadvance(2);
|
|
54961
54995
|
i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
|
|
54962
54996
|
i0.ɵɵadvance();
|
|
54963
|
-
i0.ɵɵ
|
|
54997
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.currentYear(), " Target ");
|
|
54998
|
+
i0.ɵɵadvance();
|
|
54999
|
+
i0.ɵɵproperty("ngClass", ctx_r1.relatedTargetValueClasses());
|
|
54964
55000
|
i0.ɵɵadvance();
|
|
54965
|
-
i0.ɵɵ
|
|
54966
|
-
i0.ɵɵadvance(2);
|
|
54967
|
-
i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
|
|
55001
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(metric_r3.calc.targetValue, metric_r3.calc.metric, false), " ");
|
|
54968
55002
|
i0.ɵɵadvance();
|
|
54969
|
-
i0.ɵɵ
|
|
55003
|
+
i0.ɵɵproperty("ngClass", ctx_r1.relatedPercentageBadgeClasses());
|
|
55004
|
+
i0.ɵɵadvance();
|
|
55005
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getTargetIncreaseText(metric_r3.calc.percentageIncrease, metric_r3.calc.metric), " ");
|
|
55006
|
+
i0.ɵɵadvance();
|
|
55007
|
+
i0.ɵɵconditional(metric_r3.pacingInfo ? 18 : -1);
|
|
54970
55008
|
} }
|
|
54971
|
-
function
|
|
55009
|
+
function FunnelMetricsVisualizationComponent_For_4_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
54972
55010
|
i0.ɵɵelement(0, "div", 16);
|
|
54973
55011
|
i0.ɵɵelementStart(1, "div", 17)(2, "p", 18);
|
|
54974
55012
|
i0.ɵɵtext(3, " Related Metrics ");
|
|
54975
55013
|
i0.ɵɵelementEnd();
|
|
54976
55014
|
i0.ɵɵelementStart(4, "div", 19);
|
|
54977
|
-
i0.ɵɵrepeaterCreate(5,
|
|
55015
|
+
i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_21_For_6_Template, 19, 15, "div", 20, _forTrack1$3);
|
|
54978
55016
|
i0.ɵɵelementEnd()();
|
|
54979
55017
|
} if (rf & 2) {
|
|
54980
55018
|
const stage_r1 = i0.ɵɵnextContext().$implicit;
|
|
@@ -54990,26 +55028,25 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
|
|
|
54990
55028
|
i0.ɵɵtext(5);
|
|
54991
55029
|
i0.ɵɵelementEnd();
|
|
54992
55030
|
i0.ɵɵconditionalCreate(6, FunnelMetricsVisualizationComponent_For_4_Conditional_6_Template, 3, 2, "button", 7);
|
|
54993
|
-
i0.ɵɵelementEnd()();
|
|
54994
|
-
i0.ɵɵelementStart(7, "div", 8);
|
|
54995
|
-
i0.ɵɵconditionalCreate(8, FunnelMetricsVisualizationComponent_For_4_Conditional_8_Template, 1, 3, "symphiq-pacing-status-badge", 9);
|
|
54996
|
-
i0.ɵɵelementStart(9, "div", 10);
|
|
54997
|
-
i0.ɵɵtext(10);
|
|
54998
55031
|
i0.ɵɵelementEnd()()();
|
|
54999
|
-
i0.ɵɵelementStart(
|
|
55000
|
-
i0.ɵɵtext(
|
|
55032
|
+
i0.ɵɵelementStart(7, "div", 8)(8, "div")(9, "p", 9);
|
|
55033
|
+
i0.ɵɵtext(10);
|
|
55001
55034
|
i0.ɵɵelementEnd();
|
|
55002
|
-
i0.ɵɵelementStart(
|
|
55003
|
-
i0.ɵɵtext(
|
|
55035
|
+
i0.ɵɵelementStart(11, "p", 10);
|
|
55036
|
+
i0.ɵɵtext(12);
|
|
55004
55037
|
i0.ɵɵelementEnd()();
|
|
55005
|
-
i0.ɵɵ
|
|
55006
|
-
i0.ɵɵ
|
|
55007
|
-
i0.ɵɵtext(20);
|
|
55038
|
+
i0.ɵɵelementStart(13, "div")(14, "p", 9);
|
|
55039
|
+
i0.ɵɵtext(15);
|
|
55008
55040
|
i0.ɵɵelementEnd();
|
|
55009
|
-
i0.ɵɵelementStart(
|
|
55010
|
-
i0.ɵɵtext(
|
|
55011
|
-
i0.ɵɵelementEnd()
|
|
55012
|
-
i0.ɵɵ
|
|
55041
|
+
i0.ɵɵelementStart(16, "p", 11);
|
|
55042
|
+
i0.ɵɵtext(17);
|
|
55043
|
+
i0.ɵɵelementEnd();
|
|
55044
|
+
i0.ɵɵelementStart(18, "div", 12);
|
|
55045
|
+
i0.ɵɵtext(19);
|
|
55046
|
+
i0.ɵɵelementEnd()();
|
|
55047
|
+
i0.ɵɵconditionalCreate(20, FunnelMetricsVisualizationComponent_For_4_Conditional_20_Template, 6, 8, "div");
|
|
55048
|
+
i0.ɵɵelementEnd();
|
|
55049
|
+
i0.ɵɵconditionalCreate(21, FunnelMetricsVisualizationComponent_For_4_Conditional_21_Template, 7, 2);
|
|
55013
55050
|
i0.ɵɵelementEnd();
|
|
55014
55051
|
} if (rf & 2) {
|
|
55015
55052
|
const stage_r1 = ctx.$implicit;
|
|
@@ -55021,12 +55058,6 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
|
|
|
55021
55058
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.getMetricTitle(stage_r1.stageMetric), " ");
|
|
55022
55059
|
i0.ɵɵadvance();
|
|
55023
55060
|
i0.ɵɵconditional(stage_r1.stageMetric.description ? 6 : -1);
|
|
55024
|
-
i0.ɵɵadvance(2);
|
|
55025
|
-
i0.ɵɵconditional(stage_r1.pacingInfo ? 8 : -1);
|
|
55026
|
-
i0.ɵɵadvance();
|
|
55027
|
-
i0.ɵɵproperty("ngClass", ctx_r1.percentageBadgeClasses());
|
|
55028
|
-
i0.ɵɵadvance();
|
|
55029
|
-
i0.ɵɵtextInterpolate2(" ", ctx_r1.getGrowthSign(stage_r1.stageMetric.metric), "", ctx_r1.formatPercentage(ctx_r1.Math.abs(stage_r1.stageMetric.percentageIncrease), 1), " ");
|
|
55030
55061
|
i0.ɵɵadvance(3);
|
|
55031
55062
|
i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
|
|
55032
55063
|
i0.ɵɵadvance();
|
|
@@ -55035,8 +55066,6 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
|
|
|
55035
55066
|
i0.ɵɵproperty("ngClass", ctx_r1.valueClasses());
|
|
55036
55067
|
i0.ɵɵadvance();
|
|
55037
55068
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.stageMetric.currentValue, stage_r1.stageMetric.metric), " ");
|
|
55038
|
-
i0.ɵɵadvance();
|
|
55039
|
-
i0.ɵɵconditional(stage_r1.pacingInfo ? 17 : -1);
|
|
55040
55069
|
i0.ɵɵadvance(2);
|
|
55041
55070
|
i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
|
|
55042
55071
|
i0.ɵɵadvance();
|
|
@@ -55046,7 +55075,13 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
|
|
|
55046
55075
|
i0.ɵɵadvance();
|
|
55047
55076
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.stageMetric.targetValue, stage_r1.stageMetric.metric, false), " ");
|
|
55048
55077
|
i0.ɵɵadvance();
|
|
55049
|
-
i0.ɵɵ
|
|
55078
|
+
i0.ɵɵproperty("ngClass", ctx_r1.percentageBadgeClasses());
|
|
55079
|
+
i0.ɵɵadvance();
|
|
55080
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getTargetIncreaseText(stage_r1.stageMetric.percentageIncrease, stage_r1.stageMetric.metric), " ");
|
|
55081
|
+
i0.ɵɵadvance();
|
|
55082
|
+
i0.ɵɵconditional(stage_r1.pacingInfo ? 20 : -1);
|
|
55083
|
+
i0.ɵɵadvance();
|
|
55084
|
+
i0.ɵɵconditional(stage_r1.relatedMetrics.length > 0 ? 21 : -1);
|
|
55050
55085
|
} }
|
|
55051
55086
|
class FunnelMetricsVisualizationComponent {
|
|
55052
55087
|
constructor() {
|
|
@@ -55161,9 +55196,29 @@ class FunnelMetricsVisualizationComponent {
|
|
|
55161
55196
|
? 'text-slate-400'
|
|
55162
55197
|
: 'text-slate-600';
|
|
55163
55198
|
}
|
|
55199
|
+
relatedValueClasses() {
|
|
55200
|
+
return this.viewMode() === ViewModeEnum.DARK
|
|
55201
|
+
? 'text-white'
|
|
55202
|
+
: 'text-slate-900';
|
|
55203
|
+
}
|
|
55204
|
+
relatedTargetValueClasses() {
|
|
55205
|
+
return this.viewMode() === ViewModeEnum.DARK
|
|
55206
|
+
? 'text-purple-300'
|
|
55207
|
+
: 'text-purple-700';
|
|
55208
|
+
}
|
|
55209
|
+
relatedProjectedValueClasses() {
|
|
55210
|
+
return this.viewMode() === ViewModeEnum.DARK
|
|
55211
|
+
? 'text-amber-300'
|
|
55212
|
+
: 'text-amber-700';
|
|
55213
|
+
}
|
|
55164
55214
|
formatPercentage(value, decimals) {
|
|
55165
55215
|
return formatPercentage(value, decimals);
|
|
55166
55216
|
}
|
|
55217
|
+
getTargetIncreaseText(percentageIncrease, metric) {
|
|
55218
|
+
const sign = MetricEnumUtil.increaseBad(metric) ? '' : '+';
|
|
55219
|
+
const absValue = Math.abs(percentageIncrease);
|
|
55220
|
+
return `${sign}${formatPercentage(absValue, 1)} increase over ${this.priorYear()}`;
|
|
55221
|
+
}
|
|
55167
55222
|
formatMetricValue(value, metric, fromUiData = true) {
|
|
55168
55223
|
if (metric.includes('REVENUE')) {
|
|
55169
55224
|
return formatCurrency(value);
|
|
@@ -55193,11 +55248,11 @@ class FunnelMetricsVisualizationComponent {
|
|
|
55193
55248
|
return MetricEnumUtil.increaseBad(metric) ? '-' : '+';
|
|
55194
55249
|
}
|
|
55195
55250
|
static { this.ɵfac = function FunnelMetricsVisualizationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FunnelMetricsVisualizationComponent)(); }; }
|
|
55196
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FunnelMetricsVisualizationComponent, selectors: [["symphiq-funnel-metrics-visualization"]], inputs: { viewMode: [1, "viewMode"], calculations: [1, "calculations"], pacingMetrics: [1, "pacingMetrics"] }, decls: 5, vars: 0, consts: [[1, "space-y-6"], [1, "space-y-8"], [1, "rounded-xl", "p-6", "border-2", "transition-all", "duration-200", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "mb-
|
|
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-base", "font-bold", 3, "ngClass"], [1, "text-base", "font-bold", "mb-2", 3, "ngClass"], [1, "px-2.5", "py-1", "rounded", "text-2xs", "font-semibold", "inline-block", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3.5", "h-3.5"], [3, "viewMode", "pacingPercentage", "status", "showAsFullText", "isCompact"]], template: function FunnelMetricsVisualizationComponent_Template(rf, ctx) { if (rf & 1) {
|
|
55197
55252
|
i0.ɵɵelementStart(0, "div", 0);
|
|
55198
55253
|
i0.ɵɵelement(1, "symphiq-tooltip-container");
|
|
55199
55254
|
i0.ɵɵelementStart(2, "div", 1);
|
|
55200
|
-
i0.ɵɵrepeaterCreate(3, FunnelMetricsVisualizationComponent_For_4_Template,
|
|
55255
|
+
i0.ɵɵrepeaterCreate(3, FunnelMetricsVisualizationComponent_For_4_Template, 22, 16, "div", 2, _forTrack0$i);
|
|
55201
55256
|
i0.ɵɵelementEnd()();
|
|
55202
55257
|
} if (rf & 2) {
|
|
55203
55258
|
i0.ɵɵadvance(3);
|
|
@@ -55211,144 +55266,152 @@ class FunnelMetricsVisualizationComponent {
|
|
|
55211
55266
|
standalone: true,
|
|
55212
55267
|
imports: [CommonModule, PacingStatusBadgeComponent, TooltipDirective, TooltipContainerComponent],
|
|
55213
55268
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
55214
|
-
template: `
|
|
55215
|
-
<div class="space-y-6">
|
|
55216
|
-
<symphiq-tooltip-container />
|
|
55217
|
-
<div class="space-y-8">
|
|
55218
|
-
@for (stage of funnelStages(); track stage.stageMetric.metric) {
|
|
55219
|
-
<div [ngClass]="stageCardClasses()" class="rounded-xl p-6 border-2 transition-all duration-200">
|
|
55220
|
-
<div class="flex items-start justify-between mb-
|
|
55221
|
-
<div class="flex-1">
|
|
55222
|
-
<div class="flex items-center gap-2 mb-1">
|
|
55223
|
-
<h3 [ngClass]="stageTitleClasses()" class="text-lg font-bold leading-tight m-0">
|
|
55224
|
-
{{ getMetricTitle(stage.stageMetric) }}
|
|
55225
|
-
</h3>
|
|
55226
|
-
@if (stage.stageMetric.description) {
|
|
55227
|
-
<button
|
|
55228
|
-
type="button"
|
|
55229
|
-
[ngClass]="infoIconClasses()"
|
|
55230
|
-
class="flex-shrink-0 w-6 h-6 rounded-full inline-flex items-center justify-center transition-colors"
|
|
55231
|
-
[libSymphiqTooltip]="getMarkdownTooltipContent(stage.stageMetric.description, getMetricTitle(stage.stageMetric))"
|
|
55232
|
-
tooltipType="markdown"
|
|
55233
|
-
tooltipPosition="right">
|
|
55234
|
-
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
55235
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
55236
|
-
</svg>
|
|
55237
|
-
</button>
|
|
55238
|
-
}
|
|
55239
|
-
</div>
|
|
55240
|
-
</div>
|
|
55241
|
-
|
|
55242
|
-
|
|
55243
|
-
|
|
55244
|
-
|
|
55245
|
-
|
|
55246
|
-
|
|
55247
|
-
|
|
55248
|
-
|
|
55249
|
-
|
|
55250
|
-
|
|
55251
|
-
|
|
55252
|
-
|
|
55253
|
-
|
|
55254
|
-
|
|
55255
|
-
|
|
55256
|
-
|
|
55257
|
-
|
|
55258
|
-
|
|
55259
|
-
|
|
55260
|
-
|
|
55261
|
-
|
|
55262
|
-
|
|
55263
|
-
|
|
55264
|
-
|
|
55265
|
-
|
|
55266
|
-
|
|
55267
|
-
|
|
55268
|
-
|
|
55269
|
-
|
|
55270
|
-
|
|
55271
|
-
|
|
55272
|
-
|
|
55273
|
-
|
|
55274
|
-
|
|
55275
|
-
|
|
55276
|
-
|
|
55277
|
-
</
|
|
55278
|
-
|
|
55279
|
-
|
|
55280
|
-
|
|
55281
|
-
|
|
55282
|
-
|
|
55283
|
-
|
|
55284
|
-
|
|
55285
|
-
|
|
55286
|
-
|
|
55287
|
-
|
|
55288
|
-
<
|
|
55289
|
-
|
|
55290
|
-
|
|
55291
|
-
|
|
55292
|
-
|
|
55293
|
-
|
|
55294
|
-
|
|
55295
|
-
|
|
55296
|
-
<
|
|
55297
|
-
|
|
55298
|
-
|
|
55299
|
-
|
|
55300
|
-
|
|
55301
|
-
|
|
55302
|
-
|
|
55303
|
-
|
|
55304
|
-
|
|
55305
|
-
|
|
55306
|
-
|
|
55307
|
-
|
|
55308
|
-
|
|
55309
|
-
|
|
55310
|
-
|
|
55311
|
-
|
|
55312
|
-
|
|
55313
|
-
|
|
55314
|
-
|
|
55315
|
-
|
|
55316
|
-
|
|
55317
|
-
|
|
55318
|
-
|
|
55319
|
-
|
|
55320
|
-
|
|
55321
|
-
|
|
55322
|
-
|
|
55323
|
-
|
|
55324
|
-
|
|
55325
|
-
|
|
55326
|
-
|
|
55327
|
-
|
|
55328
|
-
|
|
55329
|
-
|
|
55330
|
-
|
|
55331
|
-
|
|
55332
|
-
|
|
55333
|
-
|
|
55334
|
-
|
|
55335
|
-
|
|
55336
|
-
|
|
55337
|
-
|
|
55338
|
-
|
|
55339
|
-
|
|
55340
|
-
|
|
55341
|
-
|
|
55342
|
-
|
|
55343
|
-
|
|
55344
|
-
|
|
55345
|
-
|
|
55346
|
-
|
|
55347
|
-
|
|
55269
|
+
template: `
|
|
55270
|
+
<div class="space-y-6">
|
|
55271
|
+
<symphiq-tooltip-container />
|
|
55272
|
+
<div class="space-y-8">
|
|
55273
|
+
@for (stage of funnelStages(); track stage.stageMetric.metric) {
|
|
55274
|
+
<div [ngClass]="stageCardClasses()" class="rounded-xl p-6 border-2 transition-all duration-200">
|
|
55275
|
+
<div class="flex items-start justify-between mb-6">
|
|
55276
|
+
<div class="flex-1">
|
|
55277
|
+
<div class="flex items-center gap-2 mb-1">
|
|
55278
|
+
<h3 [ngClass]="stageTitleClasses()" class="text-lg font-bold leading-tight m-0">
|
|
55279
|
+
{{ getMetricTitle(stage.stageMetric) }}
|
|
55280
|
+
</h3>
|
|
55281
|
+
@if (stage.stageMetric.description) {
|
|
55282
|
+
<button
|
|
55283
|
+
type="button"
|
|
55284
|
+
[ngClass]="infoIconClasses()"
|
|
55285
|
+
class="flex-shrink-0 w-6 h-6 rounded-full inline-flex items-center justify-center transition-colors"
|
|
55286
|
+
[libSymphiqTooltip]="getMarkdownTooltipContent(stage.stageMetric.description, getMetricTitle(stage.stageMetric))"
|
|
55287
|
+
tooltipType="markdown"
|
|
55288
|
+
tooltipPosition="right">
|
|
55289
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
55290
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
55291
|
+
</svg>
|
|
55292
|
+
</button>
|
|
55293
|
+
}
|
|
55294
|
+
</div>
|
|
55295
|
+
</div>
|
|
55296
|
+
</div>
|
|
55297
|
+
|
|
55298
|
+
<div class="grid grid-cols-3 gap-6 mb-4">
|
|
55299
|
+
<div>
|
|
55300
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
|
|
55301
|
+
{{ priorYear() }} Actual
|
|
55302
|
+
</p>
|
|
55303
|
+
<p [ngClass]="valueClasses()" class="text-2xl font-bold">
|
|
55304
|
+
{{ formatMetricValue(stage.stageMetric.currentValue, stage.stageMetric.metric) }}
|
|
55305
|
+
</p>
|
|
55306
|
+
</div>
|
|
55307
|
+
<div>
|
|
55308
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
|
|
55309
|
+
{{ currentYear() }} Target
|
|
55310
|
+
</p>
|
|
55311
|
+
<p [ngClass]="targetValueClasses()" class="text-2xl font-bold mb-3">
|
|
55312
|
+
{{ formatMetricValue(stage.stageMetric.targetValue, stage.stageMetric.metric, false) }}
|
|
55313
|
+
</p>
|
|
55314
|
+
<div [ngClass]="percentageBadgeClasses()" class="px-3 py-1.5 rounded-lg font-semibold text-xs inline-block">
|
|
55315
|
+
{{ getTargetIncreaseText(stage.stageMetric.percentageIncrease, stage.stageMetric.metric) }}
|
|
55316
|
+
</div>
|
|
55317
|
+
</div>
|
|
55318
|
+
@if (stage.pacingInfo) {
|
|
55319
|
+
<div>
|
|
55320
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
|
|
55321
|
+
Pace for {{ currentYear() }}
|
|
55322
|
+
</p>
|
|
55323
|
+
<p [ngClass]="projectedValueClasses()" class="text-2xl font-bold mb-3">
|
|
55324
|
+
{{ formatMetricValue(stage.pacingInfo.projectedValue, stage.stageMetric.metric, false) }}
|
|
55325
|
+
</p>
|
|
55326
|
+
<symphiq-pacing-status-badge
|
|
55327
|
+
[viewMode]="viewMode()"
|
|
55328
|
+
[pacingPercentage]="stage.pacingInfo.pacingPercentage"
|
|
55329
|
+
[status]="stage.pacingInfo.status"
|
|
55330
|
+
[showAsFullText]="true"
|
|
55331
|
+
/>
|
|
55332
|
+
</div>
|
|
55333
|
+
}
|
|
55334
|
+
</div>
|
|
55335
|
+
|
|
55336
|
+
@if (stage.relatedMetrics.length > 0) {
|
|
55337
|
+
<div [ngClass]="dividerClasses()" class="my-4"></div>
|
|
55338
|
+
|
|
55339
|
+
<div class="space-y-3">
|
|
55340
|
+
<p [ngClass]="relatedTitleClasses()" class="text-xs font-semibold uppercase tracking-wider mb-3">
|
|
55341
|
+
Related Metrics
|
|
55342
|
+
</p>
|
|
55343
|
+
<div class="grid gap-3">
|
|
55344
|
+
@for (metric of stage.relatedMetrics; track metric.calc.metric) {
|
|
55345
|
+
<div [ngClass]="relatedMetricCardClasses()" class="p-4 rounded-lg">
|
|
55346
|
+
<div class="flex items-center gap-2 mb-4">
|
|
55347
|
+
<p [ngClass]="relatedMetricNameClasses()" class="text-xs font-semibold leading-tight">
|
|
55348
|
+
{{ getMetricTitle(metric.calc) }}
|
|
55349
|
+
</p>
|
|
55350
|
+
@if (metric.calc.description) {
|
|
55351
|
+
<button
|
|
55352
|
+
type="button"
|
|
55353
|
+
[ngClass]="infoIconClasses()"
|
|
55354
|
+
class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
|
|
55355
|
+
[libSymphiqTooltip]="getMarkdownTooltipContent(metric.calc.description, getMetricTitle(metric.calc))"
|
|
55356
|
+
tooltipType="markdown"
|
|
55357
|
+
tooltipPosition="right">
|
|
55358
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
55359
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
55360
|
+
</svg>
|
|
55361
|
+
</button>
|
|
55362
|
+
}
|
|
55363
|
+
</div>
|
|
55364
|
+
<div class="grid grid-cols-3 gap-4">
|
|
55365
|
+
<div>
|
|
55366
|
+
<p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
|
|
55367
|
+
{{ priorYear() }} Actual
|
|
55368
|
+
</p>
|
|
55369
|
+
<p [ngClass]="relatedValueClasses()" class="text-base font-bold">
|
|
55370
|
+
{{ formatMetricValue(metric.calc.currentValue, metric.calc.metric) }}
|
|
55371
|
+
</p>
|
|
55372
|
+
</div>
|
|
55373
|
+
<div>
|
|
55374
|
+
<p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
|
|
55375
|
+
{{ currentYear() }} Target
|
|
55376
|
+
</p>
|
|
55377
|
+
<p [ngClass]="relatedTargetValueClasses()" class="text-base font-bold mb-2">
|
|
55378
|
+
{{ formatMetricValue(metric.calc.targetValue, metric.calc.metric, false) }}
|
|
55379
|
+
</p>
|
|
55380
|
+
<div [ngClass]="relatedPercentageBadgeClasses()" class="px-2.5 py-1 rounded text-2xs font-semibold inline-block">
|
|
55381
|
+
{{ getTargetIncreaseText(metric.calc.percentageIncrease, metric.calc.metric) }}
|
|
55382
|
+
</div>
|
|
55383
|
+
</div>
|
|
55384
|
+
@if (metric.pacingInfo) {
|
|
55385
|
+
<div>
|
|
55386
|
+
<p [ngClass]="relatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
|
|
55387
|
+
Pace for {{ currentYear() }}
|
|
55388
|
+
</p>
|
|
55389
|
+
<p [ngClass]="relatedProjectedValueClasses()" class="text-base font-bold mb-2">
|
|
55390
|
+
{{ formatMetricValue(metric.pacingInfo.projectedValue, metric.calc.metric, false) }}
|
|
55391
|
+
</p>
|
|
55392
|
+
<symphiq-pacing-status-badge
|
|
55393
|
+
[viewMode]="viewMode()"
|
|
55394
|
+
[pacingPercentage]="metric.pacingInfo.pacingPercentage"
|
|
55395
|
+
[status]="metric.pacingInfo.status"
|
|
55396
|
+
[showAsFullText]="true"
|
|
55397
|
+
[isCompact]="true"
|
|
55398
|
+
/>
|
|
55399
|
+
</div>
|
|
55400
|
+
}
|
|
55401
|
+
</div>
|
|
55402
|
+
</div>
|
|
55403
|
+
}
|
|
55404
|
+
</div>
|
|
55405
|
+
</div>
|
|
55406
|
+
}
|
|
55407
|
+
</div>
|
|
55408
|
+
}
|
|
55409
|
+
</div>
|
|
55410
|
+
</div>
|
|
55348
55411
|
`
|
|
55349
55412
|
}]
|
|
55350
55413
|
}], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], calculations: [{ type: i0.Input, args: [{ isSignal: true, alias: "calculations", required: false }] }], pacingMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingMetrics", required: false }] }] }); })();
|
|
55351
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber:
|
|
55414
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber: 160 }); })();
|
|
55352
55415
|
|
|
55353
55416
|
function StickySubmitBarComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
55354
55417
|
i0.ɵɵelementStart(0, "div", 4);
|
|
@@ -56901,10 +56964,12 @@ class InitialTargetSettingComponent {
|
|
|
56901
56964
|
absValue(value) {
|
|
56902
56965
|
return Math.abs(value);
|
|
56903
56966
|
}
|
|
56904
|
-
sectionCardClasses() {
|
|
56905
|
-
|
|
56906
|
-
|
|
56907
|
-
: 'bg-
|
|
56967
|
+
sectionCardClasses(forStickyCard = false) {
|
|
56968
|
+
const isSticky = forStickyCard && this.calculationState() === 'results';
|
|
56969
|
+
if (this.viewMode() === ViewModeEnum.DARK) {
|
|
56970
|
+
return isSticky ? 'bg-slate-800 border-slate-700/50' : 'bg-slate-800/40 border-slate-700/50';
|
|
56971
|
+
}
|
|
56972
|
+
return isSticky ? 'bg-white border-slate-200' : 'bg-white border-slate-200';
|
|
56908
56973
|
}
|
|
56909
56974
|
sectionTitleClasses() {
|
|
56910
56975
|
return this.viewMode() === ViewModeEnum.DARK
|
|
@@ -57123,8 +57188,9 @@ class InitialTargetSettingComponent {
|
|
|
57123
57188
|
i0.ɵɵelementEnd()();
|
|
57124
57189
|
} if (rf & 2) {
|
|
57125
57190
|
i0.ɵɵadvance(2);
|
|
57126
|
-
i0.ɵɵ
|
|
57127
|
-
i0.ɵɵ
|
|
57191
|
+
i0.ɵɵstyleProp("top", ctx.calculationState() === "results" ? "148px" : "auto");
|
|
57192
|
+
i0.ɵɵclassProp("cursor-pointer", ctx.calculationState() === "results")("sticky", ctx.calculationState() === "results")("z-30", ctx.calculationState() === "results");
|
|
57193
|
+
i0.ɵɵproperty("ngClass", ctx.sectionCardClasses(true));
|
|
57128
57194
|
i0.ɵɵadvance(2);
|
|
57129
57195
|
i0.ɵɵproperty("ngClass", ctx.sectionTitleClasses());
|
|
57130
57196
|
i0.ɵɵadvance();
|
|
@@ -57189,10 +57255,10 @@ class InitialTargetSettingComponent {
|
|
|
57189
57255
|
], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
57190
57256
|
<div class="space-y-8 pb-32">
|
|
57191
57257
|
<symphiq-tooltip-container />
|
|
57192
|
-
<div [ngClass]="sectionCardClasses()" class="rounded-2xl border shadow-lg p-8"
|
|
57258
|
+
<div [ngClass]="sectionCardClasses(true)" class="rounded-2xl border shadow-lg p-8"
|
|
57193
57259
|
[class.cursor-pointer]="calculationState() === 'results'"
|
|
57194
57260
|
[class.sticky]="calculationState() === 'results'"
|
|
57195
|
-
[
|
|
57261
|
+
[style.top]="calculationState() === 'results' ? '148px' : 'auto'"
|
|
57196
57262
|
[class.z-30]="calculationState() === 'results'"
|
|
57197
57263
|
(click)="onCardClick()">
|
|
57198
57264
|
<div class="flex items-center justify-between mb-6">
|