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