@eric-emg/symphiq-components 1.2.251 → 1.2.253
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 +1030 -877
- package/fesm2022/symphiq-components.mjs.map +1 -1
- package/index.d.ts +44 -37
- package/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/styles.css +18 -0
|
@@ -54881,16 +54881,12 @@ class PacingStatusBadgeComponent {
|
|
|
54881
54881
|
return status === 'ahead' ? -1 : status === 'behind' ? 1 : 0;
|
|
54882
54882
|
}, ...(ngDevMode ? [{ debugName: "targetRotation" }] : []));
|
|
54883
54883
|
this.rotationStyle = computed(() => {
|
|
54884
|
-
const progress = this.animationProgress();
|
|
54885
54884
|
const target = this.targetRotation();
|
|
54886
|
-
|
|
54887
|
-
return `rotate(${currentRotation}deg)`;
|
|
54885
|
+
return `rotate(${target}deg)`;
|
|
54888
54886
|
}, ...(ngDevMode ? [{ debugName: "rotationStyle" }] : []));
|
|
54889
54887
|
this.fullBadgeRotationStyle = computed(() => {
|
|
54890
|
-
const progress = this.animationProgress();
|
|
54891
54888
|
const target = this.targetRotation();
|
|
54892
|
-
|
|
54893
|
-
return `rotate(${currentRotation}deg)`;
|
|
54889
|
+
return `rotate(${target}deg)`;
|
|
54894
54890
|
}, ...(ngDevMode ? [{ debugName: "fullBadgeRotationStyle" }] : []));
|
|
54895
54891
|
this.containerSizeClasses = computed(() => {
|
|
54896
54892
|
const compact = this.isCompact();
|
|
@@ -55041,37 +55037,37 @@ class PacingStatusBadgeComponent {
|
|
|
55041
55037
|
standalone: true,
|
|
55042
55038
|
imports: [CommonModule],
|
|
55043
55039
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
55044
|
-
template: `
|
|
55045
|
-
@if (showEmphasizedPercentage() && hasPercentage()) {
|
|
55046
|
-
<div
|
|
55047
|
-
[ngClass]="containerClasses()"
|
|
55048
|
-
[class]="containerSizeClasses()"
|
|
55049
|
-
[style.transform]="rotationStyle()"
|
|
55050
|
-
>
|
|
55051
|
-
<div [ngClass]="overlayBadgeClasses()" [class]="overlaySizeClasses()">
|
|
55052
|
-
<span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
|
|
55053
|
-
{{ iconSymbol() }}
|
|
55054
|
-
</span>
|
|
55055
|
-
{{ animatedPercentage() }}
|
|
55056
|
-
</div>
|
|
55057
|
-
<div
|
|
55058
|
-
[class]="sizeClasses()"
|
|
55059
|
-
>
|
|
55060
|
-
<span>{{ displayTextWithoutPercentage() }}</span>
|
|
55061
|
-
</div>
|
|
55062
|
-
</div>
|
|
55063
|
-
} @else {
|
|
55064
|
-
<div
|
|
55065
|
-
[ngClass]="badgeClasses()"
|
|
55066
|
-
[class]="fullBadgeSizeClasses()"
|
|
55067
|
-
[style.transform]="fullBadgeRotationStyle()"
|
|
55068
|
-
>
|
|
55069
|
-
<span [ngClass]="iconClasses()" [class]="iconSizeClasses()">
|
|
55070
|
-
{{ iconSymbol() }}
|
|
55071
|
-
</span>
|
|
55072
|
-
<span>{{ displayText() }}</span>
|
|
55073
|
-
</div>
|
|
55074
|
-
}
|
|
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
|
+
}
|
|
55075
55071
|
`
|
|
55076
55072
|
}]
|
|
55077
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 }] }] }); })();
|
|
@@ -55125,10 +55121,8 @@ class TargetChangeBadgeComponent {
|
|
|
55125
55121
|
return change > 0 ? -1 : change < 0 ? 1 : 0;
|
|
55126
55122
|
}, ...(ngDevMode ? [{ debugName: "targetRotation" }] : []));
|
|
55127
55123
|
this.rotationStyle = computed(() => {
|
|
55128
|
-
const progress = this.animationProgress();
|
|
55129
55124
|
const target = this.targetRotation();
|
|
55130
|
-
|
|
55131
|
-
return `rotate(${currentRotation}deg)`;
|
|
55125
|
+
return `rotate(${target}deg)`;
|
|
55132
55126
|
}, ...(ngDevMode ? [{ debugName: "rotationStyle" }] : []));
|
|
55133
55127
|
this.containerSizeClasses = computed(() => {
|
|
55134
55128
|
const compact = this.isCompact();
|
|
@@ -55236,20 +55230,20 @@ class TargetChangeBadgeComponent {
|
|
|
55236
55230
|
standalone: true,
|
|
55237
55231
|
imports: [CommonModule],
|
|
55238
55232
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
55239
|
-
template: `
|
|
55240
|
-
<div
|
|
55241
|
-
[ngClass]="containerClasses()"
|
|
55242
|
-
[class]="containerSizeClasses()"
|
|
55243
|
-
[style.transform]="rotationStyle()"
|
|
55244
|
-
>
|
|
55245
|
-
<div [ngClass]="overlayClasses()" [class]="overlaySizeClasses()">
|
|
55246
|
-
<span [class]="iconSizeClass()">{{ iconSymbol() }}</span>
|
|
55247
|
-
{{ animatedPercentageText() }}
|
|
55248
|
-
</div>
|
|
55249
|
-
<div [class]="descriptionSizeClasses()">
|
|
55250
|
-
{{ descriptionText() }}
|
|
55251
|
-
</div>
|
|
55252
|
-
</div>
|
|
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>
|
|
55253
55247
|
`
|
|
55254
55248
|
}]
|
|
55255
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 }] }] }); })();
|
|
@@ -55889,7 +55883,7 @@ function StickySubmitBarComponent_Conditional_5_Template(rf, ctx) { if (rf & 1)
|
|
|
55889
55883
|
i0.ɵɵelementEnd();
|
|
55890
55884
|
i0.ɵɵnamespaceHTML();
|
|
55891
55885
|
i0.ɵɵelementStart(3, "p", 10);
|
|
55892
|
-
i0.ɵɵtext(4, " Ready to
|
|
55886
|
+
i0.ɵɵtext(4, " Ready to save your targets ");
|
|
55893
55887
|
i0.ɵɵelementEnd()();
|
|
55894
55888
|
} if (rf & 2) {
|
|
55895
55889
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -55913,7 +55907,7 @@ function StickySubmitBarComponent_Conditional_9_Template(rf, ctx) { if (rf & 1)
|
|
|
55913
55907
|
i0.ɵɵelementEnd();
|
|
55914
55908
|
i0.ɵɵnamespaceHTML();
|
|
55915
55909
|
i0.ɵɵelementStart(3, "span");
|
|
55916
|
-
i0.ɵɵtext(4, "
|
|
55910
|
+
i0.ɵɵtext(4, "Saving Targets...");
|
|
55917
55911
|
i0.ɵɵelementEnd();
|
|
55918
55912
|
} }
|
|
55919
55913
|
function StickySubmitBarComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -55935,7 +55929,7 @@ class StickySubmitBarComponent {
|
|
|
55935
55929
|
this.isValid = input(false, ...(ngDevMode ? [{ debugName: "isValid" }] : []));
|
|
55936
55930
|
this.isSubmitting = input(false, ...(ngDevMode ? [{ debugName: "isSubmitting" }] : []));
|
|
55937
55931
|
this.validationMessage = input('', ...(ngDevMode ? [{ debugName: "validationMessage" }] : []));
|
|
55938
|
-
this.buttonText = input('
|
|
55932
|
+
this.buttonText = input('Save Metric Targets', ...(ngDevMode ? [{ debugName: "buttonText" }] : []));
|
|
55939
55933
|
this.showCancelButton = input(false, ...(ngDevMode ? [{ debugName: "showCancelButton" }] : []));
|
|
55940
55934
|
this.submitClick = output();
|
|
55941
55935
|
this.cancelClick = output();
|
|
@@ -56026,7 +56020,7 @@ class StickySubmitBarComponent {
|
|
|
56026
56020
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
|
56027
56021
|
</svg>
|
|
56028
56022
|
<p [ngClass]="readyMessageClasses()" class="text-sm font-medium">
|
|
56029
|
-
Ready to
|
|
56023
|
+
Ready to save your targets
|
|
56030
56024
|
</p>
|
|
56031
56025
|
</div>
|
|
56032
56026
|
}
|
|
@@ -56051,7 +56045,7 @@ class StickySubmitBarComponent {
|
|
|
56051
56045
|
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
|
56052
56046
|
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
|
56053
56047
|
</svg>
|
|
56054
|
-
<span>
|
|
56048
|
+
<span>Saving Targets...</span>
|
|
56055
56049
|
} @else {
|
|
56056
56050
|
<span>{{ buttonText() }}</span>
|
|
56057
56051
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
@@ -56695,8 +56689,9 @@ class LineChartComponent {
|
|
|
56695
56689
|
this.showAxisLabels = input(false, ...(ngDevMode ? [{ debugName: "showAxisLabels" }] : []));
|
|
56696
56690
|
this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
|
|
56697
56691
|
this.currencySymbol = input('$', ...(ngDevMode ? [{ debugName: "currencySymbol" }] : []));
|
|
56692
|
+
this.height = input(undefined, ...(ngDevMode ? [{ debugName: "height" }] : []));
|
|
56698
56693
|
// Memoized computed signals to avoid recalculation on every change detection
|
|
56699
|
-
this.chartHeight = computed(() => this.showAxisLabels() ? '500px' : '133px', ...(ngDevMode ? [{ debugName: "chartHeight" }] : []));
|
|
56694
|
+
this.chartHeight = computed(() => this.height() ?? (this.showAxisLabels() ? '500px' : '133px'), ...(ngDevMode ? [{ debugName: "chartHeight" }] : []));
|
|
56700
56695
|
this.cursorColor = computed(() => this.viewMode() === ViewModeEnum.DARK ? 0xffffff : 0x94a3b8, ...(ngDevMode ? [{ debugName: "cursorColor" }] : []));
|
|
56701
56696
|
this.tooltipTextColor = computed(() => this.viewMode() === ViewModeEnum.DARK ? 0xffffff : 0x000000, ...(ngDevMode ? [{ debugName: "tooltipTextColor" }] : []));
|
|
56702
56697
|
this.chartHash = computed(() => this.generateChartHash(this.chart()), ...(ngDevMode ? [{ debugName: "chartHash" }] : []));
|
|
@@ -57141,7 +57136,7 @@ class LineChartComponent {
|
|
|
57141
57136
|
} if (rf & 2) {
|
|
57142
57137
|
let _t;
|
|
57143
57138
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.chartDiv = _t.first);
|
|
57144
|
-
} }, 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) {
|
|
57145
57140
|
i0.ɵɵdomElementStart(0, "div", 1);
|
|
57146
57141
|
i0.ɵɵdomElement(1, "div", 2, 0);
|
|
57147
57142
|
i0.ɵɵdomElementEnd();
|
|
@@ -57153,12 +57148,12 @@ class LineChartComponent {
|
|
|
57153
57148
|
}
|
|
57154
57149
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LineChartComponent, [{
|
|
57155
57150
|
type: Component,
|
|
57156
|
-
args: [{ selector: 'symphiq-line-chart', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
57157
|
-
<div class="chart-container" [class.mini-mode]="!showAxisLabels()">
|
|
57158
|
-
<div #chartdiv class="chart" [style.height]="chartHeight()" style="width: 100%;"></div>
|
|
57159
|
-
</div>
|
|
57151
|
+
args: [{ selector: 'symphiq-line-chart', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
57152
|
+
<div class="chart-container" [class.mini-mode]="!showAxisLabels()">
|
|
57153
|
+
<div #chartdiv class="chart" [style.height]="chartHeight()" style="width: 100%;"></div>
|
|
57154
|
+
</div>
|
|
57160
57155
|
`, styles: [".chart-container{width:100%;padding:1rem}.chart-container.mini-mode{padding:.25rem}\n"] }]
|
|
57161
|
-
}], () => [], { 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: [{
|
|
57162
57157
|
type: ViewChild,
|
|
57163
57158
|
args: ['chartdiv', { static: true }]
|
|
57164
57159
|
}] }); })();
|
|
@@ -57445,7 +57440,7 @@ class ProgressToTargetChartComponent {
|
|
|
57445
57440
|
|
|
57446
57441
|
const _forTrack0$i = ($index, $item) => $item.metric;
|
|
57447
57442
|
function MetricReportModalComponent_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
57448
|
-
i0.ɵɵelementStart(0, "button",
|
|
57443
|
+
i0.ɵɵelementStart(0, "button", 10);
|
|
57449
57444
|
i0.ɵɵnamespaceSVG();
|
|
57450
57445
|
i0.ɵɵelementStart(1, "svg", 33);
|
|
57451
57446
|
i0.ɵɵelement(2, "path", 34);
|
|
@@ -57454,22 +57449,20 @@ function MetricReportModalComponent_Conditional_0_Conditional_12_Template(rf, ct
|
|
|
57454
57449
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
57455
57450
|
i0.ɵɵproperty("ngClass", ctx_r1.headerInfoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(ctx_r1.metricData().description, ctx_r1.metricTitle()));
|
|
57456
57451
|
} }
|
|
57457
|
-
function
|
|
57458
|
-
i0.ɵɵelement(0, "symphiq-target-change-badge",
|
|
57452
|
+
function MetricReportModalComponent_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
57453
|
+
i0.ɵɵelement(0, "symphiq-target-change-badge", 22);
|
|
57459
57454
|
} if (rf & 2) {
|
|
57460
57455
|
let tmp_4_0;
|
|
57461
57456
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
57462
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);
|
|
57463
57458
|
} }
|
|
57464
|
-
function
|
|
57465
|
-
i0.ɵɵelementStart(0, "div")(1, "p",
|
|
57459
|
+
function MetricReportModalComponent_Conditional_0_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
57460
|
+
i0.ɵɵelementStart(0, "div")(1, "p", 24);
|
|
57466
57461
|
i0.ɵɵtext(2);
|
|
57467
57462
|
i0.ɵɵelementEnd();
|
|
57468
|
-
i0.ɵɵelementStart(3, "p",
|
|
57463
|
+
i0.ɵɵelementStart(3, "p", 23);
|
|
57469
57464
|
i0.ɵɵtext(4);
|
|
57470
|
-
i0.ɵɵelementEnd();
|
|
57471
|
-
i0.ɵɵelement(5, "symphiq-pacing-status-badge", 35);
|
|
57472
|
-
i0.ɵɵelementEnd();
|
|
57465
|
+
i0.ɵɵelementEnd()();
|
|
57473
57466
|
} if (rf & 2) {
|
|
57474
57467
|
let tmp_5_0;
|
|
57475
57468
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -57481,17 +57474,37 @@ function MetricReportModalComponent_Conditional_0_Conditional_48_Template(rf, ct
|
|
|
57481
57474
|
i0.ɵɵproperty("ngClass", ctx_r1.projectedValueClasses());
|
|
57482
57475
|
i0.ɵɵadvance();
|
|
57483
57476
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(ctx_r1.pacingInfo().projectedValue, ((tmp_5_0 = ctx_r1.metricData()) == null ? null : tmp_5_0.metric) || "", false), " ");
|
|
57477
|
+
} }
|
|
57478
|
+
function MetricReportModalComponent_Conditional_0_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
57479
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
57480
|
+
i0.ɵɵelementStart(0, "div")(1, "p", 24);
|
|
57481
|
+
i0.ɵɵtext(2, " Year-over-Year Trend ");
|
|
57482
|
+
i0.ɵɵelementEnd();
|
|
57483
|
+
i0.ɵɵelementStart(3, "div", 35);
|
|
57484
|
+
i0.ɵɵlistener("click", function MetricReportModalComponent_Conditional_0_Conditional_53_Template_div_click_3_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.openExpandedChart(); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
57485
|
+
i0.ɵɵelement(4, "symphiq-area-chart", 36);
|
|
57486
|
+
i0.ɵɵelementStart(5, "div", 37);
|
|
57487
|
+
i0.ɵɵnamespaceSVG();
|
|
57488
|
+
i0.ɵɵelementStart(6, "svg", 38);
|
|
57489
|
+
i0.ɵɵelement(7, "path", 39);
|
|
57490
|
+
i0.ɵɵelementEnd()()()();
|
|
57491
|
+
} if (rf & 2) {
|
|
57492
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
57493
|
+
i0.ɵɵadvance();
|
|
57494
|
+
i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
|
|
57495
|
+
i0.ɵɵadvance(3);
|
|
57496
|
+
i0.ɵɵproperty("chart", ctx_r1.trendChartData())("showAxisLabels", false)("viewMode", ctx_r1.viewMode())("currencySymbol", "$")("height", "80px");
|
|
57484
57497
|
i0.ɵɵadvance();
|
|
57485
|
-
i0.ɵɵproperty("
|
|
57498
|
+
i0.ɵɵproperty("ngClass", ctx_r1.expandIconClasses());
|
|
57486
57499
|
} }
|
|
57487
57500
|
function MetricReportModalComponent_Conditional_0_Conditional_64_Template(rf, ctx) { if (rf & 1) {
|
|
57488
|
-
i0.ɵɵelementStart(0, "div",
|
|
57489
|
-
i0.ɵɵelement(1, "symphiq-pacing-status-badge",
|
|
57501
|
+
i0.ɵɵelementStart(0, "div", 25);
|
|
57502
|
+
i0.ɵɵelement(1, "symphiq-pacing-status-badge", 40);
|
|
57490
57503
|
i0.ɵɵelementEnd();
|
|
57491
|
-
i0.ɵɵelementStart(2, "div",
|
|
57504
|
+
i0.ɵɵelementStart(2, "div", 25)(3, "p", 28);
|
|
57492
57505
|
i0.ɵɵtext(4);
|
|
57493
57506
|
i0.ɵɵelementEnd()();
|
|
57494
|
-
i0.ɵɵelement(5, "symphiq-progress-to-target-chart",
|
|
57507
|
+
i0.ɵɵelement(5, "symphiq-progress-to-target-chart", 41);
|
|
57495
57508
|
} if (rf & 2) {
|
|
57496
57509
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
57497
57510
|
i0.ɵɵadvance();
|
|
@@ -57504,64 +57517,64 @@ function MetricReportModalComponent_Conditional_0_Conditional_64_Template(rf, ct
|
|
|
57504
57517
|
i0.ɵɵproperty("data", ctx_r1.progressToTargetData())("viewMode", ctx_r1.viewMode());
|
|
57505
57518
|
} }
|
|
57506
57519
|
function MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
57507
|
-
i0.ɵɵelementStart(0, "button",
|
|
57520
|
+
i0.ɵɵelementStart(0, "button", 10);
|
|
57508
57521
|
i0.ɵɵnamespaceSVG();
|
|
57509
|
-
i0.ɵɵelementStart(1, "svg",
|
|
57522
|
+
i0.ɵɵelementStart(1, "svg", 56);
|
|
57510
57523
|
i0.ɵɵelement(2, "path", 34);
|
|
57511
57524
|
i0.ɵɵelementEnd()();
|
|
57512
57525
|
} if (rf & 2) {
|
|
57513
|
-
const
|
|
57526
|
+
const metric_r4 = i0.ɵɵnextContext().$implicit;
|
|
57514
57527
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
57515
|
-
i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(
|
|
57528
|
+
i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(metric_r4.description, ctx_r1.getMetricTitle(metric_r4)));
|
|
57516
57529
|
} }
|
|
57517
57530
|
function MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
57518
|
-
i0.ɵɵelementStart(0, "tr",
|
|
57531
|
+
i0.ɵɵelementStart(0, "tr", 47)(1, "td", 48)(2, "div", 49)(3, "span", 50);
|
|
57519
57532
|
i0.ɵɵtext(4);
|
|
57520
57533
|
i0.ɵɵelementEnd();
|
|
57521
|
-
i0.ɵɵconditionalCreate(5, MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Conditional_5_Template, 3, 2, "button",
|
|
57534
|
+
i0.ɵɵconditionalCreate(5, MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Conditional_5_Template, 3, 2, "button", 10);
|
|
57522
57535
|
i0.ɵɵelementEnd()();
|
|
57523
|
-
i0.ɵɵelementStart(6, "td",
|
|
57536
|
+
i0.ɵɵelementStart(6, "td", 51)(7, "span", 52);
|
|
57524
57537
|
i0.ɵɵtext(8);
|
|
57525
57538
|
i0.ɵɵelementEnd()();
|
|
57526
|
-
i0.ɵɵelementStart(9, "td",
|
|
57539
|
+
i0.ɵɵelementStart(9, "td", 51)(10, "div", 53)(11, "span", 50);
|
|
57527
57540
|
i0.ɵɵtext(12);
|
|
57528
57541
|
i0.ɵɵelementEnd();
|
|
57529
57542
|
i0.ɵɵnamespaceSVG();
|
|
57530
|
-
i0.ɵɵelementStart(13, "svg",
|
|
57531
|
-
i0.ɵɵelement(14, "path",
|
|
57543
|
+
i0.ɵɵelementStart(13, "svg", 54);
|
|
57544
|
+
i0.ɵɵelement(14, "path", 55);
|
|
57532
57545
|
i0.ɵɵelementEnd()()()();
|
|
57533
57546
|
} if (rf & 2) {
|
|
57534
|
-
const
|
|
57547
|
+
const metric_r4 = ctx.$implicit;
|
|
57535
57548
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
57536
57549
|
i0.ɵɵproperty("ngClass", ctx_r1.tableRowClasses());
|
|
57537
57550
|
i0.ɵɵadvance(4);
|
|
57538
|
-
i0.ɵɵtextInterpolate(ctx_r1.getMetricTitle(
|
|
57551
|
+
i0.ɵɵtextInterpolate(ctx_r1.getMetricTitle(metric_r4));
|
|
57539
57552
|
i0.ɵɵadvance();
|
|
57540
|
-
i0.ɵɵconditional(
|
|
57553
|
+
i0.ɵɵconditional(metric_r4.description ? 5 : -1);
|
|
57541
57554
|
i0.ɵɵadvance(2);
|
|
57542
57555
|
i0.ɵɵproperty("ngClass", ctx_r1.targetValueClasses());
|
|
57543
57556
|
i0.ɵɵadvance();
|
|
57544
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(
|
|
57557
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(metric_r4.targetValue, metric_r4.metric, false), " ");
|
|
57545
57558
|
i0.ɵɵadvance(4);
|
|
57546
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatPercentage(ctx_r1.Math.abs(
|
|
57559
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatPercentage(ctx_r1.Math.abs(metric_r4.percentageIncrease), 1), " ");
|
|
57547
57560
|
i0.ɵɵadvance(2);
|
|
57548
|
-
i0.ɵɵattribute("d",
|
|
57561
|
+
i0.ɵɵattribute("d", metric_r4.percentageIncrease >= 0 ? "M5 10l7-7m0 0l7 7m-7-7v18" : "M19 14l-7 7m0 0l-7-7m7 7V3");
|
|
57549
57562
|
} }
|
|
57550
57563
|
function MetricReportModalComponent_Conditional_0_Conditional_65_Template(rf, ctx) { if (rf & 1) {
|
|
57551
|
-
i0.ɵɵelementStart(0, "div",
|
|
57564
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "h4", 16);
|
|
57552
57565
|
i0.ɵɵtext(2, " Contributing Metric Targets ");
|
|
57553
57566
|
i0.ɵɵelementEnd();
|
|
57554
|
-
i0.ɵɵelementStart(3, "div",
|
|
57567
|
+
i0.ɵɵelementStart(3, "div", 42)(4, "table", 43)(5, "thead")(6, "tr", 44)(7, "th", 45);
|
|
57555
57568
|
i0.ɵɵtext(8, "Metric");
|
|
57556
57569
|
i0.ɵɵelementEnd();
|
|
57557
|
-
i0.ɵɵelementStart(9, "th",
|
|
57570
|
+
i0.ɵɵelementStart(9, "th", 46);
|
|
57558
57571
|
i0.ɵɵtext(10, "Target");
|
|
57559
57572
|
i0.ɵɵelementEnd();
|
|
57560
|
-
i0.ɵɵelementStart(11, "th",
|
|
57573
|
+
i0.ɵɵelementStart(11, "th", 46);
|
|
57561
57574
|
i0.ɵɵtext(12, "Improve by");
|
|
57562
57575
|
i0.ɵɵelementEnd()()();
|
|
57563
57576
|
i0.ɵɵelementStart(13, "tbody");
|
|
57564
|
-
i0.ɵɵrepeaterCreate(14, MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Template, 15, 7, "tr",
|
|
57577
|
+
i0.ɵɵrepeaterCreate(14, MetricReportModalComponent_Conditional_0_Conditional_65_For_15_Template, 15, 7, "tr", 47, _forTrack0$i);
|
|
57565
57578
|
i0.ɵɵelementEnd()()()();
|
|
57566
57579
|
} if (rf & 2) {
|
|
57567
57580
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -57574,19 +57587,19 @@ function MetricReportModalComponent_Conditional_0_Conditional_65_Template(rf, ct
|
|
|
57574
57587
|
i0.ɵɵrepeater(ctx_r1.contributingMetrics());
|
|
57575
57588
|
} }
|
|
57576
57589
|
function MetricReportModalComponent_Conditional_0_Conditional_66_Template(rf, ctx) { if (rf & 1) {
|
|
57577
|
-
i0.ɵɵelementStart(0, "div",
|
|
57590
|
+
i0.ɵɵelementStart(0, "div", 29)(1, "h4", 16);
|
|
57578
57591
|
i0.ɵɵtext(2, " Pace ");
|
|
57579
57592
|
i0.ɵɵelementEnd();
|
|
57580
|
-
i0.ɵɵelementStart(3, "div",
|
|
57581
|
-
i0.ɵɵelement(4, "symphiq-line-chart",
|
|
57593
|
+
i0.ɵɵelementStart(3, "div", 57);
|
|
57594
|
+
i0.ɵɵelement(4, "symphiq-line-chart", 36);
|
|
57582
57595
|
i0.ɵɵelementEnd();
|
|
57583
|
-
i0.ɵɵelementStart(5, "p",
|
|
57596
|
+
i0.ɵɵelementStart(5, "p", 58);
|
|
57584
57597
|
i0.ɵɵtext(6);
|
|
57585
57598
|
i0.ɵɵelementEnd();
|
|
57586
|
-
i0.ɵɵelementStart(7, "p",
|
|
57599
|
+
i0.ɵɵelementStart(7, "p", 59);
|
|
57587
57600
|
i0.ɵɵtext(8);
|
|
57588
57601
|
i0.ɵɵelementEnd();
|
|
57589
|
-
i0.ɵɵelementStart(9, "p",
|
|
57602
|
+
i0.ɵɵelementStart(9, "p", 59);
|
|
57590
57603
|
i0.ɵɵtext(10);
|
|
57591
57604
|
i0.ɵɵelementEnd()();
|
|
57592
57605
|
} if (rf & 2) {
|
|
@@ -57595,7 +57608,7 @@ function MetricReportModalComponent_Conditional_0_Conditional_66_Template(rf, ct
|
|
|
57595
57608
|
i0.ɵɵadvance();
|
|
57596
57609
|
i0.ɵɵproperty("ngClass", ctx_r1.sectionTitleClasses());
|
|
57597
57610
|
i0.ɵɵadvance(3);
|
|
57598
|
-
i0.ɵɵproperty("chart", ctx_r1.pacingChartData())("showAxisLabels", true)("viewMode", ctx_r1.viewMode())("currencySymbol", "$");
|
|
57611
|
+
i0.ɵɵproperty("chart", ctx_r1.pacingChartData())("showAxisLabels", true)("viewMode", ctx_r1.viewMode())("currencySymbol", "$")("height", "250px");
|
|
57599
57612
|
i0.ɵɵadvance();
|
|
57600
57613
|
i0.ɵɵproperty("ngClass", ctx_r1.descriptionClasses());
|
|
57601
57614
|
i0.ɵɵadvance();
|
|
@@ -57609,102 +57622,147 @@ function MetricReportModalComponent_Conditional_0_Conditional_66_Template(rf, ct
|
|
|
57609
57622
|
i0.ɵɵadvance();
|
|
57610
57623
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.chartDescriptionSentence2(), " ");
|
|
57611
57624
|
} }
|
|
57625
|
+
function MetricReportModalComponent_Conditional_0_Conditional_70_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
57626
|
+
i0.ɵɵelement(0, "symphiq-area-chart", 36);
|
|
57627
|
+
} if (rf & 2) {
|
|
57628
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
57629
|
+
i0.ɵɵproperty("chart", ctx_r1.trendChartData())("showAxisLabels", true)("viewMode", ctx_r1.viewMode())("currencySymbol", "$")("height", "400px");
|
|
57630
|
+
} }
|
|
57631
|
+
function MetricReportModalComponent_Conditional_0_Conditional_70_Template(rf, ctx) { if (rf & 1) {
|
|
57632
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
57633
|
+
i0.ɵɵelementStart(0, "div", 60);
|
|
57634
|
+
i0.ɵɵlistener("click", function MetricReportModalComponent_Conditional_0_Conditional_70_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.closeExpandedChart()); });
|
|
57635
|
+
i0.ɵɵelementStart(1, "div", 61);
|
|
57636
|
+
i0.ɵɵelement(2, "div", 2);
|
|
57637
|
+
i0.ɵɵelementStart(3, "div", 62);
|
|
57638
|
+
i0.ɵɵlistener("click", function MetricReportModalComponent_Conditional_0_Conditional_70_Template_div_click_3_listener($event) { i0.ɵɵrestoreView(_r5); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
57639
|
+
i0.ɵɵelementStart(4, "div", 63)(5, "h3", 64);
|
|
57640
|
+
i0.ɵɵtext(6, " Year-over-Year Trend ");
|
|
57641
|
+
i0.ɵɵelementEnd();
|
|
57642
|
+
i0.ɵɵelementStart(7, "button", 65);
|
|
57643
|
+
i0.ɵɵlistener("click", function MetricReportModalComponent_Conditional_0_Conditional_70_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.closeExpandedChart()); });
|
|
57644
|
+
i0.ɵɵnamespaceSVG();
|
|
57645
|
+
i0.ɵɵelementStart(8, "svg", 12);
|
|
57646
|
+
i0.ɵɵelement(9, "path", 13);
|
|
57647
|
+
i0.ɵɵelementEnd()()();
|
|
57648
|
+
i0.ɵɵnamespaceHTML();
|
|
57649
|
+
i0.ɵɵelementStart(10, "div", 66);
|
|
57650
|
+
i0.ɵɵconditionalCreate(11, MetricReportModalComponent_Conditional_0_Conditional_70_Conditional_11_Template, 1, 5, "symphiq-area-chart", 36);
|
|
57651
|
+
i0.ɵɵelementEnd()()()();
|
|
57652
|
+
} if (rf & 2) {
|
|
57653
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
57654
|
+
i0.ɵɵadvance(2);
|
|
57655
|
+
i0.ɵɵproperty("ngClass", ctx_r1.backdropClasses())("@fadeIn", undefined);
|
|
57656
|
+
i0.ɵɵadvance();
|
|
57657
|
+
i0.ɵɵproperty("ngClass", ctx_r1.modalContainerClasses())("@slideUpFade", undefined);
|
|
57658
|
+
i0.ɵɵadvance();
|
|
57659
|
+
i0.ɵɵproperty("ngClass", ctx_r1.headerClasses());
|
|
57660
|
+
i0.ɵɵadvance();
|
|
57661
|
+
i0.ɵɵproperty("ngClass", ctx_r1.titleClasses());
|
|
57662
|
+
i0.ɵɵadvance(2);
|
|
57663
|
+
i0.ɵɵproperty("ngClass", ctx_r1.closeButtonClasses());
|
|
57664
|
+
i0.ɵɵadvance(3);
|
|
57665
|
+
i0.ɵɵproperty("ngClass", ctx_r1.contentClasses());
|
|
57666
|
+
i0.ɵɵadvance();
|
|
57667
|
+
i0.ɵɵconditional(ctx_r1.trendChartData() ? 11 : -1);
|
|
57668
|
+
} }
|
|
57612
57669
|
function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
57613
57670
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
57614
|
-
i0.ɵɵelementStart(0, "div",
|
|
57671
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
57615
57672
|
i0.ɵɵlistener("click", function MetricReportModalComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
|
|
57616
|
-
i0.ɵɵelementStart(1, "div",
|
|
57617
|
-
i0.ɵɵelement(2, "div",
|
|
57618
|
-
i0.ɵɵelementStart(3, "span",
|
|
57673
|
+
i0.ɵɵelementStart(1, "div", 1);
|
|
57674
|
+
i0.ɵɵelement(2, "div", 2);
|
|
57675
|
+
i0.ɵɵelementStart(3, "span", 3);
|
|
57619
57676
|
i0.ɵɵtext(4, "\u200B");
|
|
57620
57677
|
i0.ɵɵelementEnd();
|
|
57621
|
-
i0.ɵɵelementStart(5, "div",
|
|
57678
|
+
i0.ɵɵelementStart(5, "div", 4);
|
|
57622
57679
|
i0.ɵɵlistener("click", function MetricReportModalComponent_Conditional_0_Template_div_click_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
57623
|
-
i0.ɵɵelementStart(6, "div",
|
|
57680
|
+
i0.ɵɵelementStart(6, "div", 5)(7, "div", 6)(8, "div", 7)(9, "div", 8)(10, "h3", 9);
|
|
57624
57681
|
i0.ɵɵtext(11);
|
|
57625
57682
|
i0.ɵɵelementEnd();
|
|
57626
|
-
i0.ɵɵconditionalCreate(12, MetricReportModalComponent_Conditional_0_Conditional_12_Template, 3, 2, "button",
|
|
57683
|
+
i0.ɵɵconditionalCreate(12, MetricReportModalComponent_Conditional_0_Conditional_12_Template, 3, 2, "button", 10);
|
|
57627
57684
|
i0.ɵɵelementEnd()();
|
|
57628
|
-
i0.ɵɵelementStart(13, "button",
|
|
57685
|
+
i0.ɵɵelementStart(13, "button", 11);
|
|
57629
57686
|
i0.ɵɵlistener("click", function MetricReportModalComponent_Conditional_0_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
|
|
57630
57687
|
i0.ɵɵnamespaceSVG();
|
|
57631
|
-
i0.ɵɵelementStart(14, "svg",
|
|
57632
|
-
i0.ɵɵelement(15, "path",
|
|
57688
|
+
i0.ɵɵelementStart(14, "svg", 12);
|
|
57689
|
+
i0.ɵɵelement(15, "path", 13);
|
|
57633
57690
|
i0.ɵɵelementEnd()()()();
|
|
57634
57691
|
i0.ɵɵnamespaceHTML();
|
|
57635
|
-
i0.ɵɵelementStart(16, "div", 15);
|
|
57636
|
-
i0.ɵɵ
|
|
57637
|
-
i0.ɵɵelementStart(18, "div", 16)(19, "h4", 17);
|
|
57638
|
-
i0.ɵɵtext(20, " At a Glance ");
|
|
57692
|
+
i0.ɵɵelementStart(16, "div", 14)(17, "div", 15)(18, "h4", 16);
|
|
57693
|
+
i0.ɵɵtext(19, " At a Glance ");
|
|
57639
57694
|
i0.ɵɵelementEnd();
|
|
57640
|
-
i0.ɵɵelementStart(
|
|
57641
|
-
i0.ɵɵtext(
|
|
57695
|
+
i0.ɵɵelementStart(20, "div", 17)(21, "div")(22, "div", 18)(23, "p", 19);
|
|
57696
|
+
i0.ɵɵtext(24, " Year to date ");
|
|
57642
57697
|
i0.ɵɵelementEnd();
|
|
57643
|
-
i0.ɵɵelementStart(
|
|
57644
|
-
i0.ɵɵtext(
|
|
57698
|
+
i0.ɵɵelementStart(25, "p", 20);
|
|
57699
|
+
i0.ɵɵtext(26);
|
|
57645
57700
|
i0.ɵɵelementEnd();
|
|
57646
|
-
i0.ɵɵelementStart(
|
|
57647
|
-
i0.ɵɵtext(
|
|
57701
|
+
i0.ɵɵelementStart(27, "p", 20);
|
|
57702
|
+
i0.ɵɵtext(28);
|
|
57648
57703
|
i0.ɵɵelementEnd()();
|
|
57649
|
-
i0.ɵɵelementStart(
|
|
57650
|
-
i0.ɵɵtext(
|
|
57704
|
+
i0.ɵɵelementStart(29, "p", 21);
|
|
57705
|
+
i0.ɵɵtext(30);
|
|
57651
57706
|
i0.ɵɵelementEnd();
|
|
57652
|
-
i0.ɵɵconditionalCreate(
|
|
57707
|
+
i0.ɵɵconditionalCreate(31, MetricReportModalComponent_Conditional_0_Conditional_31_Template, 1, 5, "symphiq-target-change-badge", 22);
|
|
57653
57708
|
i0.ɵɵelementEnd();
|
|
57654
|
-
i0.ɵɵelementStart(
|
|
57655
|
-
i0.ɵɵtext(
|
|
57709
|
+
i0.ɵɵelementStart(32, "div")(33, "div", 18)(34, "p", 19);
|
|
57710
|
+
i0.ɵɵtext(35, " Same period last year ");
|
|
57656
57711
|
i0.ɵɵelementEnd();
|
|
57657
|
-
i0.ɵɵelementStart(
|
|
57658
|
-
i0.ɵɵtext(
|
|
57712
|
+
i0.ɵɵelementStart(36, "p", 20);
|
|
57713
|
+
i0.ɵɵtext(37);
|
|
57659
57714
|
i0.ɵɵelementEnd();
|
|
57660
|
-
i0.ɵɵelementStart(
|
|
57661
|
-
i0.ɵɵtext(
|
|
57715
|
+
i0.ɵɵelementStart(38, "p", 20);
|
|
57716
|
+
i0.ɵɵtext(39);
|
|
57662
57717
|
i0.ɵɵelementEnd()();
|
|
57663
|
-
i0.ɵɵelementStart(
|
|
57664
|
-
i0.ɵɵtext(
|
|
57718
|
+
i0.ɵɵelementStart(40, "p", 23);
|
|
57719
|
+
i0.ɵɵtext(41);
|
|
57665
57720
|
i0.ɵɵelementEnd()();
|
|
57666
|
-
i0.ɵɵelementStart(
|
|
57667
|
-
i0.ɵɵtext(
|
|
57721
|
+
i0.ɵɵelementStart(42, "div")(43, "p", 24);
|
|
57722
|
+
i0.ɵɵtext(44);
|
|
57668
57723
|
i0.ɵɵelementEnd();
|
|
57669
|
-
i0.ɵɵelementStart(
|
|
57670
|
-
i0.ɵɵtext(
|
|
57724
|
+
i0.ɵɵelementStart(45, "p", 23);
|
|
57725
|
+
i0.ɵɵtext(46);
|
|
57671
57726
|
i0.ɵɵelementEnd()();
|
|
57672
|
-
i0.ɵɵconditionalCreate(
|
|
57673
|
-
i0.ɵɵelementStart(
|
|
57674
|
-
i0.ɵɵtext(
|
|
57727
|
+
i0.ɵɵconditionalCreate(47, MetricReportModalComponent_Conditional_0_Conditional_47_Template, 5, 4, "div");
|
|
57728
|
+
i0.ɵɵelementStart(48, "div")(49, "p", 24);
|
|
57729
|
+
i0.ɵɵtext(50);
|
|
57675
57730
|
i0.ɵɵelementEnd();
|
|
57676
|
-
i0.ɵɵelementStart(
|
|
57677
|
-
i0.ɵɵtext(
|
|
57678
|
-
i0.ɵɵelementEnd()()
|
|
57679
|
-
i0.ɵɵ
|
|
57731
|
+
i0.ɵɵelementStart(51, "p", 23);
|
|
57732
|
+
i0.ɵɵtext(52);
|
|
57733
|
+
i0.ɵɵelementEnd()();
|
|
57734
|
+
i0.ɵɵconditionalCreate(53, MetricReportModalComponent_Conditional_0_Conditional_53_Template, 8, 7, "div");
|
|
57735
|
+
i0.ɵɵelementEnd()();
|
|
57736
|
+
i0.ɵɵelementStart(54, "div", 15)(55, "h4", 16);
|
|
57680
57737
|
i0.ɵɵtext(56, " Target Analysis ");
|
|
57681
57738
|
i0.ɵɵelementEnd();
|
|
57682
|
-
i0.ɵɵelementStart(57, "div",
|
|
57739
|
+
i0.ɵɵelementStart(57, "div", 25)(58, "p", 26);
|
|
57683
57740
|
i0.ɵɵtext(59, " Your Target ");
|
|
57684
57741
|
i0.ɵɵelementEnd();
|
|
57685
|
-
i0.ɵɵelementStart(60, "p",
|
|
57742
|
+
i0.ɵɵelementStart(60, "p", 27);
|
|
57686
57743
|
i0.ɵɵtext(61);
|
|
57687
57744
|
i0.ɵɵelementEnd();
|
|
57688
|
-
i0.ɵɵelementStart(62, "p",
|
|
57745
|
+
i0.ɵɵelementStart(62, "p", 28);
|
|
57689
57746
|
i0.ɵɵtext(63);
|
|
57690
57747
|
i0.ɵɵelementEnd()();
|
|
57691
57748
|
i0.ɵɵconditionalCreate(64, MetricReportModalComponent_Conditional_0_Conditional_64_Template, 6, 10);
|
|
57692
57749
|
i0.ɵɵelementEnd();
|
|
57693
|
-
i0.ɵɵconditionalCreate(65, MetricReportModalComponent_Conditional_0_Conditional_65_Template, 16, 3, "div",
|
|
57694
|
-
i0.ɵɵconditionalCreate(66, MetricReportModalComponent_Conditional_0_Conditional_66_Template, 11,
|
|
57750
|
+
i0.ɵɵconditionalCreate(65, MetricReportModalComponent_Conditional_0_Conditional_65_Template, 16, 3, "div", 15);
|
|
57751
|
+
i0.ɵɵconditionalCreate(66, MetricReportModalComponent_Conditional_0_Conditional_66_Template, 11, 13, "div", 29);
|
|
57695
57752
|
i0.ɵɵelementEnd();
|
|
57696
|
-
i0.ɵɵelementStart(67, "div",
|
|
57753
|
+
i0.ɵɵelementStart(67, "div", 30)(68, "button", 31);
|
|
57697
57754
|
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()); });
|
|
57698
57755
|
i0.ɵɵtext(69, " Close ");
|
|
57699
57756
|
i0.ɵɵelementEnd()()()()();
|
|
57757
|
+
i0.ɵɵconditionalCreate(70, MetricReportModalComponent_Conditional_0_Conditional_70_Template, 12, 9, "div", 32);
|
|
57700
57758
|
} if (rf & 2) {
|
|
57701
57759
|
let tmp_8_0;
|
|
57702
57760
|
let tmp_19_0;
|
|
57703
57761
|
let tmp_27_0;
|
|
57704
57762
|
let tmp_31_0;
|
|
57705
57763
|
let tmp_36_0;
|
|
57706
|
-
let
|
|
57707
|
-
let
|
|
57764
|
+
let tmp_42_0;
|
|
57765
|
+
let tmp_44_0;
|
|
57708
57766
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
57709
57767
|
i0.ɵɵadvance(2);
|
|
57710
57768
|
i0.ɵɵproperty("ngClass", ctx_r1.backdropClasses())("@fadeIn", undefined);
|
|
@@ -57722,7 +57780,7 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57722
57780
|
i0.ɵɵproperty("ngClass", ctx_r1.closeButtonClasses());
|
|
57723
57781
|
i0.ɵɵadvance(3);
|
|
57724
57782
|
i0.ɵɵproperty("ngClass", ctx_r1.contentClasses());
|
|
57725
|
-
i0.ɵɵadvance(
|
|
57783
|
+
i0.ɵɵadvance();
|
|
57726
57784
|
i0.ɵɵproperty("ngClass", ctx_r1.sectionCardClasses());
|
|
57727
57785
|
i0.ɵɵadvance();
|
|
57728
57786
|
i0.ɵɵproperty("ngClass", ctx_r1.sectionTitleClasses());
|
|
@@ -57741,7 +57799,7 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57741
57799
|
i0.ɵɵadvance();
|
|
57742
57800
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(ctx_r1.ytdValue(), ((tmp_19_0 = ctx_r1.metricData()) == null ? null : tmp_19_0.metric) || ""), " ");
|
|
57743
57801
|
i0.ɵɵadvance();
|
|
57744
|
-
i0.ɵɵconditional(ctx_r1.ytdChangePercentage() !== null ?
|
|
57802
|
+
i0.ɵɵconditional(ctx_r1.ytdChangePercentage() !== null ? 31 : -1);
|
|
57745
57803
|
i0.ɵɵadvance(3);
|
|
57746
57804
|
i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
|
|
57747
57805
|
i0.ɵɵadvance(2);
|
|
@@ -57765,7 +57823,7 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57765
57823
|
i0.ɵɵadvance();
|
|
57766
57824
|
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) || ""), " ");
|
|
57767
57825
|
i0.ɵɵadvance();
|
|
57768
|
-
i0.ɵɵconditional(ctx_r1.pacingInfo() ?
|
|
57826
|
+
i0.ɵɵconditional(ctx_r1.pacingInfo() ? 47 : -1);
|
|
57769
57827
|
i0.ɵɵadvance(2);
|
|
57770
57828
|
i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
|
|
57771
57829
|
i0.ɵɵadvance();
|
|
@@ -57775,6 +57833,8 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57775
57833
|
i0.ɵɵadvance();
|
|
57776
57834
|
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), " ");
|
|
57777
57835
|
i0.ɵɵadvance();
|
|
57836
|
+
i0.ɵɵconditional(ctx_r1.trendChartData() ? 53 : -1);
|
|
57837
|
+
i0.ɵɵadvance();
|
|
57778
57838
|
i0.ɵɵproperty("ngClass", ctx_r1.sectionCardClasses());
|
|
57779
57839
|
i0.ɵɵadvance();
|
|
57780
57840
|
i0.ɵɵproperty("ngClass", ctx_r1.sectionTitleClasses());
|
|
@@ -57783,11 +57843,11 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57783
57843
|
i0.ɵɵadvance(2);
|
|
57784
57844
|
i0.ɵɵproperty("ngClass", ctx_r1.targetValueClasses());
|
|
57785
57845
|
i0.ɵɵadvance();
|
|
57786
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(((
|
|
57846
|
+
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), " ");
|
|
57787
57847
|
i0.ɵɵadvance();
|
|
57788
57848
|
i0.ɵɵproperty("ngClass", ctx_r1.descriptionClasses());
|
|
57789
57849
|
i0.ɵɵadvance();
|
|
57790
|
-
i0.ɵɵtextInterpolate4(" Your target represents a ", ctx_r1.formatPercentage(ctx_r1.Math.abs(((
|
|
57850
|
+
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) || ""), ". ");
|
|
57791
57851
|
i0.ɵɵadvance();
|
|
57792
57852
|
i0.ɵɵconditional(ctx_r1.pacingInfo() ? 64 : -1);
|
|
57793
57853
|
i0.ɵɵadvance();
|
|
@@ -57798,6 +57858,8 @@ function MetricReportModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1
|
|
|
57798
57858
|
i0.ɵɵproperty("ngClass", ctx_r1.footerClasses());
|
|
57799
57859
|
i0.ɵɵadvance();
|
|
57800
57860
|
i0.ɵɵproperty("ngClass", ctx_r1.closeFooterButtonClasses());
|
|
57861
|
+
i0.ɵɵadvance(2);
|
|
57862
|
+
i0.ɵɵconditional(ctx_r1.isExpandedChartOpen() ? 70 : -1);
|
|
57801
57863
|
} }
|
|
57802
57864
|
class MetricReportModalComponent {
|
|
57803
57865
|
constructor() {
|
|
@@ -57806,9 +57868,11 @@ class MetricReportModalComponent {
|
|
|
57806
57868
|
this.metricData = input(undefined, ...(ngDevMode ? [{ debugName: "metricData" }] : []));
|
|
57807
57869
|
this.contributingMetrics = input([], ...(ngDevMode ? [{ debugName: "contributingMetrics" }] : []));
|
|
57808
57870
|
this.pacingMetrics = input(undefined, ...(ngDevMode ? [{ debugName: "pacingMetrics" }] : []));
|
|
57871
|
+
this.trendChartData = input(null, ...(ngDevMode ? [{ debugName: "trendChartData" }] : []));
|
|
57809
57872
|
this.isOpen = input(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
|
|
57810
57873
|
this.closed = output();
|
|
57811
57874
|
this.showDefinition = signal(false, ...(ngDevMode ? [{ debugName: "showDefinition" }] : []));
|
|
57875
|
+
this.isExpandedChartOpen = signal(false, ...(ngDevMode ? [{ debugName: "isExpandedChartOpen" }] : []));
|
|
57812
57876
|
this.Math = Math;
|
|
57813
57877
|
this.currentYear = computed(() => new Date().getFullYear(), ...(ngDevMode ? [{ debugName: "currentYear" }] : []));
|
|
57814
57878
|
this.priorYear = computed(() => new Date().getFullYear() - 1, ...(ngDevMode ? [{ debugName: "priorYear" }] : []));
|
|
@@ -57963,7 +58027,7 @@ class MetricReportModalComponent {
|
|
|
57963
58027
|
const metric = this.metricTitle();
|
|
57964
58028
|
const currentYear = this.currentYear();
|
|
57965
58029
|
const priorYear = this.priorYear();
|
|
57966
|
-
return `This chart shows the ${metric} performance trend for ${currentYear} (solid yellow line, this month includes projections), compared to ${priorYear} (dashed green line), with the target projection (dotted blue line) for the remainder of the year.`;
|
|
58030
|
+
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.`;
|
|
57967
58031
|
}, ...(ngDevMode ? [{ debugName: "chartLegendDescription" }] : []));
|
|
57968
58032
|
this.chartDescriptionSentence1 = computed(() => {
|
|
57969
58033
|
const metricData = this.metricData();
|
|
@@ -57998,7 +58062,7 @@ class MetricReportModalComponent {
|
|
|
57998
58062
|
lineChartData: {
|
|
57999
58063
|
series: [
|
|
58000
58064
|
{
|
|
58001
|
-
name: '
|
|
58065
|
+
name: '2026 Projected',
|
|
58002
58066
|
data: projectionData
|
|
58003
58067
|
},
|
|
58004
58068
|
{
|
|
@@ -58014,6 +58078,11 @@ class MetricReportModalComponent {
|
|
|
58014
58078
|
};
|
|
58015
58079
|
}, ...(ngDevMode ? [{ debugName: "pacingChartData" }] : []));
|
|
58016
58080
|
}
|
|
58081
|
+
onEscapeKey() {
|
|
58082
|
+
if (this.isExpandedChartOpen()) {
|
|
58083
|
+
this.closeExpandedChart();
|
|
58084
|
+
}
|
|
58085
|
+
}
|
|
58017
58086
|
formatDateForChart(year, month, day) {
|
|
58018
58087
|
const m = String(month + 1).padStart(2, '0');
|
|
58019
58088
|
const d = String(day).padStart(2, '0');
|
|
@@ -58105,6 +58174,12 @@ class MetricReportModalComponent {
|
|
|
58105
58174
|
close() {
|
|
58106
58175
|
this.closed.emit();
|
|
58107
58176
|
}
|
|
58177
|
+
openExpandedChart() {
|
|
58178
|
+
this.isExpandedChartOpen.set(true);
|
|
58179
|
+
}
|
|
58180
|
+
closeExpandedChart() {
|
|
58181
|
+
this.isExpandedChartOpen.set(false);
|
|
58182
|
+
}
|
|
58108
58183
|
isLightMode() {
|
|
58109
58184
|
return this.viewMode() === ViewModeEnum.LIGHT;
|
|
58110
58185
|
}
|
|
@@ -58209,6 +58284,11 @@ class MetricReportModalComponent {
|
|
|
58209
58284
|
? 'bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-700'
|
|
58210
58285
|
: 'bg-slate-700/50 text-slate-400 hover:bg-slate-600/50 hover:text-slate-300';
|
|
58211
58286
|
}
|
|
58287
|
+
expandIconClasses() {
|
|
58288
|
+
return this.isLightMode()
|
|
58289
|
+
? 'bg-white/90 text-slate-600 hover:bg-white hover:text-slate-800 shadow-sm'
|
|
58290
|
+
: 'bg-slate-700/90 text-slate-300 hover:bg-slate-600 hover:text-white shadow-sm';
|
|
58291
|
+
}
|
|
58212
58292
|
footerClasses() {
|
|
58213
58293
|
return this.isLightMode()
|
|
58214
58294
|
? 'bg-slate-50 border-slate-200'
|
|
@@ -58220,15 +58300,17 @@ class MetricReportModalComponent {
|
|
|
58220
58300
|
: 'bg-slate-700 hover:bg-slate-600 text-white';
|
|
58221
58301
|
}
|
|
58222
58302
|
static { this.ɵfac = function MetricReportModalComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MetricReportModalComponent)(); }; }
|
|
58223
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MetricReportModalComponent, selectors: [["symphiq-metric-report-modal"]],
|
|
58224
|
-
i0.ɵɵ
|
|
58303
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MetricReportModalComponent, selectors: [["symphiq-metric-report-modal"]], hostBindings: function MetricReportModalComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
58304
|
+
i0.ɵɵlistener("keydown.escape", function MetricReportModalComponent_keydown_escape_HostBindingHandler() { return ctx.onEscapeKey(); }, i0.ɵɵresolveDocument);
|
|
58305
|
+
} }, 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", 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", "mb-0", 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-xl", "font-bold", 3, "ngClass"], [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"], [1, "fixed", "inset-0", "overflow-y-auto", "z-[60]"], ["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"], [1, "relative", "cursor-pointer", "group", 3, "click"], [3, "chart", "showAxisLabels", "viewMode", "currencySymbol", "height"], [1, "absolute", "top-1", "right-1", "p-1", "rounded", "opacity-0", "group-hover:opacity-100", "transition-opacity", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"], [3, "viewMode", "pacingPercentage", "status", "showAsFullText", "isCompact", "showEmphasizedPercentage"], [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"], [1, "fixed", "inset-0", "overflow-y-auto", "z-[60]", 3, "click"], [1, "flex", "items-center", "justify-center", "min-h-screen", "p-4"], [1, "relative", "inline-block", "rounded-2xl", "text-left", "overflow-hidden", "shadow-xl", "w-full", "max-w-6xl", "border", "backdrop-blur-xl", 3, "click", "ngClass"], [1, "px-6", "py-4", "border-b", "backdrop-blur-sm", "flex", "items-center", "justify-between", 3, "ngClass"], [1, "text-lg", "font-bold", 3, "ngClass"], [1, "transition-all", "rounded-lg", "p-1", "hover:scale-110", "active:scale-90", 3, "click", "ngClass"], [1, "p-6", "backdrop-blur-sm", 3, "ngClass"]], template: function MetricReportModalComponent_Template(rf, ctx) { if (rf & 1) {
|
|
58306
|
+
i0.ɵɵconditionalCreate(0, MetricReportModalComponent_Conditional_0_Template, 71, 53);
|
|
58225
58307
|
} if (rf & 2) {
|
|
58226
58308
|
i0.ɵɵconditional(ctx.isOpen() ? 0 : -1);
|
|
58227
58309
|
} }, dependencies: [CommonModule, i1$1.NgClass, PacingStatusBadgeComponent,
|
|
58228
58310
|
TargetChangeBadgeComponent,
|
|
58229
58311
|
TooltipDirective,
|
|
58230
|
-
TooltipContainerComponent,
|
|
58231
58312
|
LineChartComponent,
|
|
58313
|
+
AreaChartComponent,
|
|
58232
58314
|
ProgressToTargetChartComponent], encapsulation: 2, data: { animation: [
|
|
58233
58315
|
trigger('fadeIn', [
|
|
58234
58316
|
transition(':enter', [
|
|
@@ -58254,8 +58336,8 @@ class MetricReportModalComponent {
|
|
|
58254
58336
|
PacingStatusBadgeComponent,
|
|
58255
58337
|
TargetChangeBadgeComponent,
|
|
58256
58338
|
TooltipDirective,
|
|
58257
|
-
TooltipContainerComponent,
|
|
58258
58339
|
LineChartComponent,
|
|
58340
|
+
AreaChartComponent,
|
|
58259
58341
|
ProgressToTargetChartComponent
|
|
58260
58342
|
],
|
|
58261
58343
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
@@ -58273,327 +58355,397 @@ class MetricReportModalComponent {
|
|
|
58273
58355
|
])
|
|
58274
58356
|
])
|
|
58275
58357
|
],
|
|
58276
|
-
template: `
|
|
58277
|
-
@if (isOpen()) {
|
|
58278
|
-
<div class="fixed inset-0 overflow-y-auto z-50" (click)="close()">
|
|
58279
|
-
<div class="flex items-center justify-center min-h-screen px-4 pt-4 pb-20 text-center sm:block sm:p-0">
|
|
58280
|
-
<div
|
|
58281
|
-
[ngClass]="backdropClasses()"
|
|
58282
|
-
class="fixed inset-0 backdrop-blur-md"
|
|
58283
|
-
aria-hidden="true"
|
|
58284
|
-
@fadeIn>
|
|
58285
|
-
</div>
|
|
58286
|
-
|
|
58287
|
-
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">​</span>
|
|
58288
|
-
|
|
58289
|
-
<div
|
|
58290
|
-
(click)="$event.stopPropagation()"
|
|
58291
|
-
[ngClass]="modalContainerClasses()"
|
|
58292
|
-
class="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"
|
|
58293
|
-
@slideUpFade>
|
|
58294
|
-
|
|
58295
|
-
<!-- Header -->
|
|
58296
|
-
<div [ngClass]="headerClasses()" class="px-6 py-5 border-b backdrop-blur-sm sticky top-0 z-10">
|
|
58297
|
-
<div class="flex items-start justify-between">
|
|
58298
|
-
<div class="flex-1">
|
|
58299
|
-
<div class="flex items-center gap-3 mb-2">
|
|
58300
|
-
<h3 [ngClass]="titleClasses()" class="text-xl font-bold leading-none">
|
|
58301
|
-
{{ metricTitle() }}
|
|
58302
|
-
</h3>
|
|
58303
|
-
@if (metricData()?.description) {
|
|
58304
|
-
<button
|
|
58305
|
-
type="button"
|
|
58306
|
-
[ngClass]="headerInfoIconClasses()"
|
|
58307
|
-
class="flex-shrink-0 w-7 h-7 rounded-full inline-flex items-center justify-center transition-colors"
|
|
58308
|
-
[libSymphiqTooltip]="getMarkdownTooltipContent(metricData()!.description!, metricTitle())"
|
|
58309
|
-
tooltipType="markdown"
|
|
58310
|
-
tooltipPosition="right">
|
|
58311
|
-
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
58312
|
-
<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" />
|
|
58313
|
-
</svg>
|
|
58314
|
-
</button>
|
|
58315
|
-
}
|
|
58316
|
-
</div>
|
|
58317
|
-
</div>
|
|
58318
|
-
<button
|
|
58319
|
-
(click)="close()"
|
|
58320
|
-
[ngClass]="closeButtonClasses()"
|
|
58321
|
-
class="ml-4 transition-all rounded-lg p-1 hover:scale-110 active:scale-90">
|
|
58322
|
-
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
58323
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
|
|
58324
|
-
</svg>
|
|
58325
|
-
</button>
|
|
58326
|
-
</div>
|
|
58327
|
-
</div>
|
|
58328
|
-
|
|
58329
|
-
<!-- Content -->
|
|
58330
|
-
<div [ngClass]="contentClasses()" class="px-6 py-6 max-h-[70vh] overflow-y-auto backdrop-blur-sm">
|
|
58331
|
-
<symphiq-tooltip-container />
|
|
58332
|
-
|
|
58333
|
-
<!-- At a Glance Summary -->
|
|
58334
|
-
<div [ngClass]="sectionCardClasses()" class="rounded-xl p-6 mb-6">
|
|
58335
|
-
<h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold uppercase tracking-wider mb-4">
|
|
58336
|
-
At a Glance
|
|
58337
|
-
</h4>
|
|
58338
|
-
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
58339
|
-
<!-- YTD Value -->
|
|
58340
|
-
<div>
|
|
58341
|
-
<div class="mb-1.5">
|
|
58342
|
-
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
58343
|
-
Year to date
|
|
58344
|
-
</p>
|
|
58345
|
-
<p [ngClass]="dateLabelClasses()" class="text-xs">
|
|
58346
|
-
{{ ytdStartDate() }}
|
|
58347
|
-
</p>
|
|
58348
|
-
<p [ngClass]="dateLabelClasses()" class="text-xs">
|
|
58349
|
-
{{ ytdEndDate() }}
|
|
58350
|
-
</p>
|
|
58351
|
-
</div>
|
|
58352
|
-
<p [ngClass]="valueClasses()" class="text-xl font-bold mb-2">
|
|
58353
|
-
{{ formatMetricValue(ytdValue(), metricData()?.metric || '') }}
|
|
58354
|
-
</p>
|
|
58355
|
-
@if (ytdChangePercentage() !== null) {
|
|
58356
|
-
<symphiq-target-change-badge
|
|
58357
|
-
[viewMode]="viewMode()"
|
|
58358
|
-
[percentageChange]="ytdChangePercentage()!"
|
|
58359
|
-
[metric]="metricData()?.metric || ''"
|
|
58360
|
-
[priorYear]="priorYear()"
|
|
58361
|
-
[isCompact]="true"
|
|
58362
|
-
/>
|
|
58363
|
-
}
|
|
58364
|
-
</div>
|
|
58365
|
-
|
|
58366
|
-
<!-- Same Period Last Year -->
|
|
58367
|
-
<div>
|
|
58368
|
-
<div class="mb-1.5">
|
|
58369
|
-
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
58370
|
-
Same period last year
|
|
58371
|
-
</p>
|
|
58372
|
-
<p [ngClass]="dateLabelClasses()" class="text-xs">
|
|
58373
|
-
{{ priorYearStartDate() }}
|
|
58374
|
-
</p>
|
|
58375
|
-
<p [ngClass]="dateLabelClasses()" class="text-xs">
|
|
58376
|
-
{{ priorYearEndDate() }}
|
|
58377
|
-
</p>
|
|
58378
|
-
</div>
|
|
58379
|
-
<p [ngClass]="valueClasses()" class="text-xl font-bold">
|
|
58380
|
-
{{ formatMetricValue(samePeriodLastYearValue(), metricData()?.metric || '') }}
|
|
58381
|
-
</p>
|
|
58382
|
-
</div>
|
|
58383
|
-
|
|
58384
|
-
<!-- Full Last Year -->
|
|
58385
|
-
<div>
|
|
58386
|
-
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
|
|
58387
|
-
Full {{ priorYear() }} Actual
|
|
58388
|
-
</p>
|
|
58389
|
-
<p [ngClass]="valueClasses()" class="text-xl font-bold">
|
|
58390
|
-
{{ formatMetricValue(metricData()?.currentValue || 0, metricData()?.metric || '') }}
|
|
58391
|
-
</p>
|
|
58392
|
-
</div>
|
|
58393
|
-
|
|
58394
|
-
<!-- Current Pace -->
|
|
58395
|
-
@if (pacingInfo()) {
|
|
58396
|
-
<div>
|
|
58397
|
-
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
|
|
58398
|
-
Pace for {{ currentYear() }}
|
|
58399
|
-
</p>
|
|
58400
|
-
<p [ngClass]="projectedValueClasses()" class="text-xl font-bold mb-2">
|
|
58401
|
-
{{ formatMetricValue(pacingInfo()!.projectedValue, metricData()?.metric || '', false) }}
|
|
58402
|
-
</p>
|
|
58403
|
-
<symphiq-pacing-status-badge
|
|
58404
|
-
[viewMode]="viewMode()"
|
|
58405
|
-
[pacingPercentage]="pacingInfo()!.pacingPercentage"
|
|
58406
|
-
[status]="pacingInfo()!.status"
|
|
58407
|
-
[showAsFullText]="false"
|
|
58408
|
-
[isCompact]="true"
|
|
58409
|
-
[showEmphasizedPercentage]="true"
|
|
58410
|
-
/>
|
|
58411
|
-
</div>
|
|
58412
|
-
}
|
|
58413
|
-
|
|
58414
|
-
<!-- Current Target -->
|
|
58415
|
-
<div>
|
|
58416
|
-
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
|
|
58417
|
-
{{ currentYear() }} Target
|
|
58418
|
-
</p>
|
|
58419
|
-
<p [ngClass]="targetValueClasses()" class="text-xl font-bold">
|
|
58420
|
-
{{ formatMetricValue(metricData()?.targetValue || 0, metricData()?.metric || '', false) }}
|
|
58421
|
-
</p>
|
|
58422
|
-
</div>
|
|
58423
|
-
</div>
|
|
58424
|
-
</div>
|
|
58425
|
-
|
|
58426
|
-
<!-- Target Analysis -->
|
|
58427
|
-
<div [ngClass]="sectionCardClasses()" class="rounded-xl p-6 mb-6">
|
|
58428
|
-
<h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold uppercase tracking-wider mb-4">
|
|
58429
|
-
Target Analysis
|
|
58430
|
-
</h4>
|
|
58431
|
-
|
|
58432
|
-
<div class="mb-4">
|
|
58433
|
-
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
|
|
58434
|
-
Your Target
|
|
58435
|
-
</p>
|
|
58436
|
-
<p [ngClass]="targetValueClasses()" class="text-3xl font-extrabold mb-3">
|
|
58437
|
-
{{ formatMetricValue(metricData()?.targetValue || 0, metricData()?.metric || '', false) }}
|
|
58438
|
-
</p>
|
|
58439
|
-
<p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed">
|
|
58440
|
-
Your target represents a {{ formatPercentage(Math.abs(metricData()?.percentageIncrease || 0), 1) }}
|
|
58441
|
-
{{ (metricData()?.percentageIncrease || 0) >= 0 ? 'increase' : 'decrease' }}
|
|
58442
|
-
from your {{ priorYear() }} actual of
|
|
58443
|
-
{{ formatMetricValue(metricData()?.currentValue || 0, metricData()?.metric || '') }}.
|
|
58444
|
-
</p>
|
|
58445
|
-
</div>
|
|
58446
|
-
|
|
58447
|
-
@if (pacingInfo()) {
|
|
58448
|
-
<div class="mb-4">
|
|
58449
|
-
<symphiq-pacing-status-badge
|
|
58450
|
-
[viewMode]="viewMode()"
|
|
58451
|
-
[pacingPercentage]="pacingInfo()!.pacingPercentage"
|
|
58452
|
-
[status]="pacingInfo()!.status"
|
|
58453
|
-
[showAsFullText]="true"
|
|
58454
|
-
[isCompact]="false"
|
|
58455
|
-
[showEmphasizedPercentage]="true"
|
|
58456
|
-
/>
|
|
58457
|
-
</div>
|
|
58458
|
-
|
|
58459
|
-
<div class="mb-4">
|
|
58460
|
-
<p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed">
|
|
58461
|
-
{{ gapAnalysisText() }}
|
|
58462
|
-
</p>
|
|
58463
|
-
</div>
|
|
58464
|
-
|
|
58465
|
-
<!-- Progress to Target Chart -->
|
|
58466
|
-
<symphiq-progress-to-target-chart
|
|
58467
|
-
[data]="progressToTargetData()"
|
|
58468
|
-
[viewMode]="viewMode()"
|
|
58469
|
-
/>
|
|
58470
|
-
}
|
|
58471
|
-
</div>
|
|
58472
|
-
|
|
58473
|
-
<!-- Contributing Metrics Table (only for funnel stage metrics) -->
|
|
58474
|
-
@if (contributingMetrics().length > 0) {
|
|
58475
|
-
<div [ngClass]="sectionCardClasses()" class="rounded-xl p-6 mb-6">
|
|
58476
|
-
<h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold uppercase tracking-wider mb-4">
|
|
58477
|
-
Contributing Metric Targets
|
|
58478
|
-
</h4>
|
|
58479
|
-
<div class="overflow-x-auto">
|
|
58480
|
-
<table class="w-full">
|
|
58481
|
-
<thead>
|
|
58482
|
-
<tr [ngClass]="tableHeaderClasses()" class="border-b">
|
|
58483
|
-
<th class="text-left py-3 px-4 text-xs font-semibold uppercase tracking-wider">Metric</th>
|
|
58484
|
-
<th class="text-right py-3 px-4 text-xs font-semibold uppercase tracking-wider">Target</th>
|
|
58485
|
-
<th class="text-right py-3 px-4 text-xs font-semibold uppercase tracking-wider">Improve by</th>
|
|
58486
|
-
</tr>
|
|
58487
|
-
</thead>
|
|
58488
|
-
<tbody>
|
|
58489
|
-
@for (metric of contributingMetrics(); track metric.metric) {
|
|
58490
|
-
<tr [ngClass]="tableRowClasses()" class="border-b transition-colors">
|
|
58491
|
-
<td class="py-3 px-4">
|
|
58492
|
-
<div class="flex items-center gap-2">
|
|
58493
|
-
<span class="text-sm font-medium">{{ getMetricTitle(metric) }}</span>
|
|
58494
|
-
@if (metric.description) {
|
|
58495
|
-
<button
|
|
58496
|
-
type="button"
|
|
58497
|
-
[ngClass]="infoIconClasses()"
|
|
58498
|
-
class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
|
|
58499
|
-
[libSymphiqTooltip]="getMarkdownTooltipContent(metric.description, getMetricTitle(metric))"
|
|
58500
|
-
tooltipType="markdown"
|
|
58501
|
-
tooltipPosition="right">
|
|
58502
|
-
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
58503
|
-
<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" />
|
|
58504
|
-
</svg>
|
|
58505
|
-
</button>
|
|
58506
|
-
}
|
|
58507
|
-
</div>
|
|
58508
|
-
</td>
|
|
58509
|
-
<td class="py-3 px-4 text-right">
|
|
58510
|
-
<span [ngClass]="targetValueClasses()" class="text-sm font-semibold">
|
|
58511
|
-
{{ formatMetricValue(metric.targetValue, metric.metric, false) }}
|
|
58512
|
-
</span>
|
|
58513
|
-
</td>
|
|
58514
|
-
<td class="py-3 px-4 text-right">
|
|
58515
|
-
<div class="flex items-center justify-end gap-2">
|
|
58516
|
-
<span class="text-sm font-medium">
|
|
58517
|
-
{{ formatPercentage(Math.abs(metric.percentageIncrease), 1) }}
|
|
58518
|
-
</span>
|
|
58519
|
-
<svg
|
|
58520
|
-
class="w-4 h-4 text-emerald-500"
|
|
58521
|
-
fill="none"
|
|
58522
|
-
stroke="currentColor"
|
|
58523
|
-
viewBox="0 0 24 24">
|
|
58524
|
-
<path
|
|
58525
|
-
stroke-linecap="round"
|
|
58526
|
-
stroke-linejoin="round"
|
|
58527
|
-
stroke-width="2"
|
|
58528
|
-
[attr.d]="metric.percentageIncrease >= 0 ? 'M5 10l7-7m0 0l7 7m-7-7v18' : 'M19 14l-7 7m0 0l-7-7m7 7V3'" />
|
|
58529
|
-
</svg>
|
|
58530
|
-
</div>
|
|
58531
|
-
</td>
|
|
58532
|
-
</tr>
|
|
58533
|
-
}
|
|
58534
|
-
</tbody>
|
|
58535
|
-
</table>
|
|
58536
|
-
</div>
|
|
58537
|
-
</div>
|
|
58538
|
-
}
|
|
58539
|
-
|
|
58540
|
-
<!-- Pacing Chart -->
|
|
58541
|
-
@if (pacingChartData()) {
|
|
58542
|
-
<div [ngClass]="sectionCardClasses()" class="rounded-xl p-6">
|
|
58543
|
-
<h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold uppercase tracking-wider mb-4">
|
|
58544
|
-
Pace
|
|
58545
|
-
</h4>
|
|
58546
|
-
<div class="min-h-[400px]">
|
|
58547
|
-
<symphiq-line-chart
|
|
58548
|
-
[chart]="pacingChartData()!"
|
|
58549
|
-
[showAxisLabels]="true"
|
|
58550
|
-
[viewMode]="viewMode()"
|
|
58551
|
-
[currencySymbol]="'$'"
|
|
58552
|
-
/>
|
|
58553
|
-
</div>
|
|
58554
|
-
<p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed mt-4">
|
|
58555
|
-
{{ chartLegendDescription() }}
|
|
58556
|
-
</p>
|
|
58557
|
-
<p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed mt-2">
|
|
58558
|
-
{{ chartDescriptionSentence1() }}
|
|
58559
|
-
</p>
|
|
58560
|
-
<p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed mt-2">
|
|
58561
|
-
{{ chartDescriptionSentence2() }}
|
|
58562
|
-
</p>
|
|
58563
|
-
</div>
|
|
58564
|
-
}
|
|
58565
|
-
</div>
|
|
58566
|
-
|
|
58567
|
-
<!-- Footer -->
|
|
58568
|
-
<div [ngClass]="footerClasses()" class="px-6 py-4 border-t">
|
|
58569
|
-
<button
|
|
58570
|
-
(click)="close()"
|
|
58571
|
-
[ngClass]="closeFooterButtonClasses()"
|
|
58572
|
-
class="w-full px-4 py-2 rounded-lg transition-all font-medium hover:scale-[1.02] active:scale-[0.98]">
|
|
58573
|
-
Close
|
|
58574
|
-
</button>
|
|
58575
|
-
</div>
|
|
58576
|
-
</div>
|
|
58577
|
-
</div>
|
|
58578
|
-
</div>
|
|
58579
|
-
}
|
|
58580
|
-
`
|
|
58581
|
-
}]
|
|
58582
|
-
}], 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"] }] }); })();
|
|
58583
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MetricReportModalComponent, { className: "MetricReportModalComponent", filePath: "lib/components/revenue-calculator-dashboard/metric-report-modal.component.ts", lineNumber: 349 }); })();
|
|
58358
|
+
template: `
|
|
58359
|
+
@if (isOpen()) {
|
|
58360
|
+
<div class="fixed inset-0 overflow-y-auto z-50" (click)="close()">
|
|
58361
|
+
<div class="flex items-center justify-center min-h-screen px-4 pt-4 pb-20 text-center sm:block sm:p-0">
|
|
58362
|
+
<div
|
|
58363
|
+
[ngClass]="backdropClasses()"
|
|
58364
|
+
class="fixed inset-0 backdrop-blur-md"
|
|
58365
|
+
aria-hidden="true"
|
|
58366
|
+
@fadeIn>
|
|
58367
|
+
</div>
|
|
58584
58368
|
|
|
58585
|
-
|
|
58586
|
-
|
|
58587
|
-
|
|
58588
|
-
|
|
58589
|
-
|
|
58590
|
-
|
|
58591
|
-
|
|
58592
|
-
|
|
58593
|
-
|
|
58594
|
-
|
|
58595
|
-
|
|
58596
|
-
|
|
58369
|
+
<span class="hidden sm:inline-block sm:align-middle sm:h-screen" aria-hidden="true">​</span>
|
|
58370
|
+
|
|
58371
|
+
<div
|
|
58372
|
+
(click)="$event.stopPropagation()"
|
|
58373
|
+
[ngClass]="modalContainerClasses()"
|
|
58374
|
+
class="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"
|
|
58375
|
+
@slideUpFade>
|
|
58376
|
+
|
|
58377
|
+
<!-- Header -->
|
|
58378
|
+
<div [ngClass]="headerClasses()" class="px-6 py-5 border-b backdrop-blur-sm sticky top-0 z-10">
|
|
58379
|
+
<div class="flex items-start justify-between">
|
|
58380
|
+
<div class="flex-1">
|
|
58381
|
+
<div class="flex items-center gap-2 mb-2">
|
|
58382
|
+
<h3 [ngClass]="titleClasses()" class="text-xl font-bold mb-0">
|
|
58383
|
+
{{ metricTitle() }}
|
|
58384
|
+
</h3>
|
|
58385
|
+
@if (metricData()?.description) {
|
|
58386
|
+
<button
|
|
58387
|
+
type="button"
|
|
58388
|
+
[ngClass]="headerInfoIconClasses()"
|
|
58389
|
+
class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
|
|
58390
|
+
[libSymphiqTooltip]="getMarkdownTooltipContent(metricData()!.description!, metricTitle())"
|
|
58391
|
+
tooltipType="markdown"
|
|
58392
|
+
tooltipPosition="right">
|
|
58393
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
58394
|
+
<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" />
|
|
58395
|
+
</svg>
|
|
58396
|
+
</button>
|
|
58397
|
+
}
|
|
58398
|
+
</div>
|
|
58399
|
+
</div>
|
|
58400
|
+
<button
|
|
58401
|
+
(click)="close()"
|
|
58402
|
+
[ngClass]="closeButtonClasses()"
|
|
58403
|
+
class="ml-4 transition-all rounded-lg p-1 hover:scale-110 active:scale-90">
|
|
58404
|
+
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
58405
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
|
|
58406
|
+
</svg>
|
|
58407
|
+
</button>
|
|
58408
|
+
</div>
|
|
58409
|
+
</div>
|
|
58410
|
+
|
|
58411
|
+
<!-- Content -->
|
|
58412
|
+
<div [ngClass]="contentClasses()" class="px-6 py-6 max-h-[70vh] overflow-y-auto backdrop-blur-sm">
|
|
58413
|
+
<!-- At a Glance Summary -->
|
|
58414
|
+
<div [ngClass]="sectionCardClasses()" class="rounded-xl p-6 mb-6">
|
|
58415
|
+
<h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold uppercase tracking-wider mb-4">
|
|
58416
|
+
At a Glance
|
|
58417
|
+
</h4>
|
|
58418
|
+
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
58419
|
+
<!-- YTD Value -->
|
|
58420
|
+
<div>
|
|
58421
|
+
<div class="mb-1.5">
|
|
58422
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
58423
|
+
Year to date
|
|
58424
|
+
</p>
|
|
58425
|
+
<p [ngClass]="dateLabelClasses()" class="text-xs">
|
|
58426
|
+
{{ ytdStartDate() }}
|
|
58427
|
+
</p>
|
|
58428
|
+
<p [ngClass]="dateLabelClasses()" class="text-xs">
|
|
58429
|
+
{{ ytdEndDate() }}
|
|
58430
|
+
</p>
|
|
58431
|
+
</div>
|
|
58432
|
+
<p [ngClass]="valueClasses()" class="text-xl font-bold mb-2">
|
|
58433
|
+
{{ formatMetricValue(ytdValue(), metricData()?.metric || '') }}
|
|
58434
|
+
</p>
|
|
58435
|
+
@if (ytdChangePercentage() !== null) {
|
|
58436
|
+
<symphiq-target-change-badge
|
|
58437
|
+
[viewMode]="viewMode()"
|
|
58438
|
+
[percentageChange]="ytdChangePercentage()!"
|
|
58439
|
+
[metric]="metricData()?.metric || ''"
|
|
58440
|
+
[priorYear]="priorYear()"
|
|
58441
|
+
[isCompact]="true"
|
|
58442
|
+
/>
|
|
58443
|
+
}
|
|
58444
|
+
</div>
|
|
58445
|
+
|
|
58446
|
+
<!-- Same Period Last Year -->
|
|
58447
|
+
<div>
|
|
58448
|
+
<div class="mb-1.5">
|
|
58449
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
58450
|
+
Same period last year
|
|
58451
|
+
</p>
|
|
58452
|
+
<p [ngClass]="dateLabelClasses()" class="text-xs">
|
|
58453
|
+
{{ priorYearStartDate() }}
|
|
58454
|
+
</p>
|
|
58455
|
+
<p [ngClass]="dateLabelClasses()" class="text-xs">
|
|
58456
|
+
{{ priorYearEndDate() }}
|
|
58457
|
+
</p>
|
|
58458
|
+
</div>
|
|
58459
|
+
<p [ngClass]="valueClasses()" class="text-xl font-bold">
|
|
58460
|
+
{{ formatMetricValue(samePeriodLastYearValue(), metricData()?.metric || '') }}
|
|
58461
|
+
</p>
|
|
58462
|
+
</div>
|
|
58463
|
+
|
|
58464
|
+
<!-- Full Last Year -->
|
|
58465
|
+
<div>
|
|
58466
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
|
|
58467
|
+
Full {{ priorYear() }} Actual
|
|
58468
|
+
</p>
|
|
58469
|
+
<p [ngClass]="valueClasses()" class="text-xl font-bold">
|
|
58470
|
+
{{ formatMetricValue(metricData()?.currentValue || 0, metricData()?.metric || '') }}
|
|
58471
|
+
</p>
|
|
58472
|
+
</div>
|
|
58473
|
+
|
|
58474
|
+
<!-- Current Pace -->
|
|
58475
|
+
@if (pacingInfo()) {
|
|
58476
|
+
<div>
|
|
58477
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
|
|
58478
|
+
Pace for {{ currentYear() }}
|
|
58479
|
+
</p>
|
|
58480
|
+
<p [ngClass]="projectedValueClasses()" class="text-xl font-bold">
|
|
58481
|
+
{{ formatMetricValue(pacingInfo()!.projectedValue, metricData()?.metric || '', false) }}
|
|
58482
|
+
</p>
|
|
58483
|
+
</div>
|
|
58484
|
+
}
|
|
58485
|
+
|
|
58486
|
+
<!-- Current Target -->
|
|
58487
|
+
<div>
|
|
58488
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
|
|
58489
|
+
{{ currentYear() }} Target
|
|
58490
|
+
</p>
|
|
58491
|
+
<p [ngClass]="targetValueClasses()" class="text-xl font-bold">
|
|
58492
|
+
{{ formatMetricValue(metricData()?.targetValue || 0, metricData()?.metric || '', false) }}
|
|
58493
|
+
</p>
|
|
58494
|
+
</div>
|
|
58495
|
+
|
|
58496
|
+
<!-- Year-over-Year Trend Chart -->
|
|
58497
|
+
@if (trendChartData()) {
|
|
58498
|
+
<div>
|
|
58499
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1.5">
|
|
58500
|
+
Year-over-Year Trend
|
|
58501
|
+
</p>
|
|
58502
|
+
<div
|
|
58503
|
+
class="relative cursor-pointer group"
|
|
58504
|
+
(click)="openExpandedChart(); $event.stopPropagation()">
|
|
58505
|
+
<symphiq-area-chart
|
|
58506
|
+
[chart]="trendChartData()!"
|
|
58507
|
+
[showAxisLabels]="false"
|
|
58508
|
+
[viewMode]="viewMode()"
|
|
58509
|
+
[currencySymbol]="'$'"
|
|
58510
|
+
[height]="'80px'"
|
|
58511
|
+
/>
|
|
58512
|
+
<div
|
|
58513
|
+
[ngClass]="expandIconClasses()"
|
|
58514
|
+
class="absolute top-1 right-1 p-1 rounded opacity-0 group-hover:opacity-100 transition-opacity">
|
|
58515
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
58516
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4" />
|
|
58517
|
+
</svg>
|
|
58518
|
+
</div>
|
|
58519
|
+
</div>
|
|
58520
|
+
</div>
|
|
58521
|
+
}
|
|
58522
|
+
</div>
|
|
58523
|
+
</div>
|
|
58524
|
+
|
|
58525
|
+
<!-- Target Analysis -->
|
|
58526
|
+
<div [ngClass]="sectionCardClasses()" class="rounded-xl p-6 mb-6">
|
|
58527
|
+
<h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold uppercase tracking-wider mb-4">
|
|
58528
|
+
Target Analysis
|
|
58529
|
+
</h4>
|
|
58530
|
+
|
|
58531
|
+
<div class="mb-4">
|
|
58532
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-2">
|
|
58533
|
+
Your Target
|
|
58534
|
+
</p>
|
|
58535
|
+
<p [ngClass]="targetValueClasses()" class="text-3xl font-extrabold mb-3">
|
|
58536
|
+
{{ formatMetricValue(metricData()?.targetValue || 0, metricData()?.metric || '', false) }}
|
|
58537
|
+
</p>
|
|
58538
|
+
<p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed">
|
|
58539
|
+
Your target represents a {{ formatPercentage(Math.abs(metricData()?.percentageIncrease || 0), 1) }}
|
|
58540
|
+
{{ (metricData()?.percentageIncrease || 0) >= 0 ? 'increase' : 'decrease' }}
|
|
58541
|
+
from your {{ priorYear() }} actual of
|
|
58542
|
+
{{ formatMetricValue(metricData()?.currentValue || 0, metricData()?.metric || '') }}.
|
|
58543
|
+
</p>
|
|
58544
|
+
</div>
|
|
58545
|
+
|
|
58546
|
+
@if (pacingInfo()) {
|
|
58547
|
+
<div class="mb-4">
|
|
58548
|
+
<symphiq-pacing-status-badge
|
|
58549
|
+
[viewMode]="viewMode()"
|
|
58550
|
+
[pacingPercentage]="pacingInfo()!.pacingPercentage"
|
|
58551
|
+
[status]="pacingInfo()!.status"
|
|
58552
|
+
[showAsFullText]="true"
|
|
58553
|
+
[isCompact]="false"
|
|
58554
|
+
[showEmphasizedPercentage]="true"
|
|
58555
|
+
/>
|
|
58556
|
+
</div>
|
|
58557
|
+
|
|
58558
|
+
<div class="mb-4">
|
|
58559
|
+
<p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed">
|
|
58560
|
+
{{ gapAnalysisText() }}
|
|
58561
|
+
</p>
|
|
58562
|
+
</div>
|
|
58563
|
+
|
|
58564
|
+
<!-- Progress to Target Chart -->
|
|
58565
|
+
<symphiq-progress-to-target-chart
|
|
58566
|
+
[data]="progressToTargetData()"
|
|
58567
|
+
[viewMode]="viewMode()"
|
|
58568
|
+
/>
|
|
58569
|
+
}
|
|
58570
|
+
</div>
|
|
58571
|
+
|
|
58572
|
+
<!-- Contributing Metrics Table (only for funnel stage metrics) -->
|
|
58573
|
+
@if (contributingMetrics().length > 0) {
|
|
58574
|
+
<div [ngClass]="sectionCardClasses()" class="rounded-xl p-6 mb-6">
|
|
58575
|
+
<h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold uppercase tracking-wider mb-4">
|
|
58576
|
+
Contributing Metric Targets
|
|
58577
|
+
</h4>
|
|
58578
|
+
<div class="overflow-x-auto">
|
|
58579
|
+
<table class="w-full">
|
|
58580
|
+
<thead>
|
|
58581
|
+
<tr [ngClass]="tableHeaderClasses()" class="border-b">
|
|
58582
|
+
<th class="text-left py-3 px-4 text-xs font-semibold uppercase tracking-wider">Metric</th>
|
|
58583
|
+
<th class="text-right py-3 px-4 text-xs font-semibold uppercase tracking-wider">Target</th>
|
|
58584
|
+
<th class="text-right py-3 px-4 text-xs font-semibold uppercase tracking-wider">Improve by</th>
|
|
58585
|
+
</tr>
|
|
58586
|
+
</thead>
|
|
58587
|
+
<tbody>
|
|
58588
|
+
@for (metric of contributingMetrics(); track metric.metric) {
|
|
58589
|
+
<tr [ngClass]="tableRowClasses()" class="border-b transition-colors">
|
|
58590
|
+
<td class="py-3 px-4">
|
|
58591
|
+
<div class="flex items-center gap-2">
|
|
58592
|
+
<span class="text-sm font-medium">{{ getMetricTitle(metric) }}</span>
|
|
58593
|
+
@if (metric.description) {
|
|
58594
|
+
<button
|
|
58595
|
+
type="button"
|
|
58596
|
+
[ngClass]="infoIconClasses()"
|
|
58597
|
+
class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
|
|
58598
|
+
[libSymphiqTooltip]="getMarkdownTooltipContent(metric.description, getMetricTitle(metric))"
|
|
58599
|
+
tooltipType="markdown"
|
|
58600
|
+
tooltipPosition="right">
|
|
58601
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
58602
|
+
<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" />
|
|
58603
|
+
</svg>
|
|
58604
|
+
</button>
|
|
58605
|
+
}
|
|
58606
|
+
</div>
|
|
58607
|
+
</td>
|
|
58608
|
+
<td class="py-3 px-4 text-right">
|
|
58609
|
+
<span [ngClass]="targetValueClasses()" class="text-sm font-semibold">
|
|
58610
|
+
{{ formatMetricValue(metric.targetValue, metric.metric, false) }}
|
|
58611
|
+
</span>
|
|
58612
|
+
</td>
|
|
58613
|
+
<td class="py-3 px-4 text-right">
|
|
58614
|
+
<div class="flex items-center justify-end gap-2">
|
|
58615
|
+
<span class="text-sm font-medium">
|
|
58616
|
+
{{ formatPercentage(Math.abs(metric.percentageIncrease), 1) }}
|
|
58617
|
+
</span>
|
|
58618
|
+
<svg
|
|
58619
|
+
class="w-4 h-4 text-emerald-500"
|
|
58620
|
+
fill="none"
|
|
58621
|
+
stroke="currentColor"
|
|
58622
|
+
viewBox="0 0 24 24">
|
|
58623
|
+
<path
|
|
58624
|
+
stroke-linecap="round"
|
|
58625
|
+
stroke-linejoin="round"
|
|
58626
|
+
stroke-width="2"
|
|
58627
|
+
[attr.d]="metric.percentageIncrease >= 0 ? 'M5 10l7-7m0 0l7 7m-7-7v18' : 'M19 14l-7 7m0 0l-7-7m7 7V3'" />
|
|
58628
|
+
</svg>
|
|
58629
|
+
</div>
|
|
58630
|
+
</td>
|
|
58631
|
+
</tr>
|
|
58632
|
+
}
|
|
58633
|
+
</tbody>
|
|
58634
|
+
</table>
|
|
58635
|
+
</div>
|
|
58636
|
+
</div>
|
|
58637
|
+
}
|
|
58638
|
+
|
|
58639
|
+
<!-- Pacing Chart -->
|
|
58640
|
+
@if (pacingChartData()) {
|
|
58641
|
+
<div [ngClass]="sectionCardClasses()" class="rounded-xl p-6">
|
|
58642
|
+
<h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold uppercase tracking-wider mb-4">
|
|
58643
|
+
Pace
|
|
58644
|
+
</h4>
|
|
58645
|
+
<div class="min-h-[250px]">
|
|
58646
|
+
<symphiq-line-chart
|
|
58647
|
+
[chart]="pacingChartData()!"
|
|
58648
|
+
[showAxisLabels]="true"
|
|
58649
|
+
[viewMode]="viewMode()"
|
|
58650
|
+
[currencySymbol]="'$'"
|
|
58651
|
+
[height]="'250px'"
|
|
58652
|
+
/>
|
|
58653
|
+
</div>
|
|
58654
|
+
<p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed mt-4">
|
|
58655
|
+
{{ chartLegendDescription() }}
|
|
58656
|
+
</p>
|
|
58657
|
+
<p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed mt-2">
|
|
58658
|
+
{{ chartDescriptionSentence1() }}
|
|
58659
|
+
</p>
|
|
58660
|
+
<p [ngClass]="descriptionClasses()" class="text-sm leading-relaxed mt-2">
|
|
58661
|
+
{{ chartDescriptionSentence2() }}
|
|
58662
|
+
</p>
|
|
58663
|
+
</div>
|
|
58664
|
+
}
|
|
58665
|
+
</div>
|
|
58666
|
+
|
|
58667
|
+
<!-- Footer -->
|
|
58668
|
+
<div [ngClass]="footerClasses()" class="px-6 py-4 border-t">
|
|
58669
|
+
<button
|
|
58670
|
+
(click)="close()"
|
|
58671
|
+
[ngClass]="closeFooterButtonClasses()"
|
|
58672
|
+
class="w-full px-4 py-2 rounded-lg transition-all font-medium hover:scale-[1.02] active:scale-[0.98]">
|
|
58673
|
+
Close
|
|
58674
|
+
</button>
|
|
58675
|
+
</div>
|
|
58676
|
+
</div>
|
|
58677
|
+
</div>
|
|
58678
|
+
</div>
|
|
58679
|
+
|
|
58680
|
+
<!-- Expanded Chart Modal (Stacked) -->
|
|
58681
|
+
@if (isExpandedChartOpen()) {
|
|
58682
|
+
<div class="fixed inset-0 overflow-y-auto z-[60]" (click)="closeExpandedChart()">
|
|
58683
|
+
<div class="flex items-center justify-center min-h-screen p-4">
|
|
58684
|
+
<div
|
|
58685
|
+
[ngClass]="backdropClasses()"
|
|
58686
|
+
class="fixed inset-0 backdrop-blur-md"
|
|
58687
|
+
aria-hidden="true"
|
|
58688
|
+
@fadeIn>
|
|
58689
|
+
</div>
|
|
58690
|
+
|
|
58691
|
+
<div
|
|
58692
|
+
(click)="$event.stopPropagation()"
|
|
58693
|
+
[ngClass]="modalContainerClasses()"
|
|
58694
|
+
class="relative inline-block rounded-2xl text-left overflow-hidden shadow-xl w-full max-w-6xl border backdrop-blur-xl"
|
|
58695
|
+
@slideUpFade>
|
|
58696
|
+
|
|
58697
|
+
<!-- Header -->
|
|
58698
|
+
<div [ngClass]="headerClasses()" class="px-6 py-4 border-b backdrop-blur-sm flex items-center justify-between">
|
|
58699
|
+
<h3 [ngClass]="titleClasses()" class="text-lg font-bold">
|
|
58700
|
+
Year-over-Year Trend
|
|
58701
|
+
</h3>
|
|
58702
|
+
<button
|
|
58703
|
+
(click)="closeExpandedChart()"
|
|
58704
|
+
[ngClass]="closeButtonClasses()"
|
|
58705
|
+
class="transition-all rounded-lg p-1 hover:scale-110 active:scale-90">
|
|
58706
|
+
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
58707
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
|
|
58708
|
+
</svg>
|
|
58709
|
+
</button>
|
|
58710
|
+
</div>
|
|
58711
|
+
|
|
58712
|
+
<!-- Content -->
|
|
58713
|
+
<div [ngClass]="contentClasses()" class="p-6 backdrop-blur-sm">
|
|
58714
|
+
@if (trendChartData()) {
|
|
58715
|
+
<symphiq-area-chart
|
|
58716
|
+
[chart]="trendChartData()!"
|
|
58717
|
+
[showAxisLabels]="true"
|
|
58718
|
+
[viewMode]="viewMode()"
|
|
58719
|
+
[currencySymbol]="'$'"
|
|
58720
|
+
[height]="'400px'"
|
|
58721
|
+
/>
|
|
58722
|
+
}
|
|
58723
|
+
</div>
|
|
58724
|
+
</div>
|
|
58725
|
+
</div>
|
|
58726
|
+
</div>
|
|
58727
|
+
}
|
|
58728
|
+
}
|
|
58729
|
+
`
|
|
58730
|
+
}]
|
|
58731
|
+
}], 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"] }], onEscapeKey: [{
|
|
58732
|
+
type: HostListener,
|
|
58733
|
+
args: ['document:keydown.escape']
|
|
58734
|
+
}] }); })();
|
|
58735
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MetricReportModalComponent, { className: "MetricReportModalComponent", filePath: "lib/components/revenue-calculator-dashboard/metric-report-modal.component.ts", lineNumber: 416 }); })();
|
|
58736
|
+
|
|
58737
|
+
const _c0$q = ["absoluteInputRef"];
|
|
58738
|
+
const _c1$b = ["percentageInputRef"];
|
|
58739
|
+
function InitialTargetSettingComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
58740
|
+
i0.ɵɵtext(0);
|
|
58741
|
+
} if (rf & 2) {
|
|
58742
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
58743
|
+
i0.ɵɵtextInterpolate1(" Your ", ctx_r0.currentYear(), " Revenue Target ");
|
|
58744
|
+
} }
|
|
58745
|
+
function InitialTargetSettingComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
58746
|
+
i0.ɵɵtext(0);
|
|
58747
|
+
} if (rf & 2) {
|
|
58748
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
58597
58749
|
i0.ɵɵtextInterpolate1(" Calculate Your ", ctx_r0.currentYear(), " Revenue Target ");
|
|
58598
58750
|
} }
|
|
58599
58751
|
function InitialTargetSettingComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -58908,7 +59060,7 @@ function InitialTargetSettingComponent_Conditional_37_Conditional_4_Template(rf,
|
|
|
58908
59060
|
i0.ɵɵelement(0, "symphiq-area-chart", 23);
|
|
58909
59061
|
} if (rf & 2) {
|
|
58910
59062
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
58911
|
-
i0.ɵɵproperty("chart", ctx_r0.revenueChartData())("showAxisLabels", true)("viewMode", ctx_r0.viewMode())("currencySymbol", "$")("height", "
|
|
59063
|
+
i0.ɵɵproperty("chart", ctx_r0.revenueChartData())("showAxisLabels", true)("viewMode", ctx_r0.viewMode())("currencySymbol", "$")("height", "200px");
|
|
58912
59064
|
} }
|
|
58913
59065
|
function InitialTargetSettingComponent_Conditional_37_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
58914
59066
|
i0.ɵɵelementStart(0, "div", 24)(1, "p", 50);
|
|
@@ -59530,7 +59682,7 @@ class InitialTargetSettingComponent {
|
|
|
59530
59682
|
let _t;
|
|
59531
59683
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.absoluteInputRef = _t.first);
|
|
59532
59684
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.percentageInputRef = _t.first);
|
|
59533
|
-
} }, 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:
|
|
59685
|
+
} }, 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) {
|
|
59534
59686
|
i0.ɵɵelementStart(0, "div", 2);
|
|
59535
59687
|
i0.ɵɵelement(1, "symphiq-tooltip-container");
|
|
59536
59688
|
i0.ɵɵelementStart(2, "div", 3);
|
|
@@ -59630,7 +59782,7 @@ class InitialTargetSettingComponent {
|
|
|
59630
59782
|
i0.ɵɵadvance();
|
|
59631
59783
|
i0.ɵɵproperty("viewMode", ctx.viewMode())("isValid", ctx.isValid())("isSubmitting", ctx.isCalculating())("validationMessage", ctx.validationMessage())("buttonText", ctx.submitButtonText())("showCancelButton", ctx.calculationState() === "input" && ctx.hasStoredResponse());
|
|
59632
59784
|
i0.ɵɵadvance();
|
|
59633
|
-
i0.ɵɵproperty("viewMode", ctx.viewMode())("metricEnum", ctx.selectedMetricEnum())("metricData", ctx.selectedMetricData())("contributingMetrics", ctx.selectedContributingMetrics())("pacingMetrics", ctx.pacingMetrics())("isOpen", ctx.isMetricReportOpen());
|
|
59785
|
+
i0.ɵɵproperty("viewMode", ctx.viewMode())("metricEnum", ctx.selectedMetricEnum())("metricData", ctx.selectedMetricData())("contributingMetrics", ctx.selectedContributingMetrics())("pacingMetrics", ctx.pacingMetrics())("trendChartData", ctx.revenueChartData())("isOpen", ctx.isMetricReportOpen());
|
|
59634
59786
|
} }, 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,
|
|
59635
59787
|
StickySubmitBarComponent,
|
|
59636
59788
|
AreaChartComponent,
|
|
@@ -59649,390 +59801,391 @@ class InitialTargetSettingComponent {
|
|
|
59649
59801
|
TooltipDirective,
|
|
59650
59802
|
TooltipContainerComponent,
|
|
59651
59803
|
MetricReportModalComponent
|
|
59652
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
59653
|
-
<div class="space-y-8 pb-32">
|
|
59654
|
-
<symphiq-tooltip-container />
|
|
59655
|
-
<div [ngClass]="sectionCardClasses(true)" class="rounded-2xl border shadow-lg p-8"
|
|
59656
|
-
[class.cursor-pointer]="calculationState() === 'results'"
|
|
59657
|
-
[class.lg:sticky]="calculationState() === 'results'"
|
|
59658
|
-
[style.top]="calculationState() === 'results' ? '148px' : 'auto'"
|
|
59659
|
-
[class.z-30]="calculationState() === 'results'"
|
|
59660
|
-
(click)="onCardClick()">
|
|
59661
|
-
<div class="flex items-center justify-between mb-6">
|
|
59662
|
-
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold">
|
|
59663
|
-
@if (calculationState() === 'results') {
|
|
59664
|
-
Your {{ currentYear() }} Revenue Target
|
|
59665
|
-
} @else {
|
|
59666
|
-
Calculate Your {{ currentYear() }} Revenue Target
|
|
59667
|
-
}
|
|
59668
|
-
</h2>
|
|
59669
|
-
@if (calculationState() === 'results') {
|
|
59670
|
-
<svg
|
|
59671
|
-
class="w-6 h-6 chevron-rotate"
|
|
59672
|
-
[class.chevron-rotate-expanded]="detailsExpanded()"
|
|
59673
|
-
[ngClass]="chevronClasses()"
|
|
59674
|
-
fill="none"
|
|
59675
|
-
stroke="currentColor"
|
|
59676
|
-
viewBox="0 0 24 24">
|
|
59677
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
|
|
59678
|
-
</svg>
|
|
59679
|
-
}
|
|
59680
|
-
</div>
|
|
59681
|
-
|
|
59682
|
-
<div class="flex flex-col gap-4">
|
|
59683
|
-
<div class="grid lg:grid-cols-2 gap-4">
|
|
59684
|
-
<div class="flex flex-col gap-4">
|
|
59685
|
-
<div [ngClass]="formAreaClasses()" class="p-6 rounded-xl border-2" [class.cursor-pointer]="calculationState() === 'results'" (click)="onCardClick(); $event.stopPropagation()">
|
|
59686
|
-
<div class="flex flex-wrap gap-4 place-content-between">
|
|
59687
|
-
<div class="flex items-center gap-2">
|
|
59688
|
-
<svg class="w-4 h-4" [ngClass]="baselineIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59689
|
-
<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>
|
|
59690
|
-
</svg>
|
|
59691
|
-
<div>
|
|
59692
|
-
<p [ngClass]="baselineLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59693
|
-
{{ priorYear() }} Revenue
|
|
59694
|
-
</p>
|
|
59695
|
-
<p [ngClass]="baselineValueClasses()" class="text-lg font-bold">
|
|
59696
|
-
{{ formatCurrency(priorYearRevenue()) }}
|
|
59697
|
-
</p>
|
|
59698
|
-
</div>
|
|
59699
|
-
</div>
|
|
59700
|
-
@if (currentPaceProjection() > 0) {
|
|
59701
|
-
<div class="flex items-center gap-2">
|
|
59702
|
-
<svg class="w-4 h-4" [ngClass]="projectionIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59703
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"></path>
|
|
59704
|
-
</svg>
|
|
59705
|
-
<div>
|
|
59706
|
-
<div class="flex items-center gap-1">
|
|
59707
|
-
<p [ngClass]="projectionLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59708
|
-
Current Pace Projection
|
|
59709
|
-
</p>
|
|
59710
|
-
<button
|
|
59711
|
-
type="button"
|
|
59712
|
-
[ngClass]="infoIconClasses()"
|
|
59713
|
-
class="flex-shrink-0 w-4 h-4 rounded-full inline-flex items-center justify-center transition-colors"
|
|
59714
|
-
[libSymphiqTooltip]="currentPaceProjectionTooltip"
|
|
59715
|
-
tooltipType="markdown"
|
|
59716
|
-
tooltipPosition="top"
|
|
59717
|
-
(click)="$event.stopPropagation()">
|
|
59718
|
-
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59719
|
-
<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" />
|
|
59720
|
-
</svg>
|
|
59721
|
-
</button>
|
|
59722
|
-
</div>
|
|
59723
|
-
<p [ngClass]="projectionValueClasses()" class="text-lg font-bold">
|
|
59724
|
-
{{ formatCurrency(currentPaceProjection()) }}
|
|
59725
|
-
</p>
|
|
59726
|
-
</div>
|
|
59727
|
-
</div>
|
|
59728
|
-
}
|
|
59729
|
-
</div>
|
|
59730
|
-
|
|
59731
|
-
<div class="form-area-collapse" [class.form-area-collapse-hidden]="calculationState() === 'results'" [class.mt-6]="calculationState() !== 'results'">
|
|
59732
|
-
<div class="form-area-content">
|
|
59733
|
-
<div class="space-y-6">
|
|
59734
|
-
@if (calculationState() !== 'results') {
|
|
59735
|
-
<div class="flex gap-2">
|
|
59736
|
-
<button
|
|
59737
|
-
(click)="setInputMode('absolute')"
|
|
59738
|
-
[ngClass]="inputModeButtonClasses('absolute')"
|
|
59739
|
-
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
59740
|
-
Absolute Amount
|
|
59741
|
-
</button>
|
|
59742
|
-
<button
|
|
59743
|
-
(click)="setInputMode('percentage')"
|
|
59744
|
-
[ngClass]="inputModeButtonClasses('percentage')"
|
|
59745
|
-
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
59746
|
-
% Increase
|
|
59747
|
-
</button>
|
|
59748
|
-
</div>
|
|
59749
|
-
|
|
59750
|
-
@if (inputMode() === 'absolute') {
|
|
59751
|
-
<div class="relative">
|
|
59752
|
-
<span [ngClass]="inputPrefixClasses()" class="absolute left-4 top-1/2 -translate-y-1/2 text-xl font-bold">
|
|
59753
|
-
$
|
|
59754
|
-
</span>
|
|
59755
|
-
<input
|
|
59756
|
-
#absoluteInputRef
|
|
59757
|
-
type="number"
|
|
59758
|
-
[(ngModel)]="absoluteInput"
|
|
59759
|
-
(ngModelChange)="onAbsoluteInputChange()"
|
|
59760
|
-
[ngClass]="inputClasses()"
|
|
59761
|
-
class="w-full pl-10 pr-4 py-4 rounded-xl text-2xl font-bold border-2 transition-all"
|
|
59762
|
-
placeholder="0"
|
|
59763
|
-
min="0"
|
|
59764
|
-
step="1000">
|
|
59765
|
-
</div>
|
|
59766
|
-
} @else {
|
|
59767
|
-
<div class="relative">
|
|
59768
|
-
<input
|
|
59769
|
-
#percentageInputRef
|
|
59770
|
-
type="number"
|
|
59771
|
-
[(ngModel)]="percentageInput"
|
|
59772
|
-
(ngModelChange)="onPercentageInputChange()"
|
|
59773
|
-
[ngClass]="inputClasses()"
|
|
59774
|
-
class="w-full pr-10 pl-4 py-4 rounded-xl text-2xl font-bold border-2 transition-all"
|
|
59775
|
-
placeholder="0"
|
|
59776
|
-
min="0"
|
|
59777
|
-
max="1000"
|
|
59778
|
-
step="0.1">
|
|
59779
|
-
<span [ngClass]="inputSuffixClasses()" class="absolute right-4 top-1/2 -translate-y-1/2 text-xl font-bold">
|
|
59780
|
-
%
|
|
59781
|
-
</span>
|
|
59782
|
-
</div>
|
|
59783
|
-
}
|
|
59784
|
-
|
|
59785
|
-
@if (hasStoredResponse()) {
|
|
59786
|
-
<div class="flex justify-end">
|
|
59787
|
-
<button
|
|
59788
|
-
(click)="handleCancel()"
|
|
59789
|
-
[ngClass]="cancelButtonClasses()"
|
|
59790
|
-
class="px-4 py-2 rounded-lg text-sm font-semibold transition-all">
|
|
59791
|
-
Cancel
|
|
59792
|
-
</button>
|
|
59793
|
-
</div>
|
|
59794
|
-
}
|
|
59795
|
-
}
|
|
59796
|
-
</div>
|
|
59797
|
-
</div>
|
|
59798
|
-
</div>
|
|
59799
|
-
</div>
|
|
59800
|
-
|
|
59801
|
-
<div class="chart-in-column" [class.chart-in-column-active]="calculationState() === 'results' && detailsExpanded()">
|
|
59802
|
-
<div class="chart-in-column-content">
|
|
59803
|
-
<div>
|
|
59804
|
-
<p [ngClass]="chartTitleClasses()" class="text-sm font-semibold mb-3">
|
|
59805
|
-
Year-over-Year Revenue Trend
|
|
59806
|
-
</p>
|
|
59807
|
-
<div [ngClass]="chartContainerClasses()" class="rounded-xl border p-4">
|
|
59808
|
-
@if (revenueChartData()) {
|
|
59809
|
-
<symphiq-area-chart
|
|
59810
|
-
[chart]="revenueChartData()!"
|
|
59811
|
-
[showAxisLabels]="true"
|
|
59812
|
-
[viewMode]="viewMode()"
|
|
59813
|
-
[currencySymbol]="'$'"
|
|
59814
|
-
[height]="'108px'"
|
|
59815
|
-
/>
|
|
59816
|
-
} @else {
|
|
59817
|
-
<div class="h-64 flex items-center justify-center">
|
|
59818
|
-
<p [ngClass]="noDataClasses()" class="text-sm">
|
|
59819
|
-
No revenue data available
|
|
59820
|
-
</p>
|
|
59821
|
-
</div>
|
|
59822
|
-
}
|
|
59823
|
-
</div>
|
|
59824
|
-
</div>
|
|
59825
|
-
</div>
|
|
59826
|
-
</div>
|
|
59827
|
-
</div>
|
|
59828
|
-
|
|
59829
|
-
<div class="calculated-card-enter order-first lg:order-last" [class.calculated-card-enter-active]="calculatedRevenue() > 0">
|
|
59830
|
-
<div class="calculated-card-content">
|
|
59831
|
-
@if (calculatedRevenue() > 0) {
|
|
59832
|
-
<div [ngClass]="calculatedValuesCardClasses()" class="p-6 rounded-xl border-2"
|
|
59833
|
-
[class.h-full]="calculationState() !== 'results' || detailsExpanded()">
|
|
59834
|
-
<div>
|
|
59835
|
-
<div class="flex items-center justify-between">
|
|
59836
|
-
<div>
|
|
59837
|
-
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59838
|
-
{{ currentYear() }} Revenue Target
|
|
59839
|
-
</p>
|
|
59840
|
-
<p [ngClass]="calculatedValueClasses()" class="font-bold transition-all duration-300 text-lg"
|
|
59841
|
-
[class.lg:text-3xl]="calculationState() !== 'results' || detailsExpanded()">
|
|
59842
|
-
@if (calculationState() === 'results' && targets() === undefined && submittedAbsoluteInput() !== null) {
|
|
59843
|
-
> {{ formatCurrency(submittedAbsoluteInput()!) }}
|
|
59844
|
-
} @else {
|
|
59845
|
-
{{ formatCurrency(displayedTargetRevenue()) }}
|
|
59846
|
-
}
|
|
59847
|
-
</p>
|
|
59848
|
-
</div>
|
|
59849
|
-
@if (calculationState() === 'results' && targets() === undefined) {
|
|
59850
|
-
<button
|
|
59851
|
-
(click)="handleAdjustTarget(); $event.stopPropagation()"
|
|
59852
|
-
[ngClass]="secondaryButtonClasses()"
|
|
59853
|
-
class="px-4 py-2 rounded-lg text-sm font-semibold transition-all whitespace-nowrap">
|
|
59854
|
-
Adjust Revenue Target
|
|
59855
|
-
</button>
|
|
59856
|
-
}
|
|
59857
|
-
</div>
|
|
59858
|
-
|
|
59859
|
-
<div class="details-collapse" [class.details-collapse-expanded]="calculationState() !== 'results' || detailsExpanded()">
|
|
59860
|
-
<div class="details-collapse-content">
|
|
59861
|
-
<div class="relative pt-6 mt-6">
|
|
59862
|
-
<div class="absolute top-0 left-0 right-0 flex items-center -translate-y-1/2">
|
|
59863
|
-
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59864
|
-
<span [ngClass]="dividerLabelClasses()" class="px-3 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
59865
|
-
vs. {{ priorYear() }}
|
|
59866
|
-
</span>
|
|
59867
|
-
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59868
|
-
</div>
|
|
59869
|
-
<div class="grid grid-cols-2 gap-4 pt-2">
|
|
59870
|
-
<div>
|
|
59871
|
-
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
59872
|
-
Increase Amount
|
|
59873
|
-
</p>
|
|
59874
|
-
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59875
|
-
@if (isTargetValid()) {
|
|
59876
|
-
{{ formatCurrency(animatedIncreaseAmount()) }}
|
|
59877
|
-
} @else {
|
|
59878
|
-
--
|
|
59879
|
-
}
|
|
59880
|
-
</p>
|
|
59881
|
-
</div>
|
|
59882
|
-
<div>
|
|
59883
|
-
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
59884
|
-
% Growth
|
|
59885
|
-
</p>
|
|
59886
|
-
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59887
|
-
@if (isTargetValid()) {
|
|
59888
|
-
+{{ formatPercentage(animatedPercentageGrowth(), 1) }}
|
|
59889
|
-
} @else {
|
|
59890
|
-
--
|
|
59891
|
-
}
|
|
59892
|
-
</p>
|
|
59893
|
-
</div>
|
|
59894
|
-
</div>
|
|
59895
|
-
</div>
|
|
59896
|
-
|
|
59897
|
-
@if (currentPaceProjection() > 0) {
|
|
59898
|
-
<div class="relative pt-6 mt-6">
|
|
59899
|
-
<div class="absolute top-0 left-0 right-0 flex items-center -translate-y-1/2">
|
|
59900
|
-
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59901
|
-
<span [ngClass]="dividerLabelClasses()" class="px-3 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
59902
|
-
{{ currentYear() }} YTD Gap
|
|
59903
|
-
</span>
|
|
59904
|
-
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
59905
|
-
</div>
|
|
59906
|
-
<div class="grid grid-cols-2 gap-4 pt-2">
|
|
59907
|
-
<div>
|
|
59908
|
-
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
59909
|
-
Gap to Close
|
|
59910
|
-
</p>
|
|
59911
|
-
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59912
|
-
@if (isTargetValid()) {
|
|
59913
|
-
{{ formatCurrency(animatedGapAmount()) }}
|
|
59914
|
-
} @else {
|
|
59915
|
-
--
|
|
59916
|
-
}
|
|
59917
|
-
</p>
|
|
59918
|
-
</div>
|
|
59919
|
-
<div>
|
|
59920
|
-
<div class="flex items-center gap-1 mb-1">
|
|
59921
|
-
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59922
|
-
Additional Growth Needed
|
|
59923
|
-
</p>
|
|
59924
|
-
<button
|
|
59925
|
-
type="button"
|
|
59926
|
-
[ngClass]="infoIconClasses()"
|
|
59927
|
-
class="flex-shrink-0 w-4 h-4 rounded-full inline-flex items-center justify-center transition-colors"
|
|
59928
|
-
[libSymphiqTooltip]="additionalGrowthTooltip"
|
|
59929
|
-
tooltipType="markdown"
|
|
59930
|
-
tooltipPosition="top"
|
|
59931
|
-
(click)="$event.stopPropagation()">
|
|
59932
|
-
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59933
|
-
<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" />
|
|
59934
|
-
</svg>
|
|
59935
|
-
</button>
|
|
59936
|
-
</div>
|
|
59937
|
-
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
59938
|
-
@if (isTargetValid()) {
|
|
59939
|
-
{{ gapToClose().amount > 0 ? '+' : '' }}{{ formatPercentage(animatedGapPercentage(), 1) }}
|
|
59940
|
-
} @else {
|
|
59941
|
-
--
|
|
59942
|
-
}
|
|
59943
|
-
</p>
|
|
59944
|
-
</div>
|
|
59945
|
-
</div>
|
|
59946
|
-
</div>
|
|
59947
|
-
}
|
|
59948
|
-
|
|
59949
|
-
</div>
|
|
59950
|
-
</div>
|
|
59951
|
-
</div>
|
|
59952
|
-
</div>
|
|
59953
|
-
}
|
|
59954
|
-
</div>
|
|
59955
|
-
</div>
|
|
59956
|
-
</div>
|
|
59957
|
-
|
|
59958
|
-
@if (calculationState() !== 'results') {
|
|
59959
|
-
<div class="w-full">
|
|
59960
|
-
<p [ngClass]="chartTitleClasses()" class="text-sm font-semibold mb-3">
|
|
59961
|
-
Year-over-Year Revenue Trend
|
|
59962
|
-
</p>
|
|
59963
|
-
<div [ngClass]="chartContainerClasses()" class="rounded-xl border p-4">
|
|
59964
|
-
@if (revenueChartData()) {
|
|
59965
|
-
<symphiq-area-chart
|
|
59966
|
-
[chart]="revenueChartData()!"
|
|
59967
|
-
[showAxisLabels]="true"
|
|
59968
|
-
[viewMode]="viewMode()"
|
|
59969
|
-
[currencySymbol]="'$'"
|
|
59970
|
-
[height]="'
|
|
59971
|
-
/>
|
|
59972
|
-
} @else {
|
|
59973
|
-
<div class="h-64 flex items-center justify-center">
|
|
59974
|
-
<p [ngClass]="noDataClasses()" class="text-sm">
|
|
59975
|
-
No revenue data available
|
|
59976
|
-
</p>
|
|
59977
|
-
</div>
|
|
59978
|
-
}
|
|
59979
|
-
</div>
|
|
59980
|
-
</div>
|
|
59981
|
-
}
|
|
59982
|
-
</div>
|
|
59983
|
-
</div>
|
|
59984
|
-
|
|
59985
|
-
<div class="metrics-section-enter" [class.metrics-section-enter-active]="showMetricsVisualization()">
|
|
59986
|
-
<div class="metrics-section-content">
|
|
59987
|
-
@if (showMetricsVisualization()) {
|
|
59988
|
-
<div [ngClass]="sectionCardClasses()" class="rounded-2xl border shadow-lg p-8">
|
|
59989
|
-
<div class="mb-6">
|
|
59990
|
-
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold mb-2">
|
|
59991
|
-
Contributing Metrics
|
|
59992
|
-
</h2>
|
|
59993
|
-
<p [ngClass]="sectionDescriptionClasses()" class="text-sm">
|
|
59994
|
-
@if (targets() === undefined && submittedAbsoluteInput() !== null) {
|
|
59995
|
-
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.
|
|
59996
|
-
} @else {
|
|
59997
|
-
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.
|
|
59998
|
-
}
|
|
59999
|
-
</p>
|
|
60000
|
-
</div>
|
|
60001
|
-
|
|
60002
|
-
<symphiq-funnel-metrics-visualization
|
|
60003
|
-
[viewMode]="viewMode()"
|
|
60004
|
-
[calculations]="displayedMetricCalculations()"
|
|
60005
|
-
[pacingMetrics]="pacingMetrics()"
|
|
60006
|
-
(viewStageReport)="openMetricReport($event)"
|
|
60007
|
-
(viewRelatedMetricReport)="openMetricReport($event)"
|
|
60008
|
-
/>
|
|
60009
|
-
</div>
|
|
60010
|
-
}
|
|
60011
|
-
</div>
|
|
60012
|
-
</div>
|
|
60013
|
-
|
|
60014
|
-
<symphiq-sticky-submit-bar
|
|
60015
|
-
[viewMode]="viewMode()"
|
|
60016
|
-
[isValid]="isValid()"
|
|
60017
|
-
[isSubmitting]="isCalculating()"
|
|
60018
|
-
[validationMessage]="validationMessage()"
|
|
60019
|
-
[buttonText]="submitButtonText()"
|
|
60020
|
-
[showCancelButton]="calculationState() === 'input' && hasStoredResponse()"
|
|
60021
|
-
(submitClick)="handleSubmitClick()"
|
|
60022
|
-
(cancelClick)="handleCancel()"
|
|
60023
|
-
/>
|
|
60024
|
-
|
|
60025
|
-
<!-- Metric Report Modal -->
|
|
60026
|
-
<symphiq-metric-report-modal
|
|
60027
|
-
[viewMode]="viewMode()"
|
|
60028
|
-
[metricEnum]="selectedMetricEnum()"
|
|
60029
|
-
[metricData]="selectedMetricData()"
|
|
60030
|
-
[contributingMetrics]="selectedContributingMetrics()"
|
|
60031
|
-
[pacingMetrics]="pacingMetrics()"
|
|
60032
|
-
[
|
|
60033
|
-
|
|
60034
|
-
|
|
60035
|
-
|
|
59804
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
59805
|
+
<div class="space-y-8 pb-32">
|
|
59806
|
+
<symphiq-tooltip-container />
|
|
59807
|
+
<div [ngClass]="sectionCardClasses(true)" class="rounded-2xl border shadow-lg p-8"
|
|
59808
|
+
[class.cursor-pointer]="calculationState() === 'results'"
|
|
59809
|
+
[class.lg:sticky]="calculationState() === 'results'"
|
|
59810
|
+
[style.top]="calculationState() === 'results' ? '148px' : 'auto'"
|
|
59811
|
+
[class.z-30]="calculationState() === 'results'"
|
|
59812
|
+
(click)="onCardClick()">
|
|
59813
|
+
<div class="flex items-center justify-between mb-6">
|
|
59814
|
+
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold">
|
|
59815
|
+
@if (calculationState() === 'results') {
|
|
59816
|
+
Your {{ currentYear() }} Revenue Target
|
|
59817
|
+
} @else {
|
|
59818
|
+
Calculate Your {{ currentYear() }} Revenue Target
|
|
59819
|
+
}
|
|
59820
|
+
</h2>
|
|
59821
|
+
@if (calculationState() === 'results') {
|
|
59822
|
+
<svg
|
|
59823
|
+
class="w-6 h-6 chevron-rotate"
|
|
59824
|
+
[class.chevron-rotate-expanded]="detailsExpanded()"
|
|
59825
|
+
[ngClass]="chevronClasses()"
|
|
59826
|
+
fill="none"
|
|
59827
|
+
stroke="currentColor"
|
|
59828
|
+
viewBox="0 0 24 24">
|
|
59829
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
|
|
59830
|
+
</svg>
|
|
59831
|
+
}
|
|
59832
|
+
</div>
|
|
59833
|
+
|
|
59834
|
+
<div class="flex flex-col gap-4">
|
|
59835
|
+
<div class="grid lg:grid-cols-2 gap-4">
|
|
59836
|
+
<div class="flex flex-col gap-4">
|
|
59837
|
+
<div [ngClass]="formAreaClasses()" class="p-6 rounded-xl border-2" [class.cursor-pointer]="calculationState() === 'results'" (click)="onCardClick(); $event.stopPropagation()">
|
|
59838
|
+
<div class="flex flex-wrap gap-4 place-content-between">
|
|
59839
|
+
<div class="flex items-center gap-2">
|
|
59840
|
+
<svg class="w-4 h-4" [ngClass]="baselineIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59841
|
+
<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>
|
|
59842
|
+
</svg>
|
|
59843
|
+
<div>
|
|
59844
|
+
<p [ngClass]="baselineLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59845
|
+
{{ priorYear() }} Revenue
|
|
59846
|
+
</p>
|
|
59847
|
+
<p [ngClass]="baselineValueClasses()" class="text-lg font-bold">
|
|
59848
|
+
{{ formatCurrency(priorYearRevenue()) }}
|
|
59849
|
+
</p>
|
|
59850
|
+
</div>
|
|
59851
|
+
</div>
|
|
59852
|
+
@if (currentPaceProjection() > 0) {
|
|
59853
|
+
<div class="flex items-center gap-2">
|
|
59854
|
+
<svg class="w-4 h-4" [ngClass]="projectionIconClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59855
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"></path>
|
|
59856
|
+
</svg>
|
|
59857
|
+
<div>
|
|
59858
|
+
<div class="flex items-center gap-1">
|
|
59859
|
+
<p [ngClass]="projectionLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59860
|
+
Current Pace Projection
|
|
59861
|
+
</p>
|
|
59862
|
+
<button
|
|
59863
|
+
type="button"
|
|
59864
|
+
[ngClass]="infoIconClasses()"
|
|
59865
|
+
class="flex-shrink-0 w-4 h-4 rounded-full inline-flex items-center justify-center transition-colors"
|
|
59866
|
+
[libSymphiqTooltip]="currentPaceProjectionTooltip"
|
|
59867
|
+
tooltipType="markdown"
|
|
59868
|
+
tooltipPosition="top"
|
|
59869
|
+
(click)="$event.stopPropagation()">
|
|
59870
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
59871
|
+
<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" />
|
|
59872
|
+
</svg>
|
|
59873
|
+
</button>
|
|
59874
|
+
</div>
|
|
59875
|
+
<p [ngClass]="projectionValueClasses()" class="text-lg font-bold">
|
|
59876
|
+
{{ formatCurrency(currentPaceProjection()) }}
|
|
59877
|
+
</p>
|
|
59878
|
+
</div>
|
|
59879
|
+
</div>
|
|
59880
|
+
}
|
|
59881
|
+
</div>
|
|
59882
|
+
|
|
59883
|
+
<div class="form-area-collapse" [class.form-area-collapse-hidden]="calculationState() === 'results'" [class.mt-6]="calculationState() !== 'results'">
|
|
59884
|
+
<div class="form-area-content">
|
|
59885
|
+
<div class="space-y-6">
|
|
59886
|
+
@if (calculationState() !== 'results') {
|
|
59887
|
+
<div class="flex gap-2">
|
|
59888
|
+
<button
|
|
59889
|
+
(click)="setInputMode('absolute')"
|
|
59890
|
+
[ngClass]="inputModeButtonClasses('absolute')"
|
|
59891
|
+
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
59892
|
+
Absolute Amount
|
|
59893
|
+
</button>
|
|
59894
|
+
<button
|
|
59895
|
+
(click)="setInputMode('percentage')"
|
|
59896
|
+
[ngClass]="inputModeButtonClasses('percentage')"
|
|
59897
|
+
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
59898
|
+
% Increase
|
|
59899
|
+
</button>
|
|
59900
|
+
</div>
|
|
59901
|
+
|
|
59902
|
+
@if (inputMode() === 'absolute') {
|
|
59903
|
+
<div class="relative">
|
|
59904
|
+
<span [ngClass]="inputPrefixClasses()" class="absolute left-4 top-1/2 -translate-y-1/2 text-xl font-bold">
|
|
59905
|
+
$
|
|
59906
|
+
</span>
|
|
59907
|
+
<input
|
|
59908
|
+
#absoluteInputRef
|
|
59909
|
+
type="number"
|
|
59910
|
+
[(ngModel)]="absoluteInput"
|
|
59911
|
+
(ngModelChange)="onAbsoluteInputChange()"
|
|
59912
|
+
[ngClass]="inputClasses()"
|
|
59913
|
+
class="w-full pl-10 pr-4 py-4 rounded-xl text-2xl font-bold border-2 transition-all"
|
|
59914
|
+
placeholder="0"
|
|
59915
|
+
min="0"
|
|
59916
|
+
step="1000">
|
|
59917
|
+
</div>
|
|
59918
|
+
} @else {
|
|
59919
|
+
<div class="relative">
|
|
59920
|
+
<input
|
|
59921
|
+
#percentageInputRef
|
|
59922
|
+
type="number"
|
|
59923
|
+
[(ngModel)]="percentageInput"
|
|
59924
|
+
(ngModelChange)="onPercentageInputChange()"
|
|
59925
|
+
[ngClass]="inputClasses()"
|
|
59926
|
+
class="w-full pr-10 pl-4 py-4 rounded-xl text-2xl font-bold border-2 transition-all"
|
|
59927
|
+
placeholder="0"
|
|
59928
|
+
min="0"
|
|
59929
|
+
max="1000"
|
|
59930
|
+
step="0.1">
|
|
59931
|
+
<span [ngClass]="inputSuffixClasses()" class="absolute right-4 top-1/2 -translate-y-1/2 text-xl font-bold">
|
|
59932
|
+
%
|
|
59933
|
+
</span>
|
|
59934
|
+
</div>
|
|
59935
|
+
}
|
|
59936
|
+
|
|
59937
|
+
@if (hasStoredResponse()) {
|
|
59938
|
+
<div class="flex justify-end">
|
|
59939
|
+
<button
|
|
59940
|
+
(click)="handleCancel()"
|
|
59941
|
+
[ngClass]="cancelButtonClasses()"
|
|
59942
|
+
class="px-4 py-2 rounded-lg text-sm font-semibold transition-all">
|
|
59943
|
+
Cancel
|
|
59944
|
+
</button>
|
|
59945
|
+
</div>
|
|
59946
|
+
}
|
|
59947
|
+
}
|
|
59948
|
+
</div>
|
|
59949
|
+
</div>
|
|
59950
|
+
</div>
|
|
59951
|
+
</div>
|
|
59952
|
+
|
|
59953
|
+
<div class="chart-in-column" [class.chart-in-column-active]="calculationState() === 'results' && detailsExpanded()">
|
|
59954
|
+
<div class="chart-in-column-content">
|
|
59955
|
+
<div>
|
|
59956
|
+
<p [ngClass]="chartTitleClasses()" class="text-sm font-semibold mb-3">
|
|
59957
|
+
Year-over-Year Revenue Trend
|
|
59958
|
+
</p>
|
|
59959
|
+
<div [ngClass]="chartContainerClasses()" class="rounded-xl border p-4">
|
|
59960
|
+
@if (revenueChartData()) {
|
|
59961
|
+
<symphiq-area-chart
|
|
59962
|
+
[chart]="revenueChartData()!"
|
|
59963
|
+
[showAxisLabels]="true"
|
|
59964
|
+
[viewMode]="viewMode()"
|
|
59965
|
+
[currencySymbol]="'$'"
|
|
59966
|
+
[height]="'108px'"
|
|
59967
|
+
/>
|
|
59968
|
+
} @else {
|
|
59969
|
+
<div class="h-64 flex items-center justify-center">
|
|
59970
|
+
<p [ngClass]="noDataClasses()" class="text-sm">
|
|
59971
|
+
No revenue data available
|
|
59972
|
+
</p>
|
|
59973
|
+
</div>
|
|
59974
|
+
}
|
|
59975
|
+
</div>
|
|
59976
|
+
</div>
|
|
59977
|
+
</div>
|
|
59978
|
+
</div>
|
|
59979
|
+
</div>
|
|
59980
|
+
|
|
59981
|
+
<div class="calculated-card-enter order-first lg:order-last" [class.calculated-card-enter-active]="calculatedRevenue() > 0">
|
|
59982
|
+
<div class="calculated-card-content">
|
|
59983
|
+
@if (calculatedRevenue() > 0) {
|
|
59984
|
+
<div [ngClass]="calculatedValuesCardClasses()" class="p-6 rounded-xl border-2"
|
|
59985
|
+
[class.h-full]="calculationState() !== 'results' || detailsExpanded()">
|
|
59986
|
+
<div>
|
|
59987
|
+
<div class="flex items-center justify-between">
|
|
59988
|
+
<div>
|
|
59989
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
59990
|
+
{{ currentYear() }} Revenue Target
|
|
59991
|
+
</p>
|
|
59992
|
+
<p [ngClass]="calculatedValueClasses()" class="font-bold transition-all duration-300 text-lg"
|
|
59993
|
+
[class.lg:text-3xl]="calculationState() !== 'results' || detailsExpanded()">
|
|
59994
|
+
@if (calculationState() === 'results' && targets() === undefined && submittedAbsoluteInput() !== null) {
|
|
59995
|
+
> {{ formatCurrency(submittedAbsoluteInput()!) }}
|
|
59996
|
+
} @else {
|
|
59997
|
+
{{ formatCurrency(displayedTargetRevenue()) }}
|
|
59998
|
+
}
|
|
59999
|
+
</p>
|
|
60000
|
+
</div>
|
|
60001
|
+
@if (calculationState() === 'results' && targets() === undefined) {
|
|
60002
|
+
<button
|
|
60003
|
+
(click)="handleAdjustTarget(); $event.stopPropagation()"
|
|
60004
|
+
[ngClass]="secondaryButtonClasses()"
|
|
60005
|
+
class="px-4 py-2 rounded-lg text-sm font-semibold transition-all whitespace-nowrap">
|
|
60006
|
+
Adjust Revenue Target
|
|
60007
|
+
</button>
|
|
60008
|
+
}
|
|
60009
|
+
</div>
|
|
60010
|
+
|
|
60011
|
+
<div class="details-collapse" [class.details-collapse-expanded]="calculationState() !== 'results' || detailsExpanded()">
|
|
60012
|
+
<div class="details-collapse-content">
|
|
60013
|
+
<div class="relative pt-6 mt-6">
|
|
60014
|
+
<div class="absolute top-0 left-0 right-0 flex items-center -translate-y-1/2">
|
|
60015
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
60016
|
+
<span [ngClass]="dividerLabelClasses()" class="px-3 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
60017
|
+
vs. {{ priorYear() }}
|
|
60018
|
+
</span>
|
|
60019
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
60020
|
+
</div>
|
|
60021
|
+
<div class="grid grid-cols-2 gap-4 pt-2">
|
|
60022
|
+
<div>
|
|
60023
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
60024
|
+
Increase Amount
|
|
60025
|
+
</p>
|
|
60026
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
60027
|
+
@if (isTargetValid()) {
|
|
60028
|
+
{{ formatCurrency(animatedIncreaseAmount()) }}
|
|
60029
|
+
} @else {
|
|
60030
|
+
--
|
|
60031
|
+
}
|
|
60032
|
+
</p>
|
|
60033
|
+
</div>
|
|
60034
|
+
<div>
|
|
60035
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
60036
|
+
% Growth
|
|
60037
|
+
</p>
|
|
60038
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
60039
|
+
@if (isTargetValid()) {
|
|
60040
|
+
+{{ formatPercentage(animatedPercentageGrowth(), 1) }}
|
|
60041
|
+
} @else {
|
|
60042
|
+
--
|
|
60043
|
+
}
|
|
60044
|
+
</p>
|
|
60045
|
+
</div>
|
|
60046
|
+
</div>
|
|
60047
|
+
</div>
|
|
60048
|
+
|
|
60049
|
+
@if (currentPaceProjection() > 0) {
|
|
60050
|
+
<div class="relative pt-6 mt-6">
|
|
60051
|
+
<div class="absolute top-0 left-0 right-0 flex items-center -translate-y-1/2">
|
|
60052
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
60053
|
+
<span [ngClass]="dividerLabelClasses()" class="px-3 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
60054
|
+
{{ currentYear() }} YTD Gap
|
|
60055
|
+
</span>
|
|
60056
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
60057
|
+
</div>
|
|
60058
|
+
<div class="grid grid-cols-2 gap-4 pt-2">
|
|
60059
|
+
<div>
|
|
60060
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
60061
|
+
Gap to Close
|
|
60062
|
+
</p>
|
|
60063
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
60064
|
+
@if (isTargetValid()) {
|
|
60065
|
+
{{ formatCurrency(animatedGapAmount()) }}
|
|
60066
|
+
} @else {
|
|
60067
|
+
--
|
|
60068
|
+
}
|
|
60069
|
+
</p>
|
|
60070
|
+
</div>
|
|
60071
|
+
<div>
|
|
60072
|
+
<div class="flex items-center gap-1 mb-1">
|
|
60073
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
60074
|
+
Additional Growth Needed
|
|
60075
|
+
</p>
|
|
60076
|
+
<button
|
|
60077
|
+
type="button"
|
|
60078
|
+
[ngClass]="infoIconClasses()"
|
|
60079
|
+
class="flex-shrink-0 w-4 h-4 rounded-full inline-flex items-center justify-center transition-colors"
|
|
60080
|
+
[libSymphiqTooltip]="additionalGrowthTooltip"
|
|
60081
|
+
tooltipType="markdown"
|
|
60082
|
+
tooltipPosition="top"
|
|
60083
|
+
(click)="$event.stopPropagation()">
|
|
60084
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
60085
|
+
<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" />
|
|
60086
|
+
</svg>
|
|
60087
|
+
</button>
|
|
60088
|
+
</div>
|
|
60089
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
60090
|
+
@if (isTargetValid()) {
|
|
60091
|
+
{{ gapToClose().amount > 0 ? '+' : '' }}{{ formatPercentage(animatedGapPercentage(), 1) }}
|
|
60092
|
+
} @else {
|
|
60093
|
+
--
|
|
60094
|
+
}
|
|
60095
|
+
</p>
|
|
60096
|
+
</div>
|
|
60097
|
+
</div>
|
|
60098
|
+
</div>
|
|
60099
|
+
}
|
|
60100
|
+
|
|
60101
|
+
</div>
|
|
60102
|
+
</div>
|
|
60103
|
+
</div>
|
|
60104
|
+
</div>
|
|
60105
|
+
}
|
|
60106
|
+
</div>
|
|
60107
|
+
</div>
|
|
60108
|
+
</div>
|
|
60109
|
+
|
|
60110
|
+
@if (calculationState() !== 'results') {
|
|
60111
|
+
<div class="w-full">
|
|
60112
|
+
<p [ngClass]="chartTitleClasses()" class="text-sm font-semibold mb-3">
|
|
60113
|
+
Year-over-Year Revenue Trend
|
|
60114
|
+
</p>
|
|
60115
|
+
<div [ngClass]="chartContainerClasses()" class="rounded-xl border p-4">
|
|
60116
|
+
@if (revenueChartData()) {
|
|
60117
|
+
<symphiq-area-chart
|
|
60118
|
+
[chart]="revenueChartData()!"
|
|
60119
|
+
[showAxisLabels]="true"
|
|
60120
|
+
[viewMode]="viewMode()"
|
|
60121
|
+
[currencySymbol]="'$'"
|
|
60122
|
+
[height]="'200px'"
|
|
60123
|
+
/>
|
|
60124
|
+
} @else {
|
|
60125
|
+
<div class="h-64 flex items-center justify-center">
|
|
60126
|
+
<p [ngClass]="noDataClasses()" class="text-sm">
|
|
60127
|
+
No revenue data available
|
|
60128
|
+
</p>
|
|
60129
|
+
</div>
|
|
60130
|
+
}
|
|
60131
|
+
</div>
|
|
60132
|
+
</div>
|
|
60133
|
+
}
|
|
60134
|
+
</div>
|
|
60135
|
+
</div>
|
|
60136
|
+
|
|
60137
|
+
<div class="metrics-section-enter" [class.metrics-section-enter-active]="showMetricsVisualization()">
|
|
60138
|
+
<div class="metrics-section-content">
|
|
60139
|
+
@if (showMetricsVisualization()) {
|
|
60140
|
+
<div [ngClass]="sectionCardClasses()" class="rounded-2xl border shadow-lg p-8">
|
|
60141
|
+
<div class="mb-6">
|
|
60142
|
+
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold mb-2">
|
|
60143
|
+
Contributing Metrics
|
|
60144
|
+
</h2>
|
|
60145
|
+
<p [ngClass]="sectionDescriptionClasses()" class="text-sm">
|
|
60146
|
+
@if (targets() === undefined && submittedAbsoluteInput() !== null) {
|
|
60147
|
+
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.
|
|
60148
|
+
} @else {
|
|
60149
|
+
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.
|
|
60150
|
+
}
|
|
60151
|
+
</p>
|
|
60152
|
+
</div>
|
|
60153
|
+
|
|
60154
|
+
<symphiq-funnel-metrics-visualization
|
|
60155
|
+
[viewMode]="viewMode()"
|
|
60156
|
+
[calculations]="displayedMetricCalculations()"
|
|
60157
|
+
[pacingMetrics]="pacingMetrics()"
|
|
60158
|
+
(viewStageReport)="openMetricReport($event)"
|
|
60159
|
+
(viewRelatedMetricReport)="openMetricReport($event)"
|
|
60160
|
+
/>
|
|
60161
|
+
</div>
|
|
60162
|
+
}
|
|
60163
|
+
</div>
|
|
60164
|
+
</div>
|
|
60165
|
+
|
|
60166
|
+
<symphiq-sticky-submit-bar
|
|
60167
|
+
[viewMode]="viewMode()"
|
|
60168
|
+
[isValid]="isValid()"
|
|
60169
|
+
[isSubmitting]="isCalculating()"
|
|
60170
|
+
[validationMessage]="validationMessage()"
|
|
60171
|
+
[buttonText]="submitButtonText()"
|
|
60172
|
+
[showCancelButton]="calculationState() === 'input' && hasStoredResponse()"
|
|
60173
|
+
(submitClick)="handleSubmitClick()"
|
|
60174
|
+
(cancelClick)="handleCancel()"
|
|
60175
|
+
/>
|
|
60176
|
+
|
|
60177
|
+
<!-- Metric Report Modal -->
|
|
60178
|
+
<symphiq-metric-report-modal
|
|
60179
|
+
[viewMode]="viewMode()"
|
|
60180
|
+
[metricEnum]="selectedMetricEnum()"
|
|
60181
|
+
[metricData]="selectedMetricData()"
|
|
60182
|
+
[contributingMetrics]="selectedContributingMetrics()"
|
|
60183
|
+
[pacingMetrics]="pacingMetrics()"
|
|
60184
|
+
[trendChartData]="revenueChartData()"
|
|
60185
|
+
[isOpen]="isMetricReportOpen()"
|
|
60186
|
+
(closed)="closeMetricReport()"
|
|
60187
|
+
/>
|
|
60188
|
+
</div>
|
|
60036
60189
|
`, 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"] }]
|
|
60037
60190
|
}], () => [], { absoluteInputRef: [{
|
|
60038
60191
|
type: ViewChild,
|
|
@@ -60041,7 +60194,7 @@ class InitialTargetSettingComponent {
|
|
|
60041
60194
|
type: ViewChild,
|
|
60042
60195
|
args: ['percentageInputRef']
|
|
60043
60196
|
}], 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"] }] }); })();
|
|
60044
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber:
|
|
60197
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber: 536 }); })();
|
|
60045
60198
|
|
|
60046
60199
|
function IndeterminateSpinnerComponent_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
60047
60200
|
i0.ɵɵelement(0, "div", 5);
|