@eric-emg/symphiq-components 1.2.250 → 1.2.252
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 +635 -526
- package/fesm2022/symphiq-components.mjs.map +1 -1
- package/index.d.ts +44 -25
- package/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/styles.css +3 -9
|
@@ -54818,6 +54818,7 @@ function PacingStatusBadgeComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
54818
54818
|
} if (rf & 2) {
|
|
54819
54819
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
54820
54820
|
i0.ɵɵclassMap(ctx_r0.containerSizeClasses());
|
|
54821
|
+
i0.ɵɵstyleProp("transform", ctx_r0.rotationStyle());
|
|
54821
54822
|
i0.ɵɵproperty("ngClass", ctx_r0.containerClasses());
|
|
54822
54823
|
i0.ɵɵadvance();
|
|
54823
54824
|
i0.ɵɵclassMap(ctx_r0.overlaySizeClasses());
|
|
@@ -54844,6 +54845,7 @@ function PacingStatusBadgeComponent_Conditional_1_Template(rf, ctx) { if (rf & 1
|
|
|
54844
54845
|
} if (rf & 2) {
|
|
54845
54846
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
54846
54847
|
i0.ɵɵclassMap(ctx_r0.fullBadgeSizeClasses());
|
|
54848
|
+
i0.ɵɵstyleProp("transform", ctx_r0.fullBadgeRotationStyle());
|
|
54847
54849
|
i0.ɵɵproperty("ngClass", ctx_r0.badgeClasses());
|
|
54848
54850
|
i0.ɵɵadvance();
|
|
54849
54851
|
i0.ɵɵclassMap(ctx_r0.iconSizeClasses());
|
|
@@ -54854,7 +54856,8 @@ function PacingStatusBadgeComponent_Conditional_1_Template(rf, ctx) { if (rf & 1
|
|
|
54854
54856
|
i0.ɵɵtextInterpolate(ctx_r0.displayText());
|
|
54855
54857
|
} }
|
|
54856
54858
|
class PacingStatusBadgeComponent {
|
|
54857
|
-
constructor() {
|
|
54859
|
+
constructor(elementRef) {
|
|
54860
|
+
this.elementRef = elementRef;
|
|
54858
54861
|
this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
|
|
54859
54862
|
this.pacingPercentage = input(0, ...(ngDevMode ? [{ debugName: "pacingPercentage" }] : []));
|
|
54860
54863
|
this.status = input('on-pace', ...(ngDevMode ? [{ debugName: "status" }] : []));
|
|
@@ -54862,6 +54865,9 @@ class PacingStatusBadgeComponent {
|
|
|
54862
54865
|
this.isCompact = input(false, ...(ngDevMode ? [{ debugName: "isCompact" }] : []));
|
|
54863
54866
|
this.showEmphasizedPercentage = input(false, ...(ngDevMode ? [{ debugName: "showEmphasizedPercentage" }] : []));
|
|
54864
54867
|
this.animatedValue = signal(0, ...(ngDevMode ? [{ debugName: "animatedValue" }] : []));
|
|
54868
|
+
this.animationProgress = signal(0, ...(ngDevMode ? [{ debugName: "animationProgress" }] : []));
|
|
54869
|
+
this.hasAnimated = signal(false, ...(ngDevMode ? [{ debugName: "hasAnimated" }] : []));
|
|
54870
|
+
this.observer = null;
|
|
54865
54871
|
this.displayInfo = computed(() => {
|
|
54866
54872
|
const isDark = this.viewMode() === ViewModeEnum.DARK;
|
|
54867
54873
|
return getPacingDisplayInfo(this.pacingPercentage(), this.status(), isDark);
|
|
@@ -54870,14 +54876,24 @@ class PacingStatusBadgeComponent {
|
|
|
54870
54876
|
const info = this.displayInfo();
|
|
54871
54877
|
return `${info.bgClass} ${info.borderClass} border`;
|
|
54872
54878
|
}, ...(ngDevMode ? [{ debugName: "containerClasses" }] : []));
|
|
54879
|
+
this.targetRotation = computed(() => {
|
|
54880
|
+
const status = this.status();
|
|
54881
|
+
return status === 'ahead' ? -1 : status === 'behind' ? 1 : 0;
|
|
54882
|
+
}, ...(ngDevMode ? [{ debugName: "targetRotation" }] : []));
|
|
54883
|
+
this.rotationStyle = computed(() => {
|
|
54884
|
+
const target = this.targetRotation();
|
|
54885
|
+
return `rotate(${target}deg)`;
|
|
54886
|
+
}, ...(ngDevMode ? [{ debugName: "rotationStyle" }] : []));
|
|
54887
|
+
this.fullBadgeRotationStyle = computed(() => {
|
|
54888
|
+
const target = this.targetRotation();
|
|
54889
|
+
return `rotate(${target}deg)`;
|
|
54890
|
+
}, ...(ngDevMode ? [{ debugName: "fullBadgeRotationStyle" }] : []));
|
|
54873
54891
|
this.containerSizeClasses = computed(() => {
|
|
54874
54892
|
const compact = this.isCompact();
|
|
54875
|
-
const status = this.status();
|
|
54876
|
-
const tiltClass = status === 'ahead' ? '-rotate-1' : status === 'behind' ? 'rotate-1' : '';
|
|
54877
54893
|
const baseClasses = 'inline-flex flex-row items-center rounded-xl border-2 overflow-visible transition-transform hover:rotate-0';
|
|
54878
54894
|
return compact
|
|
54879
|
-
? `${baseClasses} pl-1.5
|
|
54880
|
-
: `${baseClasses} pl-2
|
|
54895
|
+
? `${baseClasses} pl-1.5`
|
|
54896
|
+
: `${baseClasses} pl-2`;
|
|
54881
54897
|
}, ...(ngDevMode ? [{ debugName: "containerSizeClasses" }] : []));
|
|
54882
54898
|
this.badgeClasses = computed(() => {
|
|
54883
54899
|
const info = this.displayInfo();
|
|
@@ -54893,9 +54909,7 @@ class PacingStatusBadgeComponent {
|
|
|
54893
54909
|
}, ...(ngDevMode ? [{ debugName: "sizeClasses" }] : []));
|
|
54894
54910
|
this.fullBadgeSizeClasses = computed(() => {
|
|
54895
54911
|
const isCompact = this.isCompact();
|
|
54896
|
-
const
|
|
54897
|
-
const tiltClass = status === 'ahead' ? '-rotate-1' : status === 'behind' ? 'rotate-1' : '';
|
|
54898
|
-
const baseClasses = `inline-flex items-center gap-1.5 rounded-xl border-2 font-bold tracking-wide shadow-md transition-all hover:rotate-0 ${tiltClass}`;
|
|
54912
|
+
const baseClasses = 'inline-flex items-center gap-1.5 rounded-xl border-2 font-bold tracking-wide shadow-md transition-all hover:rotate-0';
|
|
54899
54913
|
if (isCompact) {
|
|
54900
54914
|
return `${baseClasses} px-2.5 py-1 text-xs`;
|
|
54901
54915
|
}
|
|
@@ -54964,14 +54978,34 @@ class PacingStatusBadgeComponent {
|
|
|
54964
54978
|
this.overlaySizeClasses = computed(() => {
|
|
54965
54979
|
const compact = this.isCompact();
|
|
54966
54980
|
return compact
|
|
54967
|
-
? 'px-2 py-1.5 rounded-lg text-sm font-extrabold tracking-wide shadow-md transition-all duration-200 -my-1 -mr-1 z-10 inline-flex items-center gap-0.5'
|
|
54968
|
-
: 'px-2.5 py-2 rounded-lg text-sm font-extrabold tracking-wide shadow-md transition-all duration-200 -my-1.5 -mr-1 z-10 inline-flex items-center gap-1';
|
|
54981
|
+
? 'px-2 py-1.5 rounded-lg text-sm font-extrabold tracking-wide shadow-md transition-all duration-200 -my-1 -mr-1 z-10 inline-flex items-center gap-0.5 tabular-nums'
|
|
54982
|
+
: 'px-2.5 py-2 rounded-lg text-sm font-extrabold tracking-wide shadow-md transition-all duration-200 -my-1.5 -mr-1 z-10 inline-flex items-center gap-1 tabular-nums';
|
|
54969
54983
|
}, ...(ngDevMode ? [{ debugName: "overlaySizeClasses" }] : []));
|
|
54984
|
+
this.setupIntersectionObserver();
|
|
54970
54985
|
effect(() => {
|
|
54971
54986
|
const target = Math.abs(this.pacingPercentage());
|
|
54972
|
-
this.
|
|
54987
|
+
if (this.hasAnimated()) {
|
|
54988
|
+
this.animateValue(target);
|
|
54989
|
+
}
|
|
54973
54990
|
});
|
|
54974
54991
|
}
|
|
54992
|
+
ngOnDestroy() {
|
|
54993
|
+
if (this.observer) {
|
|
54994
|
+
this.observer.disconnect();
|
|
54995
|
+
}
|
|
54996
|
+
}
|
|
54997
|
+
setupIntersectionObserver() {
|
|
54998
|
+
this.observer = new IntersectionObserver((entries) => {
|
|
54999
|
+
entries.forEach((entry) => {
|
|
55000
|
+
if (entry.isIntersecting && !this.hasAnimated()) {
|
|
55001
|
+
this.hasAnimated.set(true);
|
|
55002
|
+
const target = Math.abs(this.pacingPercentage());
|
|
55003
|
+
this.animateValue(target);
|
|
55004
|
+
}
|
|
55005
|
+
});
|
|
55006
|
+
}, { threshold: 0.1 });
|
|
55007
|
+
this.observer.observe(this.elementRef.nativeElement);
|
|
55008
|
+
}
|
|
54975
55009
|
animateValue(target) {
|
|
54976
55010
|
const start = 0;
|
|
54977
55011
|
const duration = 800;
|
|
@@ -54982,15 +55016,16 @@ class PacingStatusBadgeComponent {
|
|
|
54982
55016
|
const easeOutQuart = 1 - Math.pow(1 - progress, 4);
|
|
54983
55017
|
const current = start + (target - start) * easeOutQuart;
|
|
54984
55018
|
this.animatedValue.set(current);
|
|
55019
|
+
this.animationProgress.set(progress);
|
|
54985
55020
|
if (progress < 1) {
|
|
54986
55021
|
requestAnimationFrame(animate);
|
|
54987
55022
|
}
|
|
54988
55023
|
};
|
|
54989
55024
|
requestAnimationFrame(animate);
|
|
54990
55025
|
}
|
|
54991
|
-
static { this.ɵfac = function PacingStatusBadgeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PacingStatusBadgeComponent)(); }; }
|
|
54992
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PacingStatusBadgeComponent, selectors: [["symphiq-pacing-status-badge"]], inputs: { viewMode: [1, "viewMode"], pacingPercentage: [1, "pacingPercentage"], status: [1, "status"], showAsFullText: [1, "showAsFullText"], isCompact: [1, "isCompact"], showEmphasizedPercentage: [1, "showEmphasizedPercentage"] }, decls: 2, vars: 1, consts: [[3, "ngClass", "class"], [3, "ngClass"]], template: function PacingStatusBadgeComponent_Template(rf, ctx) { if (rf & 1) {
|
|
54993
|
-
i0.ɵɵconditionalCreate(0, PacingStatusBadgeComponent_Conditional_0_Template, 8,
|
|
55026
|
+
static { this.ɵfac = function PacingStatusBadgeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PacingStatusBadgeComponent)(i0.ɵɵdirectiveInject(i0.ElementRef)); }; }
|
|
55027
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PacingStatusBadgeComponent, selectors: [["symphiq-pacing-status-badge"]], inputs: { viewMode: [1, "viewMode"], pacingPercentage: [1, "pacingPercentage"], status: [1, "status"], showAsFullText: [1, "showAsFullText"], isCompact: [1, "isCompact"], showEmphasizedPercentage: [1, "showEmphasizedPercentage"] }, decls: 2, vars: 1, consts: [[3, "ngClass", "class", "transform"], [3, "ngClass"]], template: function PacingStatusBadgeComponent_Template(rf, ctx) { if (rf & 1) {
|
|
55028
|
+
i0.ɵɵconditionalCreate(0, PacingStatusBadgeComponent_Conditional_0_Template, 8, 16, "div", 0)(1, PacingStatusBadgeComponent_Conditional_1_Template, 5, 10, "div", 0);
|
|
54994
55029
|
} if (rf & 2) {
|
|
54995
55030
|
i0.ɵɵconditional(ctx.showEmphasizedPercentage() && ctx.hasPercentage() ? 0 : 1);
|
|
54996
55031
|
} }, dependencies: [CommonModule, i1$1.NgClass], encapsulation: 2, changeDetection: 0 }); }
|
|
@@ -55002,46 +55037,55 @@ class PacingStatusBadgeComponent {
|
|
|
55002
55037
|
standalone: true,
|
|
55003
55038
|
imports: [CommonModule],
|
|
55004
55039
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
55005
|
-
template: `
|
|
55006
|
-
@if (showEmphasizedPercentage() && hasPercentage()) {
|
|
55007
|
-
<div
|
|
55008
|
-
|
|
55009
|
-
|
|
55010
|
-
|
|
55011
|
-
|
|
55012
|
-
|
|
55013
|
-
|
|
55014
|
-
|
|
55015
|
-
|
|
55016
|
-
|
|
55017
|
-
|
|
55018
|
-
|
|
55019
|
-
|
|
55020
|
-
|
|
55021
|
-
|
|
55022
|
-
|
|
55023
|
-
|
|
55024
|
-
|
|
55025
|
-
|
|
55026
|
-
|
|
55027
|
-
|
|
55028
|
-
|
|
55029
|
-
|
|
55030
|
-
|
|
55040
|
+
template: `
|
|
55041
|
+
@if (showEmphasizedPercentage() && hasPercentage()) {
|
|
55042
|
+
<div
|
|
55043
|
+
[ngClass]="containerClasses()"
|
|
55044
|
+
[class]="containerSizeClasses()"
|
|
55045
|
+
[style.transform]="rotationStyle()"
|
|
55046
|
+
>
|
|
55047
|
+
<div [ngClass]="overlayBadgeClasses()" [class]="overlaySizeClasses()">
|
|
55048
|
+
<span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
|
|
55049
|
+
{{ iconSymbol() }}
|
|
55050
|
+
</span>
|
|
55051
|
+
{{ animatedPercentage() }}
|
|
55052
|
+
</div>
|
|
55053
|
+
<div
|
|
55054
|
+
[class]="sizeClasses()"
|
|
55055
|
+
>
|
|
55056
|
+
<span>{{ displayTextWithoutPercentage() }}</span>
|
|
55057
|
+
</div>
|
|
55058
|
+
</div>
|
|
55059
|
+
} @else {
|
|
55060
|
+
<div
|
|
55061
|
+
[ngClass]="badgeClasses()"
|
|
55062
|
+
[class]="fullBadgeSizeClasses()"
|
|
55063
|
+
[style.transform]="fullBadgeRotationStyle()"
|
|
55064
|
+
>
|
|
55065
|
+
<span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
|
|
55066
|
+
{{ iconSymbol() }}
|
|
55067
|
+
</span>
|
|
55068
|
+
<span>{{ displayText() }}</span>
|
|
55069
|
+
</div>
|
|
55070
|
+
}
|
|
55031
55071
|
`
|
|
55032
55072
|
}]
|
|
55033
|
-
}], () => [], { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], pacingPercentage: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingPercentage", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], showAsFullText: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAsFullText", required: false }] }], isCompact: [{ type: i0.Input, args: [{ isSignal: true, alias: "isCompact", required: false }] }], showEmphasizedPercentage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showEmphasizedPercentage", required: false }] }] }); })();
|
|
55034
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PacingStatusBadgeComponent, { className: "PacingStatusBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/pacing-status-badge.component.ts", lineNumber:
|
|
55073
|
+
}], () => [{ type: i0.ElementRef }], { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], pacingPercentage: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingPercentage", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], showAsFullText: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAsFullText", required: false }] }], isCompact: [{ type: i0.Input, args: [{ isSignal: true, alias: "isCompact", required: false }] }], showEmphasizedPercentage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showEmphasizedPercentage", required: false }] }] }); })();
|
|
55074
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PacingStatusBadgeComponent, { className: "PacingStatusBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/pacing-status-badge.component.ts", lineNumber: 44 }); })();
|
|
55035
55075
|
|
|
55036
55076
|
class TargetChangeBadgeComponent {
|
|
55037
|
-
constructor() {
|
|
55077
|
+
constructor(elementRef) {
|
|
55078
|
+
this.elementRef = elementRef;
|
|
55038
55079
|
this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
|
|
55039
55080
|
this.percentageChange = input(0, ...(ngDevMode ? [{ debugName: "percentageChange" }] : []));
|
|
55040
55081
|
this.metric = input('', ...(ngDevMode ? [{ debugName: "metric" }] : []));
|
|
55041
55082
|
this.priorYear = input(new Date().getFullYear() - 1, ...(ngDevMode ? [{ debugName: "priorYear" }] : []));
|
|
55042
55083
|
this.isCompact = input(false, ...(ngDevMode ? [{ debugName: "isCompact" }] : []));
|
|
55043
55084
|
this.animatedValue = signal(0, ...(ngDevMode ? [{ debugName: "animatedValue" }] : []));
|
|
55085
|
+
this.animationProgress = signal(0, ...(ngDevMode ? [{ debugName: "animationProgress" }] : []));
|
|
55086
|
+
this.hasAnimated = signal(false, ...(ngDevMode ? [{ debugName: "hasAnimated" }] : []));
|
|
55044
55087
|
this.isDark = computed(() => this.viewMode() === ViewModeEnum.DARK, ...(ngDevMode ? [{ debugName: "isDark" }] : []));
|
|
55088
|
+
this.observer = null;
|
|
55045
55089
|
this.isIncreaseBad = computed(() => {
|
|
55046
55090
|
const metricStr = this.metric();
|
|
55047
55091
|
if (!metricStr)
|
|
@@ -55072,14 +55116,20 @@ class TargetChangeBadgeComponent {
|
|
|
55072
55116
|
: 'bg-purple-50 border-purple-200';
|
|
55073
55117
|
}, ...(ngDevMode ? [{ debugName: "containerClasses" }] : []));
|
|
55074
55118
|
this.isIncrease = computed(() => this.percentageChange() > 0, ...(ngDevMode ? [{ debugName: "isIncrease" }] : []));
|
|
55119
|
+
this.targetRotation = computed(() => {
|
|
55120
|
+
const change = this.percentageChange();
|
|
55121
|
+
return change > 0 ? -1 : change < 0 ? 1 : 0;
|
|
55122
|
+
}, ...(ngDevMode ? [{ debugName: "targetRotation" }] : []));
|
|
55123
|
+
this.rotationStyle = computed(() => {
|
|
55124
|
+
const target = this.targetRotation();
|
|
55125
|
+
return `rotate(${target}deg)`;
|
|
55126
|
+
}, ...(ngDevMode ? [{ debugName: "rotationStyle" }] : []));
|
|
55075
55127
|
this.containerSizeClasses = computed(() => {
|
|
55076
55128
|
const compact = this.isCompact();
|
|
55077
|
-
const change = this.percentageChange();
|
|
55078
|
-
const tiltClass = change > 0 ? '-rotate-1' : change < 0 ? 'rotate-1' : '';
|
|
55079
55129
|
const baseClasses = 'inline-flex flex-row items-center rounded-xl border-2 overflow-visible transition-transform hover:rotate-0';
|
|
55080
55130
|
return compact
|
|
55081
|
-
? `${baseClasses} pl-1.5
|
|
55082
|
-
: `${baseClasses} pl-2
|
|
55131
|
+
? `${baseClasses} pl-1.5`
|
|
55132
|
+
: `${baseClasses} pl-2`;
|
|
55083
55133
|
}, ...(ngDevMode ? [{ debugName: "containerSizeClasses" }] : []));
|
|
55084
55134
|
this.overlayClasses = computed(() => {
|
|
55085
55135
|
const dark = this.isDark();
|
|
@@ -55090,8 +55140,8 @@ class TargetChangeBadgeComponent {
|
|
|
55090
55140
|
this.overlaySizeClasses = computed(() => {
|
|
55091
55141
|
const compact = this.isCompact();
|
|
55092
55142
|
return compact
|
|
55093
|
-
? 'px-2 py-1.5 rounded-lg text-sm font-extrabold tracking-wide shadow-md transition-all duration-200 -my-1 -mr-1 z-10 inline-flex items-center gap-0.5'
|
|
55094
|
-
: 'px-2.5 py-2 rounded-lg font-extrabold text-base tracking-wide shadow-md transition-all duration-200 -my-1.5 -mr-1 z-10 inline-flex items-center gap-1';
|
|
55143
|
+
? 'px-2 py-1.5 rounded-lg text-sm font-extrabold tracking-wide shadow-md transition-all duration-200 -my-1 -mr-1 z-10 inline-flex items-center gap-0.5 tabular-nums'
|
|
55144
|
+
: 'px-2.5 py-2 rounded-lg font-extrabold text-base tracking-wide shadow-md transition-all duration-200 -my-1.5 -mr-1 z-10 inline-flex items-center gap-1 tabular-nums';
|
|
55095
55145
|
}, ...(ngDevMode ? [{ debugName: "overlaySizeClasses" }] : []));
|
|
55096
55146
|
this.iconSizeClass = computed(() => {
|
|
55097
55147
|
return this.isCompact() ? 'text-sm' : 'text-base';
|
|
@@ -55102,11 +55152,31 @@ class TargetChangeBadgeComponent {
|
|
|
55102
55152
|
? 'px-2.5 py-0.5 text-xs font-semibold inline-block'
|
|
55103
55153
|
: 'px-3 py-0.5 font-semibold text-xs inline-block';
|
|
55104
55154
|
}, ...(ngDevMode ? [{ debugName: "descriptionSizeClasses" }] : []));
|
|
55155
|
+
this.setupIntersectionObserver();
|
|
55105
55156
|
effect(() => {
|
|
55106
55157
|
const target = this.percentageChange();
|
|
55107
|
-
this.
|
|
55158
|
+
if (this.hasAnimated()) {
|
|
55159
|
+
this.animateValue(target);
|
|
55160
|
+
}
|
|
55108
55161
|
});
|
|
55109
55162
|
}
|
|
55163
|
+
ngOnDestroy() {
|
|
55164
|
+
if (this.observer) {
|
|
55165
|
+
this.observer.disconnect();
|
|
55166
|
+
}
|
|
55167
|
+
}
|
|
55168
|
+
setupIntersectionObserver() {
|
|
55169
|
+
this.observer = new IntersectionObserver((entries) => {
|
|
55170
|
+
entries.forEach((entry) => {
|
|
55171
|
+
if (entry.isIntersecting && !this.hasAnimated()) {
|
|
55172
|
+
this.hasAnimated.set(true);
|
|
55173
|
+
const target = this.percentageChange();
|
|
55174
|
+
this.animateValue(target);
|
|
55175
|
+
}
|
|
55176
|
+
});
|
|
55177
|
+
}, { threshold: 0.1 });
|
|
55178
|
+
this.observer.observe(this.elementRef.nativeElement);
|
|
55179
|
+
}
|
|
55110
55180
|
animateValue(target) {
|
|
55111
55181
|
const start = 0;
|
|
55112
55182
|
const duration = 800;
|
|
@@ -55117,14 +55187,15 @@ class TargetChangeBadgeComponent {
|
|
|
55117
55187
|
const easeOutQuart = 1 - Math.pow(1 - progress, 4);
|
|
55118
55188
|
const current = start + (target - start) * easeOutQuart;
|
|
55119
55189
|
this.animatedValue.set(current);
|
|
55190
|
+
this.animationProgress.set(progress);
|
|
55120
55191
|
if (progress < 1) {
|
|
55121
55192
|
requestAnimationFrame(animate);
|
|
55122
55193
|
}
|
|
55123
55194
|
};
|
|
55124
55195
|
requestAnimationFrame(animate);
|
|
55125
55196
|
}
|
|
55126
|
-
static { this.ɵfac = function TargetChangeBadgeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TargetChangeBadgeComponent)(); }; }
|
|
55127
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TargetChangeBadgeComponent, selectors: [["symphiq-target-change-badge"]], inputs: { viewMode: [1, "viewMode"], percentageChange: [1, "percentageChange"], metric: [1, "metric"], priorYear: [1, "priorYear"], isCompact: [1, "isCompact"] }, decls: 7, vars:
|
|
55197
|
+
static { this.ɵfac = function TargetChangeBadgeComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TargetChangeBadgeComponent)(i0.ɵɵdirectiveInject(i0.ElementRef)); }; }
|
|
55198
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TargetChangeBadgeComponent, selectors: [["symphiq-target-change-badge"]], inputs: { viewMode: [1, "viewMode"], percentageChange: [1, "percentageChange"], metric: [1, "metric"], priorYear: [1, "priorYear"], isCompact: [1, "isCompact"] }, decls: 7, vars: 15, consts: [[3, "ngClass"]], template: function TargetChangeBadgeComponent_Template(rf, ctx) { if (rf & 1) {
|
|
55128
55199
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 0)(2, "span");
|
|
55129
55200
|
i0.ɵɵtext(3);
|
|
55130
55201
|
i0.ɵɵelementEnd();
|
|
@@ -55135,6 +55206,7 @@ class TargetChangeBadgeComponent {
|
|
|
55135
55206
|
i0.ɵɵelementEnd()();
|
|
55136
55207
|
} if (rf & 2) {
|
|
55137
55208
|
i0.ɵɵclassMap(ctx.containerSizeClasses());
|
|
55209
|
+
i0.ɵɵstyleProp("transform", ctx.rotationStyle());
|
|
55138
55210
|
i0.ɵɵproperty("ngClass", ctx.containerClasses());
|
|
55139
55211
|
i0.ɵɵadvance();
|
|
55140
55212
|
i0.ɵɵclassMap(ctx.overlaySizeClasses());
|
|
@@ -55158,20 +55230,24 @@ class TargetChangeBadgeComponent {
|
|
|
55158
55230
|
standalone: true,
|
|
55159
55231
|
imports: [CommonModule],
|
|
55160
55232
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
55161
|
-
template: `
|
|
55162
|
-
<div
|
|
55163
|
-
|
|
55164
|
-
|
|
55165
|
-
|
|
55166
|
-
|
|
55167
|
-
<div [class]="
|
|
55168
|
-
{{
|
|
55169
|
-
|
|
55170
|
-
|
|
55233
|
+
template: `
|
|
55234
|
+
<div
|
|
55235
|
+
[ngClass]="containerClasses()"
|
|
55236
|
+
[class]="containerSizeClasses()"
|
|
55237
|
+
[style.transform]="rotationStyle()"
|
|
55238
|
+
>
|
|
55239
|
+
<div [ngClass]="overlayClasses()" [class]="overlaySizeClasses()">
|
|
55240
|
+
<span [class]="iconSizeClass()">{{ iconSymbol() }}</span>
|
|
55241
|
+
{{ animatedPercentageText() }}
|
|
55242
|
+
</div>
|
|
55243
|
+
<div [class]="descriptionSizeClasses()">
|
|
55244
|
+
{{ descriptionText() }}
|
|
55245
|
+
</div>
|
|
55246
|
+
</div>
|
|
55171
55247
|
`
|
|
55172
55248
|
}]
|
|
55173
|
-
}], () => [], { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], percentageChange: [{ type: i0.Input, args: [{ isSignal: true, alias: "percentageChange", required: false }] }], metric: [{ type: i0.Input, args: [{ isSignal: true, alias: "metric", required: false }] }], priorYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "priorYear", required: false }] }], isCompact: [{ type: i0.Input, args: [{ isSignal: true, alias: "isCompact", required: false }] }] }); })();
|
|
55174
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TargetChangeBadgeComponent, { className: "TargetChangeBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/target-change-badge.component.ts", lineNumber:
|
|
55249
|
+
}], () => [{ type: i0.ElementRef }], { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], percentageChange: [{ type: i0.Input, args: [{ isSignal: true, alias: "percentageChange", required: false }] }], metric: [{ type: i0.Input, args: [{ isSignal: true, alias: "metric", required: false }] }], priorYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "priorYear", required: false }] }], isCompact: [{ type: i0.Input, args: [{ isSignal: true, alias: "isCompact", required: false }] }] }); })();
|
|
55250
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TargetChangeBadgeComponent, { className: "TargetChangeBadgeComponent", filePath: "lib/components/revenue-calculator-dashboard/target-change-badge.component.ts", lineNumber: 27 }); })();
|
|
55175
55251
|
|
|
55176
55252
|
const _forTrack0$j = ($index, $item) => $item.stageMetric.metric;
|
|
55177
55253
|
const _forTrack1$3 = ($index, $item) => $item.calc.metric;
|
|
@@ -56613,8 +56689,9 @@ class LineChartComponent {
|
|
|
56613
56689
|
this.showAxisLabels = input(false, ...(ngDevMode ? [{ debugName: "showAxisLabels" }] : []));
|
|
56614
56690
|
this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
|
|
56615
56691
|
this.currencySymbol = input('$', ...(ngDevMode ? [{ debugName: "currencySymbol" }] : []));
|
|
56692
|
+
this.height = input(undefined, ...(ngDevMode ? [{ debugName: "height" }] : []));
|
|
56616
56693
|
// Memoized computed signals to avoid recalculation on every change detection
|
|
56617
|
-
this.chartHeight = computed(() => this.showAxisLabels() ? '500px' : '133px', ...(ngDevMode ? [{ debugName: "chartHeight" }] : []));
|
|
56694
|
+
this.chartHeight = computed(() => this.height() ?? (this.showAxisLabels() ? '500px' : '133px'), ...(ngDevMode ? [{ debugName: "chartHeight" }] : []));
|
|
56618
56695
|
this.cursorColor = computed(() => this.viewMode() === ViewModeEnum.DARK ? 0xffffff : 0x94a3b8, ...(ngDevMode ? [{ debugName: "cursorColor" }] : []));
|
|
56619
56696
|
this.tooltipTextColor = computed(() => this.viewMode() === ViewModeEnum.DARK ? 0xffffff : 0x000000, ...(ngDevMode ? [{ debugName: "tooltipTextColor" }] : []));
|
|
56620
56697
|
this.chartHash = computed(() => this.generateChartHash(this.chart()), ...(ngDevMode ? [{ debugName: "chartHash" }] : []));
|
|
@@ -57059,7 +57136,7 @@ class LineChartComponent {
|
|
|
57059
57136
|
} if (rf & 2) {
|
|
57060
57137
|
let _t;
|
|
57061
57138
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.chartDiv = _t.first);
|
|
57062
|
-
} }, inputs: { chart: [1, "chart"], showAxisLabels: [1, "showAxisLabels"], viewMode: [1, "viewMode"], currencySymbol: [1, "currencySymbol"] }, decls: 3, vars: 4, consts: [["chartdiv", ""], [1, "chart-container"], [1, "chart", 2, "width", "100%"]], template: function LineChartComponent_Template(rf, ctx) { if (rf & 1) {
|
|
57139
|
+
} }, inputs: { chart: [1, "chart"], showAxisLabels: [1, "showAxisLabels"], viewMode: [1, "viewMode"], currencySymbol: [1, "currencySymbol"], height: [1, "height"] }, decls: 3, vars: 4, consts: [["chartdiv", ""], [1, "chart-container"], [1, "chart", 2, "width", "100%"]], template: function LineChartComponent_Template(rf, ctx) { if (rf & 1) {
|
|
57063
57140
|
i0.ɵɵdomElementStart(0, "div", 1);
|
|
57064
57141
|
i0.ɵɵdomElement(1, "div", 2, 0);
|
|
57065
57142
|
i0.ɵɵdomElementEnd();
|
|
@@ -57076,7 +57153,7 @@ class LineChartComponent {
|
|
|
57076
57153
|
<div #chartdiv class="chart" [style.height]="chartHeight()" style="width: 100%;"></div>
|
|
57077
57154
|
</div>
|
|
57078
57155
|
`, styles: [".chart-container{width:100%;padding:1rem}.chart-container.mini-mode{padding:.25rem}\n"] }]
|
|
57079
|
-
}], () => [], { chart: [{ type: i0.Input, args: [{ isSignal: true, alias: "chart", required: false }] }], showAxisLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAxisLabels", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], currencySymbol: [{ type: i0.Input, args: [{ isSignal: true, alias: "currencySymbol", required: false }] }], chartDiv: [{
|
|
57156
|
+
}], () => [], { chart: [{ type: i0.Input, args: [{ isSignal: true, alias: "chart", required: false }] }], showAxisLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAxisLabels", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], currencySymbol: [{ type: i0.Input, args: [{ isSignal: true, alias: "currencySymbol", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], chartDiv: [{
|
|
57080
57157
|
type: ViewChild,
|
|
57081
57158
|
args: ['chartdiv', { static: true }]
|
|
57082
57159
|
}] }); })();
|
|
@@ -57370,16 +57447,16 @@ function MetricReportModalComponent_Conditional_0_Conditional_12_Template(rf, ct
|
|
|
57370
57447
|
i0.ɵɵelementEnd()();
|
|
57371
57448
|
} if (rf & 2) {
|
|
57372
57449
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
57373
|
-
i0.ɵɵproperty("ngClass", ctx_r1.headerInfoIconClasses())("libSymphiqTooltip", ctx_r1.metricData().description);
|
|
57450
|
+
i0.ɵɵproperty("ngClass", ctx_r1.headerInfoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(ctx_r1.metricData().description, ctx_r1.metricTitle()));
|
|
57374
57451
|
} }
|
|
57375
|
-
function
|
|
57452
|
+
function MetricReportModalComponent_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
57376
57453
|
i0.ɵɵelement(0, "symphiq-target-change-badge", 23);
|
|
57377
57454
|
} if (rf & 2) {
|
|
57378
57455
|
let tmp_4_0;
|
|
57379
57456
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
57380
57457
|
i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("percentageChange", ctx_r1.ytdChangePercentage())("metric", ((tmp_4_0 = ctx_r1.metricData()) == null ? null : tmp_4_0.metric) || "")("priorYear", ctx_r1.priorYear())("isCompact", true);
|
|
57381
57458
|
} }
|
|
57382
|
-
function
|
|
57459
|
+
function MetricReportModalComponent_Conditional_0_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
57383
57460
|
i0.ɵɵelementStart(0, "div")(1, "p", 24);
|
|
57384
57461
|
i0.ɵɵtext(2);
|
|
57385
57462
|
i0.ɵɵelementEnd();
|
|
@@ -57402,6 +57479,19 @@ function MetricReportModalComponent_Conditional_0_Conditional_48_Template(rf, ct
|
|
|
57402
57479
|
i0.ɵɵadvance();
|
|
57403
57480
|
i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", ctx_r1.pacingInfo().pacingPercentage)("status", ctx_r1.pacingInfo().status)("showAsFullText", false)("isCompact", true)("showEmphasizedPercentage", true);
|
|
57404
57481
|
} }
|
|
57482
|
+
function MetricReportModalComponent_Conditional_0_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
57483
|
+
i0.ɵɵelementStart(0, "div")(1, "p", 24);
|
|
57484
|
+
i0.ɵɵtext(2, " Year-over-Year Trend ");
|
|
57485
|
+
i0.ɵɵelementEnd();
|
|
57486
|
+
i0.ɵɵelement(3, "symphiq-area-chart", 35);
|
|
57487
|
+
i0.ɵɵelementEnd();
|
|
57488
|
+
} if (rf & 2) {
|
|
57489
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
57490
|
+
i0.ɵɵadvance();
|
|
57491
|
+
i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
|
|
57492
|
+
i0.ɵɵadvance(2);
|
|
57493
|
+
i0.ɵɵproperty("chart", ctx_r1.trendChartData())("showAxisLabels", false)("viewMode", ctx_r1.viewMode())("currencySymbol", "$")("height", "80px");
|
|
57494
|
+
} }
|
|
57405
57495
|
function MetricReportModalComponent_Conditional_0_Conditional_64_Template(rf, ctx) { if (rf & 1) {
|
|
57406
57496
|
i0.ɵɵelementStart(0, "div", 25);
|
|
57407
57497
|
i0.ɵɵelement(1, "symphiq-pacing-status-badge", 34);
|
|
@@ -57409,7 +57499,7 @@ function MetricReportModalComponent_Conditional_0_Conditional_64_Template(rf, ct
|
|
|
57409
57499
|
i0.ɵɵelementStart(2, "div", 25)(3, "p", 28);
|
|
57410
57500
|
i0.ɵɵtext(4);
|
|
57411
57501
|
i0.ɵɵelementEnd()();
|
|
57412
|
-
i0.ɵɵelement(5, "symphiq-progress-to-target-chart",
|
|
57502
|
+
i0.ɵɵelement(5, "symphiq-progress-to-target-chart", 36);
|
|
57413
57503
|
} if (rf & 2) {
|
|
57414
57504
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
57415
57505
|
i0.ɵɵadvance();
|
|
@@ -57422,7 +57512,7 @@ function MetricReportModalComponent_Conditional_0_Conditional_64_Template(rf, ct
|
|
|
57422
57512
|
i0.ɵɵproperty("data", ctx_r1.progressToTargetData())("viewMode", ctx_r1.viewMode());
|
|
57423
57513
|
} }
|
|
57424
57514
|
function MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
57425
|
-
i0.ɵɵelementStart(0, "button",
|
|
57515
|
+
i0.ɵɵelementStart(0, "button", 11);
|
|
57426
57516
|
i0.ɵɵnamespaceSVG();
|
|
57427
57517
|
i0.ɵɵelementStart(1, "svg", 51);
|
|
57428
57518
|
i0.ɵɵelement(2, "path", 33);
|
|
@@ -57433,15 +57523,15 @@ function MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Conditio
|
|
|
57433
57523
|
i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(metric_r3.description, ctx_r1.getMetricTitle(metric_r3)));
|
|
57434
57524
|
} }
|
|
57435
57525
|
function MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
57436
|
-
i0.ɵɵelementStart(0, "tr",
|
|
57526
|
+
i0.ɵɵelementStart(0, "tr", 42)(1, "td", 43)(2, "div", 44)(3, "span", 45);
|
|
57437
57527
|
i0.ɵɵtext(4);
|
|
57438
57528
|
i0.ɵɵelementEnd();
|
|
57439
|
-
i0.ɵɵconditionalCreate(5, MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Conditional_5_Template, 3, 2, "button",
|
|
57529
|
+
i0.ɵɵconditionalCreate(5, MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Conditional_5_Template, 3, 2, "button", 11);
|
|
57440
57530
|
i0.ɵɵelementEnd()();
|
|
57441
57531
|
i0.ɵɵelementStart(6, "td", 46)(7, "span", 47);
|
|
57442
57532
|
i0.ɵɵtext(8);
|
|
57443
57533
|
i0.ɵɵelementEnd()();
|
|
57444
|
-
i0.ɵɵelementStart(9, "td", 46)(10, "div", 48)(11, "span",
|
|
57534
|
+
i0.ɵɵelementStart(9, "td", 46)(10, "div", 48)(11, "span", 45);
|
|
57445
57535
|
i0.ɵɵtext(12);
|
|
57446
57536
|
i0.ɵɵelementEnd();
|
|
57447
57537
|
i0.ɵɵnamespaceSVG();
|
|
@@ -57469,17 +57559,17 @@ function MetricReportModalComponent_Conditional_0_Conditional_65_Template(rf, ct
|
|
|
57469
57559
|
i0.ɵɵelementStart(0, "div", 16)(1, "h4", 17);
|
|
57470
57560
|
i0.ɵɵtext(2, " Contributing Metric Targets ");
|
|
57471
57561
|
i0.ɵɵelementEnd();
|
|
57472
|
-
i0.ɵɵelementStart(3, "div",
|
|
57562
|
+
i0.ɵɵelementStart(3, "div", 37)(4, "table", 38)(5, "thead")(6, "tr", 39)(7, "th", 40);
|
|
57473
57563
|
i0.ɵɵtext(8, "Metric");
|
|
57474
57564
|
i0.ɵɵelementEnd();
|
|
57475
|
-
i0.ɵɵelementStart(9, "th",
|
|
57565
|
+
i0.ɵɵelementStart(9, "th", 41);
|
|
57476
57566
|
i0.ɵɵtext(10, "Target");
|
|
57477
57567
|
i0.ɵɵelementEnd();
|
|
57478
|
-
i0.ɵɵelementStart(11, "th",
|
|
57568
|
+
i0.ɵɵelementStart(11, "th", 41);
|
|
57479
57569
|
i0.ɵɵtext(12, "Improve by");
|
|
57480
57570
|
i0.ɵɵelementEnd()()();
|
|
57481
57571
|
i0.ɵɵelementStart(13, "tbody");
|
|
57482
|
-
i0.ɵɵrepeaterCreate(14, MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Template, 15, 7, "tr",
|
|
57572
|
+
i0.ɵɵrepeaterCreate(14, MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Template, 15, 7, "tr", 42, _forTrack0$i);
|
|
57483
57573
|
i0.ɵɵelementEnd()()()();
|
|
57484
57574
|
} if (rf & 2) {
|
|
57485
57575
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -57496,15 +57586,15 @@ function MetricReportModalComponent_Conditional_0_Conditional_66_Template(rf, ct
|
|
|
57496
57586
|
i0.ɵɵtext(2, " Pace ");
|
|
57497
57587
|
i0.ɵɵelementEnd();
|
|
57498
57588
|
i0.ɵɵelementStart(3, "div", 52);
|
|
57499
|
-
i0.ɵɵelement(4, "symphiq-line-chart",
|
|
57589
|
+
i0.ɵɵelement(4, "symphiq-line-chart", 35);
|
|
57500
57590
|
i0.ɵɵelementEnd();
|
|
57501
|
-
i0.ɵɵelementStart(5, "p",
|
|
57591
|
+
i0.ɵɵelementStart(5, "p", 53);
|
|
57502
57592
|
i0.ɵɵtext(6);
|
|
57503
57593
|
i0.ɵɵelementEnd();
|
|
57504
|
-
i0.ɵɵelementStart(7, "p",
|
|
57594
|
+
i0.ɵɵelementStart(7, "p", 54);
|
|
57505
57595
|
i0.ɵɵtext(8);
|
|
57506
57596
|
i0.ɵɵelementEnd();
|
|
57507
|
-
i0.ɵɵelementStart(9, "p",
|
|
57597
|
+
i0.ɵɵelementStart(9, "p", 54);
|
|
57508
57598
|
i0.ɵɵtext(10);
|
|
57509
57599
|
i0.ɵɵelementEnd()();
|
|
57510
57600
|
} if (rf & 2) {
|
|
@@ -57513,7 +57603,7 @@ function MetricReportModalComponent_Conditional_0_Conditional_66_Template(rf, ct
|
|
|
57513
57603
|
i0.ɵɵadvance();
|
|
57514
57604
|
i0.ɵɵproperty("ngClass", ctx_r1.sectionTitleClasses());
|
|
57515
57605
|
i0.ɵɵadvance(3);
|
|
57516
|
-
i0.ɵɵproperty("chart", ctx_r1.pacingChartData())("showAxisLabels", true)("viewMode", ctx_r1.viewMode())("currencySymbol", "$");
|
|
57606
|
+
i0.ɵɵproperty("chart", ctx_r1.pacingChartData())("showAxisLabels", true)("viewMode", ctx_r1.viewMode())("currencySymbol", "$")("height", "250px");
|
|
57517
57607
|
i0.ɵɵadvance();
|
|
57518
57608
|
i0.ɵɵproperty("ngClass", ctx_r1.descriptionClasses());
|
|
57519
57609
|
i0.ɵɵadvance();
|
|
@@ -57550,50 +57640,50 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57550
57640
|
i0.ɵɵelement(15, "path", 14);
|
|
57551
57641
|
i0.ɵɵelementEnd()()()();
|
|
57552
57642
|
i0.ɵɵnamespaceHTML();
|
|
57553
|
-
i0.ɵɵelementStart(16, "div", 15);
|
|
57554
|
-
i0.ɵɵ
|
|
57555
|
-
i0.ɵɵelementStart(18, "div", 16)(19, "h4", 17);
|
|
57556
|
-
i0.ɵɵtext(20, " At a Glance ");
|
|
57643
|
+
i0.ɵɵelementStart(16, "div", 15)(17, "div", 16)(18, "h4", 17);
|
|
57644
|
+
i0.ɵɵtext(19, " At a Glance ");
|
|
57557
57645
|
i0.ɵɵelementEnd();
|
|
57558
|
-
i0.ɵɵelementStart(
|
|
57559
|
-
i0.ɵɵtext(
|
|
57646
|
+
i0.ɵɵelementStart(20, "div", 18)(21, "div")(22, "div", 19)(23, "p", 20);
|
|
57647
|
+
i0.ɵɵtext(24, " Year to date ");
|
|
57560
57648
|
i0.ɵɵelementEnd();
|
|
57561
|
-
i0.ɵɵelementStart(
|
|
57562
|
-
i0.ɵɵtext(
|
|
57649
|
+
i0.ɵɵelementStart(25, "p", 21);
|
|
57650
|
+
i0.ɵɵtext(26);
|
|
57563
57651
|
i0.ɵɵelementEnd();
|
|
57564
|
-
i0.ɵɵelementStart(
|
|
57565
|
-
i0.ɵɵtext(
|
|
57652
|
+
i0.ɵɵelementStart(27, "p", 21);
|
|
57653
|
+
i0.ɵɵtext(28);
|
|
57566
57654
|
i0.ɵɵelementEnd()();
|
|
57567
|
-
i0.ɵɵelementStart(
|
|
57568
|
-
i0.ɵɵtext(
|
|
57655
|
+
i0.ɵɵelementStart(29, "p", 22);
|
|
57656
|
+
i0.ɵɵtext(30);
|
|
57569
57657
|
i0.ɵɵelementEnd();
|
|
57570
|
-
i0.ɵɵconditionalCreate(
|
|
57658
|
+
i0.ɵɵconditionalCreate(31, MetricReportModalComponent_Conditional_0_Conditional_31_Template, 1, 5, "symphiq-target-change-badge", 23);
|
|
57571
57659
|
i0.ɵɵelementEnd();
|
|
57572
|
-
i0.ɵɵelementStart(
|
|
57573
|
-
i0.ɵɵtext(
|
|
57660
|
+
i0.ɵɵelementStart(32, "div")(33, "div", 19)(34, "p", 20);
|
|
57661
|
+
i0.ɵɵtext(35, " Same period last year ");
|
|
57574
57662
|
i0.ɵɵelementEnd();
|
|
57575
|
-
i0.ɵɵelementStart(
|
|
57576
|
-
i0.ɵɵtext(
|
|
57663
|
+
i0.ɵɵelementStart(36, "p", 21);
|
|
57664
|
+
i0.ɵɵtext(37);
|
|
57577
57665
|
i0.ɵɵelementEnd();
|
|
57578
|
-
i0.ɵɵelementStart(
|
|
57579
|
-
i0.ɵɵtext(
|
|
57666
|
+
i0.ɵɵelementStart(38, "p", 21);
|
|
57667
|
+
i0.ɵɵtext(39);
|
|
57580
57668
|
i0.ɵɵelementEnd()();
|
|
57581
|
-
i0.ɵɵelementStart(
|
|
57582
|
-
i0.ɵɵtext(
|
|
57669
|
+
i0.ɵɵelementStart(40, "p", 10);
|
|
57670
|
+
i0.ɵɵtext(41);
|
|
57583
57671
|
i0.ɵɵelementEnd()();
|
|
57584
|
-
i0.ɵɵelementStart(
|
|
57585
|
-
i0.ɵɵtext(
|
|
57672
|
+
i0.ɵɵelementStart(42, "div")(43, "p", 24);
|
|
57673
|
+
i0.ɵɵtext(44);
|
|
57586
57674
|
i0.ɵɵelementEnd();
|
|
57587
|
-
i0.ɵɵelementStart(
|
|
57588
|
-
i0.ɵɵtext(
|
|
57675
|
+
i0.ɵɵelementStart(45, "p", 10);
|
|
57676
|
+
i0.ɵɵtext(46);
|
|
57589
57677
|
i0.ɵɵelementEnd()();
|
|
57590
|
-
i0.ɵɵconditionalCreate(
|
|
57591
|
-
i0.ɵɵelementStart(
|
|
57592
|
-
i0.ɵɵtext(
|
|
57678
|
+
i0.ɵɵconditionalCreate(47, MetricReportModalComponent_Conditional_0_Conditional_47_Template, 6, 10, "div");
|
|
57679
|
+
i0.ɵɵelementStart(48, "div")(49, "p", 24);
|
|
57680
|
+
i0.ɵɵtext(50);
|
|
57593
57681
|
i0.ɵɵelementEnd();
|
|
57594
|
-
i0.ɵɵelementStart(
|
|
57595
|
-
i0.ɵɵtext(
|
|
57596
|
-
i0.ɵɵelementEnd()()
|
|
57682
|
+
i0.ɵɵelementStart(51, "p", 10);
|
|
57683
|
+
i0.ɵɵtext(52);
|
|
57684
|
+
i0.ɵɵelementEnd()();
|
|
57685
|
+
i0.ɵɵconditionalCreate(53, MetricReportModalComponent_Conditional_0_Conditional_53_Template, 4, 6, "div");
|
|
57686
|
+
i0.ɵɵelementEnd()();
|
|
57597
57687
|
i0.ɵɵelementStart(54, "div", 16)(55, "h4", 17);
|
|
57598
57688
|
i0.ɵɵtext(56, " Target Analysis ");
|
|
57599
57689
|
i0.ɵɵelementEnd();
|
|
@@ -57609,7 +57699,7 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57609
57699
|
i0.ɵɵconditionalCreate(64, MetricReportModalComponent_Conditional_0_Conditional_64_Template, 6, 10);
|
|
57610
57700
|
i0.ɵɵelementEnd();
|
|
57611
57701
|
i0.ɵɵconditionalCreate(65, MetricReportModalComponent_Conditional_0_Conditional_65_Template, 16, 3, "div", 16);
|
|
57612
|
-
i0.ɵɵconditionalCreate(66, MetricReportModalComponent_Conditional_0_Conditional_66_Template, 11,
|
|
57702
|
+
i0.ɵɵconditionalCreate(66, MetricReportModalComponent_Conditional_0_Conditional_66_Template, 11, 13, "div", 29);
|
|
57613
57703
|
i0.ɵɵelementEnd();
|
|
57614
57704
|
i0.ɵɵelementStart(67, "div", 30)(68, "button", 31);
|
|
57615
57705
|
i0.ɵɵlistener("click", function MetricReportModalComponent_Conditional_0_Template_button_click_68_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
|
|
@@ -57621,8 +57711,8 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57621
57711
|
let tmp_27_0;
|
|
57622
57712
|
let tmp_31_0;
|
|
57623
57713
|
let tmp_36_0;
|
|
57624
|
-
let
|
|
57625
|
-
let
|
|
57714
|
+
let tmp_42_0;
|
|
57715
|
+
let tmp_44_0;
|
|
57626
57716
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
57627
57717
|
i0.ɵɵadvance(2);
|
|
57628
57718
|
i0.ɵɵproperty("ngClass", ctx_r1.backdropClasses())("@fadeIn", undefined);
|
|
@@ -57640,7 +57730,7 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57640
57730
|
i0.ɵɵproperty("ngClass", ctx_r1.closeButtonClasses());
|
|
57641
57731
|
i0.ɵɵadvance(3);
|
|
57642
57732
|
i0.ɵɵproperty("ngClass", ctx_r1.contentClasses());
|
|
57643
|
-
i0.ɵɵadvance(
|
|
57733
|
+
i0.ɵɵadvance();
|
|
57644
57734
|
i0.ɵɵproperty("ngClass", ctx_r1.sectionCardClasses());
|
|
57645
57735
|
i0.ɵɵadvance();
|
|
57646
57736
|
i0.ɵɵproperty("ngClass", ctx_r1.sectionTitleClasses());
|
|
@@ -57659,7 +57749,7 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57659
57749
|
i0.ɵɵadvance();
|
|
57660
57750
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(ctx_r1.ytdValue(), ((tmp_19_0 = ctx_r1.metricData()) == null ? null : tmp_19_0.metric) || ""), " ");
|
|
57661
57751
|
i0.ɵɵadvance();
|
|
57662
|
-
i0.ɵɵconditional(ctx_r1.ytdChangePercentage() !== null ?
|
|
57752
|
+
i0.ɵɵconditional(ctx_r1.ytdChangePercentage() !== null ? 31 : -1);
|
|
57663
57753
|
i0.ɵɵadvance(3);
|
|
57664
57754
|
i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
|
|
57665
57755
|
i0.ɵɵadvance(2);
|
|
@@ -57683,7 +57773,7 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57683
57773
|
i0.ɵɵadvance();
|
|
57684
57774
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(((tmp_31_0 = ctx_r1.metricData()) == null ? null : tmp_31_0.currentValue) || 0, ((tmp_31_0 = ctx_r1.metricData()) == null ? null : tmp_31_0.metric) || ""), " ");
|
|
57685
57775
|
i0.ɵɵadvance();
|
|
57686
|
-
i0.ɵɵconditional(ctx_r1.pacingInfo() ?
|
|
57776
|
+
i0.ɵɵconditional(ctx_r1.pacingInfo() ? 47 : -1);
|
|
57687
57777
|
i0.ɵɵadvance(2);
|
|
57688
57778
|
i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
|
|
57689
57779
|
i0.ɵɵadvance();
|
|
@@ -57693,6 +57783,8 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57693
57783
|
i0.ɵɵadvance();
|
|
57694
57784
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(((tmp_36_0 = ctx_r1.metricData()) == null ? null : tmp_36_0.targetValue) || 0, ((tmp_36_0 = ctx_r1.metricData()) == null ? null : tmp_36_0.metric) || "", false), " ");
|
|
57695
57785
|
i0.ɵɵadvance();
|
|
57786
|
+
i0.ɵɵconditional(ctx_r1.trendChartData() ? 53 : -1);
|
|
57787
|
+
i0.ɵɵadvance();
|
|
57696
57788
|
i0.ɵɵproperty("ngClass", ctx_r1.sectionCardClasses());
|
|
57697
57789
|
i0.ɵɵadvance();
|
|
57698
57790
|
i0.ɵɵproperty("ngClass", ctx_r1.sectionTitleClasses());
|
|
@@ -57701,11 +57793,11 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57701
57793
|
i0.ɵɵadvance(2);
|
|
57702
57794
|
i0.ɵɵproperty("ngClass", ctx_r1.targetValueClasses());
|
|
57703
57795
|
i0.ɵɵadvance();
|
|
57704
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(((
|
|
57796
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(((tmp_42_0 = ctx_r1.metricData()) == null ? null : tmp_42_0.targetValue) || 0, ((tmp_42_0 = ctx_r1.metricData()) == null ? null : tmp_42_0.metric) || "", false), " ");
|
|
57705
57797
|
i0.ɵɵadvance();
|
|
57706
57798
|
i0.ɵɵproperty("ngClass", ctx_r1.descriptionClasses());
|
|
57707
57799
|
i0.ɵɵadvance();
|
|
57708
|
-
i0.ɵɵtextInterpolate4(" Your target represents a ", ctx_r1.formatPercentage(ctx_r1.Math.abs(((
|
|
57800
|
+
i0.ɵɵtextInterpolate4(" Your target represents a ", ctx_r1.formatPercentage(ctx_r1.Math.abs(((tmp_44_0 = ctx_r1.metricData()) == null ? null : tmp_44_0.percentageIncrease) || 0), 1), " ", (((tmp_44_0 = ctx_r1.metricData()) == null ? null : tmp_44_0.percentageIncrease) || 0) >= 0 ? "increase" : "decrease", " from your ", ctx_r1.priorYear(), " actual of ", ctx_r1.formatMetricValue(((tmp_44_0 = ctx_r1.metricData()) == null ? null : tmp_44_0.currentValue) || 0, ((tmp_44_0 = ctx_r1.metricData()) == null ? null : tmp_44_0.metric) || ""), ". ");
|
|
57709
57801
|
i0.ɵɵadvance();
|
|
57710
57802
|
i0.ɵɵconditional(ctx_r1.pacingInfo() ? 64 : -1);
|
|
57711
57803
|
i0.ɵɵadvance();
|
|
@@ -57724,6 +57816,7 @@ class MetricReportModalComponent {
|
|
|
57724
57816
|
this.metricData = input(undefined, ...(ngDevMode ? [{ debugName: "metricData" }] : []));
|
|
57725
57817
|
this.contributingMetrics = input([], ...(ngDevMode ? [{ debugName: "contributingMetrics" }] : []));
|
|
57726
57818
|
this.pacingMetrics = input(undefined, ...(ngDevMode ? [{ debugName: "pacingMetrics" }] : []));
|
|
57819
|
+
this.trendChartData = input(null, ...(ngDevMode ? [{ debugName: "trendChartData" }] : []));
|
|
57727
57820
|
this.isOpen = input(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
|
|
57728
57821
|
this.closed = output();
|
|
57729
57822
|
this.showDefinition = signal(false, ...(ngDevMode ? [{ debugName: "showDefinition" }] : []));
|
|
@@ -57881,7 +57974,7 @@ class MetricReportModalComponent {
|
|
|
57881
57974
|
const metric = this.metricTitle();
|
|
57882
57975
|
const currentYear = this.currentYear();
|
|
57883
57976
|
const priorYear = this.priorYear();
|
|
57884
|
-
return `This chart shows the ${metric} performance trend for ${currentYear} (solid line), compared to ${priorYear} (dashed line), with the target projection (dotted line) for the remainder of the year.`;
|
|
57977
|
+
return `This chart shows the ${metric} performance trend for ${currentYear} (solid yellow line, this month includes projections for the remaining days of the month), compared to ${priorYear} (dashed green line), with the target projection (dotted blue line) for the remainder of the year.`;
|
|
57885
57978
|
}, ...(ngDevMode ? [{ debugName: "chartLegendDescription" }] : []));
|
|
57886
57979
|
this.chartDescriptionSentence1 = computed(() => {
|
|
57887
57980
|
const metricData = this.metricData();
|
|
@@ -57916,7 +58009,7 @@ class MetricReportModalComponent {
|
|
|
57916
58009
|
lineChartData: {
|
|
57917
58010
|
series: [
|
|
57918
58011
|
{
|
|
57919
|
-
name: '
|
|
58012
|
+
name: '2026 Projected',
|
|
57920
58013
|
data: projectionData
|
|
57921
58014
|
},
|
|
57922
58015
|
{
|
|
@@ -58138,15 +58231,15 @@ class MetricReportModalComponent {
|
|
|
58138
58231
|
: 'bg-slate-700 hover:bg-slate-600 text-white';
|
|
58139
58232
|
}
|
|
58140
58233
|
static { this.ɵfac = function MetricReportModalComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MetricReportModalComponent)(); }; }
|
|
58141
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MetricReportModalComponent, selectors: [["symphiq-metric-report-modal"]], inputs: { viewMode: [1, "viewMode"], metricEnum: [1, "metricEnum"], metricData: [1, "metricData"], contributingMetrics: [1, "contributingMetrics"], pacingMetrics: [1, "pacingMetrics"], isOpen: [1, "isOpen"] }, outputs: { closed: "closed" }, decls: 1, vars: 1, consts: [[1, "fixed", "inset-0", "overflow-y-auto", "z-50"], [1, "fixed", "inset-0", "overflow-y-auto", "z-50", 3, "click"], [1, "flex", "items-center", "justify-center", "min-h-screen", "px-4", "pt-4", "pb-20", "text-center", "sm:block", "sm:p-0"], ["aria-hidden", "true", 1, "fixed", "inset-0", "backdrop-blur-md", 3, "ngClass"], ["aria-hidden", "true", 1, "hidden", "sm:inline-block", "sm:align-middle", "sm:h-screen"], [1, "relative", "inline-block", "align-bottom", "rounded-2xl", "text-left", "overflow-hidden", "shadow-xl", "sm:my-8", "sm:align-middle", "sm:w-full", "sm:max-w-4xl", "border", "backdrop-blur-xl", 3, "click", "ngClass"], [1, "px-6", "py-5", "border-b", "backdrop-blur-sm", "sticky", "top-0", "z-10", 3, "ngClass"], [1, "flex", "items-start", "justify-between"], [1, "flex-1"], [1, "flex", "items-center", "gap-
|
|
58142
|
-
i0.ɵɵconditionalCreate(0, MetricReportModalComponent_Conditional_0_Template, 70,
|
|
58234
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MetricReportModalComponent, selectors: [["symphiq-metric-report-modal"]], inputs: { viewMode: [1, "viewMode"], metricEnum: [1, "metricEnum"], metricData: [1, "metricData"], contributingMetrics: [1, "contributingMetrics"], pacingMetrics: [1, "pacingMetrics"], trendChartData: [1, "trendChartData"], isOpen: [1, "isOpen"] }, outputs: { closed: "closed" }, decls: 1, vars: 1, consts: [[1, "fixed", "inset-0", "overflow-y-auto", "z-50"], [1, "fixed", "inset-0", "overflow-y-auto", "z-50", 3, "click"], [1, "flex", "items-center", "justify-center", "min-h-screen", "px-4", "pt-4", "pb-20", "text-center", "sm:block", "sm:p-0"], ["aria-hidden", "true", 1, "fixed", "inset-0", "backdrop-blur-md", 3, "ngClass"], ["aria-hidden", "true", 1, "hidden", "sm:inline-block", "sm:align-middle", "sm:h-screen"], [1, "relative", "inline-block", "align-bottom", "rounded-2xl", "text-left", "overflow-hidden", "shadow-xl", "sm:my-8", "sm:align-middle", "sm:w-full", "sm:max-w-4xl", "border", "backdrop-blur-xl", 3, "click", "ngClass"], [1, "px-6", "py-5", "border-b", "backdrop-blur-sm", "sticky", "top-0", "z-10", 3, "ngClass"], [1, "flex", "items-start", "justify-between"], [1, "flex-1"], [1, "flex", "items-center", "gap-2", "mb-2"], [1, "text-xl", "font-bold", 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, "ml-4", "transition-all", "rounded-lg", "p-1", "hover:scale-110", "active:scale-90", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M6 18L18 6M6 6l12 12"], [1, "px-6", "py-6", "max-h-[70vh]", "overflow-y-auto", "backdrop-blur-sm", 3, "ngClass"], [1, "rounded-xl", "p-6", "mb-6", 3, "ngClass"], [1, "text-sm", "font-semibold", "uppercase", "tracking-wider", "mb-4", 3, "ngClass"], [1, "grid", "grid-cols-1", "sm:grid-cols-2", "lg:grid-cols-3", "gap-6"], [1, "mb-1.5"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", 3, "ngClass"], [1, "text-xs", 3, "ngClass"], [1, "text-xl", "font-bold", "mb-2", 3, "ngClass"], [3, "viewMode", "percentageChange", "metric", "priorYear", "isCompact"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1.5", 3, "ngClass"], [1, "mb-4"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-2", 3, "ngClass"], [1, "text-3xl", "font-extrabold", "mb-3", 3, "ngClass"], [1, "text-sm", "leading-relaxed", 3, "ngClass"], [1, "rounded-xl", "p-6", 3, "ngClass"], [1, "px-6", "py-4", "border-t", 3, "ngClass"], [1, "w-full", "px-4", "py-2", "rounded-lg", "transition-all", "font-medium", "hover:scale-[1.02]", "active:scale-[0.98]", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3.5", "h-3.5"], ["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", "isCompact", "showEmphasizedPercentage"], [3, "chart", "showAxisLabels", "viewMode", "currencySymbol", "height"], [3, "data", "viewMode"], [1, "overflow-x-auto"], [1, "w-full"], [1, "border-b", 3, "ngClass"], [1, "text-left", "py-3", "px-4", "text-xs", "font-semibold", "uppercase", "tracking-wider"], [1, "text-right", "py-3", "px-4", "text-xs", "font-semibold", "uppercase", "tracking-wider"], [1, "border-b", "transition-colors", 3, "ngClass"], [1, "py-3", "px-4"], [1, "flex", "items-center", "gap-2"], [1, "text-sm", "font-medium"], [1, "py-3", "px-4", "text-right"], [1, "text-sm", "font-semibold", 3, "ngClass"], [1, "flex", "items-center", "justify-end", "gap-2"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", "text-emerald-500"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3"], [1, "min-h-[250px]"], [1, "text-sm", "leading-relaxed", "mt-4", 3, "ngClass"], [1, "text-sm", "leading-relaxed", "mt-2", 3, "ngClass"]], template: function MetricReportModalComponent_Template(rf, ctx) { if (rf & 1) {
|
|
58235
|
+
i0.ɵɵconditionalCreate(0, MetricReportModalComponent_Conditional_0_Template, 70, 52, "div", 0);
|
|
58143
58236
|
} if (rf & 2) {
|
|
58144
58237
|
i0.ɵɵconditional(ctx.isOpen() ? 0 : -1);
|
|
58145
58238
|
} }, dependencies: [CommonModule, i1$1.NgClass, PacingStatusBadgeComponent,
|
|
58146
58239
|
TargetChangeBadgeComponent,
|
|
58147
58240
|
TooltipDirective,
|
|
58148
|
-
TooltipContainerComponent,
|
|
58149
58241
|
LineChartComponent,
|
|
58242
|
+
AreaChartComponent,
|
|
58150
58243
|
ProgressToTargetChartComponent], encapsulation: 2, data: { animation: [
|
|
58151
58244
|
trigger('fadeIn', [
|
|
58152
58245
|
transition(':enter', [
|
|
@@ -58172,8 +58265,8 @@ class MetricReportModalComponent {
|
|
|
58172
58265
|
PacingStatusBadgeComponent,
|
|
58173
58266
|
TargetChangeBadgeComponent,
|
|
58174
58267
|
TooltipDirective,
|
|
58175
|
-
TooltipContainerComponent,
|
|
58176
58268
|
LineChartComponent,
|
|
58269
|
+
AreaChartComponent,
|
|
58177
58270
|
ProgressToTargetChartComponent
|
|
58178
58271
|
],
|
|
58179
58272
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
@@ -58214,7 +58307,7 @@ class MetricReportModalComponent {
|
|
|
58214
58307
|
<div [ngClass]="headerClasses()" class="px-6 py-5 border-b backdrop-blur-sm sticky top-0 z-10">
|
|
58215
58308
|
<div class="flex items-start justify-between">
|
|
58216
58309
|
<div class="flex-1">
|
|
58217
|
-
<div class="flex items-center gap-
|
|
58310
|
+
<div class="flex items-center gap-2 mb-2">
|
|
58218
58311
|
<h3 [ngClass]="titleClasses()" class="text-xl font-bold">
|
|
58219
58312
|
{{ metricTitle() }}
|
|
58220
58313
|
</h3>
|
|
@@ -58222,11 +58315,11 @@ class MetricReportModalComponent {
|
|
|
58222
58315
|
<button
|
|
58223
58316
|
type="button"
|
|
58224
58317
|
[ngClass]="headerInfoIconClasses()"
|
|
58225
|
-
class="flex-shrink-0 w-
|
|
58226
|
-
[libSymphiqTooltip]="metricData()!.description
|
|
58318
|
+
class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
|
|
58319
|
+
[libSymphiqTooltip]="getMarkdownTooltipContent(metricData()!.description!, metricTitle())"
|
|
58227
58320
|
tooltipType="markdown"
|
|
58228
58321
|
tooltipPosition="right">
|
|
58229
|
-
<svg class="w-
|
|
58322
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
58230
58323
|
<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" />
|
|
58231
58324
|
</svg>
|
|
58232
58325
|
</button>
|
|
@@ -58246,8 +58339,6 @@ class MetricReportModalComponent {
|
|
|
58246
58339
|
|
|
58247
58340
|
<!-- Content -->
|
|
58248
58341
|
<div [ngClass]="contentClasses()" class="px-6 py-6 max-h-[70vh] overflow-y-auto backdrop-blur-sm">
|
|
58249
|
-
<symphiq-tooltip-container />
|
|
58250
|
-
|
|
58251
58342
|
<!-- At a Glance Summary -->
|
|
58252
58343
|
<div [ngClass]="sectionCardClasses()" class="rounded-xl p-6 mb-6">
|
|
58253
58344
|
<h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold uppercase tracking-wider mb-4">
|
|
@@ -58338,6 +58429,22 @@ class MetricReportModalComponent {
|
|
|
58338
58429
|
{{ formatMetricValue(metricData()?.targetValue || 0, metricData()?.metric || '', false) }}
|
|
58339
58430
|
</p>
|
|
58340
58431
|
</div>
|
|
58432
|
+
|
|
58433
|
+
<!-- Year-over-Year Trend Chart -->
|
|
58434
|
+
@if (trendChartData()) {
|
|
58435
|
+
<div>
|
|
58436
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
|
|
58437
|
+
Year-over-Year Trend
|
|
58438
|
+
</p>
|
|
58439
|
+
<symphiq-area-chart
|
|
58440
|
+
[chart]="trendChartData()!"
|
|
58441
|
+
[showAxisLabels]="false"
|
|
58442
|
+
[viewMode]="viewMode()"
|
|
58443
|
+
[currencySymbol]="'$'"
|
|
58444
|
+
[height]="'80px'"
|
|
58445
|
+
/>
|
|
58446
|
+
</div>
|
|
58447
|
+
}
|
|
58341
58448
|
</div>
|
|
58342
58449
|
</div>
|
|
58343
58450
|
|
|
@@ -58461,12 +58568,13 @@ class MetricReportModalComponent {
|
|
|
58461
58568
|
<h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold uppercase tracking-wider mb-4">
|
|
58462
58569
|
Pace
|
|
58463
58570
|
</h4>
|
|
58464
|
-
<div class="min-h-[
|
|
58571
|
+
<div class="min-h-[250px]">
|
|
58465
58572
|
<symphiq-line-chart
|
|
58466
58573
|
[chart]="pacingChartData()!"
|
|
58467
58574
|
[showAxisLabels]="true"
|
|
58468
58575
|
[viewMode]="viewMode()"
|
|
58469
58576
|
[currencySymbol]="'$'"
|
|
58577
|
+
[height]="'250px'"
|
|
58470
58578
|
/>
|
|
58471
58579
|
</div>
|
|
58472
58580
|
<p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed mt-4">
|
|
@@ -58497,8 +58605,8 @@ class MetricReportModalComponent {
|
|
|
58497
58605
|
}
|
|
58498
58606
|
`
|
|
58499
58607
|
}]
|
|
58500
|
-
}], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], metricEnum: [{ type: i0.Input, args: [{ isSignal: true, alias: "metricEnum", required: false }] }], metricData: [{ type: i0.Input, args: [{ isSignal: true, alias: "metricData", required: false }] }], contributingMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "contributingMetrics", required: false }] }], pacingMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingMetrics", required: false }] }], isOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpen", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }] }); })();
|
|
58501
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MetricReportModalComponent, { className: "MetricReportModalComponent", filePath: "lib/components/revenue-calculator-dashboard/metric-report-modal.component.ts", lineNumber:
|
|
58608
|
+
}], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], metricEnum: [{ type: i0.Input, args: [{ isSignal: true, alias: "metricEnum", required: false }] }], metricData: [{ type: i0.Input, args: [{ isSignal: true, alias: "metricData", required: false }] }], contributingMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "contributingMetrics", required: false }] }], pacingMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingMetrics", required: false }] }], trendChartData: [{ type: i0.Input, args: [{ isSignal: true, alias: "trendChartData", required: false }] }], isOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpen", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }] }); })();
|
|
58609
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MetricReportModalComponent, { className: "MetricReportModalComponent", filePath: "lib/components/revenue-calculator-dashboard/metric-report-modal.component.ts", lineNumber: 364 }); })();
|
|
58502
58610
|
|
|
58503
58611
|
const _c0$q = ["absoluteInputRef"];
|
|
58504
58612
|
const _c1$b = ["percentageInputRef"];
|
|
@@ -58826,7 +58934,7 @@ function InitialTargetSettingComponent_Conditional_37_Conditional_4_Template(rf,
|
|
|
58826
58934
|
i0.ɵɵelement(0, "symphiq-area-chart", 23);
|
|
58827
58935
|
} if (rf & 2) {
|
|
58828
58936
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
58829
|
-
i0.ɵɵproperty("chart", ctx_r0.revenueChartData())("showAxisLabels", true)("viewMode", ctx_r0.viewMode())("currencySymbol", "$")("height", "
|
|
58937
|
+
i0.ɵɵproperty("chart", ctx_r0.revenueChartData())("showAxisLabels", true)("viewMode", ctx_r0.viewMode())("currencySymbol", "$")("height", "200px");
|
|
58830
58938
|
} }
|
|
58831
58939
|
function InitialTargetSettingComponent_Conditional_37_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
58832
58940
|
i0.ɵɵelementStart(0, "div", 24)(1, "p", 50);
|
|
@@ -59448,7 +59556,7 @@ class InitialTargetSettingComponent {
|
|
|
59448
59556
|
let _t;
|
|
59449
59557
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.absoluteInputRef = _t.first);
|
|
59450
59558
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.percentageInputRef = _t.first);
|
|
59451
|
-
} }, inputs: { viewMode: [1, "viewMode"], funnelMetrics: [1, "funnelMetrics"], mainUiData: [1, "mainUiData"], trendUiData: [1, "trendUiData"], shopId: [1, "shopId"], pacingMetrics: [1, "pacingMetrics"], dataResults: [1, "dataResults"], reverseCalculationResponse: [1, "reverseCalculationResponse"], targets: [1, "targets"] }, outputs: { targetsCreated: "targetsCreated", calculateRevenueRequest: "calculateRevenueRequest" }, decls: 43, vars:
|
|
59559
|
+
} }, inputs: { viewMode: [1, "viewMode"], funnelMetrics: [1, "funnelMetrics"], mainUiData: [1, "mainUiData"], trendUiData: [1, "trendUiData"], shopId: [1, "shopId"], pacingMetrics: [1, "pacingMetrics"], dataResults: [1, "dataResults"], reverseCalculationResponse: [1, "reverseCalculationResponse"], targets: [1, "targets"] }, outputs: { targetsCreated: "targetsCreated", calculateRevenueRequest: "calculateRevenueRequest" }, decls: 43, vars: 51, consts: [["absoluteInputRef", ""], ["percentageInputRef", ""], [1, "space-y-8", "pb-32"], [1, "rounded-2xl", "border", "shadow-lg", "p-8", 3, "click", "ngClass"], [1, "flex", "items-center", "justify-between", "mb-6"], [1, "text-2xl", "font-bold", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", "chevron-rotate", 3, "chevron-rotate-expanded", "ngClass"], [1, "flex", "flex-col", "gap-4"], [1, "grid", "lg:grid-cols-2", "gap-4"], [1, "p-6", "rounded-xl", "border-2", 3, "click", "ngClass"], [1, "flex", "flex-wrap", "gap-4", "place-content-between"], [1, "flex", "items-center", "gap-2"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", 3, "ngClass"], [1, "text-lg", "font-bold", 3, "ngClass"], [1, "form-area-collapse"], [1, "form-area-content"], [1, "space-y-6"], [1, "chart-in-column"], [1, "chart-in-column-content"], [1, "text-sm", "font-semibold", "mb-3", 3, "ngClass"], [1, "rounded-xl", "border", "p-4", 3, "ngClass"], [3, "chart", "showAxisLabels", "viewMode", "currencySymbol", "height"], [1, "h-64", "flex", "items-center", "justify-center"], [1, "calculated-card-enter", "order-first", "lg:order-last"], [1, "calculated-card-content"], [1, "p-6", "rounded-xl", "border-2", 3, "ngClass", "h-full"], [1, "w-full"], [1, "metrics-section-enter"], [1, "metrics-section-content"], [1, "rounded-2xl", "border", "shadow-lg", "p-8", 3, "ngClass"], [3, "submitClick", "cancelClick", "viewMode", "isValid", "isSubmitting", "validationMessage", "buttonText", "showCancelButton"], [3, "closed", "viewMode", "metricEnum", "metricData", "contributingMetrics", "pacingMetrics", "trendChartData", "isOpen"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", "chevron-rotate", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"], [1, "flex", "items-center", "gap-1"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "top", 1, "flex-shrink-0", "w-4", "h-4", "rounded-full", "inline-flex", "items-center", "justify-center", "transition-colors", 3, "click", "ngClass", "libSymphiqTooltip"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "flex", "gap-2"], [1, "flex-1", "py-2", "px-4", "rounded-lg", "text-sm", "font-semibold", "transition-all", 3, "click", "ngClass"], [1, "relative"], [1, "flex", "justify-end"], [1, "absolute", "left-4", "top-1/2", "-translate-y-1/2", "text-xl", "font-bold", 3, "ngClass"], ["type", "number", "placeholder", "0", "min", "0", "step", "1000", 1, "w-full", "pl-10", "pr-4", "py-4", "rounded-xl", "text-2xl", "font-bold", "border-2", "transition-all", 3, "ngModelChange", "ngModel", "ngClass"], ["type", "number", "placeholder", "0", "min", "0", "max", "1000", "step", "0.1", 1, "w-full", "pr-10", "pl-4", "py-4", "rounded-xl", "text-2xl", "font-bold", "border-2", "transition-all", 3, "ngModelChange", "ngModel", "ngClass"], [1, "absolute", "right-4", "top-1/2", "-translate-y-1/2", "text-xl", "font-bold", 3, "ngClass"], [1, "px-4", "py-2", "rounded-lg", "text-sm", "font-semibold", "transition-all", 3, "click", "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "p-6", "rounded-xl", "border-2", 3, "ngClass"], [1, "flex", "items-center", "justify-between"], [1, "font-bold", "transition-all", "duration-300", "text-lg", 3, "ngClass"], [1, "px-4", "py-2", "rounded-lg", "text-sm", "font-semibold", "transition-all", "whitespace-nowrap", 3, "ngClass"], [1, "details-collapse"], [1, "details-collapse-content"], [1, "relative", "pt-6", "mt-6"], [1, "absolute", "top-0", "left-0", "right-0", "flex", "items-center", "-translate-y-1/2"], [1, "flex-1", "h-px", 3, "ngClass"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-semibold", "whitespace-nowrap", 3, "ngClass"], [1, "grid", "grid-cols-2", "gap-4", "pt-2"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "px-4", "py-2", "rounded-lg", "text-sm", "font-semibold", "transition-all", "whitespace-nowrap", 3, "click", "ngClass"], [1, "flex", "items-center", "gap-1", "mb-1"], [1, "mb-6"], [1, "text-2xl", "font-bold", "mb-2", 3, "ngClass"], [3, "viewStageReport", "viewRelatedMetricReport", "viewMode", "calculations", "pacingMetrics"]], template: function InitialTargetSettingComponent_Template(rf, ctx) { if (rf & 1) {
|
|
59452
59560
|
i0.ɵɵelementStart(0, "div", 2);
|
|
59453
59561
|
i0.ɵɵelement(1, "symphiq-tooltip-container");
|
|
59454
59562
|
i0.ɵɵelementStart(2, "div", 3);
|
|
@@ -59548,7 +59656,7 @@ class InitialTargetSettingComponent {
|
|
|
59548
59656
|
i0.ɵɵadvance();
|
|
59549
59657
|
i0.ɵɵproperty("viewMode", ctx.viewMode())("isValid", ctx.isValid())("isSubmitting", ctx.isCalculating())("validationMessage", ctx.validationMessage())("buttonText", ctx.submitButtonText())("showCancelButton", ctx.calculationState() === "input" && ctx.hasStoredResponse());
|
|
59550
59658
|
i0.ɵɵadvance();
|
|
59551
|
-
i0.ɵɵproperty("viewMode", ctx.viewMode())("metricEnum", ctx.selectedMetricEnum())("metricData", ctx.selectedMetricData())("contributingMetrics", ctx.selectedContributingMetrics())("pacingMetrics", ctx.pacingMetrics())("isOpen", ctx.isMetricReportOpen());
|
|
59659
|
+
i0.ɵɵproperty("viewMode", ctx.viewMode())("metricEnum", ctx.selectedMetricEnum())("metricData", ctx.selectedMetricData())("contributingMetrics", ctx.selectedContributingMetrics())("pacingMetrics", ctx.pacingMetrics())("trendChartData", ctx.revenueChartData())("isOpen", ctx.isMetricReportOpen());
|
|
59552
59660
|
} }, 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,
|
|
59553
59661
|
StickySubmitBarComponent,
|
|
59554
59662
|
AreaChartComponent,
|
|
@@ -59567,390 +59675,391 @@ class InitialTargetSettingComponent {
|
|
|
59567
59675
|
TooltipDirective,
|
|
59568
59676
|
TooltipContainerComponent,
|
|
59569
59677
|
MetricReportModalComponent
|
|
59570
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
59571
|
-
<div class="space-y-8 pb-32">
|
|
59572
|
-
<symphiq-tooltip-container />
|
|
59573
|
-
<div [ngClass]="sectionCardClasses(true)" class="rounded-2xl border shadow-lg p-8"
|
|
59574
|
-
[class.cursor-pointer]="calculationState() === 'results'"
|
|
59575
|
-
[class.lg:sticky]="calculationState() === 'results'"
|
|
59576
|
-
[style.top]="calculationState() === 'results' ? '148px' : 'auto'"
|
|
59577
|
-
[class.z-30]="calculationState() === 'results'"
|
|
59578
|
-
(click)="onCardClick()">
|
|
59579
|
-
<div class="flex items-center justify-between mb-6">
|
|
59580
|
-
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold">
|
|
59581
|
-
@if (calculationState() === 'results') {
|
|
59582
|
-
Your {{ currentYear() }} Revenue Target
|
|
59583
|
-
} @else {
|
|
59584
|
-
Calculate Your {{ currentYear() }} Revenue Target
|
|
59585
|
-
}
|
|
59586
|
-
</h2>
|
|
59587
|
-
@if (calculationState() === 'results') {
|
|
59588
|
-
<svg
|
|
59589
|
-
class="w-6 h-6 chevron-rotate"
|
|
59590
|
-
[class.chevron-rotate-expanded]="detailsExpanded()"
|
|
59591
|
-
[ngClass]="chevronClasses()"
|
|
59592
|
-
fill="none"
|
|
59593
|
-
stroke="currentColor"
|
|
59594
|
-
viewBox="0 0 24 24">
|
|
59595
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
|
|
59596
|
-
</svg>
|
|
59597
|
-
}
|
|
59598
|
-
</div>
|
|
59599
|
-
|
|
59600
|
-
<div class="flex flex-col gap-4">
|
|
59601
|
-
<div class="grid lg:grid-cols-2 gap-4">
|
|
59602
|
-
<div class="flex flex-col gap-4">
|
|
59603
|
-
<div [ngClass]="formAreaClasses()" class="p-6 rounded-xl border-2" [class.cursor-pointer]="calculationState() === 'results'" (click)="onCardClick(); $event.stopPropagation()">
|
|
59604
|
-
<div class="flex flex-wrap gap-4 place-content-between">
|
|
59605
|
-
<div class="flex items-center gap-2">
|
|
59606
|
-
<svg class="w-4 h-4" [ngClass]="baselineIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59607
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"></path>
|
|
59608
|
-
</svg>
|
|
59609
|
-
<div>
|
|
59610
|
-
<p [ngClass]="baselineLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59611
|
-
{{ priorYear() }} Revenue
|
|
59612
|
-
</p>
|
|
59613
|
-
<p [ngClass]="baselineValueClasses()" class="text-lg font-bold">
|
|
59614
|
-
{{ formatCurrency(priorYearRevenue()) }}
|
|
59615
|
-
</p>
|
|
59616
|
-
</div>
|
|
59617
|
-
</div>
|
|
59618
|
-
@if (currentPaceProjection() > 0) {
|
|
59619
|
-
<div class="flex items-center gap-2">
|
|
59620
|
-
<svg class="w-4 h-4" [ngClass]="projectionIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59621
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"></path>
|
|
59622
|
-
</svg>
|
|
59623
|
-
<div>
|
|
59624
|
-
<div class="flex items-center gap-1">
|
|
59625
|
-
<p [ngClass]="projectionLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59626
|
-
Current Pace Projection
|
|
59627
|
-
</p>
|
|
59628
|
-
<button
|
|
59629
|
-
type="button"
|
|
59630
|
-
[ngClass]="infoIconClasses()"
|
|
59631
|
-
class="flex-shrink-0 w-4 h-4 rounded-full inline-flex items-center justify-center transition-colors"
|
|
59632
|
-
[libSymphiqTooltip]="currentPaceProjectionTooltip"
|
|
59633
|
-
tooltipType="markdown"
|
|
59634
|
-
tooltipPosition="top"
|
|
59635
|
-
(click)="$event.stopPropagation()">
|
|
59636
|
-
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59637
|
-
<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" />
|
|
59638
|
-
</svg>
|
|
59639
|
-
</button>
|
|
59640
|
-
</div>
|
|
59641
|
-
<p [ngClass]="projectionValueClasses()" class="text-lg font-bold">
|
|
59642
|
-
{{ formatCurrency(currentPaceProjection()) }}
|
|
59643
|
-
</p>
|
|
59644
|
-
</div>
|
|
59645
|
-
</div>
|
|
59646
|
-
}
|
|
59647
|
-
</div>
|
|
59648
|
-
|
|
59649
|
-
<div class="form-area-collapse" [class.form-area-collapse-hidden]="calculationState() === 'results'" [class.mt-6]="calculationState() !== 'results'">
|
|
59650
|
-
<div class="form-area-content">
|
|
59651
|
-
<div class="space-y-6">
|
|
59652
|
-
@if (calculationState() !== 'results') {
|
|
59653
|
-
<div class="flex gap-2">
|
|
59654
|
-
<button
|
|
59655
|
-
(click)="setInputMode('absolute')"
|
|
59656
|
-
[ngClass]="inputModeButtonClasses('absolute')"
|
|
59657
|
-
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
59658
|
-
Absolute Amount
|
|
59659
|
-
</button>
|
|
59660
|
-
<button
|
|
59661
|
-
(click)="setInputMode('percentage')"
|
|
59662
|
-
[ngClass]="inputModeButtonClasses('percentage')"
|
|
59663
|
-
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
59664
|
-
% Increase
|
|
59665
|
-
</button>
|
|
59666
|
-
</div>
|
|
59667
|
-
|
|
59668
|
-
@if (inputMode() === 'absolute') {
|
|
59669
|
-
<div class="relative">
|
|
59670
|
-
<span [ngClass]="inputPrefixClasses()" class="absolute left-4 top-1/2 -translate-y-1/2 text-xl font-bold">
|
|
59671
|
-
$
|
|
59672
|
-
</span>
|
|
59673
|
-
<input
|
|
59674
|
-
#absoluteInputRef
|
|
59675
|
-
type="number"
|
|
59676
|
-
[(ngModel)]="absoluteInput"
|
|
59677
|
-
(ngModelChange)="onAbsoluteInputChange()"
|
|
59678
|
-
[ngClass]="inputClasses()"
|
|
59679
|
-
class="w-full pl-10 pr-4 py-4 rounded-xl text-2xl font-bold border-2 transition-all"
|
|
59680
|
-
placeholder="0"
|
|
59681
|
-
min="0"
|
|
59682
|
-
step="1000">
|
|
59683
|
-
</div>
|
|
59684
|
-
} @else {
|
|
59685
|
-
<div class="relative">
|
|
59686
|
-
<input
|
|
59687
|
-
#percentageInputRef
|
|
59688
|
-
type="number"
|
|
59689
|
-
[(ngModel)]="percentageInput"
|
|
59690
|
-
(ngModelChange)="onPercentageInputChange()"
|
|
59691
|
-
[ngClass]="inputClasses()"
|
|
59692
|
-
class="w-full pr-10 pl-4 py-4 rounded-xl text-2xl font-bold border-2 transition-all"
|
|
59693
|
-
placeholder="0"
|
|
59694
|
-
min="0"
|
|
59695
|
-
max="1000"
|
|
59696
|
-
step="0.1">
|
|
59697
|
-
<span [ngClass]="inputSuffixClasses()" class="absolute right-4 top-1/2 -translate-y-1/2 text-xl font-bold">
|
|
59698
|
-
%
|
|
59699
|
-
</span>
|
|
59700
|
-
</div>
|
|
59701
|
-
}
|
|
59702
|
-
|
|
59703
|
-
@if (hasStoredResponse()) {
|
|
59704
|
-
<div class="flex justify-end">
|
|
59705
|
-
<button
|
|
59706
|
-
(click)="handleCancel()"
|
|
59707
|
-
[ngClass]="cancelButtonClasses()"
|
|
59708
|
-
class="px-4 py-2 rounded-lg text-sm font-semibold transition-all">
|
|
59709
|
-
Cancel
|
|
59710
|
-
</button>
|
|
59711
|
-
</div>
|
|
59712
|
-
}
|
|
59713
|
-
}
|
|
59714
|
-
</div>
|
|
59715
|
-
</div>
|
|
59716
|
-
</div>
|
|
59717
|
-
</div>
|
|
59718
|
-
|
|
59719
|
-
<div class="chart-in-column" [class.chart-in-column-active]="calculationState() === 'results' && detailsExpanded()">
|
|
59720
|
-
<div class="chart-in-column-content">
|
|
59721
|
-
<div>
|
|
59722
|
-
<p [ngClass]="chartTitleClasses()" class="text-sm font-semibold mb-3">
|
|
59723
|
-
Year-over-Year Revenue Trend
|
|
59724
|
-
</p>
|
|
59725
|
-
<div [ngClass]="chartContainerClasses()" class="rounded-xl border p-4">
|
|
59726
|
-
@if (revenueChartData()) {
|
|
59727
|
-
<symphiq-area-chart
|
|
59728
|
-
[chart]="revenueChartData()!"
|
|
59729
|
-
[showAxisLabels]="true"
|
|
59730
|
-
[viewMode]="viewMode()"
|
|
59731
|
-
[currencySymbol]="'$'"
|
|
59732
|
-
[height]="'108px'"
|
|
59733
|
-
/>
|
|
59734
|
-
} @else {
|
|
59735
|
-
<div class="h-64 flex items-center justify-center">
|
|
59736
|
-
<p [ngClass]="noDataClasses()" class="text-sm">
|
|
59737
|
-
No revenue data available
|
|
59738
|
-
</p>
|
|
59739
|
-
</div>
|
|
59740
|
-
}
|
|
59741
|
-
</div>
|
|
59742
|
-
</div>
|
|
59743
|
-
</div>
|
|
59744
|
-
</div>
|
|
59745
|
-
</div>
|
|
59746
|
-
|
|
59747
|
-
<div class="calculated-card-enter order-first lg:order-last" [class.calculated-card-enter-active]="calculatedRevenue() > 0">
|
|
59748
|
-
<div class="calculated-card-content">
|
|
59749
|
-
@if (calculatedRevenue() > 0) {
|
|
59750
|
-
<div [ngClass]="calculatedValuesCardClasses()" class="p-6 rounded-xl border-2"
|
|
59751
|
-
[class.h-full]="calculationState() !== 'results' || detailsExpanded()">
|
|
59752
|
-
<div>
|
|
59753
|
-
<div class="flex items-center justify-between">
|
|
59754
|
-
<div>
|
|
59755
|
-
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59756
|
-
{{ currentYear() }} Revenue Target
|
|
59757
|
-
</p>
|
|
59758
|
-
<p [ngClass]="calculatedValueClasses()" class="font-bold transition-all duration-300 text-lg"
|
|
59759
|
-
[class.lg:text-3xl]="calculationState() !== 'results' || detailsExpanded()">
|
|
59760
|
-
@if (calculationState() === 'results' && targets() === undefined && submittedAbsoluteInput() !== null) {
|
|
59761
|
-
> {{ formatCurrency(submittedAbsoluteInput()!) }}
|
|
59762
|
-
} @else {
|
|
59763
|
-
{{ formatCurrency(displayedTargetRevenue()) }}
|
|
59764
|
-
}
|
|
59765
|
-
</p>
|
|
59766
|
-
</div>
|
|
59767
|
-
@if (calculationState() === 'results' && targets() === undefined) {
|
|
59768
|
-
<button
|
|
59769
|
-
(click)="handleAdjustTarget(); $event.stopPropagation()"
|
|
59770
|
-
[ngClass]="secondaryButtonClasses()"
|
|
59771
|
-
class="px-4 py-2 rounded-lg text-sm font-semibold transition-all whitespace-nowrap">
|
|
59772
|
-
Adjust Revenue Target
|
|
59773
|
-
</button>
|
|
59774
|
-
}
|
|
59775
|
-
</div>
|
|
59776
|
-
|
|
59777
|
-
<div class="details-collapse" [class.details-collapse-expanded]="calculationState() !== 'results' || detailsExpanded()">
|
|
59778
|
-
<div class="details-collapse-content">
|
|
59779
|
-
<div class="relative pt-6 mt-6">
|
|
59780
|
-
<div class="absolute top-0 left-0 right-0 flex items-center -translate-y-1/2">
|
|
59781
|
-
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59782
|
-
<span [ngClass]="dividerLabelClasses()" class="px-3 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
59783
|
-
vs. {{ priorYear() }}
|
|
59784
|
-
</span>
|
|
59785
|
-
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59786
|
-
</div>
|
|
59787
|
-
<div class="grid grid-cols-2 gap-4 pt-2">
|
|
59788
|
-
<div>
|
|
59789
|
-
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
59790
|
-
Increase Amount
|
|
59791
|
-
</p>
|
|
59792
|
-
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59793
|
-
@if (isTargetValid()) {
|
|
59794
|
-
{{ formatCurrency(animatedIncreaseAmount()) }}
|
|
59795
|
-
} @else {
|
|
59796
|
-
--
|
|
59797
|
-
}
|
|
59798
|
-
</p>
|
|
59799
|
-
</div>
|
|
59800
|
-
<div>
|
|
59801
|
-
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
59802
|
-
% Growth
|
|
59803
|
-
</p>
|
|
59804
|
-
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59805
|
-
@if (isTargetValid()) {
|
|
59806
|
-
+{{ formatPercentage(animatedPercentageGrowth(), 1) }}
|
|
59807
|
-
} @else {
|
|
59808
|
-
--
|
|
59809
|
-
}
|
|
59810
|
-
</p>
|
|
59811
|
-
</div>
|
|
59812
|
-
</div>
|
|
59813
|
-
</div>
|
|
59814
|
-
|
|
59815
|
-
@if (currentPaceProjection() > 0) {
|
|
59816
|
-
<div class="relative pt-6 mt-6">
|
|
59817
|
-
<div class="absolute top-0 left-0 right-0 flex items-center -translate-y-1/2">
|
|
59818
|
-
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59819
|
-
<span [ngClass]="dividerLabelClasses()" class="px-3 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
59820
|
-
{{ currentYear() }} YTD Gap
|
|
59821
|
-
</span>
|
|
59822
|
-
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59823
|
-
</div>
|
|
59824
|
-
<div class="grid grid-cols-2 gap-4 pt-2">
|
|
59825
|
-
<div>
|
|
59826
|
-
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
59827
|
-
Gap to Close
|
|
59828
|
-
</p>
|
|
59829
|
-
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59830
|
-
@if (isTargetValid()) {
|
|
59831
|
-
{{ formatCurrency(animatedGapAmount()) }}
|
|
59832
|
-
} @else {
|
|
59833
|
-
--
|
|
59834
|
-
}
|
|
59835
|
-
</p>
|
|
59836
|
-
</div>
|
|
59837
|
-
<div>
|
|
59838
|
-
<div class="flex items-center gap-1 mb-1">
|
|
59839
|
-
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59840
|
-
Additional Growth Needed
|
|
59841
|
-
</p>
|
|
59842
|
-
<button
|
|
59843
|
-
type="button"
|
|
59844
|
-
[ngClass]="infoIconClasses()"
|
|
59845
|
-
class="flex-shrink-0 w-4 h-4 rounded-full inline-flex items-center justify-center transition-colors"
|
|
59846
|
-
[libSymphiqTooltip]="additionalGrowthTooltip"
|
|
59847
|
-
tooltipType="markdown"
|
|
59848
|
-
tooltipPosition="top"
|
|
59849
|
-
(click)="$event.stopPropagation()">
|
|
59850
|
-
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59851
|
-
<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" />
|
|
59852
|
-
</svg>
|
|
59853
|
-
</button>
|
|
59854
|
-
</div>
|
|
59855
|
-
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59856
|
-
@if (isTargetValid()) {
|
|
59857
|
-
{{ gapToClose().amount > 0 ? '+' : '' }}{{ formatPercentage(animatedGapPercentage(), 1) }}
|
|
59858
|
-
} @else {
|
|
59859
|
-
--
|
|
59860
|
-
}
|
|
59861
|
-
</p>
|
|
59862
|
-
</div>
|
|
59863
|
-
</div>
|
|
59864
|
-
</div>
|
|
59865
|
-
}
|
|
59866
|
-
|
|
59867
|
-
</div>
|
|
59868
|
-
</div>
|
|
59869
|
-
</div>
|
|
59870
|
-
</div>
|
|
59871
|
-
}
|
|
59872
|
-
</div>
|
|
59873
|
-
</div>
|
|
59874
|
-
</div>
|
|
59875
|
-
|
|
59876
|
-
@if (calculationState() !== 'results') {
|
|
59877
|
-
<div class="w-full">
|
|
59878
|
-
<p [ngClass]="chartTitleClasses()" class="text-sm font-semibold mb-3">
|
|
59879
|
-
Year-over-Year Revenue Trend
|
|
59880
|
-
</p>
|
|
59881
|
-
<div [ngClass]="chartContainerClasses()" class="rounded-xl border p-4">
|
|
59882
|
-
@if (revenueChartData()) {
|
|
59883
|
-
<symphiq-area-chart
|
|
59884
|
-
[chart]="revenueChartData()!"
|
|
59885
|
-
[showAxisLabels]="true"
|
|
59886
|
-
[viewMode]="viewMode()"
|
|
59887
|
-
[currencySymbol]="'$'"
|
|
59888
|
-
[height]="'
|
|
59889
|
-
/>
|
|
59890
|
-
} @else {
|
|
59891
|
-
<div class="h-64 flex items-center justify-center">
|
|
59892
|
-
<p [ngClass]="noDataClasses()" class="text-sm">
|
|
59893
|
-
No revenue data available
|
|
59894
|
-
</p>
|
|
59895
|
-
</div>
|
|
59896
|
-
}
|
|
59897
|
-
</div>
|
|
59898
|
-
</div>
|
|
59899
|
-
}
|
|
59900
|
-
</div>
|
|
59901
|
-
</div>
|
|
59902
|
-
|
|
59903
|
-
<div class="metrics-section-enter" [class.metrics-section-enter-active]="showMetricsVisualization()">
|
|
59904
|
-
<div class="metrics-section-content">
|
|
59905
|
-
@if (showMetricsVisualization()) {
|
|
59906
|
-
<div [ngClass]="sectionCardClasses()" class="rounded-2xl border shadow-lg p-8">
|
|
59907
|
-
<div class="mb-6">
|
|
59908
|
-
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold mb-2">
|
|
59909
|
-
Contributing Metrics
|
|
59910
|
-
</h2>
|
|
59911
|
-
<p [ngClass]="sectionDescriptionClasses()" class="text-sm">
|
|
59912
|
-
@if (targets() === undefined && submittedAbsoluteInput() !== null) {
|
|
59913
|
-
To achieve your revenue target of over {{ formatCurrency(submittedAbsoluteInput()!) }}, the following metrics need to improve by these amounts. These improvements compound through your funnel to drive revenue growth.
|
|
59914
|
-
} @else {
|
|
59915
|
-
To achieve your revenue target of {{ formatCurrency(displayedTargetRevenue()) }}, the following metrics need to improve by these amounts. These improvements compound through your funnel to drive revenue growth.
|
|
59916
|
-
}
|
|
59917
|
-
</p>
|
|
59918
|
-
</div>
|
|
59919
|
-
|
|
59920
|
-
<symphiq-funnel-metrics-visualization
|
|
59921
|
-
[viewMode]="viewMode()"
|
|
59922
|
-
[calculations]="displayedMetricCalculations()"
|
|
59923
|
-
[pacingMetrics]="pacingMetrics()"
|
|
59924
|
-
(viewStageReport)="openMetricReport($event)"
|
|
59925
|
-
(viewRelatedMetricReport)="openMetricReport($event)"
|
|
59926
|
-
/>
|
|
59927
|
-
</div>
|
|
59928
|
-
}
|
|
59929
|
-
</div>
|
|
59930
|
-
</div>
|
|
59931
|
-
|
|
59932
|
-
<symphiq-sticky-submit-bar
|
|
59933
|
-
[viewMode]="viewMode()"
|
|
59934
|
-
[isValid]="isValid()"
|
|
59935
|
-
[isSubmitting]="isCalculating()"
|
|
59936
|
-
[validationMessage]="validationMessage()"
|
|
59937
|
-
[buttonText]="submitButtonText()"
|
|
59938
|
-
[showCancelButton]="calculationState() === 'input' && hasStoredResponse()"
|
|
59939
|
-
(submitClick)="handleSubmitClick()"
|
|
59940
|
-
(cancelClick)="handleCancel()"
|
|
59941
|
-
/>
|
|
59942
|
-
|
|
59943
|
-
<!-- Metric Report Modal -->
|
|
59944
|
-
<symphiq-metric-report-modal
|
|
59945
|
-
[viewMode]="viewMode()"
|
|
59946
|
-
[metricEnum]="selectedMetricEnum()"
|
|
59947
|
-
[metricData]="selectedMetricData()"
|
|
59948
|
-
[contributingMetrics]="selectedContributingMetrics()"
|
|
59949
|
-
[pacingMetrics]="pacingMetrics()"
|
|
59950
|
-
[
|
|
59951
|
-
|
|
59952
|
-
|
|
59953
|
-
|
|
59678
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
59679
|
+
<div class="space-y-8 pb-32">
|
|
59680
|
+
<symphiq-tooltip-container />
|
|
59681
|
+
<div [ngClass]="sectionCardClasses(true)" class="rounded-2xl border shadow-lg p-8"
|
|
59682
|
+
[class.cursor-pointer]="calculationState() === 'results'"
|
|
59683
|
+
[class.lg:sticky]="calculationState() === 'results'"
|
|
59684
|
+
[style.top]="calculationState() === 'results' ? '148px' : 'auto'"
|
|
59685
|
+
[class.z-30]="calculationState() === 'results'"
|
|
59686
|
+
(click)="onCardClick()">
|
|
59687
|
+
<div class="flex items-center justify-between mb-6">
|
|
59688
|
+
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold">
|
|
59689
|
+
@if (calculationState() === 'results') {
|
|
59690
|
+
Your {{ currentYear() }} Revenue Target
|
|
59691
|
+
} @else {
|
|
59692
|
+
Calculate Your {{ currentYear() }} Revenue Target
|
|
59693
|
+
}
|
|
59694
|
+
</h2>
|
|
59695
|
+
@if (calculationState() === 'results') {
|
|
59696
|
+
<svg
|
|
59697
|
+
class="w-6 h-6 chevron-rotate"
|
|
59698
|
+
[class.chevron-rotate-expanded]="detailsExpanded()"
|
|
59699
|
+
[ngClass]="chevronClasses()"
|
|
59700
|
+
fill="none"
|
|
59701
|
+
stroke="currentColor"
|
|
59702
|
+
viewBox="0 0 24 24">
|
|
59703
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
|
|
59704
|
+
</svg>
|
|
59705
|
+
}
|
|
59706
|
+
</div>
|
|
59707
|
+
|
|
59708
|
+
<div class="flex flex-col gap-4">
|
|
59709
|
+
<div class="grid lg:grid-cols-2 gap-4">
|
|
59710
|
+
<div class="flex flex-col gap-4">
|
|
59711
|
+
<div [ngClass]="formAreaClasses()" class="p-6 rounded-xl border-2" [class.cursor-pointer]="calculationState() === 'results'" (click)="onCardClick(); $event.stopPropagation()">
|
|
59712
|
+
<div class="flex flex-wrap gap-4 place-content-between">
|
|
59713
|
+
<div class="flex items-center gap-2">
|
|
59714
|
+
<svg class="w-4 h-4" [ngClass]="baselineIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59715
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"></path>
|
|
59716
|
+
</svg>
|
|
59717
|
+
<div>
|
|
59718
|
+
<p [ngClass]="baselineLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59719
|
+
{{ priorYear() }} Revenue
|
|
59720
|
+
</p>
|
|
59721
|
+
<p [ngClass]="baselineValueClasses()" class="text-lg font-bold">
|
|
59722
|
+
{{ formatCurrency(priorYearRevenue()) }}
|
|
59723
|
+
</p>
|
|
59724
|
+
</div>
|
|
59725
|
+
</div>
|
|
59726
|
+
@if (currentPaceProjection() > 0) {
|
|
59727
|
+
<div class="flex items-center gap-2">
|
|
59728
|
+
<svg class="w-4 h-4" [ngClass]="projectionIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59729
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"></path>
|
|
59730
|
+
</svg>
|
|
59731
|
+
<div>
|
|
59732
|
+
<div class="flex items-center gap-1">
|
|
59733
|
+
<p [ngClass]="projectionLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59734
|
+
Current Pace Projection
|
|
59735
|
+
</p>
|
|
59736
|
+
<button
|
|
59737
|
+
type="button"
|
|
59738
|
+
[ngClass]="infoIconClasses()"
|
|
59739
|
+
class="flex-shrink-0 w-4 h-4 rounded-full inline-flex items-center justify-center transition-colors"
|
|
59740
|
+
[libSymphiqTooltip]="currentPaceProjectionTooltip"
|
|
59741
|
+
tooltipType="markdown"
|
|
59742
|
+
tooltipPosition="top"
|
|
59743
|
+
(click)="$event.stopPropagation()">
|
|
59744
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59745
|
+
<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" />
|
|
59746
|
+
</svg>
|
|
59747
|
+
</button>
|
|
59748
|
+
</div>
|
|
59749
|
+
<p [ngClass]="projectionValueClasses()" class="text-lg font-bold">
|
|
59750
|
+
{{ formatCurrency(currentPaceProjection()) }}
|
|
59751
|
+
</p>
|
|
59752
|
+
</div>
|
|
59753
|
+
</div>
|
|
59754
|
+
}
|
|
59755
|
+
</div>
|
|
59756
|
+
|
|
59757
|
+
<div class="form-area-collapse" [class.form-area-collapse-hidden]="calculationState() === 'results'" [class.mt-6]="calculationState() !== 'results'">
|
|
59758
|
+
<div class="form-area-content">
|
|
59759
|
+
<div class="space-y-6">
|
|
59760
|
+
@if (calculationState() !== 'results') {
|
|
59761
|
+
<div class="flex gap-2">
|
|
59762
|
+
<button
|
|
59763
|
+
(click)="setInputMode('absolute')"
|
|
59764
|
+
[ngClass]="inputModeButtonClasses('absolute')"
|
|
59765
|
+
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
59766
|
+
Absolute Amount
|
|
59767
|
+
</button>
|
|
59768
|
+
<button
|
|
59769
|
+
(click)="setInputMode('percentage')"
|
|
59770
|
+
[ngClass]="inputModeButtonClasses('percentage')"
|
|
59771
|
+
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
59772
|
+
% Increase
|
|
59773
|
+
</button>
|
|
59774
|
+
</div>
|
|
59775
|
+
|
|
59776
|
+
@if (inputMode() === 'absolute') {
|
|
59777
|
+
<div class="relative">
|
|
59778
|
+
<span [ngClass]="inputPrefixClasses()" class="absolute left-4 top-1/2 -translate-y-1/2 text-xl font-bold">
|
|
59779
|
+
$
|
|
59780
|
+
</span>
|
|
59781
|
+
<input
|
|
59782
|
+
#absoluteInputRef
|
|
59783
|
+
type="number"
|
|
59784
|
+
[(ngModel)]="absoluteInput"
|
|
59785
|
+
(ngModelChange)="onAbsoluteInputChange()"
|
|
59786
|
+
[ngClass]="inputClasses()"
|
|
59787
|
+
class="w-full pl-10 pr-4 py-4 rounded-xl text-2xl font-bold border-2 transition-all"
|
|
59788
|
+
placeholder="0"
|
|
59789
|
+
min="0"
|
|
59790
|
+
step="1000">
|
|
59791
|
+
</div>
|
|
59792
|
+
} @else {
|
|
59793
|
+
<div class="relative">
|
|
59794
|
+
<input
|
|
59795
|
+
#percentageInputRef
|
|
59796
|
+
type="number"
|
|
59797
|
+
[(ngModel)]="percentageInput"
|
|
59798
|
+
(ngModelChange)="onPercentageInputChange()"
|
|
59799
|
+
[ngClass]="inputClasses()"
|
|
59800
|
+
class="w-full pr-10 pl-4 py-4 rounded-xl text-2xl font-bold border-2 transition-all"
|
|
59801
|
+
placeholder="0"
|
|
59802
|
+
min="0"
|
|
59803
|
+
max="1000"
|
|
59804
|
+
step="0.1">
|
|
59805
|
+
<span [ngClass]="inputSuffixClasses()" class="absolute right-4 top-1/2 -translate-y-1/2 text-xl font-bold">
|
|
59806
|
+
%
|
|
59807
|
+
</span>
|
|
59808
|
+
</div>
|
|
59809
|
+
}
|
|
59810
|
+
|
|
59811
|
+
@if (hasStoredResponse()) {
|
|
59812
|
+
<div class="flex justify-end">
|
|
59813
|
+
<button
|
|
59814
|
+
(click)="handleCancel()"
|
|
59815
|
+
[ngClass]="cancelButtonClasses()"
|
|
59816
|
+
class="px-4 py-2 rounded-lg text-sm font-semibold transition-all">
|
|
59817
|
+
Cancel
|
|
59818
|
+
</button>
|
|
59819
|
+
</div>
|
|
59820
|
+
}
|
|
59821
|
+
}
|
|
59822
|
+
</div>
|
|
59823
|
+
</div>
|
|
59824
|
+
</div>
|
|
59825
|
+
</div>
|
|
59826
|
+
|
|
59827
|
+
<div class="chart-in-column" [class.chart-in-column-active]="calculationState() === 'results' && detailsExpanded()">
|
|
59828
|
+
<div class="chart-in-column-content">
|
|
59829
|
+
<div>
|
|
59830
|
+
<p [ngClass]="chartTitleClasses()" class="text-sm font-semibold mb-3">
|
|
59831
|
+
Year-over-Year Revenue Trend
|
|
59832
|
+
</p>
|
|
59833
|
+
<div [ngClass]="chartContainerClasses()" class="rounded-xl border p-4">
|
|
59834
|
+
@if (revenueChartData()) {
|
|
59835
|
+
<symphiq-area-chart
|
|
59836
|
+
[chart]="revenueChartData()!"
|
|
59837
|
+
[showAxisLabels]="true"
|
|
59838
|
+
[viewMode]="viewMode()"
|
|
59839
|
+
[currencySymbol]="'$'"
|
|
59840
|
+
[height]="'108px'"
|
|
59841
|
+
/>
|
|
59842
|
+
} @else {
|
|
59843
|
+
<div class="h-64 flex items-center justify-center">
|
|
59844
|
+
<p [ngClass]="noDataClasses()" class="text-sm">
|
|
59845
|
+
No revenue data available
|
|
59846
|
+
</p>
|
|
59847
|
+
</div>
|
|
59848
|
+
}
|
|
59849
|
+
</div>
|
|
59850
|
+
</div>
|
|
59851
|
+
</div>
|
|
59852
|
+
</div>
|
|
59853
|
+
</div>
|
|
59854
|
+
|
|
59855
|
+
<div class="calculated-card-enter order-first lg:order-last" [class.calculated-card-enter-active]="calculatedRevenue() > 0">
|
|
59856
|
+
<div class="calculated-card-content">
|
|
59857
|
+
@if (calculatedRevenue() > 0) {
|
|
59858
|
+
<div [ngClass]="calculatedValuesCardClasses()" class="p-6 rounded-xl border-2"
|
|
59859
|
+
[class.h-full]="calculationState() !== 'results' || detailsExpanded()">
|
|
59860
|
+
<div>
|
|
59861
|
+
<div class="flex items-center justify-between">
|
|
59862
|
+
<div>
|
|
59863
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59864
|
+
{{ currentYear() }} Revenue Target
|
|
59865
|
+
</p>
|
|
59866
|
+
<p [ngClass]="calculatedValueClasses()" class="font-bold transition-all duration-300 text-lg"
|
|
59867
|
+
[class.lg:text-3xl]="calculationState() !== 'results' || detailsExpanded()">
|
|
59868
|
+
@if (calculationState() === 'results' && targets() === undefined && submittedAbsoluteInput() !== null) {
|
|
59869
|
+
> {{ formatCurrency(submittedAbsoluteInput()!) }}
|
|
59870
|
+
} @else {
|
|
59871
|
+
{{ formatCurrency(displayedTargetRevenue()) }}
|
|
59872
|
+
}
|
|
59873
|
+
</p>
|
|
59874
|
+
</div>
|
|
59875
|
+
@if (calculationState() === 'results' && targets() === undefined) {
|
|
59876
|
+
<button
|
|
59877
|
+
(click)="handleAdjustTarget(); $event.stopPropagation()"
|
|
59878
|
+
[ngClass]="secondaryButtonClasses()"
|
|
59879
|
+
class="px-4 py-2 rounded-lg text-sm font-semibold transition-all whitespace-nowrap">
|
|
59880
|
+
Adjust Revenue Target
|
|
59881
|
+
</button>
|
|
59882
|
+
}
|
|
59883
|
+
</div>
|
|
59884
|
+
|
|
59885
|
+
<div class="details-collapse" [class.details-collapse-expanded]="calculationState() !== 'results' || detailsExpanded()">
|
|
59886
|
+
<div class="details-collapse-content">
|
|
59887
|
+
<div class="relative pt-6 mt-6">
|
|
59888
|
+
<div class="absolute top-0 left-0 right-0 flex items-center -translate-y-1/2">
|
|
59889
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59890
|
+
<span [ngClass]="dividerLabelClasses()" class="px-3 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
59891
|
+
vs. {{ priorYear() }}
|
|
59892
|
+
</span>
|
|
59893
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59894
|
+
</div>
|
|
59895
|
+
<div class="grid grid-cols-2 gap-4 pt-2">
|
|
59896
|
+
<div>
|
|
59897
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
59898
|
+
Increase Amount
|
|
59899
|
+
</p>
|
|
59900
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59901
|
+
@if (isTargetValid()) {
|
|
59902
|
+
{{ formatCurrency(animatedIncreaseAmount()) }}
|
|
59903
|
+
} @else {
|
|
59904
|
+
--
|
|
59905
|
+
}
|
|
59906
|
+
</p>
|
|
59907
|
+
</div>
|
|
59908
|
+
<div>
|
|
59909
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
59910
|
+
% Growth
|
|
59911
|
+
</p>
|
|
59912
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59913
|
+
@if (isTargetValid()) {
|
|
59914
|
+
+{{ formatPercentage(animatedPercentageGrowth(), 1) }}
|
|
59915
|
+
} @else {
|
|
59916
|
+
--
|
|
59917
|
+
}
|
|
59918
|
+
</p>
|
|
59919
|
+
</div>
|
|
59920
|
+
</div>
|
|
59921
|
+
</div>
|
|
59922
|
+
|
|
59923
|
+
@if (currentPaceProjection() > 0) {
|
|
59924
|
+
<div class="relative pt-6 mt-6">
|
|
59925
|
+
<div class="absolute top-0 left-0 right-0 flex items-center -translate-y-1/2">
|
|
59926
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59927
|
+
<span [ngClass]="dividerLabelClasses()" class="px-3 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
59928
|
+
{{ currentYear() }} YTD Gap
|
|
59929
|
+
</span>
|
|
59930
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59931
|
+
</div>
|
|
59932
|
+
<div class="grid grid-cols-2 gap-4 pt-2">
|
|
59933
|
+
<div>
|
|
59934
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
59935
|
+
Gap to Close
|
|
59936
|
+
</p>
|
|
59937
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59938
|
+
@if (isTargetValid()) {
|
|
59939
|
+
{{ formatCurrency(animatedGapAmount()) }}
|
|
59940
|
+
} @else {
|
|
59941
|
+
--
|
|
59942
|
+
}
|
|
59943
|
+
</p>
|
|
59944
|
+
</div>
|
|
59945
|
+
<div>
|
|
59946
|
+
<div class="flex items-center gap-1 mb-1">
|
|
59947
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59948
|
+
Additional Growth Needed
|
|
59949
|
+
</p>
|
|
59950
|
+
<button
|
|
59951
|
+
type="button"
|
|
59952
|
+
[ngClass]="infoIconClasses()"
|
|
59953
|
+
class="flex-shrink-0 w-4 h-4 rounded-full inline-flex items-center justify-center transition-colors"
|
|
59954
|
+
[libSymphiqTooltip]="additionalGrowthTooltip"
|
|
59955
|
+
tooltipType="markdown"
|
|
59956
|
+
tooltipPosition="top"
|
|
59957
|
+
(click)="$event.stopPropagation()">
|
|
59958
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59959
|
+
<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" />
|
|
59960
|
+
</svg>
|
|
59961
|
+
</button>
|
|
59962
|
+
</div>
|
|
59963
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59964
|
+
@if (isTargetValid()) {
|
|
59965
|
+
{{ gapToClose().amount > 0 ? '+' : '' }}{{ formatPercentage(animatedGapPercentage(), 1) }}
|
|
59966
|
+
} @else {
|
|
59967
|
+
--
|
|
59968
|
+
}
|
|
59969
|
+
</p>
|
|
59970
|
+
</div>
|
|
59971
|
+
</div>
|
|
59972
|
+
</div>
|
|
59973
|
+
}
|
|
59974
|
+
|
|
59975
|
+
</div>
|
|
59976
|
+
</div>
|
|
59977
|
+
</div>
|
|
59978
|
+
</div>
|
|
59979
|
+
}
|
|
59980
|
+
</div>
|
|
59981
|
+
</div>
|
|
59982
|
+
</div>
|
|
59983
|
+
|
|
59984
|
+
@if (calculationState() !== 'results') {
|
|
59985
|
+
<div class="w-full">
|
|
59986
|
+
<p [ngClass]="chartTitleClasses()" class="text-sm font-semibold mb-3">
|
|
59987
|
+
Year-over-Year Revenue Trend
|
|
59988
|
+
</p>
|
|
59989
|
+
<div [ngClass]="chartContainerClasses()" class="rounded-xl border p-4">
|
|
59990
|
+
@if (revenueChartData()) {
|
|
59991
|
+
<symphiq-area-chart
|
|
59992
|
+
[chart]="revenueChartData()!"
|
|
59993
|
+
[showAxisLabels]="true"
|
|
59994
|
+
[viewMode]="viewMode()"
|
|
59995
|
+
[currencySymbol]="'$'"
|
|
59996
|
+
[height]="'200px'"
|
|
59997
|
+
/>
|
|
59998
|
+
} @else {
|
|
59999
|
+
<div class="h-64 flex items-center justify-center">
|
|
60000
|
+
<p [ngClass]="noDataClasses()" class="text-sm">
|
|
60001
|
+
No revenue data available
|
|
60002
|
+
</p>
|
|
60003
|
+
</div>
|
|
60004
|
+
}
|
|
60005
|
+
</div>
|
|
60006
|
+
</div>
|
|
60007
|
+
}
|
|
60008
|
+
</div>
|
|
60009
|
+
</div>
|
|
60010
|
+
|
|
60011
|
+
<div class="metrics-section-enter" [class.metrics-section-enter-active]="showMetricsVisualization()">
|
|
60012
|
+
<div class="metrics-section-content">
|
|
60013
|
+
@if (showMetricsVisualization()) {
|
|
60014
|
+
<div [ngClass]="sectionCardClasses()" class="rounded-2xl border shadow-lg p-8">
|
|
60015
|
+
<div class="mb-6">
|
|
60016
|
+
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold mb-2">
|
|
60017
|
+
Contributing Metrics
|
|
60018
|
+
</h2>
|
|
60019
|
+
<p [ngClass]="sectionDescriptionClasses()" class="text-sm">
|
|
60020
|
+
@if (targets() === undefined && submittedAbsoluteInput() !== null) {
|
|
60021
|
+
To achieve your revenue target of over {{ formatCurrency(submittedAbsoluteInput()!) }}, the following metrics need to improve by these amounts. These improvements compound through your funnel to drive revenue growth.
|
|
60022
|
+
} @else {
|
|
60023
|
+
To achieve your revenue target of {{ formatCurrency(displayedTargetRevenue()) }}, the following metrics need to improve by these amounts. These improvements compound through your funnel to drive revenue growth.
|
|
60024
|
+
}
|
|
60025
|
+
</p>
|
|
60026
|
+
</div>
|
|
60027
|
+
|
|
60028
|
+
<symphiq-funnel-metrics-visualization
|
|
60029
|
+
[viewMode]="viewMode()"
|
|
60030
|
+
[calculations]="displayedMetricCalculations()"
|
|
60031
|
+
[pacingMetrics]="pacingMetrics()"
|
|
60032
|
+
(viewStageReport)="openMetricReport($event)"
|
|
60033
|
+
(viewRelatedMetricReport)="openMetricReport($event)"
|
|
60034
|
+
/>
|
|
60035
|
+
</div>
|
|
60036
|
+
}
|
|
60037
|
+
</div>
|
|
60038
|
+
</div>
|
|
60039
|
+
|
|
60040
|
+
<symphiq-sticky-submit-bar
|
|
60041
|
+
[viewMode]="viewMode()"
|
|
60042
|
+
[isValid]="isValid()"
|
|
60043
|
+
[isSubmitting]="isCalculating()"
|
|
60044
|
+
[validationMessage]="validationMessage()"
|
|
60045
|
+
[buttonText]="submitButtonText()"
|
|
60046
|
+
[showCancelButton]="calculationState() === 'input' && hasStoredResponse()"
|
|
60047
|
+
(submitClick)="handleSubmitClick()"
|
|
60048
|
+
(cancelClick)="handleCancel()"
|
|
60049
|
+
/>
|
|
60050
|
+
|
|
60051
|
+
<!-- Metric Report Modal -->
|
|
60052
|
+
<symphiq-metric-report-modal
|
|
60053
|
+
[viewMode]="viewMode()"
|
|
60054
|
+
[metricEnum]="selectedMetricEnum()"
|
|
60055
|
+
[metricData]="selectedMetricData()"
|
|
60056
|
+
[contributingMetrics]="selectedContributingMetrics()"
|
|
60057
|
+
[pacingMetrics]="pacingMetrics()"
|
|
60058
|
+
[trendChartData]="revenueChartData()"
|
|
60059
|
+
[isOpen]="isMetricReportOpen()"
|
|
60060
|
+
(closed)="closeMetricReport()"
|
|
60061
|
+
/>
|
|
60062
|
+
</div>
|
|
59954
60063
|
`, styles: [".calculated-card-enter{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s ease-out}.calculated-card-enter-active{grid-template-rows:1fr}.calculated-card-content{overflow:hidden}.form-area-collapse{display:grid;grid-template-rows:1fr;transition:grid-template-rows .4s ease-out}.form-area-collapse-hidden{grid-template-rows:0fr}.form-area-content{overflow:hidden}.chart-section-collapse{display:grid;grid-template-rows:1fr;transition:grid-template-rows .4s ease-out}.chart-section-collapse-hidden{grid-template-rows:0fr}.chart-section-content{overflow:hidden}.chart-in-column{display:grid;grid-template-rows:0fr;transition:grid-template-rows .4s ease-out}.chart-in-column-active{grid-template-rows:1fr}.chart-in-column-content{overflow:hidden}.metrics-section-enter{display:grid;grid-template-rows:0fr;transition:grid-template-rows .5s ease-out}.metrics-section-enter-active{grid-template-rows:1fr}.metrics-section-content{overflow:hidden}.details-collapse{display:grid;grid-template-rows:0fr;transition:grid-template-rows .4s ease-out}.details-collapse-expanded{grid-template-rows:1fr}.details-collapse-content{overflow:hidden}.chevron-rotate{transition:transform .3s ease-out}.chevron-rotate-expanded{transform:rotate(180deg)}\n"] }]
|
|
59955
60064
|
}], () => [], { absoluteInputRef: [{
|
|
59956
60065
|
type: ViewChild,
|
|
@@ -59959,7 +60068,7 @@ class InitialTargetSettingComponent {
|
|
|
59959
60068
|
type: ViewChild,
|
|
59960
60069
|
args: ['percentageInputRef']
|
|
59961
60070
|
}], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], funnelMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelMetrics", required: false }] }], mainUiData: [{ type: i0.Input, args: [{ isSignal: true, alias: "mainUiData", required: false }] }], trendUiData: [{ type: i0.Input, args: [{ isSignal: true, alias: "trendUiData", required: false }] }], shopId: [{ type: i0.Input, args: [{ isSignal: true, alias: "shopId", required: false }] }], pacingMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingMetrics", required: false }] }], dataResults: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataResults", required: false }] }], reverseCalculationResponse: [{ type: i0.Input, args: [{ isSignal: true, alias: "reverseCalculationResponse", required: false }] }], targets: [{ type: i0.Input, args: [{ isSignal: true, alias: "targets", required: false }] }], targetsCreated: [{ type: i0.Output, args: ["targetsCreated"] }], calculateRevenueRequest: [{ type: i0.Output, args: ["calculateRevenueRequest"] }] }); })();
|
|
59962
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber:
|
|
60071
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber: 536 }); })();
|
|
59963
60072
|
|
|
59964
60073
|
function IndeterminateSpinnerComponent_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
59965
60074
|
i0.ɵɵelement(0, "div", 5);
|