@eric-emg/symphiq-components 1.2.209 → 1.2.211
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.
|
@@ -54704,19 +54704,13 @@ class RevenueCalculatorWelcomeBannerComponent {
|
|
|
54704
54704
|
}], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], dataLoadStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataLoadStatus", required: false }] }], hasTargets: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasTargets", required: false }] }] }); })();
|
|
54705
54705
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RevenueCalculatorWelcomeBannerComponent, { className: "RevenueCalculatorWelcomeBannerComponent", filePath: "lib/components/revenue-calculator-dashboard/revenue-calculator-welcome-banner.component.ts", lineNumber: 85 }); })();
|
|
54706
54706
|
|
|
54707
|
-
function calculatePacingStatus(
|
|
54708
|
-
if (targetValue
|
|
54709
|
-
|
|
54710
|
-
|
|
54711
|
-
|
|
54712
|
-
return 'ahead';
|
|
54713
|
-
if (actualGrowth >= targetGrowth * 0.95)
|
|
54714
|
-
return 'on-pace';
|
|
54715
|
-
return 'behind';
|
|
54716
|
-
}
|
|
54717
|
-
if (currentValue >= priorValue * 1.05)
|
|
54707
|
+
function calculatePacingStatus(projectedValue, targetValue) {
|
|
54708
|
+
if (targetValue <= 0)
|
|
54709
|
+
return 'on-pace';
|
|
54710
|
+
const pacingPercent = ((projectedValue - targetValue) / targetValue) * 100;
|
|
54711
|
+
if (pacingPercent >= 5)
|
|
54718
54712
|
return 'ahead';
|
|
54719
|
-
if (
|
|
54713
|
+
if (pacingPercent >= -5)
|
|
54720
54714
|
return 'on-pace';
|
|
54721
54715
|
return 'behind';
|
|
54722
54716
|
}
|
|
@@ -54807,42 +54801,44 @@ function getPacingDisplayInfo(pacingPercentage, status, isDark) {
|
|
|
54807
54801
|
displayText
|
|
54808
54802
|
};
|
|
54809
54803
|
}
|
|
54810
|
-
function calculateMetricPacing(
|
|
54811
|
-
|
|
54812
|
-
|
|
54813
|
-
const
|
|
54814
|
-
|
|
54815
|
-
|
|
54816
|
-
const
|
|
54817
|
-
|
|
54804
|
+
function calculateMetricPacing(projectedValue, targetValue) {
|
|
54805
|
+
console.group(`[PACING] calculateMetricPacing`);
|
|
54806
|
+
console.log('[PACING] Input:', { projectedValue, targetValue });
|
|
54807
|
+
const pacingPercentage = targetValue > 0
|
|
54808
|
+
? ((projectedValue - targetValue) / targetValue) * 100
|
|
54809
|
+
: 0;
|
|
54810
|
+
const status = calculatePacingStatus(projectedValue, targetValue);
|
|
54811
|
+
console.log('[PACING] Result:', { pacingPercentage, status, projectedValue });
|
|
54812
|
+
console.groupEnd();
|
|
54818
54813
|
return {
|
|
54819
54814
|
pacingPercentage,
|
|
54820
54815
|
status,
|
|
54821
54816
|
projectedValue
|
|
54822
54817
|
};
|
|
54823
54818
|
}
|
|
54824
|
-
function
|
|
54825
|
-
|
|
54819
|
+
function extractProjectedValue(pacingResponse, metricEnum) {
|
|
54820
|
+
console.group(`[PACING] extractProjectedValue for ${metricEnum}`);
|
|
54821
|
+
if (!pacingResponse) {
|
|
54822
|
+
console.log('[PACING] No pacingResponse provided - returning null');
|
|
54823
|
+
console.groupEnd();
|
|
54826
54824
|
return null;
|
|
54827
|
-
|
|
54828
|
-
const
|
|
54829
|
-
|
|
54830
|
-
|
|
54825
|
+
}
|
|
54826
|
+
const resp = pacingResponse;
|
|
54827
|
+
console.log('[PACING] pacingResponse structure:', {
|
|
54828
|
+
hasProjectedMetricValues: !!resp.projectedMetricValues,
|
|
54829
|
+
projectedMetricValuesCount: resp.projectedMetricValues?.length ?? 0
|
|
54830
|
+
});
|
|
54831
|
+
const projectedMetric = resp.projectedMetricValues?.find((m) => m.metric === metricEnum);
|
|
54832
|
+
console.log('[PACING] Found projectedMetric for', metricEnum, ':', projectedMetric ? { metric: projectedMetric.metric, value: projectedMetric.value } : null);
|
|
54833
|
+
if (!projectedMetric?.value) {
|
|
54834
|
+
console.log('[PACING] No projectedMetric found - returning null');
|
|
54835
|
+
console.groupEnd();
|
|
54831
54836
|
return null;
|
|
54832
|
-
|
|
54833
|
-
const projectedValue =
|
|
54834
|
-
|
|
54835
|
-
|
|
54836
|
-
|
|
54837
|
-
const pacingPercentage = priorYtdValue > 0 ? ((currentValue - priorYtdValue) / priorYtdValue) * 100 : 0;
|
|
54838
|
-
return {
|
|
54839
|
-
metric: metricEnum,
|
|
54840
|
-
currentValue,
|
|
54841
|
-
priorYtdValue,
|
|
54842
|
-
projectedValue,
|
|
54843
|
-
pacingPercentage,
|
|
54844
|
-
ytdVariancePercent: pacingPercentage
|
|
54845
|
-
};
|
|
54837
|
+
}
|
|
54838
|
+
const projectedValue = parseFloat(projectedMetric.value);
|
|
54839
|
+
console.log('[PACING] Returning projectedValue:', projectedValue);
|
|
54840
|
+
console.groupEnd();
|
|
54841
|
+
return projectedValue;
|
|
54846
54842
|
}
|
|
54847
54843
|
|
|
54848
54844
|
class PacingStatusBadgeComponent {
|
|
@@ -55015,7 +55011,7 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Template
|
|
|
55015
55011
|
i0.ɵɵadvance();
|
|
55016
55012
|
i0.ɵɵproperty("ngClass", ctx_r1.relatedPercentageBadgeClasses());
|
|
55017
55013
|
i0.ɵɵadvance();
|
|
55018
|
-
i0.ɵɵ
|
|
55014
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.getGrowthSign(metric_r3.calc.metric), "", ctx_r1.formatPercentage(ctx_r1.Math.abs(metric_r3.calc.percentageIncrease), 1), " ");
|
|
55019
55015
|
i0.ɵɵadvance();
|
|
55020
55016
|
i0.ɵɵproperty("ngClass", metric_r3.pacingInfo ? "grid-cols-3" : "grid-cols-2");
|
|
55021
55017
|
i0.ɵɵadvance(2);
|
|
@@ -55035,7 +55031,7 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_23_Template(rf, c
|
|
|
55035
55031
|
i0.ɵɵtext(3, " Related Metrics ");
|
|
55036
55032
|
i0.ɵɵelementEnd();
|
|
55037
55033
|
i0.ɵɵelementStart(4, "div", 19);
|
|
55038
|
-
i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Template, 18,
|
|
55034
|
+
i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Template, 18, 15, "div", 20, _forTrack1$3);
|
|
55039
55035
|
i0.ɵɵelementEnd()();
|
|
55040
55036
|
} if (rf & 2) {
|
|
55041
55037
|
const stage_r1 = i0.ɵɵnextContext().$implicit;
|
|
@@ -55087,7 +55083,7 @@ function FunnelMetricsVisualizationComponent_For_4_Template(rf, ctx) { if (rf &
|
|
|
55087
55083
|
i0.ɵɵadvance();
|
|
55088
55084
|
i0.ɵɵproperty("ngClass", ctx_r1.percentageBadgeClasses());
|
|
55089
55085
|
i0.ɵɵadvance();
|
|
55090
|
-
i0.ɵɵ
|
|
55086
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.getGrowthSign(stage_r1.stageMetric.metric), "", ctx_r1.formatPercentage(ctx_r1.Math.abs(stage_r1.stageMetric.percentageIncrease), 1), " ");
|
|
55091
55087
|
i0.ɵɵadvance(3);
|
|
55092
55088
|
i0.ɵɵproperty("ngClass", ctx_r1.labelClasses());
|
|
55093
55089
|
i0.ɵɵadvance();
|
|
@@ -55114,21 +55110,39 @@ class FunnelMetricsVisualizationComponent {
|
|
|
55114
55110
|
this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
|
|
55115
55111
|
this.calculations = input([], ...(ngDevMode ? [{ debugName: "calculations" }] : []));
|
|
55116
55112
|
this.pacingMetrics = input(undefined, ...(ngDevMode ? [{ debugName: "pacingMetrics" }] : []));
|
|
55113
|
+
this.Math = Math;
|
|
55117
55114
|
this.currentYear = computed(() => new Date().getFullYear(), ...(ngDevMode ? [{ debugName: "currentYear" }] : []));
|
|
55118
55115
|
this.priorYear = computed(() => new Date().getFullYear() - 1, ...(ngDevMode ? [{ debugName: "priorYear" }] : []));
|
|
55119
55116
|
this.funnelStages = computed(() => {
|
|
55120
55117
|
const calcs = this.calculations();
|
|
55121
55118
|
const pacingResponse = this.pacingMetrics();
|
|
55119
|
+
console.group('[PACING] funnelStages computed');
|
|
55120
|
+
console.log('[PACING] calculations count:', calcs.length);
|
|
55121
|
+
console.log('[PACING] calculations:', calcs.map(c => ({ metric: c.metric, isFunnelStage: c.isFunnelStage, funnelMetric: c.funnelMetric })));
|
|
55122
|
+
console.log('[PACING] pacingResponse exists:', !!pacingResponse);
|
|
55123
|
+
if (pacingResponse) {
|
|
55124
|
+
console.log('[PACING] pacingResponse raw:', JSON.stringify(pacingResponse, null, 2));
|
|
55125
|
+
}
|
|
55122
55126
|
const grouped = new Map();
|
|
55123
55127
|
const stageMetrics = calcs.filter(c => c.isFunnelStage);
|
|
55124
55128
|
const relatedMetrics = calcs.filter(c => !c.isFunnelStage);
|
|
55129
|
+
console.log('[PACING] stageMetrics count:', stageMetrics.length);
|
|
55130
|
+
console.log('[PACING] stageMetrics:', stageMetrics.map(s => s.metric));
|
|
55131
|
+
console.log('[PACING] relatedMetrics count:', relatedMetrics.length);
|
|
55125
55132
|
stageMetrics.forEach(stageMetric => {
|
|
55126
55133
|
const related = relatedMetrics.filter(rm => rm.funnelMetric === stageMetric.metric);
|
|
55127
|
-
|
|
55128
|
-
const
|
|
55134
|
+
console.log(`[PACING] Processing stage: ${stageMetric.metric}`);
|
|
55135
|
+
const stageProjectedValue = extractProjectedValue(pacingResponse, stageMetric.metric);
|
|
55136
|
+
console.log(`[PACING] stageProjectedValue for ${stageMetric.metric}:`, stageProjectedValue);
|
|
55137
|
+
const stagePacingInfo = stageProjectedValue !== null
|
|
55138
|
+
? calculateMetricPacing(stageProjectedValue, stageMetric.targetValue)
|
|
55139
|
+
: null;
|
|
55140
|
+
console.log(`[PACING] stagePacingInfo for ${stageMetric.metric}:`, stagePacingInfo);
|
|
55129
55141
|
const relatedWithPacing = related.map(relMetric => {
|
|
55130
|
-
const
|
|
55131
|
-
const relPacingInfo =
|
|
55142
|
+
const relProjectedValue = extractProjectedValue(pacingResponse, relMetric.metric);
|
|
55143
|
+
const relPacingInfo = relProjectedValue !== null
|
|
55144
|
+
? calculateMetricPacing(relProjectedValue, relMetric.targetValue)
|
|
55145
|
+
: null;
|
|
55132
55146
|
return { calc: relMetric, pacingInfo: relPacingInfo };
|
|
55133
55147
|
});
|
|
55134
55148
|
grouped.set(stageMetric.metric, {
|
|
@@ -55137,11 +55151,18 @@ class FunnelMetricsVisualizationComponent {
|
|
|
55137
55151
|
pacingInfo: stagePacingInfo
|
|
55138
55152
|
});
|
|
55139
55153
|
});
|
|
55140
|
-
|
|
55154
|
+
const result = Array.from(grouped.values()).sort((a, b) => {
|
|
55141
55155
|
const aInd = a.stageMetric.funnelInd ?? 999;
|
|
55142
55156
|
const bInd = b.stageMetric.funnelInd ?? 999;
|
|
55143
55157
|
return aInd - bInd;
|
|
55144
55158
|
});
|
|
55159
|
+
console.log('[PACING] Final funnelStages result:', result.map(r => ({
|
|
55160
|
+
stage: r.stageMetric.metric,
|
|
55161
|
+
hasPacingInfo: !!r.pacingInfo,
|
|
55162
|
+
pacingPercentage: r.pacingInfo?.pacingPercentage
|
|
55163
|
+
})));
|
|
55164
|
+
console.groupEnd();
|
|
55165
|
+
return result;
|
|
55145
55166
|
}, ...(ngDevMode ? [{ debugName: "funnelStages" }] : []));
|
|
55146
55167
|
}
|
|
55147
55168
|
stageCardClasses() {
|
|
@@ -55242,12 +55263,15 @@ class FunnelMetricsVisualizationComponent {
|
|
|
55242
55263
|
getMarkdownTooltipContent(markdown, title) {
|
|
55243
55264
|
return { title, markdown };
|
|
55244
55265
|
}
|
|
55266
|
+
getGrowthSign(metric) {
|
|
55267
|
+
return MetricEnumUtil.increaseBad(metric) ? '-' : '+';
|
|
55268
|
+
}
|
|
55245
55269
|
static { this.ɵfac = function FunnelMetricsVisualizationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FunnelMetricsVisualizationComponent)(); }; }
|
|
55246
55270
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FunnelMetricsVisualizationComponent, selectors: [["symphiq-funnel-metrics-visualization"]], inputs: { viewMode: [1, "viewMode"], calculations: [1, "calculations"], pacingMetrics: [1, "pacingMetrics"] }, decls: 5, vars: 0, consts: [[1, "space-y-6"], [1, "space-y-8"], [1, "rounded-xl", "p-6", "border-2", "transition-all", "duration-200", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "mb-4"], [1, "flex-1"], [1, "flex", "items-center", "gap-2", "mb-1"], [1, "text-lg", "font-bold", "leading-tight", "m-0", 3, "ngClass"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "right", 1, "flex-shrink-0", "w-6", "h-6", "rounded-full", "inline-flex", "items-center", "justify-center", "transition-colors", 3, "ngClass", "libSymphiqTooltip"], [1, "flex", "items-center", "gap-3"], [3, "viewMode", "pacingPercentage", "status"], [1, "px-4", "py-2", "rounded-lg", "font-bold", "text-sm", 3, "ngClass"], [1, "grid", "grid-cols-3", "gap-4", "mb-4"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "my-4", 3, "ngClass"], [1, "space-y-2"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "mb-3", 3, "ngClass"], [1, "grid", "gap-2"], [1, "p-3", "rounded-lg", 3, "ngClass"], [1, "flex", "items-center", "justify-between", "mb-2"], [1, "flex", "items-center", "gap-2", "flex-1"], [1, "text-sm", "font-semibold", "leading-tight", 3, "ngClass"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "right", 1, "flex-shrink-0", "w-5", "h-5", "rounded-full", "inline-flex", "items-center", "justify-center", "transition-colors", 3, "ngClass", "libSymphiqTooltip"], [1, "flex", "items-center", "gap-2"], [1, "px-2", "py-1", "rounded", "text-xs", "font-bold", 3, "ngClass"], [1, "grid", "gap-2", "text-xs", 3, "ngClass"], [3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3.5", "h-3.5"]], template: function FunnelMetricsVisualizationComponent_Template(rf, ctx) { if (rf & 1) {
|
|
55247
55271
|
i0.ɵɵelementStart(0, "div", 0);
|
|
55248
55272
|
i0.ɵɵelement(1, "symphiq-tooltip-container");
|
|
55249
55273
|
i0.ɵɵelementStart(2, "div", 1);
|
|
55250
|
-
i0.ɵɵrepeaterCreate(3, FunnelMetricsVisualizationComponent_For_4_Template, 24,
|
|
55274
|
+
i0.ɵɵrepeaterCreate(3, FunnelMetricsVisualizationComponent_For_4_Template, 24, 18, "div", 2, _forTrack0$i);
|
|
55251
55275
|
i0.ɵɵelementEnd()();
|
|
55252
55276
|
} if (rf & 2) {
|
|
55253
55277
|
i0.ɵɵadvance(3);
|
|
@@ -55261,140 +55285,140 @@ class FunnelMetricsVisualizationComponent {
|
|
|
55261
55285
|
standalone: true,
|
|
55262
55286
|
imports: [CommonModule, PacingStatusBadgeComponent, TooltipDirective, TooltipContainerComponent],
|
|
55263
55287
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
55264
|
-
template: `
|
|
55265
|
-
<div class="space-y-6">
|
|
55266
|
-
<symphiq-tooltip-container />
|
|
55267
|
-
<div class="space-y-8">
|
|
55268
|
-
@for (stage of funnelStages(); track stage.stageMetric.metric) {
|
|
55269
|
-
<div [ngClass]="stageCardClasses()" class="rounded-xl p-6 border-2 transition-all duration-200">
|
|
55270
|
-
<div class="flex items-start justify-between mb-4">
|
|
55271
|
-
<div class="flex-1">
|
|
55272
|
-
<div class="flex items-center gap-2 mb-1">
|
|
55273
|
-
<h3 [ngClass]="stageTitleClasses()" class="text-lg font-bold leading-tight m-0">
|
|
55274
|
-
{{ getMetricTitle(stage.stageMetric) }}
|
|
55275
|
-
</h3>
|
|
55276
|
-
@if (stage.stageMetric.description) {
|
|
55277
|
-
<button
|
|
55278
|
-
type="button"
|
|
55279
|
-
[ngClass]="infoIconClasses()"
|
|
55280
|
-
class="flex-shrink-0 w-6 h-6 rounded-full inline-flex items-center justify-center transition-colors"
|
|
55281
|
-
[libSymphiqTooltip]="getMarkdownTooltipContent(stage.stageMetric.description, getMetricTitle(stage.stageMetric))"
|
|
55282
|
-
tooltipType="markdown"
|
|
55283
|
-
tooltipPosition="right">
|
|
55284
|
-
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
55285
|
-
<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" />
|
|
55286
|
-
</svg>
|
|
55287
|
-
</button>
|
|
55288
|
-
}
|
|
55289
|
-
</div>
|
|
55290
|
-
</div>
|
|
55291
|
-
<div class="flex items-center gap-3">
|
|
55292
|
-
@if (stage.pacingInfo) {
|
|
55293
|
-
<symphiq-pacing-status-badge
|
|
55294
|
-
[viewMode]="viewMode()"
|
|
55295
|
-
[pacingPercentage]="stage.pacingInfo.pacingPercentage"
|
|
55296
|
-
[status]="stage.pacingInfo.status"
|
|
55297
|
-
/>
|
|
55298
|
-
}
|
|
55299
|
-
<div [ngClass]="percentageBadgeClasses()" class="px-4 py-2 rounded-lg font-bold text-sm">
|
|
55300
|
-
|
|
55301
|
-
</div>
|
|
55302
|
-
</div>
|
|
55303
|
-
</div>
|
|
55304
|
-
|
|
55305
|
-
<div class="grid grid-cols-3 gap-4 mb-4">
|
|
55306
|
-
<div>
|
|
55307
|
-
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
55308
|
-
{{ priorYear() }} Actual
|
|
55309
|
-
</p>
|
|
55310
|
-
<p [ngClass]="valueClasses()" class="text-2xl font-bold">
|
|
55311
|
-
{{ formatMetricValue(stage.stageMetric.currentValue, stage.stageMetric.metric) }}
|
|
55312
|
-
</p>
|
|
55313
|
-
</div>
|
|
55314
|
-
@if (stage.pacingInfo) {
|
|
55315
|
-
<div>
|
|
55316
|
-
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
55317
|
-
{{ currentYear() }} Projected
|
|
55318
|
-
</p>
|
|
55319
|
-
<p [ngClass]="projectedValueClasses()" class="text-2xl font-bold">
|
|
55320
|
-
{{ formatMetricValue(stage.pacingInfo.projectedValue, stage.stageMetric.metric, false) }}
|
|
55321
|
-
</p>
|
|
55322
|
-
</div>
|
|
55323
|
-
}
|
|
55324
|
-
<div>
|
|
55325
|
-
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
55326
|
-
{{ currentYear() }} Target
|
|
55327
|
-
</p>
|
|
55328
|
-
<p [ngClass]="targetValueClasses()" class="text-2xl font-bold">
|
|
55329
|
-
{{ formatMetricValue(stage.stageMetric.targetValue, stage.stageMetric.metric) }}
|
|
55330
|
-
</p>
|
|
55331
|
-
</div>
|
|
55332
|
-
</div>
|
|
55333
|
-
|
|
55334
|
-
@if (stage.relatedMetrics.length > 0) {
|
|
55335
|
-
<div [ngClass]="dividerClasses()" class="my-4"></div>
|
|
55336
|
-
|
|
55337
|
-
<div class="space-y-2">
|
|
55338
|
-
<p [ngClass]="relatedTitleClasses()" class="text-xs font-semibold uppercase tracking-wider mb-3">
|
|
55339
|
-
Related Metrics
|
|
55340
|
-
</p>
|
|
55341
|
-
<div class="grid gap-2">
|
|
55342
|
-
@for (metric of stage.relatedMetrics; track metric.calc.metric) {
|
|
55343
|
-
<div [ngClass]="relatedMetricCardClasses()" class="p-3 rounded-lg">
|
|
55344
|
-
<div class="flex items-center justify-between mb-2">
|
|
55345
|
-
<div class="flex items-center gap-2 flex-1">
|
|
55346
|
-
<p [ngClass]="relatedMetricNameClasses()" class="text-sm font-semibold leading-tight">
|
|
55347
|
-
{{ getMetricTitle(metric.calc) }}
|
|
55348
|
-
</p>
|
|
55349
|
-
@if (metric.calc.description) {
|
|
55350
|
-
<button
|
|
55351
|
-
type="button"
|
|
55352
|
-
[ngClass]="infoIconClasses()"
|
|
55353
|
-
class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
|
|
55354
|
-
[libSymphiqTooltip]="getMarkdownTooltipContent(metric.calc.description, getMetricTitle(metric.calc))"
|
|
55355
|
-
tooltipType="markdown"
|
|
55356
|
-
tooltipPosition="right">
|
|
55357
|
-
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
55358
|
-
<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" />
|
|
55359
|
-
</svg>
|
|
55360
|
-
</button>
|
|
55361
|
-
}
|
|
55362
|
-
</div>
|
|
55363
|
-
<div class="flex items-center gap-2">
|
|
55364
|
-
@if (metric.pacingInfo) {
|
|
55365
|
-
<symphiq-pacing-status-badge
|
|
55366
|
-
[viewMode]="viewMode()"
|
|
55367
|
-
[pacingPercentage]="metric.pacingInfo.pacingPercentage"
|
|
55368
|
-
[status]="metric.pacingInfo.status"
|
|
55369
|
-
/>
|
|
55370
|
-
}
|
|
55371
|
-
<span [ngClass]="relatedPercentageBadgeClasses()" class="px-2 py-1 rounded text-xs font-bold">
|
|
55372
|
-
|
|
55373
|
-
</span>
|
|
55374
|
-
</div>
|
|
55375
|
-
</div>
|
|
55376
|
-
<div class="grid gap-2 text-xs" [ngClass]="metric.pacingInfo ? 'grid-cols-3' : 'grid-cols-2'">
|
|
55377
|
-
<div>
|
|
55378
|
-
<p [ngClass]="relatedLabelClasses()">{{ priorYear() }}: {{ formatMetricValue(metric.calc.currentValue, metric.calc.metric) }}</p>
|
|
55379
|
-
</div>
|
|
55380
|
-
@if (metric.pacingInfo) {
|
|
55381
|
-
<div>
|
|
55382
|
-
<p [ngClass]="relatedLabelClasses()">Proj: {{ formatMetricValue(metric.pacingInfo.projectedValue, metric.calc.metric, false) }}</p>
|
|
55383
|
-
</div>
|
|
55384
|
-
}
|
|
55385
|
-
<div>
|
|
55386
|
-
<p [ngClass]="relatedLabelClasses()">Target: {{ formatMetricValue(metric.calc.targetValue, metric.calc.metric) }}</p>
|
|
55387
|
-
</div>
|
|
55388
|
-
</div>
|
|
55389
|
-
</div>
|
|
55390
|
-
}
|
|
55391
|
-
</div>
|
|
55392
|
-
</div>
|
|
55393
|
-
}
|
|
55394
|
-
</div>
|
|
55395
|
-
}
|
|
55396
|
-
</div>
|
|
55397
|
-
</div>
|
|
55288
|
+
template: `
|
|
55289
|
+
<div class="space-y-6">
|
|
55290
|
+
<symphiq-tooltip-container />
|
|
55291
|
+
<div class="space-y-8">
|
|
55292
|
+
@for (stage of funnelStages(); track stage.stageMetric.metric) {
|
|
55293
|
+
<div [ngClass]="stageCardClasses()" class="rounded-xl p-6 border-2 transition-all duration-200">
|
|
55294
|
+
<div class="flex items-start justify-between mb-4">
|
|
55295
|
+
<div class="flex-1">
|
|
55296
|
+
<div class="flex items-center gap-2 mb-1">
|
|
55297
|
+
<h3 [ngClass]="stageTitleClasses()" class="text-lg font-bold leading-tight m-0">
|
|
55298
|
+
{{ getMetricTitle(stage.stageMetric) }}
|
|
55299
|
+
</h3>
|
|
55300
|
+
@if (stage.stageMetric.description) {
|
|
55301
|
+
<button
|
|
55302
|
+
type="button"
|
|
55303
|
+
[ngClass]="infoIconClasses()"
|
|
55304
|
+
class="flex-shrink-0 w-6 h-6 rounded-full inline-flex items-center justify-center transition-colors"
|
|
55305
|
+
[libSymphiqTooltip]="getMarkdownTooltipContent(stage.stageMetric.description, getMetricTitle(stage.stageMetric))"
|
|
55306
|
+
tooltipType="markdown"
|
|
55307
|
+
tooltipPosition="right">
|
|
55308
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
55309
|
+
<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" />
|
|
55310
|
+
</svg>
|
|
55311
|
+
</button>
|
|
55312
|
+
}
|
|
55313
|
+
</div>
|
|
55314
|
+
</div>
|
|
55315
|
+
<div class="flex items-center gap-3">
|
|
55316
|
+
@if (stage.pacingInfo) {
|
|
55317
|
+
<symphiq-pacing-status-badge
|
|
55318
|
+
[viewMode]="viewMode()"
|
|
55319
|
+
[pacingPercentage]="stage.pacingInfo.pacingPercentage"
|
|
55320
|
+
[status]="stage.pacingInfo.status"
|
|
55321
|
+
/>
|
|
55322
|
+
}
|
|
55323
|
+
<div [ngClass]="percentageBadgeClasses()" class="px-4 py-2 rounded-lg font-bold text-sm">
|
|
55324
|
+
{{ getGrowthSign(stage.stageMetric.metric) }}{{ formatPercentage(Math.abs(stage.stageMetric.percentageIncrease), 1) }}
|
|
55325
|
+
</div>
|
|
55326
|
+
</div>
|
|
55327
|
+
</div>
|
|
55328
|
+
|
|
55329
|
+
<div class="grid grid-cols-3 gap-4 mb-4">
|
|
55330
|
+
<div>
|
|
55331
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
55332
|
+
{{ priorYear() }} Actual
|
|
55333
|
+
</p>
|
|
55334
|
+
<p [ngClass]="valueClasses()" class="text-2xl font-bold">
|
|
55335
|
+
{{ formatMetricValue(stage.stageMetric.currentValue, stage.stageMetric.metric) }}
|
|
55336
|
+
</p>
|
|
55337
|
+
</div>
|
|
55338
|
+
@if (stage.pacingInfo) {
|
|
55339
|
+
<div>
|
|
55340
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
55341
|
+
{{ currentYear() }} Projected
|
|
55342
|
+
</p>
|
|
55343
|
+
<p [ngClass]="projectedValueClasses()" class="text-2xl font-bold">
|
|
55344
|
+
{{ formatMetricValue(stage.pacingInfo.projectedValue, stage.stageMetric.metric, false) }}
|
|
55345
|
+
</p>
|
|
55346
|
+
</div>
|
|
55347
|
+
}
|
|
55348
|
+
<div>
|
|
55349
|
+
<p [ngClass]="labelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
55350
|
+
{{ currentYear() }} Target
|
|
55351
|
+
</p>
|
|
55352
|
+
<p [ngClass]="targetValueClasses()" class="text-2xl font-bold">
|
|
55353
|
+
{{ formatMetricValue(stage.stageMetric.targetValue, stage.stageMetric.metric) }}
|
|
55354
|
+
</p>
|
|
55355
|
+
</div>
|
|
55356
|
+
</div>
|
|
55357
|
+
|
|
55358
|
+
@if (stage.relatedMetrics.length > 0) {
|
|
55359
|
+
<div [ngClass]="dividerClasses()" class="my-4"></div>
|
|
55360
|
+
|
|
55361
|
+
<div class="space-y-2">
|
|
55362
|
+
<p [ngClass]="relatedTitleClasses()" class="text-xs font-semibold uppercase tracking-wider mb-3">
|
|
55363
|
+
Related Metrics
|
|
55364
|
+
</p>
|
|
55365
|
+
<div class="grid gap-2">
|
|
55366
|
+
@for (metric of stage.relatedMetrics; track metric.calc.metric) {
|
|
55367
|
+
<div [ngClass]="relatedMetricCardClasses()" class="p-3 rounded-lg">
|
|
55368
|
+
<div class="flex items-center justify-between mb-2">
|
|
55369
|
+
<div class="flex items-center gap-2 flex-1">
|
|
55370
|
+
<p [ngClass]="relatedMetricNameClasses()" class="text-sm font-semibold leading-tight">
|
|
55371
|
+
{{ getMetricTitle(metric.calc) }}
|
|
55372
|
+
</p>
|
|
55373
|
+
@if (metric.calc.description) {
|
|
55374
|
+
<button
|
|
55375
|
+
type="button"
|
|
55376
|
+
[ngClass]="infoIconClasses()"
|
|
55377
|
+
class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
|
|
55378
|
+
[libSymphiqTooltip]="getMarkdownTooltipContent(metric.calc.description, getMetricTitle(metric.calc))"
|
|
55379
|
+
tooltipType="markdown"
|
|
55380
|
+
tooltipPosition="right">
|
|
55381
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
55382
|
+
<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" />
|
|
55383
|
+
</svg>
|
|
55384
|
+
</button>
|
|
55385
|
+
}
|
|
55386
|
+
</div>
|
|
55387
|
+
<div class="flex items-center gap-2">
|
|
55388
|
+
@if (metric.pacingInfo) {
|
|
55389
|
+
<symphiq-pacing-status-badge
|
|
55390
|
+
[viewMode]="viewMode()"
|
|
55391
|
+
[pacingPercentage]="metric.pacingInfo.pacingPercentage"
|
|
55392
|
+
[status]="metric.pacingInfo.status"
|
|
55393
|
+
/>
|
|
55394
|
+
}
|
|
55395
|
+
<span [ngClass]="relatedPercentageBadgeClasses()" class="px-2 py-1 rounded text-xs font-bold">
|
|
55396
|
+
{{ getGrowthSign(metric.calc.metric) }}{{ formatPercentage(Math.abs(metric.calc.percentageIncrease), 1) }}
|
|
55397
|
+
</span>
|
|
55398
|
+
</div>
|
|
55399
|
+
</div>
|
|
55400
|
+
<div class="grid gap-2 text-xs" [ngClass]="metric.pacingInfo ? 'grid-cols-3' : 'grid-cols-2'">
|
|
55401
|
+
<div>
|
|
55402
|
+
<p [ngClass]="relatedLabelClasses()">{{ priorYear() }}: {{ formatMetricValue(metric.calc.currentValue, metric.calc.metric) }}</p>
|
|
55403
|
+
</div>
|
|
55404
|
+
@if (metric.pacingInfo) {
|
|
55405
|
+
<div>
|
|
55406
|
+
<p [ngClass]="relatedLabelClasses()">Proj: {{ formatMetricValue(metric.pacingInfo.projectedValue, metric.calc.metric, false) }}</p>
|
|
55407
|
+
</div>
|
|
55408
|
+
}
|
|
55409
|
+
<div>
|
|
55410
|
+
<p [ngClass]="relatedLabelClasses()">Target: {{ formatMetricValue(metric.calc.targetValue, metric.calc.metric) }}</p>
|
|
55411
|
+
</div>
|
|
55412
|
+
</div>
|
|
55413
|
+
</div>
|
|
55414
|
+
}
|
|
55415
|
+
</div>
|
|
55416
|
+
</div>
|
|
55417
|
+
}
|
|
55418
|
+
</div>
|
|
55419
|
+
}
|
|
55420
|
+
</div>
|
|
55421
|
+
</div>
|
|
55398
55422
|
`
|
|
55399
55423
|
}]
|
|
55400
55424
|
}], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], calculations: [{ type: i0.Input, args: [{ isSignal: true, alias: "calculations", required: false }] }], pacingMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingMetrics", required: false }] }] }); })();
|
|
@@ -56226,7 +56250,7 @@ var areaChart_component = /*#__PURE__*/Object.freeze({
|
|
|
56226
56250
|
|
|
56227
56251
|
const _c0$r = ["absoluteInputRef"];
|
|
56228
56252
|
const _c1$b = ["percentageInputRef"];
|
|
56229
|
-
function
|
|
56253
|
+
function InitialTargetSettingComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
56230
56254
|
i0.ɵɵelementStart(0, "div", 10);
|
|
56231
56255
|
i0.ɵɵnamespaceSVG();
|
|
56232
56256
|
i0.ɵɵelementStart(1, "svg", 11);
|
|
@@ -56250,14 +56274,14 @@ function InitialTargetSettingComponent_Conditional_17_Template(rf, ctx) { if (rf
|
|
|
56250
56274
|
i0.ɵɵadvance();
|
|
56251
56275
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.formatCurrency(ctx_r0.currentPaceProjection()), " ");
|
|
56252
56276
|
} }
|
|
56253
|
-
function
|
|
56277
|
+
function InitialTargetSettingComponent_Conditional_22_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
56254
56278
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
56255
56279
|
i0.ɵɵelementStart(0, "div", 34)(1, "span", 35);
|
|
56256
56280
|
i0.ɵɵtext(2, " $ ");
|
|
56257
56281
|
i0.ɵɵelementEnd();
|
|
56258
56282
|
i0.ɵɵelementStart(3, "input", 36, 0);
|
|
56259
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
56260
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
56283
|
+
i0.ɵɵtwoWayListener("ngModelChange", function InitialTargetSettingComponent_Conditional_22_Conditional_5_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.absoluteInput, $event) || (ctx_r0.absoluteInput = $event); return i0.ɵɵresetView($event); });
|
|
56284
|
+
i0.ɵɵlistener("ngModelChange", function InitialTargetSettingComponent_Conditional_22_Conditional_5_Template_input_ngModelChange_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onAbsoluteInputChange()); });
|
|
56261
56285
|
i0.ɵɵelementEnd()();
|
|
56262
56286
|
} if (rf & 2) {
|
|
56263
56287
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
@@ -56267,11 +56291,11 @@ function InitialTargetSettingComponent_Conditional_21_Conditional_5_Template(rf,
|
|
|
56267
56291
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.absoluteInput);
|
|
56268
56292
|
i0.ɵɵproperty("ngClass", ctx_r0.inputClasses());
|
|
56269
56293
|
} }
|
|
56270
|
-
function
|
|
56294
|
+
function InitialTargetSettingComponent_Conditional_22_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
56271
56295
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
56272
56296
|
i0.ɵɵelementStart(0, "div", 34)(1, "input", 37, 1);
|
|
56273
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
56274
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
56297
|
+
i0.ɵɵtwoWayListener("ngModelChange", function InitialTargetSettingComponent_Conditional_22_Conditional_6_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.percentageInput, $event) || (ctx_r0.percentageInput = $event); return i0.ɵɵresetView($event); });
|
|
56298
|
+
i0.ɵɵlistener("ngModelChange", function InitialTargetSettingComponent_Conditional_22_Conditional_6_Template_input_ngModelChange_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onPercentageInputChange()); });
|
|
56275
56299
|
i0.ɵɵelementEnd();
|
|
56276
56300
|
i0.ɵɵelementStart(3, "span", 38);
|
|
56277
56301
|
i0.ɵɵtext(4, " % ");
|
|
@@ -56284,17 +56308,17 @@ function InitialTargetSettingComponent_Conditional_21_Conditional_6_Template(rf,
|
|
|
56284
56308
|
i0.ɵɵadvance(2);
|
|
56285
56309
|
i0.ɵɵproperty("ngClass", ctx_r0.inputSuffixClasses());
|
|
56286
56310
|
} }
|
|
56287
|
-
function
|
|
56311
|
+
function InitialTargetSettingComponent_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
56288
56312
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
56289
56313
|
i0.ɵɵelementStart(0, "div", 32)(1, "button", 33);
|
|
56290
|
-
i0.ɵɵlistener("click", function
|
|
56314
|
+
i0.ɵɵlistener("click", function InitialTargetSettingComponent_Conditional_22_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setInputMode("absolute")); });
|
|
56291
56315
|
i0.ɵɵtext(2, " Absolute Amount ");
|
|
56292
56316
|
i0.ɵɵelementEnd();
|
|
56293
56317
|
i0.ɵɵelementStart(3, "button", 33);
|
|
56294
|
-
i0.ɵɵlistener("click", function
|
|
56318
|
+
i0.ɵɵlistener("click", function InitialTargetSettingComponent_Conditional_22_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setInputMode("percentage")); });
|
|
56295
56319
|
i0.ɵɵtext(4, " % Increase ");
|
|
56296
56320
|
i0.ɵɵelementEnd()();
|
|
56297
|
-
i0.ɵɵconditionalCreate(5,
|
|
56321
|
+
i0.ɵɵconditionalCreate(5, InitialTargetSettingComponent_Conditional_22_Conditional_5_Template, 5, 3, "div", 34)(6, InitialTargetSettingComponent_Conditional_22_Conditional_6_Template, 5, 3, "div", 34);
|
|
56298
56322
|
} if (rf & 2) {
|
|
56299
56323
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
56300
56324
|
i0.ɵɵadvance();
|
|
@@ -56304,13 +56328,13 @@ function InitialTargetSettingComponent_Conditional_21_Template(rf, ctx) { if (rf
|
|
|
56304
56328
|
i0.ɵɵadvance(2);
|
|
56305
56329
|
i0.ɵɵconditional(ctx_r0.inputMode() === "absolute" ? 5 : 6);
|
|
56306
56330
|
} }
|
|
56307
|
-
function
|
|
56331
|
+
function InitialTargetSettingComponent_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
56308
56332
|
i0.ɵɵelement(0, "symphiq-area-chart", 22);
|
|
56309
56333
|
} if (rf & 2) {
|
|
56310
56334
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
56311
56335
|
i0.ɵɵproperty("chart", ctx_r0.revenueChartData())("showAxisLabels", true)("viewMode", ctx_r0.viewMode())("currencySymbol", "$")("height", "108px");
|
|
56312
56336
|
} }
|
|
56313
|
-
function
|
|
56337
|
+
function InitialTargetSettingComponent_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
56314
56338
|
i0.ɵɵelementStart(0, "div", 23)(1, "p", 39);
|
|
56315
56339
|
i0.ɵɵtext(2, " No revenue data available ");
|
|
56316
56340
|
i0.ɵɵelementEnd()();
|
|
@@ -56319,77 +56343,96 @@ function InitialTargetSettingComponent_Conditional_29_Template(rf, ctx) { if (rf
|
|
|
56319
56343
|
i0.ɵɵadvance();
|
|
56320
56344
|
i0.ɵɵproperty("ngClass", ctx_r0.noDataClasses());
|
|
56321
56345
|
} }
|
|
56322
|
-
function
|
|
56346
|
+
function InitialTargetSettingComponent_Conditional_33_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
56323
56347
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
56324
|
-
i0.ɵɵelementStart(0, "button",
|
|
56325
|
-
i0.ɵɵlistener("click", function
|
|
56348
|
+
i0.ɵɵelementStart(0, "button", 50);
|
|
56349
|
+
i0.ɵɵlistener("click", function InitialTargetSettingComponent_Conditional_33_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.handleAdjustTarget()); });
|
|
56326
56350
|
i0.ɵɵtext(1, " Adjust Revenue Target ");
|
|
56327
56351
|
i0.ɵɵelementEnd();
|
|
56328
56352
|
} if (rf & 2) {
|
|
56329
56353
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
56330
56354
|
i0.ɵɵproperty("ngClass", ctx_r0.secondaryButtonClasses());
|
|
56331
56355
|
} }
|
|
56332
|
-
function
|
|
56333
|
-
i0.ɵɵelementStart(0, "div", 44)(1, "div", 45)
|
|
56334
|
-
i0.ɵɵ
|
|
56335
|
-
i0.ɵɵ
|
|
56336
|
-
i0.ɵɵ
|
|
56337
|
-
i0.ɵɵtext(7, " Gap to Close ");
|
|
56356
|
+
function InitialTargetSettingComponent_Conditional_33_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
56357
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "div", 45);
|
|
56358
|
+
i0.ɵɵelement(2, "div", 46);
|
|
56359
|
+
i0.ɵɵelementStart(3, "span", 47);
|
|
56360
|
+
i0.ɵɵtext(4);
|
|
56338
56361
|
i0.ɵɵelementEnd();
|
|
56339
|
-
i0.ɵɵ
|
|
56340
|
-
i0.ɵɵ
|
|
56362
|
+
i0.ɵɵelement(5, "div", 46);
|
|
56363
|
+
i0.ɵɵelementEnd();
|
|
56364
|
+
i0.ɵɵelementStart(6, "div", 48)(7, "div")(8, "p", 41);
|
|
56365
|
+
i0.ɵɵtext(9, " Gap to Close ");
|
|
56366
|
+
i0.ɵɵelementEnd();
|
|
56367
|
+
i0.ɵɵelementStart(10, "p", 49);
|
|
56368
|
+
i0.ɵɵtext(11);
|
|
56341
56369
|
i0.ɵɵelementEnd()();
|
|
56342
|
-
i0.ɵɵelementStart(
|
|
56343
|
-
i0.ɵɵtext(
|
|
56370
|
+
i0.ɵɵelementStart(12, "div")(13, "div", 51)(14, "p", 13);
|
|
56371
|
+
i0.ɵɵtext(15, " Additional Growth Needed ");
|
|
56344
56372
|
i0.ɵɵelementEnd();
|
|
56345
|
-
i0.ɵɵelementStart(
|
|
56346
|
-
i0.ɵɵ
|
|
56373
|
+
i0.ɵɵelementStart(16, "button", 52);
|
|
56374
|
+
i0.ɵɵnamespaceSVG();
|
|
56375
|
+
i0.ɵɵelementStart(17, "svg", 53);
|
|
56376
|
+
i0.ɵɵelement(18, "path", 54);
|
|
56377
|
+
i0.ɵɵelementEnd()()();
|
|
56378
|
+
i0.ɵɵnamespaceHTML();
|
|
56379
|
+
i0.ɵɵelementStart(19, "p", 49);
|
|
56380
|
+
i0.ɵɵtext(20);
|
|
56347
56381
|
i0.ɵɵelementEnd()()()();
|
|
56348
56382
|
} if (rf & 2) {
|
|
56349
56383
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
56350
|
-
i0.ɵɵproperty("ngClass", ctx_r0.calculatedDividerClasses());
|
|
56351
56384
|
i0.ɵɵadvance(2);
|
|
56385
|
+
i0.ɵɵproperty("ngClass", ctx_r0.dividerBorderClasses());
|
|
56386
|
+
i0.ɵɵadvance();
|
|
56352
56387
|
i0.ɵɵproperty("ngClass", ctx_r0.dividerLabelClasses());
|
|
56353
56388
|
i0.ɵɵadvance();
|
|
56354
56389
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.currentYear(), " YTD Gap ");
|
|
56390
|
+
i0.ɵɵadvance();
|
|
56391
|
+
i0.ɵɵproperty("ngClass", ctx_r0.dividerBorderClasses());
|
|
56355
56392
|
i0.ɵɵadvance(3);
|
|
56356
56393
|
i0.ɵɵproperty("ngClass", ctx_r0.calculatedLabelClasses());
|
|
56357
56394
|
i0.ɵɵadvance(2);
|
|
56358
56395
|
i0.ɵɵproperty("ngClass", ctx_r0.calculatedSecondaryClasses());
|
|
56359
56396
|
i0.ɵɵadvance();
|
|
56360
56397
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.formatCurrency(ctx_r0.absValue(ctx_r0.gapToClose().amount)), " ");
|
|
56361
|
-
i0.ɵɵadvance(
|
|
56398
|
+
i0.ɵɵadvance(3);
|
|
56362
56399
|
i0.ɵɵproperty("ngClass", ctx_r0.calculatedLabelClasses());
|
|
56363
56400
|
i0.ɵɵadvance(2);
|
|
56401
|
+
i0.ɵɵproperty("ngClass", ctx_r0.infoIconClasses())("libSymphiqTooltip", ctx_r0.additionalGrowthTooltip);
|
|
56402
|
+
i0.ɵɵadvance(3);
|
|
56364
56403
|
i0.ɵɵproperty("ngClass", ctx_r0.calculatedSecondaryClasses());
|
|
56365
56404
|
i0.ɵɵadvance();
|
|
56366
56405
|
i0.ɵɵtextInterpolate2(" ", ctx_r0.gapToClose().amount > 0 ? "+" : "", "", ctx_r0.formatPercentage(ctx_r0.gapToClose().percentage, 1), " ");
|
|
56367
56406
|
} }
|
|
56368
|
-
function
|
|
56407
|
+
function InitialTargetSettingComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
56369
56408
|
i0.ɵɵelementStart(0, "div", 26)(1, "div", 17)(2, "div", 40)(3, "div")(4, "p", 41);
|
|
56370
56409
|
i0.ɵɵtext(5);
|
|
56371
56410
|
i0.ɵɵelementEnd();
|
|
56372
56411
|
i0.ɵɵelementStart(6, "p", 42);
|
|
56373
56412
|
i0.ɵɵtext(7);
|
|
56374
56413
|
i0.ɵɵelementEnd()();
|
|
56375
|
-
i0.ɵɵconditionalCreate(8,
|
|
56414
|
+
i0.ɵɵconditionalCreate(8, InitialTargetSettingComponent_Conditional_33_Conditional_8_Template, 2, 1, "button", 43);
|
|
56376
56415
|
i0.ɵɵelementEnd();
|
|
56377
|
-
i0.ɵɵelementStart(9, "div", 44)(10, "div", 45)
|
|
56378
|
-
i0.ɵɵ
|
|
56379
|
-
i0.ɵɵ
|
|
56380
|
-
i0.ɵɵ
|
|
56381
|
-
i0.ɵɵtext(16, " Increase Amount ");
|
|
56416
|
+
i0.ɵɵelementStart(9, "div", 44)(10, "div", 45);
|
|
56417
|
+
i0.ɵɵelement(11, "div", 46);
|
|
56418
|
+
i0.ɵɵelementStart(12, "span", 47);
|
|
56419
|
+
i0.ɵɵtext(13);
|
|
56382
56420
|
i0.ɵɵelementEnd();
|
|
56383
|
-
i0.ɵɵ
|
|
56384
|
-
i0.ɵɵ
|
|
56421
|
+
i0.ɵɵelement(14, "div", 46);
|
|
56422
|
+
i0.ɵɵelementEnd();
|
|
56423
|
+
i0.ɵɵelementStart(15, "div", 48)(16, "div")(17, "p", 41);
|
|
56424
|
+
i0.ɵɵtext(18, " Increase Amount ");
|
|
56425
|
+
i0.ɵɵelementEnd();
|
|
56426
|
+
i0.ɵɵelementStart(19, "p", 49);
|
|
56427
|
+
i0.ɵɵtext(20);
|
|
56385
56428
|
i0.ɵɵelementEnd()();
|
|
56386
|
-
i0.ɵɵelementStart(
|
|
56387
|
-
i0.ɵɵtext(
|
|
56429
|
+
i0.ɵɵelementStart(21, "div")(22, "p", 41);
|
|
56430
|
+
i0.ɵɵtext(23, " % Growth ");
|
|
56388
56431
|
i0.ɵɵelementEnd();
|
|
56389
|
-
i0.ɵɵelementStart(
|
|
56390
|
-
i0.ɵɵtext(
|
|
56432
|
+
i0.ɵɵelementStart(24, "p", 49);
|
|
56433
|
+
i0.ɵɵtext(25);
|
|
56391
56434
|
i0.ɵɵelementEnd()()()();
|
|
56392
|
-
i0.ɵɵconditionalCreate(
|
|
56435
|
+
i0.ɵɵconditionalCreate(26, InitialTargetSettingComponent_Conditional_33_Conditional_26_Template, 21, 13, "div", 44);
|
|
56393
56436
|
i0.ɵɵelementEnd()();
|
|
56394
56437
|
} if (rf & 2) {
|
|
56395
56438
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -56404,12 +56447,14 @@ function InitialTargetSettingComponent_Conditional_32_Template(rf, ctx) { if (rf
|
|
|
56404
56447
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.formatCurrency(ctx_r0.displayedTargetRevenue()), " ");
|
|
56405
56448
|
i0.ɵɵadvance();
|
|
56406
56449
|
i0.ɵɵconditional(ctx_r0.calculationState() === "results" ? 8 : -1);
|
|
56450
|
+
i0.ɵɵadvance(3);
|
|
56451
|
+
i0.ɵɵproperty("ngClass", ctx_r0.dividerBorderClasses());
|
|
56407
56452
|
i0.ɵɵadvance();
|
|
56408
|
-
i0.ɵɵproperty("ngClass", ctx_r0.calculatedDividerClasses());
|
|
56409
|
-
i0.ɵɵadvance(2);
|
|
56410
56453
|
i0.ɵɵproperty("ngClass", ctx_r0.dividerLabelClasses());
|
|
56411
56454
|
i0.ɵɵadvance();
|
|
56412
56455
|
i0.ɵɵtextInterpolate1(" vs. ", ctx_r0.priorYear(), " ");
|
|
56456
|
+
i0.ɵɵadvance();
|
|
56457
|
+
i0.ɵɵproperty("ngClass", ctx_r0.dividerBorderClasses());
|
|
56413
56458
|
i0.ɵɵadvance(3);
|
|
56414
56459
|
i0.ɵɵproperty("ngClass", ctx_r0.calculatedLabelClasses());
|
|
56415
56460
|
i0.ɵɵadvance(2);
|
|
@@ -56423,15 +56468,15 @@ function InitialTargetSettingComponent_Conditional_32_Template(rf, ctx) { if (rf
|
|
|
56423
56468
|
i0.ɵɵadvance();
|
|
56424
56469
|
i0.ɵɵtextInterpolate1(" +", ctx_r0.formatPercentage(ctx_r0.percentageIncrease(), 1), " ");
|
|
56425
56470
|
i0.ɵɵadvance();
|
|
56426
|
-
i0.ɵɵconditional(ctx_r0.currentPaceProjection() > 0 && ctx_r0.gapToClose().amount !== 0 ?
|
|
56471
|
+
i0.ɵɵconditional(ctx_r0.currentPaceProjection() > 0 && ctx_r0.gapToClose().amount !== 0 ? 26 : -1);
|
|
56427
56472
|
} }
|
|
56428
|
-
function
|
|
56473
|
+
function InitialTargetSettingComponent_Conditional_34_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
56429
56474
|
i0.ɵɵelement(0, "symphiq-area-chart", 22);
|
|
56430
56475
|
} if (rf & 2) {
|
|
56431
56476
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
56432
56477
|
i0.ɵɵproperty("chart", ctx_r0.revenueChartData())("showAxisLabels", true)("viewMode", ctx_r0.viewMode())("currencySymbol", "$")("height", "320px");
|
|
56433
56478
|
} }
|
|
56434
|
-
function
|
|
56479
|
+
function InitialTargetSettingComponent_Conditional_34_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
56435
56480
|
i0.ɵɵelementStart(0, "div", 23)(1, "p", 39);
|
|
56436
56481
|
i0.ɵɵtext(2, " No revenue data available ");
|
|
56437
56482
|
i0.ɵɵelementEnd()();
|
|
@@ -56440,12 +56485,12 @@ function InitialTargetSettingComponent_Conditional_33_Conditional_5_Template(rf,
|
|
|
56440
56485
|
i0.ɵɵadvance();
|
|
56441
56486
|
i0.ɵɵproperty("ngClass", ctx_r0.noDataClasses());
|
|
56442
56487
|
} }
|
|
56443
|
-
function
|
|
56488
|
+
function InitialTargetSettingComponent_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
56444
56489
|
i0.ɵɵelementStart(0, "div", 27)(1, "p", 20);
|
|
56445
56490
|
i0.ɵɵtext(2, " Year-over-Year Revenue Trend ");
|
|
56446
56491
|
i0.ɵɵelementEnd();
|
|
56447
56492
|
i0.ɵɵelementStart(3, "div", 21);
|
|
56448
|
-
i0.ɵɵconditionalCreate(4,
|
|
56493
|
+
i0.ɵɵconditionalCreate(4, InitialTargetSettingComponent_Conditional_34_Conditional_4_Template, 1, 5, "symphiq-area-chart", 22)(5, InitialTargetSettingComponent_Conditional_34_Conditional_5_Template, 3, 1, "div", 23);
|
|
56449
56494
|
i0.ɵɵelementEnd()();
|
|
56450
56495
|
} if (rf & 2) {
|
|
56451
56496
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -56456,14 +56501,14 @@ function InitialTargetSettingComponent_Conditional_33_Template(rf, ctx) { if (rf
|
|
|
56456
56501
|
i0.ɵɵadvance();
|
|
56457
56502
|
i0.ɵɵconditional(ctx_r0.revenueChartData() ? 4 : 5);
|
|
56458
56503
|
} }
|
|
56459
|
-
function
|
|
56460
|
-
i0.ɵɵelementStart(0, "div", 3)(1, "div",
|
|
56504
|
+
function InitialTargetSettingComponent_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
56505
|
+
i0.ɵɵelementStart(0, "div", 3)(1, "div", 55)(2, "h2", 56);
|
|
56461
56506
|
i0.ɵɵtext(3, " Contributing Metrics ");
|
|
56462
56507
|
i0.ɵɵelementEnd();
|
|
56463
56508
|
i0.ɵɵelementStart(4, "p", 39);
|
|
56464
56509
|
i0.ɵɵtext(5);
|
|
56465
56510
|
i0.ɵɵelementEnd()();
|
|
56466
|
-
i0.ɵɵelement(6, "symphiq-funnel-metrics-visualization",
|
|
56511
|
+
i0.ɵɵelement(6, "symphiq-funnel-metrics-visualization", 57);
|
|
56467
56512
|
i0.ɵɵelementEnd();
|
|
56468
56513
|
} if (rf & 2) {
|
|
56469
56514
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -56535,16 +56580,33 @@ class InitialTargetSettingComponent {
|
|
|
56535
56580
|
}, ...(ngDevMode ? [{ debugName: "percentageIncrease" }] : []));
|
|
56536
56581
|
this.displayedMetricCalculations = computed(() => {
|
|
56537
56582
|
const response = this.storedResponse();
|
|
56583
|
+
const pacingData = this.pacingMetrics();
|
|
56584
|
+
console.group('[PACING] displayedMetricCalculations computed');
|
|
56585
|
+
console.log('[PACING] storedResponse exists:', !!response);
|
|
56586
|
+
console.log('[PACING] pacingMetrics exists:', !!pacingData);
|
|
56587
|
+
if (pacingData) {
|
|
56588
|
+
console.log('[PACING] pacingMetrics summary:', {
|
|
56589
|
+
soFarMetricValuesCount: pacingData.soFarMetricValues?.length ?? 0,
|
|
56590
|
+
soFarMetrics: pacingData.soFarMetricValues?.map(m => ({ metric: m.metric, value: m.value })),
|
|
56591
|
+
projectedMetricValuesCount: pacingData.projectedMetricValues?.length ?? 0,
|
|
56592
|
+
lastYearMetricValuesMonthlyCount: pacingData.lastYearMetricValuesMonthly?.length ?? 0,
|
|
56593
|
+
lastYearUniqueMetrics: [...new Set(pacingData.lastYearMetricValuesMonthly?.map(m => m.metric))]
|
|
56594
|
+
});
|
|
56595
|
+
}
|
|
56538
56596
|
if (!response) {
|
|
56597
|
+
console.log('[PACING] No storedResponse - returning empty array');
|
|
56598
|
+
console.groupEnd();
|
|
56539
56599
|
return [];
|
|
56540
56600
|
}
|
|
56541
56601
|
const results = [];
|
|
56542
56602
|
if (response.funnelMetricValues) {
|
|
56603
|
+
console.log('[PACING] Processing funnelMetricValues:', response.funnelMetricValues.length);
|
|
56543
56604
|
response.funnelMetricValues.forEach((metricValue) => {
|
|
56544
56605
|
const metric = metricValue.metric;
|
|
56545
56606
|
const funnelMetric = this.funnelMetrics().find(fm => fm.funnelMetric === metric && fm.funnelMetric === fm.relatedMetric);
|
|
56546
56607
|
const currentValue = sumMetricFromUiData(this.mainUiData(), metric, 'priorYear');
|
|
56547
56608
|
const { targetValue, percentageIncrease } = this.parseMetricValue(metricValue.value);
|
|
56609
|
+
console.log(`[PACING] Stage metric ${metric}:`, { currentValue, targetValue, percentageIncrease, funnelInd: funnelMetric?.funnelInd });
|
|
56548
56610
|
results.push({
|
|
56549
56611
|
metric,
|
|
56550
56612
|
funnelMetric: metric,
|
|
@@ -56559,6 +56621,7 @@ class InitialTargetSettingComponent {
|
|
|
56559
56621
|
});
|
|
56560
56622
|
}
|
|
56561
56623
|
if (response.relatedMetricTargets) {
|
|
56624
|
+
console.log('[PACING] Processing relatedMetricTargets:', response.relatedMetricTargets.length);
|
|
56562
56625
|
response.relatedMetricTargets.forEach((metricValue) => {
|
|
56563
56626
|
const metric = metricValue.metric;
|
|
56564
56627
|
const funnelMetric = this.funnelMetrics().find(fm => fm.relatedMetric === metric);
|
|
@@ -56577,6 +56640,10 @@ class InitialTargetSettingComponent {
|
|
|
56577
56640
|
});
|
|
56578
56641
|
});
|
|
56579
56642
|
}
|
|
56643
|
+
console.log('[PACING] Final results count:', results.length);
|
|
56644
|
+
console.log('[PACING] Stage metrics:', results.filter(r => r.isFunnelStage).map(r => r.metric));
|
|
56645
|
+
console.log('[PACING] Related metrics:', results.filter(r => !r.isFunnelStage).map(r => r.metric));
|
|
56646
|
+
console.groupEnd();
|
|
56580
56647
|
return results;
|
|
56581
56648
|
}, ...(ngDevMode ? [{ debugName: "displayedMetricCalculations" }] : []));
|
|
56582
56649
|
this.displayedTargetRevenue = computed(() => {
|
|
@@ -56643,6 +56710,10 @@ class InitialTargetSettingComponent {
|
|
|
56643
56710
|
}, ...(ngDevMode ? [{ debugName: "revenueChartData" }] : []));
|
|
56644
56711
|
this.currentYear = computed(() => new Date().getFullYear(), ...(ngDevMode ? [{ debugName: "currentYear" }] : []));
|
|
56645
56712
|
this.priorYear = computed(() => new Date().getFullYear() - 1, ...(ngDevMode ? [{ debugName: "priorYear" }] : []));
|
|
56713
|
+
this.additionalGrowthTooltip = {
|
|
56714
|
+
title: 'Additional Growth Needed',
|
|
56715
|
+
markdown: 'This percentage represents the additional growth required beyond your current projected pace to reach your revenue target. It shows how much more improvement is needed in your funnel metrics to close the gap between your projected performance and your goal.'
|
|
56716
|
+
};
|
|
56646
56717
|
effect(() => {
|
|
56647
56718
|
const response = this.reverseCalculationResponse();
|
|
56648
56719
|
if (response) {
|
|
@@ -56828,6 +56899,11 @@ class InitialTargetSettingComponent {
|
|
|
56828
56899
|
? 'border-t border-purple-500/20'
|
|
56829
56900
|
: 'border-t border-purple-200';
|
|
56830
56901
|
}
|
|
56902
|
+
dividerBorderClasses() {
|
|
56903
|
+
return this.viewMode() === ViewModeEnum.DARK
|
|
56904
|
+
? 'bg-purple-500/20'
|
|
56905
|
+
: 'bg-purple-200';
|
|
56906
|
+
}
|
|
56831
56907
|
chartTitleClasses() {
|
|
56832
56908
|
return this.viewMode() === ViewModeEnum.DARK
|
|
56833
56909
|
? 'text-slate-200'
|
|
@@ -56898,6 +56974,11 @@ class InitialTargetSettingComponent {
|
|
|
56898
56974
|
? 'bg-slate-800/60 border-slate-600'
|
|
56899
56975
|
: 'bg-slate-50 border-slate-300';
|
|
56900
56976
|
}
|
|
56977
|
+
infoIconClasses() {
|
|
56978
|
+
return this.viewMode() === ViewModeEnum.DARK
|
|
56979
|
+
? 'bg-slate-700/50 text-slate-400 hover:bg-slate-600/50 hover:text-slate-300'
|
|
56980
|
+
: 'bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-700';
|
|
56981
|
+
}
|
|
56901
56982
|
static { this.ɵfac = function InitialTargetSettingComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || InitialTargetSettingComponent)(); }; }
|
|
56902
56983
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: InitialTargetSettingComponent, selectors: [["symphiq-initial-target-setting"]], viewQuery: function InitialTargetSettingComponent_Query(rf, ctx) { if (rf & 1) {
|
|
56903
56984
|
i0.ɵɵviewQuery(_c0$r, 5);
|
|
@@ -56906,46 +56987,48 @@ class InitialTargetSettingComponent {
|
|
|
56906
56987
|
let _t;
|
|
56907
56988
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.absoluteInputRef = _t.first);
|
|
56908
56989
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.percentageInputRef = _t.first);
|
|
56909
|
-
} }, 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"] }, outputs: { targetsCreated: "targetsCreated", calculateRevenueRequest: "calculateRevenueRequest" }, decls:
|
|
56910
|
-
i0.ɵɵelementStart(0, "div", 2)
|
|
56911
|
-
i0.ɵɵ
|
|
56990
|
+
} }, 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"] }, outputs: { targetsCreated: "targetsCreated", calculateRevenueRequest: "calculateRevenueRequest" }, decls: 39, vars: 33, consts: [["absoluteInputRef", ""], ["percentageInputRef", ""], [1, "space-y-8", "pb-32"], [1, "rounded-2xl", "border", "shadow-lg", "p-8", 3, "ngClass"], [1, "text-2xl", "font-bold", "mb-6", 3, "ngClass"], [1, "flex", "flex-col", "gap-8"], [1, "grid", "lg:grid-cols-2", "gap-8"], [1, "flex", "flex-col", "gap-4"], [1, "p-6", "rounded-xl", "border-2", 3, "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", "h-full", 3, "ngClass"], [1, "w-full"], [1, "metrics-section-enter"], [1, "metrics-section-content"], [3, "submitClick", "cancelClick", "viewMode", "isValid", "isSubmitting", "validationMessage", "buttonText", "showCancelButton"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"], [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, "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, "text-sm", 3, "ngClass"], [1, "flex", "items-center", "justify-between"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-3xl", "font-bold", 3, "ngClass"], [1, "px-4", "py-2", "rounded-lg", "text-sm", "font-semibold", "transition-all", "whitespace-nowrap", 3, "ngClass"], [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-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"], ["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, "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, "mb-6"], [1, "text-2xl", "font-bold", "mb-2", 3, "ngClass"], [3, "viewMode", "calculations", "pacingMetrics"]], template: function InitialTargetSettingComponent_Template(rf, ctx) { if (rf & 1) {
|
|
56991
|
+
i0.ɵɵelementStart(0, "div", 2);
|
|
56992
|
+
i0.ɵɵelement(1, "symphiq-tooltip-container");
|
|
56993
|
+
i0.ɵɵelementStart(2, "div", 3)(3, "h2", 4);
|
|
56994
|
+
i0.ɵɵtext(4);
|
|
56912
56995
|
i0.ɵɵelementEnd();
|
|
56913
|
-
i0.ɵɵelementStart(
|
|
56996
|
+
i0.ɵɵelementStart(5, "div", 5)(6, "div", 6)(7, "div", 7)(8, "div", 8)(9, "div", 9)(10, "div", 10);
|
|
56914
56997
|
i0.ɵɵnamespaceSVG();
|
|
56915
|
-
i0.ɵɵelementStart(
|
|
56916
|
-
i0.ɵɵelement(
|
|
56998
|
+
i0.ɵɵelementStart(11, "svg", 11);
|
|
56999
|
+
i0.ɵɵelement(12, "path", 12);
|
|
56917
57000
|
i0.ɵɵelementEnd();
|
|
56918
57001
|
i0.ɵɵnamespaceHTML();
|
|
56919
|
-
i0.ɵɵelementStart(
|
|
56920
|
-
i0.ɵɵtext(
|
|
57002
|
+
i0.ɵɵelementStart(13, "div")(14, "p", 13);
|
|
57003
|
+
i0.ɵɵtext(15);
|
|
56921
57004
|
i0.ɵɵelementEnd();
|
|
56922
|
-
i0.ɵɵelementStart(
|
|
56923
|
-
i0.ɵɵtext(
|
|
57005
|
+
i0.ɵɵelementStart(16, "p", 14);
|
|
57006
|
+
i0.ɵɵtext(17);
|
|
56924
57007
|
i0.ɵɵelementEnd()()();
|
|
56925
|
-
i0.ɵɵconditionalCreate(
|
|
57008
|
+
i0.ɵɵconditionalCreate(18, InitialTargetSettingComponent_Conditional_18_Template, 8, 4, "div", 10);
|
|
56926
57009
|
i0.ɵɵelementEnd();
|
|
56927
|
-
i0.ɵɵelementStart(
|
|
56928
|
-
i0.ɵɵconditionalCreate(
|
|
57010
|
+
i0.ɵɵelementStart(19, "div", 15)(20, "div", 16)(21, "div", 17);
|
|
57011
|
+
i0.ɵɵconditionalCreate(22, InitialTargetSettingComponent_Conditional_22_Template, 7, 3);
|
|
56929
57012
|
i0.ɵɵelementEnd()()()();
|
|
56930
|
-
i0.ɵɵelementStart(
|
|
56931
|
-
i0.ɵɵtext(
|
|
57013
|
+
i0.ɵɵelementStart(23, "div", 18)(24, "div", 19)(25, "div")(26, "p", 20);
|
|
57014
|
+
i0.ɵɵtext(27, " Year-over-Year Revenue Trend ");
|
|
56932
57015
|
i0.ɵɵelementEnd();
|
|
56933
|
-
i0.ɵɵelementStart(
|
|
56934
|
-
i0.ɵɵconditionalCreate(
|
|
57016
|
+
i0.ɵɵelementStart(28, "div", 21);
|
|
57017
|
+
i0.ɵɵconditionalCreate(29, InitialTargetSettingComponent_Conditional_29_Template, 1, 5, "symphiq-area-chart", 22)(30, InitialTargetSettingComponent_Conditional_30_Template, 3, 1, "div", 23);
|
|
56935
57018
|
i0.ɵɵelementEnd()()()()();
|
|
56936
|
-
i0.ɵɵelementStart(
|
|
56937
|
-
i0.ɵɵconditionalCreate(
|
|
57019
|
+
i0.ɵɵelementStart(31, "div", 24)(32, "div", 25);
|
|
57020
|
+
i0.ɵɵconditionalCreate(33, InitialTargetSettingComponent_Conditional_33_Template, 27, 17, "div", 26);
|
|
56938
57021
|
i0.ɵɵelementEnd()()();
|
|
56939
|
-
i0.ɵɵconditionalCreate(
|
|
57022
|
+
i0.ɵɵconditionalCreate(34, InitialTargetSettingComponent_Conditional_34_Template, 6, 3, "div", 27);
|
|
56940
57023
|
i0.ɵɵelementEnd()();
|
|
56941
|
-
i0.ɵɵelementStart(
|
|
56942
|
-
i0.ɵɵconditionalCreate(
|
|
57024
|
+
i0.ɵɵelementStart(35, "div", 28)(36, "div", 29);
|
|
57025
|
+
i0.ɵɵconditionalCreate(37, InitialTargetSettingComponent_Conditional_37_Template, 7, 7, "div", 3);
|
|
56943
57026
|
i0.ɵɵelementEnd()();
|
|
56944
|
-
i0.ɵɵelementStart(
|
|
56945
|
-
i0.ɵɵlistener("submitClick", function
|
|
57027
|
+
i0.ɵɵelementStart(38, "symphiq-sticky-submit-bar", 30);
|
|
57028
|
+
i0.ɵɵlistener("submitClick", function InitialTargetSettingComponent_Template_symphiq_sticky_submit_bar_submitClick_38_listener() { return ctx.handleSubmitClick(); })("cancelClick", function InitialTargetSettingComponent_Template_symphiq_sticky_submit_bar_cancelClick_38_listener() { return ctx.handleCancel(); });
|
|
56946
57029
|
i0.ɵɵelementEnd()();
|
|
56947
57030
|
} if (rf & 2) {
|
|
56948
|
-
i0.ɵɵadvance();
|
|
57031
|
+
i0.ɵɵadvance(2);
|
|
56949
57032
|
i0.ɵɵproperty("ngClass", ctx.sectionCardClasses());
|
|
56950
57033
|
i0.ɵɵadvance();
|
|
56951
57034
|
i0.ɵɵproperty("ngClass", ctx.sectionTitleClasses());
|
|
@@ -56966,11 +57049,11 @@ class InitialTargetSettingComponent {
|
|
|
56966
57049
|
i0.ɵɵadvance();
|
|
56967
57050
|
i0.ɵɵtextInterpolate1(" ", ctx.formatCurrency(ctx.priorYearRevenue()), " ");
|
|
56968
57051
|
i0.ɵɵadvance();
|
|
56969
|
-
i0.ɵɵconditional(ctx.currentPaceProjection() > 0 ?
|
|
57052
|
+
i0.ɵɵconditional(ctx.currentPaceProjection() > 0 ? 18 : -1);
|
|
56970
57053
|
i0.ɵɵadvance();
|
|
56971
57054
|
i0.ɵɵclassProp("form-area-collapse-hidden", ctx.calculationState() === "results");
|
|
56972
57055
|
i0.ɵɵadvance(3);
|
|
56973
|
-
i0.ɵɵconditional(ctx.calculationState() !== "results" ?
|
|
57056
|
+
i0.ɵɵconditional(ctx.calculationState() !== "results" ? 22 : -1);
|
|
56974
57057
|
i0.ɵɵadvance();
|
|
56975
57058
|
i0.ɵɵclassProp("chart-in-column-active", ctx.calculationState() === "results");
|
|
56976
57059
|
i0.ɵɵadvance(3);
|
|
@@ -56978,22 +57061,24 @@ class InitialTargetSettingComponent {
|
|
|
56978
57061
|
i0.ɵɵadvance(2);
|
|
56979
57062
|
i0.ɵɵproperty("ngClass", ctx.chartContainerClasses());
|
|
56980
57063
|
i0.ɵɵadvance();
|
|
56981
|
-
i0.ɵɵconditional(ctx.revenueChartData() ?
|
|
57064
|
+
i0.ɵɵconditional(ctx.revenueChartData() ? 29 : 30);
|
|
56982
57065
|
i0.ɵɵadvance(2);
|
|
56983
57066
|
i0.ɵɵclassProp("calculated-card-enter-active", ctx.calculatedRevenue() > 0);
|
|
56984
57067
|
i0.ɵɵadvance(2);
|
|
56985
|
-
i0.ɵɵconditional(ctx.calculatedRevenue() > 0 ?
|
|
57068
|
+
i0.ɵɵconditional(ctx.calculatedRevenue() > 0 ? 33 : -1);
|
|
56986
57069
|
i0.ɵɵadvance();
|
|
56987
|
-
i0.ɵɵconditional(ctx.calculationState() !== "results" ?
|
|
57070
|
+
i0.ɵɵconditional(ctx.calculationState() !== "results" ? 34 : -1);
|
|
56988
57071
|
i0.ɵɵadvance();
|
|
56989
57072
|
i0.ɵɵclassProp("metrics-section-enter-active", ctx.showMetricsVisualization());
|
|
56990
57073
|
i0.ɵɵadvance(2);
|
|
56991
|
-
i0.ɵɵconditional(ctx.showMetricsVisualization() ?
|
|
57074
|
+
i0.ɵɵconditional(ctx.showMetricsVisualization() ? 37 : -1);
|
|
56992
57075
|
i0.ɵɵadvance();
|
|
56993
57076
|
i0.ɵɵproperty("viewMode", ctx.viewMode())("isValid", ctx.isValid())("isSubmitting", ctx.isCalculating())("validationMessage", ctx.validationMessage())("buttonText", ctx.submitButtonText())("showCancelButton", ctx.calculationState() === "input" && ctx.hasStoredResponse());
|
|
56994
57077
|
} }, 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,
|
|
56995
57078
|
StickySubmitBarComponent,
|
|
56996
|
-
AreaChartComponent
|
|
57079
|
+
AreaChartComponent,
|
|
57080
|
+
TooltipDirective,
|
|
57081
|
+
TooltipContainerComponent], styles: [".calculated-card-enter[_ngcontent-%COMP%]{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s ease-out}.calculated-card-enter-active[_ngcontent-%COMP%]{grid-template-rows:1fr}.calculated-card-content[_ngcontent-%COMP%]{overflow:hidden}.form-area-collapse[_ngcontent-%COMP%]{display:grid;grid-template-rows:1fr;transition:grid-template-rows .4s ease-out}.form-area-collapse-hidden[_ngcontent-%COMP%]{grid-template-rows:0fr}.form-area-content[_ngcontent-%COMP%]{overflow:hidden}.chart-section-collapse[_ngcontent-%COMP%]{display:grid;grid-template-rows:1fr;transition:grid-template-rows .4s ease-out}.chart-section-collapse-hidden[_ngcontent-%COMP%]{grid-template-rows:0fr}.chart-section-content[_ngcontent-%COMP%]{overflow:hidden}.chart-in-column[_ngcontent-%COMP%]{display:grid;grid-template-rows:0fr;transition:grid-template-rows .4s ease-out}.chart-in-column-active[_ngcontent-%COMP%]{grid-template-rows:1fr}.chart-in-column-content[_ngcontent-%COMP%]{overflow:hidden}.metrics-section-enter[_ngcontent-%COMP%]{display:grid;grid-template-rows:0fr;transition:grid-template-rows .5s ease-out}.metrics-section-enter-active[_ngcontent-%COMP%]{grid-template-rows:1fr}.metrics-section-content[_ngcontent-%COMP%]{overflow:hidden}"], changeDetection: 0 }); }
|
|
56997
57082
|
}
|
|
56998
57083
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InitialTargetSettingComponent, [{
|
|
56999
57084
|
type: Component,
|
|
@@ -57002,9 +57087,12 @@ class InitialTargetSettingComponent {
|
|
|
57002
57087
|
FormsModule,
|
|
57003
57088
|
FunnelMetricsVisualizationComponent,
|
|
57004
57089
|
StickySubmitBarComponent,
|
|
57005
|
-
AreaChartComponent
|
|
57090
|
+
AreaChartComponent,
|
|
57091
|
+
TooltipDirective,
|
|
57092
|
+
TooltipContainerComponent
|
|
57006
57093
|
], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
57007
57094
|
<div class="space-y-8 pb-32">
|
|
57095
|
+
<symphiq-tooltip-container />
|
|
57008
57096
|
<div [ngClass]="sectionCardClasses()" class="rounded-2xl border shadow-lg p-8">
|
|
57009
57097
|
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold mb-6">
|
|
57010
57098
|
Calculate Your {{ currentYear() }} Revenue Target
|
|
@@ -57156,11 +57244,13 @@ class InitialTargetSettingComponent {
|
|
|
57156
57244
|
}
|
|
57157
57245
|
</div>
|
|
57158
57246
|
|
|
57159
|
-
<div class="relative pt-6 mt-6"
|
|
57160
|
-
<div class="absolute top-0 left-
|
|
57247
|
+
<div class="relative pt-6 mt-6">
|
|
57248
|
+
<div class="absolute top-0 left-0 right-0 flex items-center -translate-y-1/2">
|
|
57249
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
57161
57250
|
<span [ngClass]="dividerLabelClasses()" class="px-3 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
57162
57251
|
vs. {{ priorYear() }}
|
|
57163
57252
|
</span>
|
|
57253
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
57164
57254
|
</div>
|
|
57165
57255
|
<div class="grid grid-cols-2 gap-4 pt-2">
|
|
57166
57256
|
<div>
|
|
@@ -57183,11 +57273,13 @@ class InitialTargetSettingComponent {
|
|
|
57183
57273
|
</div>
|
|
57184
57274
|
|
|
57185
57275
|
@if (currentPaceProjection() > 0 && gapToClose().amount !== 0) {
|
|
57186
|
-
<div class="relative pt-6 mt-6"
|
|
57187
|
-
<div class="absolute top-0 left-
|
|
57276
|
+
<div class="relative pt-6 mt-6">
|
|
57277
|
+
<div class="absolute top-0 left-0 right-0 flex items-center -translate-y-1/2">
|
|
57278
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
57188
57279
|
<span [ngClass]="dividerLabelClasses()" class="px-3 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
57189
57280
|
{{ currentYear() }} YTD Gap
|
|
57190
57281
|
</span>
|
|
57282
|
+
<div class="flex-1 h-px" [ngClass]="dividerBorderClasses()"></div>
|
|
57191
57283
|
</div>
|
|
57192
57284
|
<div class="grid grid-cols-2 gap-4 pt-2">
|
|
57193
57285
|
<div>
|
|
@@ -57199,9 +57291,22 @@ class InitialTargetSettingComponent {
|
|
|
57199
57291
|
</p>
|
|
57200
57292
|
</div>
|
|
57201
57293
|
<div>
|
|
57202
|
-
<
|
|
57203
|
-
|
|
57204
|
-
|
|
57294
|
+
<div class="flex items-center gap-1 mb-1">
|
|
57295
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider">
|
|
57296
|
+
Additional Growth Needed
|
|
57297
|
+
</p>
|
|
57298
|
+
<button
|
|
57299
|
+
type="button"
|
|
57300
|
+
[ngClass]="infoIconClasses()"
|
|
57301
|
+
class="flex-shrink-0 w-4 h-4 rounded-full inline-flex items-center justify-center transition-colors"
|
|
57302
|
+
[libSymphiqTooltip]="additionalGrowthTooltip"
|
|
57303
|
+
tooltipType="markdown"
|
|
57304
|
+
tooltipPosition="top">
|
|
57305
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
57306
|
+
<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" />
|
|
57307
|
+
</svg>
|
|
57308
|
+
</button>
|
|
57309
|
+
</div>
|
|
57205
57310
|
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
57206
57311
|
{{ gapToClose().amount > 0 ? '+' : '' }}{{ formatPercentage(gapToClose().percentage, 1) }}
|
|
57207
57312
|
</p>
|
|
@@ -57285,7 +57390,7 @@ class InitialTargetSettingComponent {
|
|
|
57285
57390
|
type: ViewChild,
|
|
57286
57391
|
args: ['percentageInputRef']
|
|
57287
57392
|
}], 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 }] }], targetsCreated: [{ type: i0.Output, args: ["targetsCreated"] }], calculateRevenueRequest: [{ type: i0.Output, args: ["calculateRevenueRequest"] }] }); })();
|
|
57288
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber:
|
|
57393
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber: 418 }); })();
|
|
57289
57394
|
|
|
57290
57395
|
function IndeterminateSpinnerComponent_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
57291
57396
|
i0.ɵɵelement(0, "div", 5);
|