@eric-emg/symphiq-components 1.2.193 → 1.2.194
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 +899 -672
- package/fesm2022/symphiq-components.mjs.map +1 -1
- package/index.d.ts +119 -40
- package/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ViewModeEnum, MetricStatusEnum, TrendDirectionEnum, CompetitiveScoreEnum, ChartTypeEnum, IconSourceEnum, ProfileAnalysisRecommendationPriorityEnum, ProfileItemTypeEnum, PriceVsCompetitorsEnum, DifferentiationStrengthEnum, ThreatLevelEnum, normalizeToV3,
|
|
1
|
+
import { ViewModeEnum, MetricStatusEnum, TrendDirectionEnum, CompetitiveScoreEnum, MetricEnum, DimensionEnum, UiDataPeriodEnum, UiDataComparePeriodEnum, ChartTypeEnum, IconSourceEnum, ProfileAnalysisRecommendationPriorityEnum, ProfileItemTypeEnum, PriceVsCompetitorsEnum, DifferentiationStrengthEnum, ThreatLevelEnum, normalizeToV3, FocusAreaDetailStatusEnum, FocusAreaDomainEnumUtil, FocusAreaDomainEnum, ShopDataLoadStatusEnum, AiDynamicContentStatusEnum, FocusAreaHealthEnum, ProfileAnalysisPriorityEnum, CapabilityStateEnum, QuadrantEnum, AdvantageEnum, OverallGradeEnum, OperationalMaturityEnum, ProfileAnalysisEffortLevelEnum, ProfileAnalysisImpactLevelEnum, ProfileAnalysisTypeEnum, LineChartUseCaseEnum, BarChartUseCaseEnum } from '@jebgem/model';
|
|
2
2
|
export * from '@jebgem/model';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { Injectable, signal, computed, input, ChangeDetectionStrategy, Component, output, inject, ElementRef, Renderer2, effect, Directive, HostListener, untracked, ViewChild, PLATFORM_ID, Inject, Input } from '@angular/core';
|
|
@@ -2535,8 +2535,613 @@ class ConfettiService {
|
|
|
2535
2535
|
}]
|
|
2536
2536
|
}], null, null); })();
|
|
2537
2537
|
|
|
2538
|
+
function getCurrentYearStart() {
|
|
2539
|
+
const now = new Date();
|
|
2540
|
+
return new Date(now.getFullYear(), 0, 1, 0, 0, 0, 0);
|
|
2541
|
+
}
|
|
2542
|
+
function getCurrentYearEnd() {
|
|
2543
|
+
const now = new Date();
|
|
2544
|
+
return new Date(now.getFullYear(), 11, 31, 23, 59, 59, 999);
|
|
2545
|
+
}
|
|
2546
|
+
function getPriorYearStart() {
|
|
2547
|
+
const now = new Date();
|
|
2548
|
+
return new Date(now.getFullYear() - 1, 0, 1, 0, 0, 0, 0);
|
|
2549
|
+
}
|
|
2550
|
+
function getPriorYearEnd() {
|
|
2551
|
+
const now = new Date();
|
|
2552
|
+
return new Date(now.getFullYear() - 1, 11, 31, 23, 59, 59, 999);
|
|
2553
|
+
}
|
|
2554
|
+
function isCurrentYearTarget(target) {
|
|
2555
|
+
if (!target.startDate || !target.endDate) {
|
|
2556
|
+
return false;
|
|
2557
|
+
}
|
|
2558
|
+
const currentYearStart = getCurrentYearStart();
|
|
2559
|
+
const currentYearEnd = getCurrentYearEnd();
|
|
2560
|
+
const targetStart = new Date(target.startDate);
|
|
2561
|
+
const targetEnd = new Date(target.endDate);
|
|
2562
|
+
return (targetStart.getTime() === currentYearStart.getTime() &&
|
|
2563
|
+
targetEnd.getTime() === currentYearEnd.getTime());
|
|
2564
|
+
}
|
|
2565
|
+
function formatCurrency(value, currencySymbol = '$') {
|
|
2566
|
+
return `${currencySymbol}${value.toLocaleString('en-US', {
|
|
2567
|
+
minimumFractionDigits: 0,
|
|
2568
|
+
maximumFractionDigits: 0
|
|
2569
|
+
})}`;
|
|
2570
|
+
}
|
|
2571
|
+
function formatPercentage(value, decimals = 1) {
|
|
2572
|
+
return `${value.toFixed(decimals)}%`;
|
|
2573
|
+
}
|
|
2574
|
+
function formatNumber(value) {
|
|
2575
|
+
return value.toLocaleString('en-US', {
|
|
2576
|
+
minimumFractionDigits: 0,
|
|
2577
|
+
maximumFractionDigits: 0
|
|
2578
|
+
});
|
|
2579
|
+
}
|
|
2580
|
+
|
|
2581
|
+
function calculateMetricTargetsFromRevenue(revenueTarget, priorYearRevenue, funnelMetrics, baselineValues) {
|
|
2582
|
+
const revenuePercentageIncrease = ((revenueTarget - priorYearRevenue) / priorYearRevenue) * 100;
|
|
2583
|
+
const metricCalculations = [];
|
|
2584
|
+
const sortedFunnelMetrics = [...funnelMetrics].sort((a, b) => {
|
|
2585
|
+
const aFunnel = a.funnelInd ?? 999;
|
|
2586
|
+
const bFunnel = b.funnelInd ?? 999;
|
|
2587
|
+
if (aFunnel !== bFunnel)
|
|
2588
|
+
return aFunnel - bFunnel;
|
|
2589
|
+
const aRelated = a.relatedInd ?? 999;
|
|
2590
|
+
const bRelated = b.relatedInd ?? 999;
|
|
2591
|
+
return aRelated - bRelated;
|
|
2592
|
+
});
|
|
2593
|
+
const funnelStages = getUniqueFunnelStages(sortedFunnelMetrics);
|
|
2594
|
+
const numFunnelStages = funnelStages.length;
|
|
2595
|
+
const revenueIncreaseFactor = revenueTarget / priorYearRevenue;
|
|
2596
|
+
const perStageFactor = Math.pow(revenueIncreaseFactor, 1 / numFunnelStages);
|
|
2597
|
+
const funnelStageMetrics = new Map();
|
|
2598
|
+
sortedFunnelMetrics.forEach(fm => {
|
|
2599
|
+
if (fm.funnelMetric) {
|
|
2600
|
+
if (!funnelStageMetrics.has(fm.funnelMetric)) {
|
|
2601
|
+
funnelStageMetrics.set(fm.funnelMetric, []);
|
|
2602
|
+
}
|
|
2603
|
+
funnelStageMetrics.get(fm.funnelMetric).push(fm);
|
|
2604
|
+
}
|
|
2605
|
+
});
|
|
2606
|
+
const stagePercentageIncrease = (perStageFactor - 1) * 100;
|
|
2607
|
+
sortedFunnelMetrics.forEach((funnelMetric) => {
|
|
2608
|
+
const metric = funnelMetric.relatedMetric;
|
|
2609
|
+
if (!metric)
|
|
2610
|
+
return;
|
|
2611
|
+
const currentValue = baselineValues.get(metric) || 0;
|
|
2612
|
+
const isFunnelStage = funnelMetric.funnelMetric === metric;
|
|
2613
|
+
let percentageIncrease;
|
|
2614
|
+
let targetValue;
|
|
2615
|
+
if (metric === MetricEnum.BOUNCE_RATE) {
|
|
2616
|
+
percentageIncrease = -stagePercentageIncrease;
|
|
2617
|
+
targetValue = currentValue * (1 + percentageIncrease / 100);
|
|
2618
|
+
}
|
|
2619
|
+
else if (isDerivedMetric$1(metric)) {
|
|
2620
|
+
percentageIncrease = 0;
|
|
2621
|
+
targetValue = currentValue;
|
|
2622
|
+
}
|
|
2623
|
+
else {
|
|
2624
|
+
percentageIncrease = stagePercentageIncrease;
|
|
2625
|
+
targetValue = currentValue * perStageFactor;
|
|
2626
|
+
}
|
|
2627
|
+
metricCalculations.push({
|
|
2628
|
+
metric,
|
|
2629
|
+
funnelMetric: funnelMetric.funnelMetric,
|
|
2630
|
+
currentValue,
|
|
2631
|
+
targetValue,
|
|
2632
|
+
percentageIncrease,
|
|
2633
|
+
isFunnelStage,
|
|
2634
|
+
funnelInd: funnelMetric.funnelInd,
|
|
2635
|
+
relatedInd: funnelMetric.relatedInd,
|
|
2636
|
+
description: funnelMetric.relatedMetricDescription
|
|
2637
|
+
});
|
|
2638
|
+
});
|
|
2639
|
+
return {
|
|
2640
|
+
revenueTarget,
|
|
2641
|
+
revenuePercentageIncrease,
|
|
2642
|
+
metricCalculations
|
|
2643
|
+
};
|
|
2644
|
+
}
|
|
2645
|
+
function getUniqueFunnelStages(funnelMetrics) {
|
|
2646
|
+
const stages = [];
|
|
2647
|
+
const seen = new Set();
|
|
2648
|
+
funnelMetrics.forEach(fm => {
|
|
2649
|
+
if (fm.funnelMetric && fm.funnelMetric === fm.relatedMetric && !seen.has(fm.funnelMetric)) {
|
|
2650
|
+
seen.add(fm.funnelMetric);
|
|
2651
|
+
stages.push(fm.funnelMetric);
|
|
2652
|
+
}
|
|
2653
|
+
});
|
|
2654
|
+
return stages;
|
|
2655
|
+
}
|
|
2656
|
+
const DERIVED_METRICS$1 = new Set([
|
|
2657
|
+
MetricEnum.REVENUE_PER_PRODUCT_VIEW,
|
|
2658
|
+
MetricEnum.REVENUE_PER_ADD_TO_CART,
|
|
2659
|
+
MetricEnum.REVENUE_PER_CHECKOUT
|
|
2660
|
+
]);
|
|
2661
|
+
function isDerivedMetric$1(metric) {
|
|
2662
|
+
return DERIVED_METRICS$1.has(metric);
|
|
2663
|
+
}
|
|
2664
|
+
function generateTargetsFromCalculations(shopId, calculations) {
|
|
2665
|
+
const startDate = getCurrentYearStart();
|
|
2666
|
+
const endDate = getCurrentYearEnd();
|
|
2667
|
+
return calculations.map((calc) => ({
|
|
2668
|
+
shopId,
|
|
2669
|
+
metric: calc.metric,
|
|
2670
|
+
amount: calc.targetValue,
|
|
2671
|
+
startDate,
|
|
2672
|
+
endDate
|
|
2673
|
+
}));
|
|
2674
|
+
}
|
|
2675
|
+
function groupMetricsByFunnelStage(calculations) {
|
|
2676
|
+
const grouped = new Map();
|
|
2677
|
+
calculations.forEach((calc) => {
|
|
2678
|
+
if (calc.funnelMetric) {
|
|
2679
|
+
if (!grouped.has(calc.funnelMetric)) {
|
|
2680
|
+
grouped.set(calc.funnelMetric, []);
|
|
2681
|
+
}
|
|
2682
|
+
grouped.get(calc.funnelMetric).push(calc);
|
|
2683
|
+
}
|
|
2684
|
+
});
|
|
2685
|
+
return grouped;
|
|
2686
|
+
}
|
|
2687
|
+
function getFunnelStageMetrics(calculations) {
|
|
2688
|
+
return calculations.filter((calc) => calc.isFunnelStage);
|
|
2689
|
+
}
|
|
2690
|
+
|
|
2691
|
+
function transformUiDataToChartSeries(mainUiData, ytdComparisonUiData, metricToExtract) {
|
|
2692
|
+
const series = [];
|
|
2693
|
+
if (ytdComparisonUiData?.convertedDataResults) {
|
|
2694
|
+
const priorYearSeries = extractSeriesFromConvertedData(ytdComparisonUiData.convertedDataResults, metricToExtract, 'Prior Year');
|
|
2695
|
+
if (priorYearSeries) {
|
|
2696
|
+
series.push(priorYearSeries);
|
|
2697
|
+
}
|
|
2698
|
+
}
|
|
2699
|
+
if (mainUiData?.convertedDataResults) {
|
|
2700
|
+
const currentYearSeries = extractSeriesFromConvertedData(mainUiData.convertedDataResults, metricToExtract, 'Current Year');
|
|
2701
|
+
if (currentYearSeries) {
|
|
2702
|
+
series.push(currentYearSeries);
|
|
2703
|
+
}
|
|
2704
|
+
}
|
|
2705
|
+
return series;
|
|
2706
|
+
}
|
|
2707
|
+
function extractSeriesFromConvertedData(convertedData, metricToExtract, seriesName) {
|
|
2708
|
+
const metricIndex = convertedData.metrics?.indexOf(metricToExtract);
|
|
2709
|
+
if (metricIndex === undefined || metricIndex === -1)
|
|
2710
|
+
return null;
|
|
2711
|
+
const dimensionIndex = convertedData.dimensions?.indexOf(DimensionEnum.MONTH);
|
|
2712
|
+
if (dimensionIndex === undefined || dimensionIndex === -1)
|
|
2713
|
+
return null;
|
|
2714
|
+
const dataPoints = [];
|
|
2715
|
+
convertedData.rows?.forEach((row) => {
|
|
2716
|
+
const monthValue = row.dimensionValues?.[dimensionIndex];
|
|
2717
|
+
const metricValue = parseFloat(row.metricValues?.[metricIndex] || '0');
|
|
2718
|
+
if (monthValue) {
|
|
2719
|
+
dataPoints.push({
|
|
2720
|
+
category: monthValue,
|
|
2721
|
+
value: metricValue,
|
|
2722
|
+
displayLabel: formatMonthLabel(monthValue)
|
|
2723
|
+
});
|
|
2724
|
+
}
|
|
2725
|
+
});
|
|
2726
|
+
return {
|
|
2727
|
+
name: seriesName,
|
|
2728
|
+
data: sortDataByMonth(dataPoints)
|
|
2729
|
+
};
|
|
2730
|
+
}
|
|
2731
|
+
function formatMonthLabel(monthValue) {
|
|
2732
|
+
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
2733
|
+
const monthNum = parseInt(monthValue, 10);
|
|
2734
|
+
if (monthNum >= 1 && monthNum <= 12) {
|
|
2735
|
+
return months[monthNum - 1];
|
|
2736
|
+
}
|
|
2737
|
+
return monthValue;
|
|
2738
|
+
}
|
|
2739
|
+
function sortDataByMonth(data) {
|
|
2740
|
+
return data.sort((a, b) => {
|
|
2741
|
+
const aMonth = parseInt(a.category, 10);
|
|
2742
|
+
const bMonth = parseInt(b.category, 10);
|
|
2743
|
+
return aMonth - bMonth;
|
|
2744
|
+
});
|
|
2745
|
+
}
|
|
2746
|
+
function transformTrendUiDataToChartSeries(trendUiData, metricToExtract) {
|
|
2747
|
+
if (!trendUiData?.convertedDataResults) {
|
|
2748
|
+
return [];
|
|
2749
|
+
}
|
|
2750
|
+
const convertedData = trendUiData.convertedDataResults;
|
|
2751
|
+
const metricIndex = convertedData.metrics?.indexOf(metricToExtract);
|
|
2752
|
+
if (metricIndex === undefined || metricIndex === -1)
|
|
2753
|
+
return [];
|
|
2754
|
+
const dateIndex = convertedData.dimensions?.indexOf(DimensionEnum.DATE);
|
|
2755
|
+
const monthIndex = convertedData.dimensions?.indexOf(DimensionEnum.MONTH);
|
|
2756
|
+
const dimensionIndex = dateIndex !== undefined && dateIndex !== -1
|
|
2757
|
+
? dateIndex
|
|
2758
|
+
: (monthIndex !== undefined && monthIndex !== -1 ? monthIndex : -1);
|
|
2759
|
+
if (dimensionIndex === -1)
|
|
2760
|
+
return [];
|
|
2761
|
+
const currentYear = new Date().getFullYear();
|
|
2762
|
+
const priorYear = currentYear - 1;
|
|
2763
|
+
const priorYearPoints = [];
|
|
2764
|
+
const currentYearPoints = [];
|
|
2765
|
+
convertedData.rows?.forEach((row) => {
|
|
2766
|
+
const dimValue = row.dimensionValues?.[dimensionIndex];
|
|
2767
|
+
const metricValue = parseFloat(row.metricValues?.[metricIndex] || '0');
|
|
2768
|
+
if (dimValue) {
|
|
2769
|
+
let year;
|
|
2770
|
+
let month;
|
|
2771
|
+
if (dimValue.includes('-')) {
|
|
2772
|
+
const parts = dimValue.split('-');
|
|
2773
|
+
year = parseInt(parts[0], 10);
|
|
2774
|
+
month = parseInt(parts[1], 10);
|
|
2775
|
+
}
|
|
2776
|
+
else if (dimValue.length >= 6) {
|
|
2777
|
+
year = parseInt(dimValue.substring(0, 4), 10);
|
|
2778
|
+
month = parseInt(dimValue.substring(4, 6), 10);
|
|
2779
|
+
}
|
|
2780
|
+
else {
|
|
2781
|
+
month = parseInt(dimValue, 10);
|
|
2782
|
+
year = currentYear;
|
|
2783
|
+
}
|
|
2784
|
+
const point = {
|
|
2785
|
+
category: String(month),
|
|
2786
|
+
value: metricValue,
|
|
2787
|
+
displayLabel: formatMonthLabel(String(month))
|
|
2788
|
+
};
|
|
2789
|
+
if (year === priorYear) {
|
|
2790
|
+
priorYearPoints.push(point);
|
|
2791
|
+
}
|
|
2792
|
+
else if (year === currentYear) {
|
|
2793
|
+
currentYearPoints.push(point);
|
|
2794
|
+
}
|
|
2795
|
+
}
|
|
2796
|
+
});
|
|
2797
|
+
const series = [];
|
|
2798
|
+
if (priorYearPoints.length > 0) {
|
|
2799
|
+
series.push({
|
|
2800
|
+
name: String(priorYear),
|
|
2801
|
+
data: aggregateAndSortByMonth(priorYearPoints)
|
|
2802
|
+
});
|
|
2803
|
+
}
|
|
2804
|
+
if (currentYearPoints.length > 0) {
|
|
2805
|
+
series.push({
|
|
2806
|
+
name: String(currentYear),
|
|
2807
|
+
data: aggregateAndSortByMonth(currentYearPoints)
|
|
2808
|
+
});
|
|
2809
|
+
}
|
|
2810
|
+
return series;
|
|
2811
|
+
}
|
|
2812
|
+
function aggregateAndSortByMonth(points) {
|
|
2813
|
+
const monthMap = new Map();
|
|
2814
|
+
points.forEach(point => {
|
|
2815
|
+
const existing = monthMap.get(point.category);
|
|
2816
|
+
if (existing) {
|
|
2817
|
+
existing.value += point.value;
|
|
2818
|
+
}
|
|
2819
|
+
else {
|
|
2820
|
+
monthMap.set(point.category, { ...point });
|
|
2821
|
+
}
|
|
2822
|
+
});
|
|
2823
|
+
return sortDataByMonth(Array.from(monthMap.values()));
|
|
2824
|
+
}
|
|
2825
|
+
function getConvertedDataForSource(uiData, source) {
|
|
2826
|
+
if (!uiData)
|
|
2827
|
+
return undefined;
|
|
2828
|
+
const periodInfo = uiData.periodInfo;
|
|
2829
|
+
let result;
|
|
2830
|
+
switch (source) {
|
|
2831
|
+
case 'current':
|
|
2832
|
+
result = uiData.convertedDataResults;
|
|
2833
|
+
break;
|
|
2834
|
+
case 'compare':
|
|
2835
|
+
result = uiData.convertedDataResultsCompare;
|
|
2836
|
+
break;
|
|
2837
|
+
case 'priorYear':
|
|
2838
|
+
if (periodInfo?.period === UiDataPeriodEnum.THIS_YEAR &&
|
|
2839
|
+
periodInfo?.comparePeriod === UiDataComparePeriodEnum.PREVIOUS_PERIOD) {
|
|
2840
|
+
result = uiData.convertedDataResultsCompare;
|
|
2841
|
+
}
|
|
2842
|
+
else if (periodInfo?.period === UiDataPeriodEnum.THIS_AND_LAST_YEAR) {
|
|
2843
|
+
result = uiData.convertedDataResults;
|
|
2844
|
+
}
|
|
2845
|
+
else if (periodInfo?.comparePeriod === UiDataComparePeriodEnum.SAME_PERIOD_LAST_YEAR) {
|
|
2846
|
+
result = uiData.convertedDataResultsCompare;
|
|
2847
|
+
}
|
|
2848
|
+
else if (periodInfo?.comparePeriod === UiDataComparePeriodEnum.PREVIOUS_PERIOD) {
|
|
2849
|
+
result = uiData.convertedDataResultsCompare;
|
|
2850
|
+
}
|
|
2851
|
+
else {
|
|
2852
|
+
result = uiData.convertedDataResultsCompare;
|
|
2853
|
+
}
|
|
2854
|
+
break;
|
|
2855
|
+
}
|
|
2856
|
+
return result;
|
|
2857
|
+
}
|
|
2858
|
+
function sumMetricFromUiData(uiData, metricToSum, source = 'current') {
|
|
2859
|
+
const convertedData = getConvertedDataForSource(uiData, source);
|
|
2860
|
+
if (!convertedData) {
|
|
2861
|
+
return 0;
|
|
2862
|
+
}
|
|
2863
|
+
let total = 0;
|
|
2864
|
+
const metricIndex = convertedData.metrics?.indexOf(metricToSum);
|
|
2865
|
+
if (metricIndex === undefined || metricIndex === -1) {
|
|
2866
|
+
return 0;
|
|
2867
|
+
}
|
|
2868
|
+
convertedData.rows?.forEach((row) => {
|
|
2869
|
+
const rawValue = row.metricValues?.[metricIndex];
|
|
2870
|
+
const metricValue = parseFloat(rawValue || '0');
|
|
2871
|
+
total += metricValue;
|
|
2872
|
+
});
|
|
2873
|
+
return total;
|
|
2874
|
+
}
|
|
2875
|
+
|
|
2876
|
+
function calculateFunnelRatios(funnelMetrics, baselineValues) {
|
|
2877
|
+
const ratios = new Map();
|
|
2878
|
+
const stages = funnelMetrics
|
|
2879
|
+
.filter(fm => fm.funnelMetric === fm.relatedMetric)
|
|
2880
|
+
.sort((a, b) => (a.funnelInd ?? 0) - (b.funnelInd ?? 0));
|
|
2881
|
+
for (let i = 0; i < stages.length - 1; i++) {
|
|
2882
|
+
const fromStage = stages[i].relatedMetric;
|
|
2883
|
+
const toStage = stages[i + 1].relatedMetric;
|
|
2884
|
+
if (fromStage && toStage) {
|
|
2885
|
+
const fromValue = baselineValues.get(fromStage) || 0;
|
|
2886
|
+
const toValue = baselineValues.get(toStage) || 0;
|
|
2887
|
+
if (fromValue > 0) {
|
|
2888
|
+
const ratio = toValue / fromValue;
|
|
2889
|
+
const key = `${fromStage}_to_${toStage}`;
|
|
2890
|
+
ratios.set(key, ratio);
|
|
2891
|
+
}
|
|
2892
|
+
}
|
|
2893
|
+
}
|
|
2894
|
+
return ratios;
|
|
2895
|
+
}
|
|
2896
|
+
function calculateRelatedMetricRatios(funnelMetrics, baselineValues) {
|
|
2897
|
+
const ratios = new Map();
|
|
2898
|
+
const stageGroups = new Map();
|
|
2899
|
+
funnelMetrics.forEach(fm => {
|
|
2900
|
+
if (fm.funnelMetric && fm.relatedMetric && fm.funnelMetric !== fm.relatedMetric) {
|
|
2901
|
+
if (!stageGroups.has(fm.funnelMetric)) {
|
|
2902
|
+
stageGroups.set(fm.funnelMetric, []);
|
|
2903
|
+
}
|
|
2904
|
+
stageGroups.get(fm.funnelMetric).push(fm);
|
|
2905
|
+
}
|
|
2906
|
+
});
|
|
2907
|
+
stageGroups.forEach((relatedMetrics, funnelStage) => {
|
|
2908
|
+
const funnelValue = baselineValues.get(funnelStage) || 0;
|
|
2909
|
+
if (funnelValue > 0) {
|
|
2910
|
+
relatedMetrics.forEach(fm => {
|
|
2911
|
+
if (fm.relatedMetric) {
|
|
2912
|
+
const relatedValue = baselineValues.get(fm.relatedMetric) || 0;
|
|
2913
|
+
const ratio = relatedValue / funnelValue;
|
|
2914
|
+
const key = `${fm.relatedMetric}_to_${funnelStage}`;
|
|
2915
|
+
ratios.set(key, ratio);
|
|
2916
|
+
}
|
|
2917
|
+
});
|
|
2918
|
+
}
|
|
2919
|
+
});
|
|
2920
|
+
return ratios;
|
|
2921
|
+
}
|
|
2922
|
+
function calculateMetricTargetsFromRevenueReverse(revenueTarget, priorYearRevenue, funnelMetrics, baselineValues) {
|
|
2923
|
+
const revenuePercentageIncrease = ((revenueTarget - priorYearRevenue) / priorYearRevenue) * 100;
|
|
2924
|
+
const funnelRatios = calculateFunnelRatios(funnelMetrics, baselineValues);
|
|
2925
|
+
const relatedRatios = calculateRelatedMetricRatios(funnelMetrics, baselineValues);
|
|
2926
|
+
const sortedFunnelMetrics = [...funnelMetrics].sort((a, b) => {
|
|
2927
|
+
const aFunnel = a.funnelInd ?? 999;
|
|
2928
|
+
const bFunnel = b.funnelInd ?? 999;
|
|
2929
|
+
if (aFunnel !== bFunnel)
|
|
2930
|
+
return aFunnel - bFunnel;
|
|
2931
|
+
const aRelated = a.relatedInd ?? 999;
|
|
2932
|
+
const bRelated = b.relatedInd ?? 999;
|
|
2933
|
+
return aRelated - bRelated;
|
|
2934
|
+
});
|
|
2935
|
+
const stages = sortedFunnelMetrics
|
|
2936
|
+
.filter(fm => fm.funnelMetric === fm.relatedMetric)
|
|
2937
|
+
.map(fm => fm.relatedMetric)
|
|
2938
|
+
.filter(Boolean);
|
|
2939
|
+
const stageTargets = new Map();
|
|
2940
|
+
let currentRevenue = revenueTarget;
|
|
2941
|
+
for (let i = stages.length - 1; i >= 0; i--) {
|
|
2942
|
+
const stage = stages[i];
|
|
2943
|
+
const baseline = baselineValues.get(stage) || 0;
|
|
2944
|
+
if (i === stages.length - 1) {
|
|
2945
|
+
stageTargets.set(stage, currentRevenue);
|
|
2946
|
+
}
|
|
2947
|
+
else {
|
|
2948
|
+
const nextStage = stages[i + 1];
|
|
2949
|
+
const ratioKey = `${stage}_to_${nextStage}`;
|
|
2950
|
+
const ratio = funnelRatios.get(ratioKey) || 0;
|
|
2951
|
+
if (ratio > 0) {
|
|
2952
|
+
const nextStageTarget = stageTargets.get(nextStage) || 0;
|
|
2953
|
+
currentRevenue = nextStageTarget / ratio;
|
|
2954
|
+
stageTargets.set(stage, currentRevenue);
|
|
2955
|
+
}
|
|
2956
|
+
else {
|
|
2957
|
+
const increaseNeeded = revenueTarget / baseline;
|
|
2958
|
+
stageTargets.set(stage, baseline * increaseNeeded);
|
|
2959
|
+
}
|
|
2960
|
+
}
|
|
2961
|
+
}
|
|
2962
|
+
const metricCalculations = [];
|
|
2963
|
+
const stageGroups = new Map();
|
|
2964
|
+
sortedFunnelMetrics.forEach(fm => {
|
|
2965
|
+
if (fm.funnelMetric) {
|
|
2966
|
+
if (!stageGroups.has(fm.funnelMetric)) {
|
|
2967
|
+
stageGroups.set(fm.funnelMetric, []);
|
|
2968
|
+
}
|
|
2969
|
+
stageGroups.get(fm.funnelMetric).push(fm);
|
|
2970
|
+
}
|
|
2971
|
+
});
|
|
2972
|
+
stageGroups.forEach((metrics, funnelStage) => {
|
|
2973
|
+
const stageTarget = stageTargets.get(funnelStage);
|
|
2974
|
+
const stageBaseline = baselineValues.get(funnelStage) || 0;
|
|
2975
|
+
const stageIncrease = stageTarget ? stageTarget - stageBaseline : 0;
|
|
2976
|
+
metrics.forEach(fm => {
|
|
2977
|
+
if (!fm.relatedMetric)
|
|
2978
|
+
return;
|
|
2979
|
+
const currentValue = baselineValues.get(fm.relatedMetric) || 0;
|
|
2980
|
+
const isFunnelStage = fm.funnelMetric === fm.relatedMetric;
|
|
2981
|
+
let targetValue;
|
|
2982
|
+
let percentageIncrease;
|
|
2983
|
+
if (isFunnelStage && stageTarget !== undefined) {
|
|
2984
|
+
targetValue = stageTarget;
|
|
2985
|
+
percentageIncrease = currentValue > 0 ? ((targetValue - currentValue) / currentValue) * 100 : 0;
|
|
2986
|
+
}
|
|
2987
|
+
else if (fm.relatedMetric === MetricEnum.BOUNCE_RATE) {
|
|
2988
|
+
const stageTargetValue = stageTargets.get(funnelStage) || stageBaseline;
|
|
2989
|
+
const stageIncreaseRatio = stageBaseline > 0 ? stageTargetValue / stageBaseline : 1;
|
|
2990
|
+
targetValue = currentValue / stageIncreaseRatio;
|
|
2991
|
+
percentageIncrease = currentValue > 0 ? ((targetValue - currentValue) / currentValue) * 100 : 0;
|
|
2992
|
+
}
|
|
2993
|
+
else if (isDerivedMetric(fm.relatedMetric)) {
|
|
2994
|
+
targetValue = currentValue;
|
|
2995
|
+
percentageIncrease = 0;
|
|
2996
|
+
}
|
|
2997
|
+
else {
|
|
2998
|
+
const ratioKey = `${fm.relatedMetric}_to_${funnelStage}`;
|
|
2999
|
+
const impactRatio = relatedRatios.get(ratioKey) || 1;
|
|
3000
|
+
const relatedMetrics = metrics.filter(m => m.relatedMetric &&
|
|
3001
|
+
m.relatedMetric !== funnelStage &&
|
|
3002
|
+
!isDerivedMetric(m.relatedMetric) &&
|
|
3003
|
+
m.relatedMetric !== MetricEnum.BOUNCE_RATE);
|
|
3004
|
+
const numRelatedMetrics = relatedMetrics.length;
|
|
3005
|
+
if (numRelatedMetrics > 0 && stageBaseline > 0) {
|
|
3006
|
+
const avgIncreaseNeeded = stageIncrease / numRelatedMetrics;
|
|
3007
|
+
const metricIncreaseNeeded = impactRatio > 0 ? avgIncreaseNeeded / impactRatio : avgIncreaseNeeded;
|
|
3008
|
+
targetValue = currentValue + metricIncreaseNeeded;
|
|
3009
|
+
percentageIncrease = currentValue > 0 ? ((targetValue - currentValue) / currentValue) * 100 : 0;
|
|
3010
|
+
}
|
|
3011
|
+
else {
|
|
3012
|
+
const stageTargetValue = stageTargets.get(funnelStage) || stageBaseline;
|
|
3013
|
+
const stageIncreaseRatio = stageBaseline > 0 ? stageTargetValue / stageBaseline : 1;
|
|
3014
|
+
targetValue = currentValue * stageIncreaseRatio;
|
|
3015
|
+
percentageIncrease = currentValue > 0 ? ((targetValue - currentValue) / currentValue) * 100 : 0;
|
|
3016
|
+
}
|
|
3017
|
+
}
|
|
3018
|
+
metricCalculations.push({
|
|
3019
|
+
metric: fm.relatedMetric,
|
|
3020
|
+
funnelMetric: fm.funnelMetric,
|
|
3021
|
+
currentValue,
|
|
3022
|
+
targetValue,
|
|
3023
|
+
percentageIncrease,
|
|
3024
|
+
isFunnelStage,
|
|
3025
|
+
funnelInd: fm.funnelInd,
|
|
3026
|
+
relatedInd: fm.relatedInd,
|
|
3027
|
+
description: fm.relatedMetricDescription
|
|
3028
|
+
});
|
|
3029
|
+
});
|
|
3030
|
+
});
|
|
3031
|
+
const validation = validateRevenueTarget(revenueTarget, metricCalculations, baselineValues, funnelRatios);
|
|
3032
|
+
let adjustmentApplied = 0;
|
|
3033
|
+
if (Math.abs(validation.difference) > 0.01) {
|
|
3034
|
+
metricCalculations.forEach(calc => {
|
|
3035
|
+
if (calc.isFunnelStage && calc.metric !== MetricEnum.BOUNCE_RATE) {
|
|
3036
|
+
calc.targetValue += validation.difference / stages.length;
|
|
3037
|
+
calc.percentageIncrease = calc.currentValue > 0
|
|
3038
|
+
? ((calc.targetValue - calc.currentValue) / calc.currentValue) * 100
|
|
3039
|
+
: 0;
|
|
3040
|
+
}
|
|
3041
|
+
});
|
|
3042
|
+
adjustmentApplied = validation.difference;
|
|
3043
|
+
}
|
|
3044
|
+
return {
|
|
3045
|
+
revenueTarget,
|
|
3046
|
+
revenuePercentageIncrease,
|
|
3047
|
+
metricCalculations,
|
|
3048
|
+
adjustmentApplied
|
|
3049
|
+
};
|
|
3050
|
+
}
|
|
3051
|
+
const DERIVED_METRICS = new Set([
|
|
3052
|
+
MetricEnum.REVENUE_PER_PRODUCT_VIEW,
|
|
3053
|
+
MetricEnum.REVENUE_PER_ADD_TO_CART,
|
|
3054
|
+
MetricEnum.REVENUE_PER_CHECKOUT
|
|
3055
|
+
]);
|
|
3056
|
+
function isDerivedMetric(metric) {
|
|
3057
|
+
return DERIVED_METRICS.has(metric);
|
|
3058
|
+
}
|
|
3059
|
+
function validateRevenueTarget(targetRevenue, calculations, baselineValues, funnelRatios) {
|
|
3060
|
+
const stages = calculations
|
|
3061
|
+
.filter(c => c.isFunnelStage)
|
|
3062
|
+
.sort((a, b) => (a.funnelInd ?? 0) - (b.funnelInd ?? 0));
|
|
3063
|
+
let calculatedRevenue = 0;
|
|
3064
|
+
if (stages.length > 0) {
|
|
3065
|
+
calculatedRevenue = stages[stages.length - 1].targetValue;
|
|
3066
|
+
}
|
|
3067
|
+
const difference = targetRevenue - calculatedRevenue;
|
|
3068
|
+
const percentageDifference = targetRevenue > 0 ? (difference / targetRevenue) * 100 : 0;
|
|
3069
|
+
const withinTolerance = Math.abs(difference) < 0.01 || Math.abs(percentageDifference) < 0.001;
|
|
3070
|
+
return {
|
|
3071
|
+
calculatedRevenue,
|
|
3072
|
+
difference,
|
|
3073
|
+
percentageDifference,
|
|
3074
|
+
withinTolerance
|
|
3075
|
+
};
|
|
3076
|
+
}
|
|
3077
|
+
|
|
3078
|
+
class RevenueCalculatorService {
|
|
3079
|
+
calculateTargetsFromRevenue(revenueTarget, mainUiData, funnelMetrics) {
|
|
3080
|
+
const priorYearRevenue = this.extractPriorYearRevenue(mainUiData);
|
|
3081
|
+
const baselineValues = this.extractBaselineValues(mainUiData, funnelMetrics);
|
|
3082
|
+
return calculateMetricTargetsFromRevenue(revenueTarget, priorYearRevenue, funnelMetrics, baselineValues);
|
|
3083
|
+
}
|
|
3084
|
+
calculateTargetsFromPercentage(percentageIncrease, mainUiData, funnelMetrics) {
|
|
3085
|
+
const priorYearRevenue = this.extractPriorYearRevenue(mainUiData);
|
|
3086
|
+
const revenueTarget = priorYearRevenue * (1 + percentageIncrease / 100);
|
|
3087
|
+
return this.calculateTargetsFromRevenue(revenueTarget, mainUiData, funnelMetrics);
|
|
3088
|
+
}
|
|
3089
|
+
calculateTargetsFromRevenueWithRatios(revenueTarget, mainUiData, funnelMetrics) {
|
|
3090
|
+
const priorYearRevenue = this.extractPriorYearRevenue(mainUiData);
|
|
3091
|
+
const baselineValues = this.extractBaselineValues(mainUiData, funnelMetrics);
|
|
3092
|
+
return calculateMetricTargetsFromRevenueReverse(revenueTarget, priorYearRevenue, funnelMetrics, baselineValues);
|
|
3093
|
+
}
|
|
3094
|
+
calculateTargetsFromPercentageWithRatios(percentageIncrease, mainUiData, funnelMetrics) {
|
|
3095
|
+
const priorYearRevenue = this.extractPriorYearRevenue(mainUiData);
|
|
3096
|
+
const revenueTarget = priorYearRevenue * (1 + percentageIncrease / 100);
|
|
3097
|
+
return this.calculateTargetsFromRevenueWithRatios(revenueTarget, mainUiData, funnelMetrics);
|
|
3098
|
+
}
|
|
3099
|
+
extractPriorYearRevenue(mainUiData) {
|
|
3100
|
+
return sumMetricFromUiData(mainUiData, MetricEnum.PURCHASE_REVENUE, 'priorYear');
|
|
3101
|
+
}
|
|
3102
|
+
extractBaselineValues(mainUiData, funnelMetrics) {
|
|
3103
|
+
const baselineValues = new Map();
|
|
3104
|
+
if (!mainUiData) {
|
|
3105
|
+
return baselineValues;
|
|
3106
|
+
}
|
|
3107
|
+
funnelMetrics.forEach(fm => {
|
|
3108
|
+
if (fm.relatedMetric) {
|
|
3109
|
+
const value = sumMetricFromUiData(mainUiData, fm.relatedMetric, 'priorYear');
|
|
3110
|
+
baselineValues.set(fm.relatedMetric, value);
|
|
3111
|
+
}
|
|
3112
|
+
});
|
|
3113
|
+
return baselineValues;
|
|
3114
|
+
}
|
|
3115
|
+
getMetricsByFunnelStage(calculations) {
|
|
3116
|
+
const grouped = new Map();
|
|
3117
|
+
calculations.forEach(calc => {
|
|
3118
|
+
if (calc.isFunnelStage) {
|
|
3119
|
+
if (!grouped.has(calc.metric)) {
|
|
3120
|
+
grouped.set(calc.metric, []);
|
|
3121
|
+
}
|
|
3122
|
+
grouped.get(calc.metric).push(calc);
|
|
3123
|
+
}
|
|
3124
|
+
else if (calc.funnelMetric) {
|
|
3125
|
+
if (!grouped.has(calc.funnelMetric)) {
|
|
3126
|
+
grouped.set(calc.funnelMetric, []);
|
|
3127
|
+
}
|
|
3128
|
+
grouped.get(calc.funnelMetric).push(calc);
|
|
3129
|
+
}
|
|
3130
|
+
});
|
|
3131
|
+
return grouped;
|
|
3132
|
+
}
|
|
3133
|
+
static { this.ɵfac = function RevenueCalculatorService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || RevenueCalculatorService)(); }; }
|
|
3134
|
+
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: RevenueCalculatorService, factory: RevenueCalculatorService.ɵfac, providedIn: 'root' }); }
|
|
3135
|
+
}
|
|
3136
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RevenueCalculatorService, [{
|
|
3137
|
+
type: Injectable,
|
|
3138
|
+
args: [{
|
|
3139
|
+
providedIn: 'root'
|
|
3140
|
+
}]
|
|
3141
|
+
}], null, null); })();
|
|
3142
|
+
|
|
2538
3143
|
const _c0$16 = a0 => ["skeleton-loader", "rounded-lg", "relative", "overflow-hidden", a0];
|
|
2539
|
-
const _c1$
|
|
3144
|
+
const _c1$D = a0 => ["skeleton-shimmer-overlay", "absolute", "inset-0", "bg-gradient-to-r", a0];
|
|
2540
3145
|
class SkeletonLoaderComponent {
|
|
2541
3146
|
constructor() {
|
|
2542
3147
|
this.width = input('100%', ...(ngDevMode ? [{ debugName: "width" }] : []));
|
|
@@ -2554,7 +3159,7 @@ class SkeletonLoaderComponent {
|
|
|
2554
3159
|
i0.ɵɵclassProp("skeleton-shimmer", true)("skeleton-pulse", ctx.pulse());
|
|
2555
3160
|
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(10, _c0$16, ctx.isLightMode() ? "bg-slate-200/80" : "bg-slate-700/80"));
|
|
2556
3161
|
i0.ɵɵadvance();
|
|
2557
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(12, _c1$
|
|
3162
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(12, _c1$D, ctx.isLightMode() ? "from-transparent via-white/60 to-transparent" : "from-transparent via-slate-500/40 to-transparent"));
|
|
2558
3163
|
} }, dependencies: [NgClass], styles: [".skeleton-loader[_ngcontent-%COMP%]{position:relative;overflow:hidden}.skeleton-shimmer-overlay[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_shimmer 2s infinite cubic-bezier(.4,0,.6,1);transform:translate(-100%)}@keyframes _ngcontent-%COMP%_shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.skeleton-pulse[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1}50%{opacity:.6}}"], changeDetection: 0 }); }
|
|
2559
3164
|
}
|
|
2560
3165
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SkeletonLoaderComponent, [{
|
|
@@ -5496,7 +6101,7 @@ class OverallAssessmentComponent {
|
|
|
5496
6101
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(OverallAssessmentComponent, { className: "OverallAssessmentComponent", filePath: "lib/components/funnel-analysis-dashboard/overall-assessment.component.ts", lineNumber: 303 }); })();
|
|
5497
6102
|
|
|
5498
6103
|
const _c0$13 = () => [1, 2, 3];
|
|
5499
|
-
const _c1$
|
|
6104
|
+
const _c1$C = () => [1, 2, 3, 4];
|
|
5500
6105
|
const _c2$q = () => [];
|
|
5501
6106
|
function InsightCardComponent_Conditional_0_Conditional_0_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
5502
6107
|
i0.ɵɵelementStart(0, "div", 7);
|
|
@@ -5535,7 +6140,7 @@ function InsightCardComponent_Conditional_0_Conditional_0_Template(rf, ctx) { if
|
|
|
5535
6140
|
i0.ɵɵadvance();
|
|
5536
6141
|
i0.ɵɵrepeater(i0.ɵɵpureFunction0(8, _c0$13));
|
|
5537
6142
|
i0.ɵɵadvance(3);
|
|
5538
|
-
i0.ɵɵrepeater(i0.ɵɵpureFunction0(9, _c1$
|
|
6143
|
+
i0.ɵɵrepeater(i0.ɵɵpureFunction0(9, _c1$C));
|
|
5539
6144
|
} }
|
|
5540
6145
|
function InsightCardComponent_Conditional_0_Conditional_1_Conditional_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
5541
6146
|
i0.ɵɵnamespaceSVG();
|
|
@@ -8234,7 +8839,7 @@ class MetricCardComponent {
|
|
|
8234
8839
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MetricCardComponent, { className: "MetricCardComponent", filePath: "lib/components/funnel-analysis-dashboard/metric-card.component.ts", lineNumber: 537 }); })();
|
|
8235
8840
|
|
|
8236
8841
|
const _c0$12 = () => [1, 2, 3];
|
|
8237
|
-
const _c1$
|
|
8842
|
+
const _c1$B = (a0, a1, a2) => [a0, a1, a2];
|
|
8238
8843
|
const _c2$p = (a0, a1) => [a0, a1];
|
|
8239
8844
|
const _forTrack0$O = ($index, $item) => $item.metric;
|
|
8240
8845
|
const _forTrack1$7 = ($index, $item) => $item.dimensionValue;
|
|
@@ -8446,7 +9051,7 @@ function BreakdownSectionComponent_Conditional_1_For_9_For_27_Template(rf, ctx)
|
|
|
8446
9051
|
const ɵ$index_133_r9 = ctx.$index;
|
|
8447
9052
|
const group_r5 = i0.ɵɵnextContext().$implicit;
|
|
8448
9053
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
8449
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(31, _c1$
|
|
9054
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(31, _c1$B, ctx_r0.getRowBackgroundClass(metric_r8, ɵ$index_133_r9), ctx_r0.getPriorityDividerClass(metric_r8, ɵ$index_133_r9, group_r5.values), ctx_r0.isLightMode() ? "hover:bg-blue-50" : "hover:bg-slate-700/30"));
|
|
8450
9055
|
i0.ɵɵadvance(3);
|
|
8451
9056
|
i0.ɵɵproperty("ngClass", ctx_r0.isLightMode() ? "text-slate-600 group-hover:text-slate-900" : "text-slate-400 group-hover:text-white")("libSymphiqTooltip", ctx_r0.getBreakdownRowTooltip(metric_r8))("tooltipPosition", "auto");
|
|
8452
9057
|
i0.ɵɵadvance();
|
|
@@ -26701,7 +27306,7 @@ class FunnelWelcomeBannerComponent {
|
|
|
26701
27306
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelWelcomeBannerComponent, { className: "FunnelWelcomeBannerComponent", filePath: "lib/components/funnel-analysis-dashboard/funnel-welcome-banner.component.ts", lineNumber: 113 }); })();
|
|
26702
27307
|
|
|
26703
27308
|
const _c0$W = [[["", "slot", "overall-performance"]], [["", "slot", "performance-metrics"]], [["", "slot", "performance-breakdowns"]], [["", "slot", "competitive-intelligence"]]];
|
|
26704
|
-
const _c1$
|
|
27309
|
+
const _c1$A = ["[slot=overall-performance]", "[slot=performance-metrics]", "[slot=performance-breakdowns]", "[slot=competitive-intelligence]"];
|
|
26705
27310
|
class CollapsibleFunnelSectionGroupComponent {
|
|
26706
27311
|
constructor() {
|
|
26707
27312
|
this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
|
|
@@ -26832,7 +27437,7 @@ class CollapsibleFunnelSectionGroupComponent {
|
|
|
26832
27437
|
: 'border-slate-200';
|
|
26833
27438
|
}
|
|
26834
27439
|
static { this.ɵfac = function CollapsibleFunnelSectionGroupComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CollapsibleFunnelSectionGroupComponent)(); }; }
|
|
26835
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CollapsibleFunnelSectionGroupComponent, selectors: [["symphiq-collapsible-funnel-section-group"]], inputs: { viewMode: [1, "viewMode"] }, ngContentSelectors: _c1$
|
|
27440
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CollapsibleFunnelSectionGroupComponent, selectors: [["symphiq-collapsible-funnel-section-group"]], inputs: { viewMode: [1, "viewMode"] }, ngContentSelectors: _c1$A, decls: 90, vars: 58, consts: [[1, "rounded-2xl", "border", "shadow-lg", "overflow-hidden", 3, "ngClass"], [1, "px-6", "py-5", "border-b", 3, "ngClass"], [1, "flex", "items-center", "justify-between"], [1, "flex", "items-center", "gap-3"], [1, "p-2.5", "rounded-lg", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "text-sm", "mt-0.5", 3, "ngClass"], [1, "p-6", 3, "ngClass"], [1, "mb-6", "p-4", "rounded-xl", "border", "flex", "items-start", "gap-3", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "flex-shrink-0", "mt-0.5", 3, "ngClass"], ["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-1"], [1, "font-semibold", "text-sm", "mb-1", 3, "ngClass"], [1, "text-sm", "leading-relaxed", 3, "ngClass"], [1, "space-y-3"], [1, "rounded-xl", "border", "overflow-hidden", "transition-all", "duration-200", 3, "id", "ngClass"], ["type", "button", 1, "cursor-pointer", "w-full", "px-5", "py-4", "flex", "items-center", "justify-between", "gap-4", "text-left", "transition-colors", "duration-200", 3, "click", "ngClass"], [1, "flex", "items-center", "gap-3", "flex-1", "min-w-0"], [1, "p-2", "rounded-lg", "flex-shrink-0", "transition-colors", "duration-200", 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", "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, "flex-1", "min-w-0"], [1, "font-semibold", "transition-colors", "duration-200", 3, "ngClass"], [1, "text-sm", "mt-0.5", "transition-colors", "duration-200", 3, "ngClass"], [1, "w-5", "h-5", "flex-shrink-0", "transition-transform", "duration-200", 3, "ngClass"], ["stroke", "currentColor", "stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"], [1, "grid", "transition-[grid-template-rows]", "duration-300", "ease-in-out"], [1, "overflow-hidden"], [1, "border-t", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"]], template: function CollapsibleFunnelSectionGroupComponent_Template(rf, ctx) { if (rf & 1) {
|
|
26836
27441
|
i0.ɵɵprojectionDef(_c0$W);
|
|
26837
27442
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4);
|
|
26838
27443
|
i0.ɵɵnamespaceSVG();
|
|
@@ -27677,7 +28282,7 @@ class ViewModeSwitcherModalComponent {
|
|
|
27677
28282
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ViewModeSwitcherModalComponent, { className: "ViewModeSwitcherModalComponent", filePath: "lib/components/shared/view-mode-switcher-modal.component.ts", lineNumber: 160 }); })();
|
|
27678
28283
|
|
|
27679
28284
|
const _c0$V = a0 => ({ name: "check-badge", source: a0 });
|
|
27680
|
-
const _c1$
|
|
28285
|
+
const _c1$z = a0 => ({ name: "check-circle", source: a0 });
|
|
27681
28286
|
const _c2$o = a0 => ({ name: "chevron-right", source: a0 });
|
|
27682
28287
|
const _forTrack0$z = ($index, $item) => $item.area;
|
|
27683
28288
|
function KeyStrengthsListModalContentComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -27738,7 +28343,7 @@ function KeyStrengthsListModalContentComponent_Conditional_2_For_2_Template(rf,
|
|
|
27738
28343
|
i0.ɵɵadvance();
|
|
27739
28344
|
i0.ɵɵtextInterpolate1(" ", strength_r3.description, " ");
|
|
27740
28345
|
i0.ɵɵadvance(3);
|
|
27741
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(14, _c1$
|
|
28346
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(14, _c1$z, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.iconClasses());
|
|
27742
28347
|
i0.ɵɵadvance();
|
|
27743
28348
|
i0.ɵɵproperty("ngClass", ctx_r0.countClasses());
|
|
27744
28349
|
i0.ɵɵadvance();
|
|
@@ -27909,7 +28514,7 @@ class KeyStrengthsListModalContentComponent {
|
|
|
27909
28514
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(KeyStrengthsListModalContentComponent, { className: "KeyStrengthsListModalContentComponent", filePath: "lib/components/profile-analysis-dashboard/modals/key-strengths-list-modal-content.component.ts", lineNumber: 79 }); })();
|
|
27910
28515
|
|
|
27911
28516
|
const _c0$U = a0 => ({ name: "shield-check", source: a0 });
|
|
27912
|
-
const _c1$
|
|
28517
|
+
const _c1$y = a0 => ({ name: "exclamation-triangle", source: a0 });
|
|
27913
28518
|
const _c2$n = a0 => ({ name: "document-text", source: a0 });
|
|
27914
28519
|
const _c3$h = a0 => ({ name: "chevron-right", source: a0 });
|
|
27915
28520
|
const _forTrack0$y = ($index, $item) => $item.area;
|
|
@@ -27979,7 +28584,7 @@ function CriticalGapsListModalContentComponent_Conditional_2_For_2_Template(rf,
|
|
|
27979
28584
|
i0.ɵɵadvance();
|
|
27980
28585
|
i0.ɵɵproperty("ngClass", ctx_r0.impactContainerClasses());
|
|
27981
28586
|
i0.ɵɵadvance(2);
|
|
27982
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(19, _c1$
|
|
28587
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(19, _c1$y, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.impactIconClasses(gap_r3.urgency));
|
|
27983
28588
|
i0.ɵɵadvance(2);
|
|
27984
28589
|
i0.ɵɵproperty("ngClass", ctx_r0.impactLabelClasses());
|
|
27985
28590
|
i0.ɵɵadvance(2);
|
|
@@ -28225,7 +28830,7 @@ class CriticalGapsListModalContentComponent {
|
|
|
28225
28830
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CriticalGapsListModalContentComponent, { className: "CriticalGapsListModalContentComponent", filePath: "lib/components/profile-analysis-dashboard/modals/critical-gaps-list-modal-content.component.ts", lineNumber: 98 }); })();
|
|
28226
28831
|
|
|
28227
28832
|
const _c0$T = a0 => ({ name: "check-circle", source: a0 });
|
|
28228
|
-
const _c1$
|
|
28833
|
+
const _c1$x = a0 => ({ name: "chat-bubble-left-right", source: a0 });
|
|
28229
28834
|
const _forTrack0$x = ($index, $item) => $item.questionId;
|
|
28230
28835
|
function KeyStrengthDetailModalContentComponent_Conditional_13_For_6_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
28231
28836
|
i0.ɵɵelementStart(0, "div", 19)(1, "span", 20);
|
|
@@ -28255,7 +28860,7 @@ function KeyStrengthDetailModalContentComponent_Conditional_13_For_6_Template(rf
|
|
|
28255
28860
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
28256
28861
|
i0.ɵɵproperty("ngClass", ctx_r1.answerCardClasses());
|
|
28257
28862
|
i0.ɵɵadvance(2);
|
|
28258
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(8, _c1$
|
|
28863
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(8, _c1$x, ctx_r1.IconSourceEnum.HEROICONS))("ngClass", ctx_r1.answerIconClasses());
|
|
28259
28864
|
i0.ɵɵadvance(2);
|
|
28260
28865
|
i0.ɵɵproperty("ngClass", ctx_r1.questionClasses());
|
|
28261
28866
|
i0.ɵɵadvance();
|
|
@@ -28466,7 +29071,7 @@ class KeyStrengthDetailModalContentComponent {
|
|
|
28466
29071
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(KeyStrengthDetailModalContentComponent, { className: "KeyStrengthDetailModalContentComponent", filePath: "lib/components/profile-analysis-dashboard/modals/key-strength-detail-modal-content.component.ts", lineNumber: 79 }); })();
|
|
28467
29072
|
|
|
28468
29073
|
const _c0$S = a0 => ({ name: "exclamation-triangle", source: a0 });
|
|
28469
|
-
const _c1$
|
|
29074
|
+
const _c1$w = a0 => ({ name: "document-text", source: a0 });
|
|
28470
29075
|
const _c2$m = a0 => ({ name: "chat-bubble-left-right", source: a0 });
|
|
28471
29076
|
const _forTrack0$w = ($index, $item) => $item.questionId;
|
|
28472
29077
|
function CriticalGapDetailModalContentComponent_Conditional_20_For_6_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -28544,7 +29149,7 @@ function CriticalGapDetailModalContentComponent_Conditional_20_Template(rf, ctx)
|
|
|
28544
29149
|
i0.ɵɵclassMap(ctx_r1.isLightMode() ? "border-slate-200" : "border-slate-700");
|
|
28545
29150
|
i0.ɵɵproperty("ngClass", ctx_r1.sectionTitleClasses());
|
|
28546
29151
|
i0.ɵɵadvance();
|
|
28547
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(5, _c1$
|
|
29152
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(5, _c1$w, ctx_r1.IconSourceEnum.HEROICONS))("ngClass", ctx_r1.sectionIconClasses());
|
|
28548
29153
|
i0.ɵɵadvance(3);
|
|
28549
29154
|
i0.ɵɵrepeater(ctx_r1.gap().supportingAnswers);
|
|
28550
29155
|
} }
|
|
@@ -30329,7 +30934,7 @@ class TopPriorityDetailModalContentComponent {
|
|
|
30329
30934
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TopPriorityDetailModalContentComponent, { className: "TopPriorityDetailModalContentComponent", filePath: "lib/components/profile-analysis-dashboard/modals/top-priority-detail-modal-content.component.ts", lineNumber: 72 }); })();
|
|
30330
30935
|
|
|
30331
30936
|
const _c0$R = a0 => ({ name: "check-badge", source: a0 });
|
|
30332
|
-
const _c1$
|
|
30937
|
+
const _c1$v = a0 => ({ name: "check-circle", source: a0 });
|
|
30333
30938
|
const _c2$l = a0 => ({ name: "chevron-right", source: a0 });
|
|
30334
30939
|
const _c3$g = a0 => ({ name: "chart-bar", source: a0 });
|
|
30335
30940
|
const _forTrack0$v = ($index, $item) => $item.capability;
|
|
@@ -30437,7 +31042,7 @@ function FocusAreaStrengthsListModalContentComponent_Conditional_2_For_2_Templat
|
|
|
30437
31042
|
i0.ɵɵadvance(2);
|
|
30438
31043
|
i0.ɵɵconditional(ctx_r0.getLinkedMetricsCount(strength_r3) > 0 ? 9 : -1);
|
|
30439
31044
|
i0.ɵɵadvance(2);
|
|
30440
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(14, _c1$
|
|
31045
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(14, _c1$v, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.iconClasses());
|
|
30441
31046
|
i0.ɵɵadvance();
|
|
30442
31047
|
i0.ɵɵproperty("ngClass", ctx_r0.countClasses());
|
|
30443
31048
|
i0.ɵɵadvance();
|
|
@@ -30652,7 +31257,7 @@ class FocusAreaStrengthsListModalContentComponent {
|
|
|
30652
31257
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FocusAreaStrengthsListModalContentComponent, { className: "FocusAreaStrengthsListModalContentComponent", filePath: "lib/components/profile-analysis-dashboard/modals/focus-area-strengths-list-modal-content.component.ts", lineNumber: 109 }); })();
|
|
30653
31258
|
|
|
30654
31259
|
const _c0$Q = a0 => ({ name: "exclamation-triangle", source: a0 });
|
|
30655
|
-
const _c1$
|
|
31260
|
+
const _c1$u = a0 => ({ name: "exclamation-circle", source: a0 });
|
|
30656
31261
|
const _c2$k = a0 => ({ name: "chevron-right", source: a0 });
|
|
30657
31262
|
function _forTrack0$u($index, $item) { return this.getGapTitle($item); }
|
|
30658
31263
|
function FocusAreaGapsListModalContentComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -30761,7 +31366,7 @@ function FocusAreaGapsListModalContentComponent_Conditional_2_For_2_Template(rf,
|
|
|
30761
31366
|
i0.ɵɵadvance();
|
|
30762
31367
|
i0.ɵɵconditional(ctx_r0.getImpactOnMetric(gap_r3) ? 8 : -1);
|
|
30763
31368
|
i0.ɵɵadvance(3);
|
|
30764
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(14, _c1$
|
|
31369
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(14, _c1$u, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.iconClasses(gap_r3));
|
|
30765
31370
|
i0.ɵɵadvance();
|
|
30766
31371
|
i0.ɵɵproperty("ngClass", ctx_r0.countClasses());
|
|
30767
31372
|
i0.ɵɵadvance();
|
|
@@ -31046,7 +31651,7 @@ class FocusAreaGapsListModalContentComponent {
|
|
|
31046
31651
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FocusAreaGapsListModalContentComponent, { className: "FocusAreaGapsListModalContentComponent", filePath: "lib/components/profile-analysis-dashboard/modals/focus-area-gaps-list-modal-content.component.ts", lineNumber: 106 }); })();
|
|
31047
31652
|
|
|
31048
31653
|
const _c0$P = a0 => ({ name: "light-bulb", source: a0 });
|
|
31049
|
-
const _c1$
|
|
31654
|
+
const _c1$t = a0 => ({ name: "chevron-right", source: a0 });
|
|
31050
31655
|
const _c2$j = a0 => ({ name: "chart-bar", source: a0 });
|
|
31051
31656
|
const _forTrack0$t = ($index, $item) => $item.opportunity;
|
|
31052
31657
|
function FocusAreaOpportunitiesListModalContentComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -31135,7 +31740,7 @@ function FocusAreaOpportunitiesListModalContentComponent_Conditional_2_For_2_Tem
|
|
|
31135
31740
|
i0.ɵɵadvance(2);
|
|
31136
31741
|
i0.ɵɵconditional(ctx_r0.getLinkedMetricsCount(opportunity_r3) > 0 ? 8 : -1);
|
|
31137
31742
|
i0.ɵɵadvance(2);
|
|
31138
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(9, _c1$
|
|
31743
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(9, _c1$t, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.chevronClasses());
|
|
31139
31744
|
} }
|
|
31140
31745
|
function FocusAreaOpportunitiesListModalContentComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
31141
31746
|
i0.ɵɵelementStart(0, "div", 2);
|
|
@@ -31315,7 +31920,7 @@ class FocusAreaOpportunitiesListModalContentComponent {
|
|
|
31315
31920
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FocusAreaOpportunitiesListModalContentComponent, { className: "FocusAreaOpportunitiesListModalContentComponent", filePath: "lib/components/profile-analysis-dashboard/modals/focus-area-opportunities-list-modal-content.component.ts", lineNumber: 90 }); })();
|
|
31316
31921
|
|
|
31317
31922
|
const _c0$O = a0 => ({ name: "chevron-right", source: a0 });
|
|
31318
|
-
const _c1$
|
|
31923
|
+
const _c1$s = a0 => ({ name: "chat-bubble-left-right", source: a0 });
|
|
31319
31924
|
const _forTrack0$s = ($index, $item) => $item.performanceItemId;
|
|
31320
31925
|
function FocusAreaStrengthDetailModalContentComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
31321
31926
|
i0.ɵɵelementStart(0, "div")(1, "p", 2);
|
|
@@ -31438,7 +32043,7 @@ function FocusAreaStrengthDetailModalContentComponent_Conditional_6_For_5_Templa
|
|
|
31438
32043
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
31439
32044
|
i0.ɵɵproperty("ngClass", ctx_r0.answerClasses());
|
|
31440
32045
|
i0.ɵɵadvance(2);
|
|
31441
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(7, _c1$
|
|
32046
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(7, _c1$s, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.answerIconClasses());
|
|
31442
32047
|
i0.ɵɵadvance();
|
|
31443
32048
|
i0.ɵɵproperty("ngClass", ctx_r0.answerQuestionClasses());
|
|
31444
32049
|
i0.ɵɵadvance();
|
|
@@ -32036,7 +32641,7 @@ class FocusAreaGapDetailModalContentComponent {
|
|
|
32036
32641
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FocusAreaGapDetailModalContentComponent, { className: "FocusAreaGapDetailModalContentComponent", filePath: "lib/components/profile-analysis-dashboard/modals/focus-area-gap-detail-modal-content.component.ts", lineNumber: 98 }); })();
|
|
32037
32642
|
|
|
32038
32643
|
const _c0$M = a0 => ({ name: "chevron-right", source: a0 });
|
|
32039
|
-
const _c1$
|
|
32644
|
+
const _c1$r = () => [];
|
|
32040
32645
|
const _forTrack0$r = ($index, $item) => $item.performanceItemId;
|
|
32041
32646
|
function FocusAreaOpportunityDetailModalContentComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
32042
32647
|
i0.ɵɵelementStart(0, "div")(1, "p", 2);
|
|
@@ -32125,7 +32730,7 @@ function FocusAreaOpportunityDetailModalContentComponent_Conditional_4_Template(
|
|
|
32125
32730
|
i0.ɵɵadvance();
|
|
32126
32731
|
i0.ɵɵproperty("ngClass", ctx_r0.sectionTitleClasses());
|
|
32127
32732
|
i0.ɵɵadvance(3);
|
|
32128
|
-
i0.ɵɵrepeater(ctx_r0.opportunity().linkedGoalIds || i0.ɵɵpureFunction0(2, _c1$
|
|
32733
|
+
i0.ɵɵrepeater(ctx_r0.opportunity().linkedGoalIds || i0.ɵɵpureFunction0(2, _c1$r));
|
|
32129
32734
|
} }
|
|
32130
32735
|
function FocusAreaOpportunityDetailModalContentComponent_Conditional_5_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
32131
32736
|
i0.ɵɵelementStart(0, "span", 10);
|
|
@@ -32151,7 +32756,7 @@ function FocusAreaOpportunityDetailModalContentComponent_Conditional_5_Template(
|
|
|
32151
32756
|
i0.ɵɵadvance();
|
|
32152
32757
|
i0.ɵɵproperty("ngClass", ctx_r0.sectionTitleClasses());
|
|
32153
32758
|
i0.ɵɵadvance(3);
|
|
32154
|
-
i0.ɵɵrepeater(ctx_r0.opportunity().linkedFunnelStrengthIds || i0.ɵɵpureFunction0(2, _c1$
|
|
32759
|
+
i0.ɵɵrepeater(ctx_r0.opportunity().linkedFunnelStrengthIds || i0.ɵɵpureFunction0(2, _c1$r));
|
|
32155
32760
|
} }
|
|
32156
32761
|
class FocusAreaOpportunityDetailModalContentComponent {
|
|
32157
32762
|
constructor() {
|
|
@@ -32488,7 +33093,7 @@ class CircularProgressComponent {
|
|
|
32488
33093
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CircularProgressComponent, { className: "CircularProgressComponent", filePath: "lib/components/business-analysis-dashboard/visualizations/circular-progress.component.ts", lineNumber: 41 }); })();
|
|
32489
33094
|
|
|
32490
33095
|
const _c0$L = ["*"];
|
|
32491
|
-
const _c1$
|
|
33096
|
+
const _c1$q = (a0, a1) => [a0, a1];
|
|
32492
33097
|
function VisualizationContainerComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
32493
33098
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
32494
33099
|
i0.ɵɵelementStart(0, "button", 3);
|
|
@@ -32499,7 +33104,7 @@ function VisualizationContainerComponent_Conditional_1_Template(rf, ctx) { if (r
|
|
|
32499
33104
|
i0.ɵɵelementEnd()();
|
|
32500
33105
|
} if (rf & 2) {
|
|
32501
33106
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
32502
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(1, _c1$
|
|
33107
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(1, _c1$q, ctx_r1.iconClass(), ctx_r1.isLightMode() ? "bg-white/90 hover:bg-white" : "bg-slate-800/90 hover:bg-slate-800"));
|
|
32503
33108
|
} }
|
|
32504
33109
|
class VisualizationContainerComponent {
|
|
32505
33110
|
constructor() {
|
|
@@ -32654,7 +33259,7 @@ class MetricBadgeComponent {
|
|
|
32654
33259
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MetricBadgeComponent, { className: "MetricBadgeComponent", filePath: "lib/components/business-analysis-dashboard/badges/metric-badge.component.ts", lineNumber: 22 }); })();
|
|
32655
33260
|
|
|
32656
33261
|
const _c0$K = a0 => ({ name: "light-bulb", source: a0 });
|
|
32657
|
-
const _c1$
|
|
33262
|
+
const _c1$p = a0 => ({ name: "chevron-right", source: a0 });
|
|
32658
33263
|
function OpportunityHighlightBannerComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
32659
33264
|
i0.ɵɵelementStart(0, "p", 7);
|
|
32660
33265
|
i0.ɵɵtext(1);
|
|
@@ -32729,7 +33334,7 @@ class OpportunityHighlightBannerComponent {
|
|
|
32729
33334
|
i0.ɵɵconditional(ctx.message() ? 9 : -1);
|
|
32730
33335
|
i0.ɵɵadvance();
|
|
32731
33336
|
i0.ɵɵclassProp("rotate-90", ctx.isExpanded());
|
|
32732
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(13, _c1$
|
|
33337
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(13, _c1$p, ctx.iconSource))("ngClass", ctx.chevronClasses());
|
|
32733
33338
|
} }, dependencies: [CommonModule, i1$1.NgClass, SymphiqIconComponent], encapsulation: 2, changeDetection: 0 }); }
|
|
32734
33339
|
}
|
|
32735
33340
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OpportunityHighlightBannerComponent, [{
|
|
@@ -33355,7 +33960,7 @@ class ViewportAnimationDirective {
|
|
|
33355
33960
|
}] }); })();
|
|
33356
33961
|
|
|
33357
33962
|
const _c0$I = a0 => ({ name: "star", source: a0 });
|
|
33358
|
-
const _c1$
|
|
33963
|
+
const _c1$o = a0 => ({ name: "globe-americas", source: a0 });
|
|
33359
33964
|
const _c2$i = a0 => ({ name: "academic-cap", source: a0 });
|
|
33360
33965
|
const _c3$f = a0 => ({ name: "information-circle", source: a0 });
|
|
33361
33966
|
const _c4$b = a0 => ({ name: "signal", source: a0 });
|
|
@@ -33463,7 +34068,7 @@ function RegionCardComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
|
33463
34068
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
33464
34069
|
i0.ɵɵproperty("ngClass", ctx_r0.getExpandedSectionClasses());
|
|
33465
34070
|
i0.ɵɵadvance(2);
|
|
33466
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(7, _c1$
|
|
34071
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(7, _c1$o, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.getExpandedIconClasses());
|
|
33467
34072
|
i0.ɵɵadvance();
|
|
33468
34073
|
i0.ɵɵproperty("ngClass", ctx_r0.getExpandedTitleClasses());
|
|
33469
34074
|
i0.ɵɵadvance(2);
|
|
@@ -34433,7 +35038,7 @@ class CompetitiveInsightBadgeComponent {
|
|
|
34433
35038
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CompetitiveInsightBadgeComponent, { className: "CompetitiveInsightBadgeComponent", filePath: "lib/components/business-analysis-dashboard/badges/competitive-insight-badge.component.ts", lineNumber: 25 }); })();
|
|
34434
35039
|
|
|
34435
35040
|
const _c0$H = a0 => ({ name: "calendar-days", source: a0 });
|
|
34436
|
-
const _c1$
|
|
35041
|
+
const _c1$n = a0 => ({ name: "chart-bar", source: a0 });
|
|
34437
35042
|
const _c2$h = a0 => ({ name: "academic-cap", source: a0 });
|
|
34438
35043
|
const _c3$e = a0 => ({ name: "information-circle", source: a0 });
|
|
34439
35044
|
const _c4$a = a0 => ({ name: "signal", source: a0 });
|
|
@@ -34549,7 +35154,7 @@ function SeasonCardComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
|
34549
35154
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
34550
35155
|
i0.ɵɵproperty("ngClass", ctx_r0.getExpandedSectionClasses());
|
|
34551
35156
|
i0.ɵɵadvance(2);
|
|
34552
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(7, _c1$
|
|
35157
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(7, _c1$n, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.getExpandedIconClasses());
|
|
34553
35158
|
i0.ɵɵadvance();
|
|
34554
35159
|
i0.ɵɵproperty("ngClass", ctx_r0.getExpandedTitleClasses());
|
|
34555
35160
|
i0.ɵɵadvance(2);
|
|
@@ -35271,7 +35876,7 @@ class SeasonCardComponent {
|
|
|
35271
35876
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SeasonCardComponent, { className: "SeasonCardComponent", filePath: "lib/components/business-analysis-dashboard/cards/season-card.component.ts", lineNumber: 270 }); })();
|
|
35272
35877
|
|
|
35273
35878
|
const _c0$G = a0 => ({ name: "currency-dollar", source: a0 });
|
|
35274
|
-
const _c1$
|
|
35879
|
+
const _c1$m = a0 => ({ name: "chart-bar", source: a0 });
|
|
35275
35880
|
const _c2$g = a0 => ({ name: "academic-cap", source: a0 });
|
|
35276
35881
|
const _c3$d = a0 => ({ name: "information-circle", source: a0 });
|
|
35277
35882
|
const _c4$9 = a0 => ({ name: "signal", source: a0 });
|
|
@@ -35560,7 +36165,7 @@ function CustomerSegmentCardComponent_Conditional_23_Template(rf, ctx) { if (rf
|
|
|
35560
36165
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
35561
36166
|
i0.ɵɵproperty("ngClass", ctx_r0.getExpandedSectionClasses());
|
|
35562
36167
|
i0.ɵɵadvance(2);
|
|
35563
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(12, _c1$
|
|
36168
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(12, _c1$m, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.getExpandedIconClasses());
|
|
35564
36169
|
i0.ɵɵadvance();
|
|
35565
36170
|
i0.ɵɵproperty("ngClass", ctx_r0.getExpandedTitleClasses());
|
|
35566
36171
|
i0.ɵɵadvance(2);
|
|
@@ -36388,7 +36993,7 @@ class CustomerSegmentCardComponent {
|
|
|
36388
36993
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CustomerSegmentCardComponent, { className: "CustomerSegmentCardComponent", filePath: "lib/components/business-analysis-dashboard/cards/customer-segment-card.component.ts", lineNumber: 366 }); })();
|
|
36389
36994
|
|
|
36390
36995
|
const _c0$F = a0 => ({ name: "currency-dollar", source: a0 });
|
|
36391
|
-
const _c1$
|
|
36996
|
+
const _c1$l = a0 => ({ name: "document-text", source: a0 });
|
|
36392
36997
|
const _c2$f = a0 => ({ name: "academic-cap", source: a0 });
|
|
36393
36998
|
const _c3$c = a0 => ({ name: "information-circle", source: a0 });
|
|
36394
36999
|
const _c4$8 = a0 => ({ name: "signal", source: a0 });
|
|
@@ -36508,7 +37113,7 @@ function PriceTierCardComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
|
36508
37113
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
36509
37114
|
i0.ɵɵproperty("ngClass", ctx_r0.getExpandedSectionClasses());
|
|
36510
37115
|
i0.ɵɵadvance(2);
|
|
36511
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(6, _c1$
|
|
37116
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(6, _c1$l, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.getExpandedIconClasses());
|
|
36512
37117
|
i0.ɵɵadvance();
|
|
36513
37118
|
i0.ɵɵproperty("ngClass", ctx_r0.getExpandedTitleClasses());
|
|
36514
37119
|
i0.ɵɵadvance(2);
|
|
@@ -37225,7 +37830,7 @@ class PriceTierCardComponent {
|
|
|
37225
37830
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PriceTierCardComponent, { className: "PriceTierCardComponent", filePath: "lib/components/business-analysis-dashboard/cards/price-tier-card.component.ts", lineNumber: 261 }); })();
|
|
37226
37831
|
|
|
37227
37832
|
const _c0$E = () => ({ name: "cube", source: "HEROICONS" });
|
|
37228
|
-
const _c1$
|
|
37833
|
+
const _c1$k = () => ({ name: "currency-dollar", source: "HEROICONS" });
|
|
37229
37834
|
const _c2$e = () => ({ name: "chart-bar", source: "HEROICONS" });
|
|
37230
37835
|
const _c3$b = a0 => ({ name: "chart-bar", source: a0 });
|
|
37231
37836
|
const _c4$7 = a0 => ({ name: "academic-cap", source: a0 });
|
|
@@ -37292,7 +37897,7 @@ function ProductCategoryCardComponent_Conditional_14_Conditional_3_Template(rf,
|
|
|
37292
37897
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
37293
37898
|
i0.ɵɵproperty("ngClass", ctx_r0.getStatBoxClasses());
|
|
37294
37899
|
i0.ɵɵadvance(2);
|
|
37295
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction0(6, _c1$
|
|
37900
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction0(6, _c1$k))("ngClass", ctx_r0.getStatIconClasses());
|
|
37296
37901
|
i0.ɵɵadvance(2);
|
|
37297
37902
|
i0.ɵɵproperty("ngClass", ctx_r0.getStatLabelClasses());
|
|
37298
37903
|
i0.ɵɵadvance(2);
|
|
@@ -38382,7 +38987,7 @@ function getCategoryBadgeClasses(category, isDark) {
|
|
|
38382
38987
|
}
|
|
38383
38988
|
|
|
38384
38989
|
const _c0$C = a0 => ({ name: "shield-check", source: a0 });
|
|
38385
|
-
const _c1$
|
|
38990
|
+
const _c1$j = a0 => ({ name: "building-storefront", source: a0 });
|
|
38386
38991
|
const _c2$d = a0 => ({ name: "academic-cap", source: a0 });
|
|
38387
38992
|
const _c3$a = a0 => ({ name: "information-circle", source: a0 });
|
|
38388
38993
|
const _c4$6 = a0 => ({ name: "signal", source: a0 });
|
|
@@ -38432,7 +39037,7 @@ function EnhancedListItemCardComponent_Conditional_21_Conditional_7_Template(rf,
|
|
|
38432
39037
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
38433
39038
|
i0.ɵɵclassProp("mt-3", ctx_r0.getCompetitorPositioning() || ((tmp_2_0 = ctx_r0.item()) == null ? null : tmp_2_0.differentiationStrength));
|
|
38434
39039
|
i0.ɵɵadvance(2);
|
|
38435
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(7, _c1$
|
|
39040
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(7, _c1$j, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.getExpandedIconClasses());
|
|
38436
39041
|
i0.ɵɵadvance();
|
|
38437
39042
|
i0.ɵɵproperty("ngClass", ctx_r0.getExpandedSubtitleClasses());
|
|
38438
39043
|
i0.ɵɵadvance(2);
|
|
@@ -39098,7 +39703,7 @@ class EnhancedListItemCardComponent {
|
|
|
39098
39703
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EnhancedListItemCardComponent, { className: "EnhancedListItemCardComponent", filePath: "lib/components/business-analysis-dashboard/cards/enhanced-list-item-card.component.ts", lineNumber: 221 }); })();
|
|
39099
39704
|
|
|
39100
39705
|
const _c0$B = a0 => ({ name: "academic-cap", source: a0 });
|
|
39101
|
-
const _c1$
|
|
39706
|
+
const _c1$i = a0 => ({ name: "information-circle", source: a0 });
|
|
39102
39707
|
const _c2$c = a0 => ({ name: "signal", source: a0 });
|
|
39103
39708
|
const _c3$9 = a0 => ({ name: "wrench-screwdriver", source: a0 });
|
|
39104
39709
|
function FocusAreaDetailCardComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -39199,7 +39804,7 @@ function FocusAreaDetailCardComponent_Conditional_16_Conditional_6_Template(rf,
|
|
|
39199
39804
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
39200
39805
|
i0.ɵɵproperty("ngClass", ctx_r0.getCompetitiveGapSectionClasses());
|
|
39201
39806
|
i0.ɵɵadvance(2);
|
|
39202
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(6, _c1$
|
|
39807
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(6, _c1$i, ctx_r0.IconSourceEnum.HEROICONS))("ngClass", ctx_r0.expandedIconClasses());
|
|
39203
39808
|
i0.ɵɵadvance();
|
|
39204
39809
|
i0.ɵɵproperty("ngClass", ctx_r0.expandedTitleClasses());
|
|
39205
39810
|
i0.ɵɵadvance(2);
|
|
@@ -42145,7 +42750,7 @@ class ProfileItemCardComponent {
|
|
|
42145
42750
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ProfileItemCardComponent, { className: "ProfileItemCardComponent", filePath: "lib/components/business-analysis-dashboard/profile-item-card.component.ts", lineNumber: 171 }); })();
|
|
42146
42751
|
|
|
42147
42752
|
const _c0$z = ["scrollContainer"];
|
|
42148
|
-
const _c1$
|
|
42753
|
+
const _c1$h = a0 => ({ name: "arrow-right", source: a0 });
|
|
42149
42754
|
function ItemDetailModalComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
42150
42755
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
42151
42756
|
i0.ɵɵelementStart(0, "button", 7);
|
|
@@ -42157,7 +42762,7 @@ function ItemDetailModalComponent_Conditional_7_Template(rf, ctx) { if (rf & 1)
|
|
|
42157
42762
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
42158
42763
|
i0.ɵɵproperty("ngClass", ctx_r2.getPrimaryButtonClasses());
|
|
42159
42764
|
i0.ɵɵadvance();
|
|
42160
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(2, _c1$
|
|
42765
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(2, _c1$h, ctx_r2.IconSourceEnum.HEROICONS));
|
|
42161
42766
|
} }
|
|
42162
42767
|
class ItemDetailModalComponent {
|
|
42163
42768
|
constructor() {
|
|
@@ -42344,7 +42949,7 @@ class ItemDetailModalComponent {
|
|
|
42344
42949
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ItemDetailModalComponent, { className: "ItemDetailModalComponent", filePath: "lib/components/business-analysis-dashboard/modals/item-detail-modal.component.ts", lineNumber: 53 }); })();
|
|
42345
42950
|
|
|
42346
42951
|
const _c0$y = ["modalContent"];
|
|
42347
|
-
const _c1$
|
|
42952
|
+
const _c1$g = ["modalWrapper"];
|
|
42348
42953
|
const _c2$b = ["*"];
|
|
42349
42954
|
const ProfileAnalysisModalComponent_Conditional_0_Conditional_31_Conditional_3_Defer_2_DepsFn = () => [Promise.resolve().then(function () { return lineChart_component; }).then(m => m.LineChartComponent)];
|
|
42350
42955
|
const ProfileAnalysisModalComponent_Conditional_0_Conditional_31_Conditional_4_Defer_2_DepsFn = () => [Promise.resolve().then(function () { return barChart_component; }).then(m => m.BarChartComponent)];
|
|
@@ -44593,7 +45198,7 @@ class ProfileAnalysisModalComponent {
|
|
|
44593
45198
|
static { this.ɵfac = function ProfileAnalysisModalComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ProfileAnalysisModalComponent)(); }; }
|
|
44594
45199
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ProfileAnalysisModalComponent, selectors: [["symphiq-profile-analysis-modal"]], viewQuery: function ProfileAnalysisModalComponent_Query(rf, ctx) { if (rf & 1) {
|
|
44595
45200
|
i0.ɵɵviewQuery(_c0$y, 5);
|
|
44596
|
-
i0.ɵɵviewQuery(_c1$
|
|
45201
|
+
i0.ɵɵviewQuery(_c1$g, 5);
|
|
44597
45202
|
} if (rf & 2) {
|
|
44598
45203
|
let _t;
|
|
44599
45204
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.modalContent = _t.first);
|
|
@@ -45148,7 +45753,7 @@ class ProfileAnalysisModalComponent {
|
|
|
45148
45753
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ProfileAnalysisModalComponent, { className: "ProfileAnalysisModalComponent", filePath: "lib/components/profile-analysis-dashboard/profile-analysis-modal.component.ts", lineNumber: 554 }); })();
|
|
45149
45754
|
|
|
45150
45755
|
const _c0$x = a0 => ({ name: "light-bulb", source: a0 });
|
|
45151
|
-
const _c1$
|
|
45756
|
+
const _c1$f = a0 => ({ name: "trophy", source: a0 });
|
|
45152
45757
|
const _c2$a = a0 => ({ name: "academic-cap", source: a0 });
|
|
45153
45758
|
const _c3$7 = a0 => ({ name: "signal", source: a0 });
|
|
45154
45759
|
const _c4$4 = a0 => ({ name: "wrench-screwdriver", source: a0 });
|
|
@@ -45186,7 +45791,7 @@ function CompetitiveGapModalComponent_Conditional_10_Template(rf, ctx) { if (rf
|
|
|
45186
45791
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
45187
45792
|
i0.ɵɵproperty("ngClass", ctx_r0.sectionClasses());
|
|
45188
45793
|
i0.ɵɵadvance(2);
|
|
45189
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(6, _c1$
|
|
45794
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(6, _c1$f, ctx_r0.iconSource))("ngClass", ctx_r0.sectionIconClasses());
|
|
45190
45795
|
i0.ɵɵadvance();
|
|
45191
45796
|
i0.ɵɵproperty("ngClass", ctx_r0.sectionTitleClasses());
|
|
45192
45797
|
i0.ɵɵadvance(2);
|
|
@@ -45479,7 +46084,7 @@ class CompetitiveGapModalComponent {
|
|
|
45479
46084
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CompetitiveGapModalComponent, { className: "CompetitiveGapModalComponent", filePath: "lib/components/business-analysis-dashboard/modals/competitive-gap-modal.component.ts", lineNumber: 101 }); })();
|
|
45480
46085
|
|
|
45481
46086
|
const _c0$w = a0 => ({ name: "list-bullet", source: a0 });
|
|
45482
|
-
const _c1$
|
|
46087
|
+
const _c1$e = a0 => ({ name: "arrow-right", source: a0 });
|
|
45483
46088
|
const _c2$9 = a0 => ({ name: "check-circle", source: a0 });
|
|
45484
46089
|
const _c3$6 = a0 => ({ name: "exclamation-circle", source: a0 });
|
|
45485
46090
|
const _forTrack0$o = ($index, $item) => $item.order;
|
|
@@ -45551,7 +46156,7 @@ function RecommendationActionStepsModalComponent_For_4_Template(rf, ctx) { if (r
|
|
|
45551
46156
|
i0.ɵɵadvance();
|
|
45552
46157
|
i0.ɵɵtextInterpolate1(" ", step_r2.order, " ");
|
|
45553
46158
|
i0.ɵɵadvance(4);
|
|
45554
|
-
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(9, _c1$
|
|
46159
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(9, _c1$e, ctx_r0.iconSource))("ngClass", ctx_r0.actionIconClasses());
|
|
45555
46160
|
i0.ɵɵadvance();
|
|
45556
46161
|
i0.ɵɵproperty("ngClass", ctx_r0.actionTitleClasses());
|
|
45557
46162
|
i0.ɵɵadvance(2);
|
|
@@ -45719,7 +46324,7 @@ class RecommendationActionStepsModalComponent {
|
|
|
45719
46324
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RecommendationActionStepsModalComponent, { className: "RecommendationActionStepsModalComponent", filePath: "lib/components/business-analysis-dashboard/modals/recommendation-action-steps-modal.component.ts", lineNumber: 69 }); })();
|
|
45720
46325
|
|
|
45721
46326
|
const _c0$v = ["modalContent"];
|
|
45722
|
-
const _c1$
|
|
46327
|
+
const _c1$d = ["modalWrapper"];
|
|
45723
46328
|
function BusinessAnalysisModalComponent_Conditional_0_Conditional_10_For_6_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
45724
46329
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
45725
46330
|
i0.ɵɵelementStart(0, "button", 28);
|
|
@@ -46242,7 +46847,7 @@ class BusinessAnalysisModalComponent {
|
|
|
46242
46847
|
static { this.ɵfac = function BusinessAnalysisModalComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || BusinessAnalysisModalComponent)(); }; }
|
|
46243
46848
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: BusinessAnalysisModalComponent, selectors: [["symphiq-business-analysis-modal"]], viewQuery: function BusinessAnalysisModalComponent_Query(rf, ctx) { if (rf & 1) {
|
|
46244
46849
|
i0.ɵɵviewQuery(_c0$v, 5);
|
|
46245
|
-
i0.ɵɵviewQuery(_c1$
|
|
46850
|
+
i0.ɵɵviewQuery(_c1$d, 5);
|
|
46246
46851
|
} if (rf & 2) {
|
|
46247
46852
|
let _t;
|
|
46248
46853
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.modalContent = _t.first);
|
|
@@ -46427,7 +47032,7 @@ class BusinessAnalysisModalComponent {
|
|
|
46427
47032
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(BusinessAnalysisModalComponent, { className: "BusinessAnalysisModalComponent", filePath: "lib/components/business-analysis-dashboard/business-analysis-modal.component.ts", lineNumber: 171 }); })();
|
|
46428
47033
|
|
|
46429
47034
|
const _c0$u = ["dashboardContainer"];
|
|
46430
|
-
const _c1$
|
|
47035
|
+
const _c1$c = () => ({});
|
|
46431
47036
|
const _c2$8 = () => [1, 2, 3, 4, 5, 6];
|
|
46432
47037
|
const _c3$5 = () => [1, 2, 3];
|
|
46433
47038
|
const _c4$3 = () => [1, 2, 3, 4];
|
|
@@ -46734,7 +47339,7 @@ function SymphiqFunnelAnalysisDashboardComponent_Conditional_50_Conditional_8_Co
|
|
|
46734
47339
|
i0.ɵɵelementEnd();
|
|
46735
47340
|
} if (rf & 2) {
|
|
46736
47341
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
46737
|
-
i0.ɵɵproperty("assessment", ctx_r2.performanceOverview().overallAssessment || i0.ɵɵpureFunction0(11, _c1$
|
|
47342
|
+
i0.ɵɵproperty("assessment", ctx_r2.performanceOverview().overallAssessment || i0.ɵɵpureFunction0(11, _c1$c))("revenueMetric", ctx_r2.revenueMetric())("charts", ctx_r2.chartsForItem("OVERALL_ASSESSMENT"))("metrics", ctx_r2.allMetrics())("isLightMode", ctx_r2.isLightMode())("isLoading", ctx_r2.isOverallAssessmentLoading())("isCompactMode", true)("isChartsLoading", ctx_r2.areChartsLoading())("strengths", ctx_r2.strengths())("weaknesses", ctx_r2.weaknesses())("currencySymbol", ctx_r2.currencySymbol());
|
|
46738
47343
|
} }
|
|
46739
47344
|
function SymphiqFunnelAnalysisDashboardComponent_Conditional_50_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
46740
47345
|
i0.ɵɵelementStart(0, "div", 72);
|
|
@@ -46884,7 +47489,7 @@ function SymphiqFunnelAnalysisDashboardComponent_Conditional_51_Conditional_2_Co
|
|
|
46884
47489
|
i0.ɵɵelementEnd();
|
|
46885
47490
|
} if (rf & 2) {
|
|
46886
47491
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
46887
|
-
i0.ɵɵproperty("assessment", ctx_r2.performanceOverview().overallAssessment || i0.ɵɵpureFunction0(11, _c1$
|
|
47492
|
+
i0.ɵɵproperty("assessment", ctx_r2.performanceOverview().overallAssessment || i0.ɵɵpureFunction0(11, _c1$c))("revenueMetric", ctx_r2.revenueMetric())("charts", ctx_r2.chartsForItem("OVERALL_ASSESSMENT"))("metrics", ctx_r2.allMetrics())("isLightMode", ctx_r2.isLightMode())("isLoading", ctx_r2.isOverallAssessmentLoading())("isCompactMode", ctx_r2.viewModeService.isCompact())("isChartsLoading", ctx_r2.areChartsLoading())("strengths", ctx_r2.strengths())("weaknesses", ctx_r2.weaknesses())("currencySymbol", ctx_r2.currencySymbol());
|
|
46888
47493
|
} }
|
|
46889
47494
|
function SymphiqFunnelAnalysisDashboardComponent_Conditional_51_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
46890
47495
|
i0.ɵɵelementStart(0, "div", 93);
|
|
@@ -55619,49 +56224,6 @@ class RevenueCalculatorWelcomeBannerComponent {
|
|
|
55619
56224
|
}], 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 }] }] }); })();
|
|
55620
56225
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RevenueCalculatorWelcomeBannerComponent, { className: "RevenueCalculatorWelcomeBannerComponent", filePath: "lib/components/revenue-calculator-dashboard/revenue-calculator-welcome-banner.component.ts", lineNumber: 85 }); })();
|
|
55621
56226
|
|
|
55622
|
-
function getCurrentYearStart() {
|
|
55623
|
-
const now = new Date();
|
|
55624
|
-
return new Date(now.getFullYear(), 0, 1, 0, 0, 0, 0);
|
|
55625
|
-
}
|
|
55626
|
-
function getCurrentYearEnd() {
|
|
55627
|
-
const now = new Date();
|
|
55628
|
-
return new Date(now.getFullYear(), 11, 31, 23, 59, 59, 999);
|
|
55629
|
-
}
|
|
55630
|
-
function getPriorYearStart() {
|
|
55631
|
-
const now = new Date();
|
|
55632
|
-
return new Date(now.getFullYear() - 1, 0, 1, 0, 0, 0, 0);
|
|
55633
|
-
}
|
|
55634
|
-
function getPriorYearEnd() {
|
|
55635
|
-
const now = new Date();
|
|
55636
|
-
return new Date(now.getFullYear() - 1, 11, 31, 23, 59, 59, 999);
|
|
55637
|
-
}
|
|
55638
|
-
function isCurrentYearTarget(target) {
|
|
55639
|
-
if (!target.startDate || !target.endDate) {
|
|
55640
|
-
return false;
|
|
55641
|
-
}
|
|
55642
|
-
const currentYearStart = getCurrentYearStart();
|
|
55643
|
-
const currentYearEnd = getCurrentYearEnd();
|
|
55644
|
-
const targetStart = new Date(target.startDate);
|
|
55645
|
-
const targetEnd = new Date(target.endDate);
|
|
55646
|
-
return (targetStart.getTime() === currentYearStart.getTime() &&
|
|
55647
|
-
targetEnd.getTime() === currentYearEnd.getTime());
|
|
55648
|
-
}
|
|
55649
|
-
function formatCurrency(value, currencySymbol = '$') {
|
|
55650
|
-
return `${currencySymbol}${value.toLocaleString('en-US', {
|
|
55651
|
-
minimumFractionDigits: 0,
|
|
55652
|
-
maximumFractionDigits: 0
|
|
55653
|
-
})}`;
|
|
55654
|
-
}
|
|
55655
|
-
function formatPercentage(value, decimals = 1) {
|
|
55656
|
-
return `${value.toFixed(decimals)}%`;
|
|
55657
|
-
}
|
|
55658
|
-
function formatNumber(value) {
|
|
55659
|
-
return value.toLocaleString('en-US', {
|
|
55660
|
-
minimumFractionDigits: 0,
|
|
55661
|
-
maximumFractionDigits: 0
|
|
55662
|
-
});
|
|
55663
|
-
}
|
|
55664
|
-
|
|
55665
56227
|
function calculatePacingStatus(currentValue, priorValue, targetValue) {
|
|
55666
56228
|
if (targetValue !== undefined && targetValue > 0) {
|
|
55667
56229
|
const targetGrowth = ((targetValue - priorValue) / priorValue) * 100;
|
|
@@ -57146,359 +57708,10 @@ var areaChart_component = /*#__PURE__*/Object.freeze({
|
|
|
57146
57708
|
AreaChartComponent: AreaChartComponent
|
|
57147
57709
|
});
|
|
57148
57710
|
|
|
57149
|
-
function calculateMetricTargetsFromRevenue(revenueTarget, priorYearRevenue, funnelMetrics, baselineValues) {
|
|
57150
|
-
const revenuePercentageIncrease = ((revenueTarget - priorYearRevenue) / priorYearRevenue) * 100;
|
|
57151
|
-
const metricCalculations = [];
|
|
57152
|
-
const sortedFunnelMetrics = [...funnelMetrics].sort((a, b) => {
|
|
57153
|
-
const aFunnel = a.funnelInd ?? 999;
|
|
57154
|
-
const bFunnel = b.funnelInd ?? 999;
|
|
57155
|
-
if (aFunnel !== bFunnel)
|
|
57156
|
-
return aFunnel - bFunnel;
|
|
57157
|
-
const aRelated = a.relatedInd ?? 999;
|
|
57158
|
-
const bRelated = b.relatedInd ?? 999;
|
|
57159
|
-
return aRelated - bRelated;
|
|
57160
|
-
});
|
|
57161
|
-
const funnelStages = getUniqueFunnelStages(sortedFunnelMetrics);
|
|
57162
|
-
const numFunnelStages = funnelStages.length;
|
|
57163
|
-
const revenueIncreaseFactor = revenueTarget / priorYearRevenue;
|
|
57164
|
-
const perStageFactor = Math.pow(revenueIncreaseFactor, 1 / numFunnelStages);
|
|
57165
|
-
const funnelStageMetrics = new Map();
|
|
57166
|
-
sortedFunnelMetrics.forEach(fm => {
|
|
57167
|
-
if (fm.funnelMetric) {
|
|
57168
|
-
if (!funnelStageMetrics.has(fm.funnelMetric)) {
|
|
57169
|
-
funnelStageMetrics.set(fm.funnelMetric, []);
|
|
57170
|
-
}
|
|
57171
|
-
funnelStageMetrics.get(fm.funnelMetric).push(fm);
|
|
57172
|
-
}
|
|
57173
|
-
});
|
|
57174
|
-
const stagePercentageIncrease = (perStageFactor - 1) * 100;
|
|
57175
|
-
sortedFunnelMetrics.forEach((funnelMetric) => {
|
|
57176
|
-
const metric = funnelMetric.relatedMetric;
|
|
57177
|
-
if (!metric)
|
|
57178
|
-
return;
|
|
57179
|
-
const currentValue = baselineValues.get(metric) || 0;
|
|
57180
|
-
const isFunnelStage = funnelMetric.funnelMetric === metric;
|
|
57181
|
-
let percentageIncrease;
|
|
57182
|
-
let targetValue;
|
|
57183
|
-
if (metric === MetricEnum.BOUNCE_RATE) {
|
|
57184
|
-
percentageIncrease = -stagePercentageIncrease;
|
|
57185
|
-
targetValue = currentValue * (1 + percentageIncrease / 100);
|
|
57186
|
-
}
|
|
57187
|
-
else if (isDerivedMetric(metric)) {
|
|
57188
|
-
percentageIncrease = 0;
|
|
57189
|
-
targetValue = currentValue;
|
|
57190
|
-
}
|
|
57191
|
-
else {
|
|
57192
|
-
percentageIncrease = stagePercentageIncrease;
|
|
57193
|
-
targetValue = currentValue * perStageFactor;
|
|
57194
|
-
}
|
|
57195
|
-
metricCalculations.push({
|
|
57196
|
-
metric,
|
|
57197
|
-
funnelMetric: funnelMetric.funnelMetric,
|
|
57198
|
-
currentValue,
|
|
57199
|
-
targetValue,
|
|
57200
|
-
percentageIncrease,
|
|
57201
|
-
isFunnelStage,
|
|
57202
|
-
funnelInd: funnelMetric.funnelInd,
|
|
57203
|
-
relatedInd: funnelMetric.relatedInd,
|
|
57204
|
-
description: funnelMetric.relatedMetricDescription
|
|
57205
|
-
});
|
|
57206
|
-
});
|
|
57207
|
-
return {
|
|
57208
|
-
revenueTarget,
|
|
57209
|
-
revenuePercentageIncrease,
|
|
57210
|
-
metricCalculations
|
|
57211
|
-
};
|
|
57212
|
-
}
|
|
57213
|
-
function getUniqueFunnelStages(funnelMetrics) {
|
|
57214
|
-
const stages = [];
|
|
57215
|
-
const seen = new Set();
|
|
57216
|
-
funnelMetrics.forEach(fm => {
|
|
57217
|
-
if (fm.funnelMetric && fm.funnelMetric === fm.relatedMetric && !seen.has(fm.funnelMetric)) {
|
|
57218
|
-
seen.add(fm.funnelMetric);
|
|
57219
|
-
stages.push(fm.funnelMetric);
|
|
57220
|
-
}
|
|
57221
|
-
});
|
|
57222
|
-
return stages;
|
|
57223
|
-
}
|
|
57224
|
-
const DERIVED_METRICS = new Set([
|
|
57225
|
-
MetricEnum.REVENUE_PER_PRODUCT_VIEW,
|
|
57226
|
-
MetricEnum.REVENUE_PER_ADD_TO_CART,
|
|
57227
|
-
MetricEnum.REVENUE_PER_CHECKOUT
|
|
57228
|
-
]);
|
|
57229
|
-
function isDerivedMetric(metric) {
|
|
57230
|
-
return DERIVED_METRICS.has(metric);
|
|
57231
|
-
}
|
|
57232
|
-
function generateTargetsFromCalculations(shopId, calculations) {
|
|
57233
|
-
const startDate = getCurrentYearStart();
|
|
57234
|
-
const endDate = getCurrentYearEnd();
|
|
57235
|
-
return calculations.map((calc) => ({
|
|
57236
|
-
shopId,
|
|
57237
|
-
metric: calc.metric,
|
|
57238
|
-
amount: calc.targetValue,
|
|
57239
|
-
startDate,
|
|
57240
|
-
endDate
|
|
57241
|
-
}));
|
|
57242
|
-
}
|
|
57243
|
-
function groupMetricsByFunnelStage(calculations) {
|
|
57244
|
-
const grouped = new Map();
|
|
57245
|
-
calculations.forEach((calc) => {
|
|
57246
|
-
if (calc.funnelMetric) {
|
|
57247
|
-
if (!grouped.has(calc.funnelMetric)) {
|
|
57248
|
-
grouped.set(calc.funnelMetric, []);
|
|
57249
|
-
}
|
|
57250
|
-
grouped.get(calc.funnelMetric).push(calc);
|
|
57251
|
-
}
|
|
57252
|
-
});
|
|
57253
|
-
return grouped;
|
|
57254
|
-
}
|
|
57255
|
-
function getFunnelStageMetrics(calculations) {
|
|
57256
|
-
return calculations.filter((calc) => calc.isFunnelStage);
|
|
57257
|
-
}
|
|
57258
|
-
|
|
57259
|
-
function transformUiDataToChartSeries(mainUiData, ytdComparisonUiData, metricToExtract) {
|
|
57260
|
-
const series = [];
|
|
57261
|
-
if (ytdComparisonUiData?.convertedDataResults) {
|
|
57262
|
-
const priorYearSeries = extractSeriesFromConvertedData(ytdComparisonUiData.convertedDataResults, metricToExtract, 'Prior Year');
|
|
57263
|
-
if (priorYearSeries) {
|
|
57264
|
-
series.push(priorYearSeries);
|
|
57265
|
-
}
|
|
57266
|
-
}
|
|
57267
|
-
if (mainUiData?.convertedDataResults) {
|
|
57268
|
-
const currentYearSeries = extractSeriesFromConvertedData(mainUiData.convertedDataResults, metricToExtract, 'Current Year');
|
|
57269
|
-
if (currentYearSeries) {
|
|
57270
|
-
series.push(currentYearSeries);
|
|
57271
|
-
}
|
|
57272
|
-
}
|
|
57273
|
-
return series;
|
|
57274
|
-
}
|
|
57275
|
-
function extractSeriesFromConvertedData(convertedData, metricToExtract, seriesName) {
|
|
57276
|
-
const metricIndex = convertedData.metrics?.indexOf(metricToExtract);
|
|
57277
|
-
if (metricIndex === undefined || metricIndex === -1)
|
|
57278
|
-
return null;
|
|
57279
|
-
const dimensionIndex = convertedData.dimensions?.indexOf(DimensionEnum.MONTH);
|
|
57280
|
-
if (dimensionIndex === undefined || dimensionIndex === -1)
|
|
57281
|
-
return null;
|
|
57282
|
-
const dataPoints = [];
|
|
57283
|
-
convertedData.rows?.forEach((row) => {
|
|
57284
|
-
const monthValue = row.dimensionValues?.[dimensionIndex];
|
|
57285
|
-
const metricValue = parseFloat(row.metricValues?.[metricIndex] || '0');
|
|
57286
|
-
if (monthValue) {
|
|
57287
|
-
dataPoints.push({
|
|
57288
|
-
category: monthValue,
|
|
57289
|
-
value: metricValue,
|
|
57290
|
-
displayLabel: formatMonthLabel(monthValue)
|
|
57291
|
-
});
|
|
57292
|
-
}
|
|
57293
|
-
});
|
|
57294
|
-
return {
|
|
57295
|
-
name: seriesName,
|
|
57296
|
-
data: sortDataByMonth(dataPoints)
|
|
57297
|
-
};
|
|
57298
|
-
}
|
|
57299
|
-
function formatMonthLabel(monthValue) {
|
|
57300
|
-
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
57301
|
-
const monthNum = parseInt(monthValue, 10);
|
|
57302
|
-
if (monthNum >= 1 && monthNum <= 12) {
|
|
57303
|
-
return months[monthNum - 1];
|
|
57304
|
-
}
|
|
57305
|
-
return monthValue;
|
|
57306
|
-
}
|
|
57307
|
-
function sortDataByMonth(data) {
|
|
57308
|
-
return data.sort((a, b) => {
|
|
57309
|
-
const aMonth = parseInt(a.category, 10);
|
|
57310
|
-
const bMonth = parseInt(b.category, 10);
|
|
57311
|
-
return aMonth - bMonth;
|
|
57312
|
-
});
|
|
57313
|
-
}
|
|
57314
|
-
function transformTrendUiDataToChartSeries(trendUiData, metricToExtract) {
|
|
57315
|
-
if (!trendUiData?.convertedDataResults) {
|
|
57316
|
-
return [];
|
|
57317
|
-
}
|
|
57318
|
-
const convertedData = trendUiData.convertedDataResults;
|
|
57319
|
-
const metricIndex = convertedData.metrics?.indexOf(metricToExtract);
|
|
57320
|
-
if (metricIndex === undefined || metricIndex === -1)
|
|
57321
|
-
return [];
|
|
57322
|
-
const dateIndex = convertedData.dimensions?.indexOf(DimensionEnum.DATE);
|
|
57323
|
-
const monthIndex = convertedData.dimensions?.indexOf(DimensionEnum.MONTH);
|
|
57324
|
-
const dimensionIndex = dateIndex !== undefined && dateIndex !== -1
|
|
57325
|
-
? dateIndex
|
|
57326
|
-
: (monthIndex !== undefined && monthIndex !== -1 ? monthIndex : -1);
|
|
57327
|
-
if (dimensionIndex === -1)
|
|
57328
|
-
return [];
|
|
57329
|
-
const currentYear = new Date().getFullYear();
|
|
57330
|
-
const priorYear = currentYear - 1;
|
|
57331
|
-
const priorYearPoints = [];
|
|
57332
|
-
const currentYearPoints = [];
|
|
57333
|
-
convertedData.rows?.forEach((row) => {
|
|
57334
|
-
const dimValue = row.dimensionValues?.[dimensionIndex];
|
|
57335
|
-
const metricValue = parseFloat(row.metricValues?.[metricIndex] || '0');
|
|
57336
|
-
if (dimValue) {
|
|
57337
|
-
let year;
|
|
57338
|
-
let month;
|
|
57339
|
-
if (dimValue.includes('-')) {
|
|
57340
|
-
const parts = dimValue.split('-');
|
|
57341
|
-
year = parseInt(parts[0], 10);
|
|
57342
|
-
month = parseInt(parts[1], 10);
|
|
57343
|
-
}
|
|
57344
|
-
else if (dimValue.length >= 6) {
|
|
57345
|
-
year = parseInt(dimValue.substring(0, 4), 10);
|
|
57346
|
-
month = parseInt(dimValue.substring(4, 6), 10);
|
|
57347
|
-
}
|
|
57348
|
-
else {
|
|
57349
|
-
month = parseInt(dimValue, 10);
|
|
57350
|
-
year = currentYear;
|
|
57351
|
-
}
|
|
57352
|
-
const point = {
|
|
57353
|
-
category: String(month),
|
|
57354
|
-
value: metricValue,
|
|
57355
|
-
displayLabel: formatMonthLabel(String(month))
|
|
57356
|
-
};
|
|
57357
|
-
if (year === priorYear) {
|
|
57358
|
-
priorYearPoints.push(point);
|
|
57359
|
-
}
|
|
57360
|
-
else if (year === currentYear) {
|
|
57361
|
-
currentYearPoints.push(point);
|
|
57362
|
-
}
|
|
57363
|
-
}
|
|
57364
|
-
});
|
|
57365
|
-
const series = [];
|
|
57366
|
-
if (priorYearPoints.length > 0) {
|
|
57367
|
-
series.push({
|
|
57368
|
-
name: String(priorYear),
|
|
57369
|
-
data: aggregateAndSortByMonth(priorYearPoints)
|
|
57370
|
-
});
|
|
57371
|
-
}
|
|
57372
|
-
if (currentYearPoints.length > 0) {
|
|
57373
|
-
series.push({
|
|
57374
|
-
name: String(currentYear),
|
|
57375
|
-
data: aggregateAndSortByMonth(currentYearPoints)
|
|
57376
|
-
});
|
|
57377
|
-
}
|
|
57378
|
-
return series;
|
|
57379
|
-
}
|
|
57380
|
-
function aggregateAndSortByMonth(points) {
|
|
57381
|
-
const monthMap = new Map();
|
|
57382
|
-
points.forEach(point => {
|
|
57383
|
-
const existing = monthMap.get(point.category);
|
|
57384
|
-
if (existing) {
|
|
57385
|
-
existing.value += point.value;
|
|
57386
|
-
}
|
|
57387
|
-
else {
|
|
57388
|
-
monthMap.set(point.category, { ...point });
|
|
57389
|
-
}
|
|
57390
|
-
});
|
|
57391
|
-
return sortDataByMonth(Array.from(monthMap.values()));
|
|
57392
|
-
}
|
|
57393
|
-
function getConvertedDataForSource(uiData, source) {
|
|
57394
|
-
if (!uiData)
|
|
57395
|
-
return undefined;
|
|
57396
|
-
const periodInfo = uiData.periodInfo;
|
|
57397
|
-
let result;
|
|
57398
|
-
switch (source) {
|
|
57399
|
-
case 'current':
|
|
57400
|
-
result = uiData.convertedDataResults;
|
|
57401
|
-
break;
|
|
57402
|
-
case 'compare':
|
|
57403
|
-
result = uiData.convertedDataResultsCompare;
|
|
57404
|
-
break;
|
|
57405
|
-
case 'priorYear':
|
|
57406
|
-
if (periodInfo?.period === UiDataPeriodEnum.THIS_YEAR &&
|
|
57407
|
-
periodInfo?.comparePeriod === UiDataComparePeriodEnum.PREVIOUS_PERIOD) {
|
|
57408
|
-
result = uiData.convertedDataResultsCompare;
|
|
57409
|
-
}
|
|
57410
|
-
else if (periodInfo?.period === UiDataPeriodEnum.THIS_AND_LAST_YEAR) {
|
|
57411
|
-
result = uiData.convertedDataResults;
|
|
57412
|
-
}
|
|
57413
|
-
else if (periodInfo?.comparePeriod === UiDataComparePeriodEnum.SAME_PERIOD_LAST_YEAR) {
|
|
57414
|
-
result = uiData.convertedDataResultsCompare;
|
|
57415
|
-
}
|
|
57416
|
-
else if (periodInfo?.comparePeriod === UiDataComparePeriodEnum.PREVIOUS_PERIOD) {
|
|
57417
|
-
result = uiData.convertedDataResultsCompare;
|
|
57418
|
-
}
|
|
57419
|
-
else {
|
|
57420
|
-
result = uiData.convertedDataResultsCompare;
|
|
57421
|
-
}
|
|
57422
|
-
break;
|
|
57423
|
-
}
|
|
57424
|
-
return result;
|
|
57425
|
-
}
|
|
57426
|
-
function sumMetricFromUiData(uiData, metricToSum, source = 'current') {
|
|
57427
|
-
const convertedData = getConvertedDataForSource(uiData, source);
|
|
57428
|
-
if (!convertedData) {
|
|
57429
|
-
return 0;
|
|
57430
|
-
}
|
|
57431
|
-
let total = 0;
|
|
57432
|
-
const metricIndex = convertedData.metrics?.indexOf(metricToSum);
|
|
57433
|
-
if (metricIndex === undefined || metricIndex === -1) {
|
|
57434
|
-
return 0;
|
|
57435
|
-
}
|
|
57436
|
-
convertedData.rows?.forEach((row) => {
|
|
57437
|
-
const rawValue = row.metricValues?.[metricIndex];
|
|
57438
|
-
const metricValue = parseFloat(rawValue || '0');
|
|
57439
|
-
total += metricValue;
|
|
57440
|
-
});
|
|
57441
|
-
return total;
|
|
57442
|
-
}
|
|
57443
|
-
|
|
57444
|
-
class RevenueCalculatorService {
|
|
57445
|
-
calculateTargetsFromRevenue(revenueTarget, mainUiData, funnelMetrics) {
|
|
57446
|
-
const priorYearRevenue = this.extractPriorYearRevenue(mainUiData);
|
|
57447
|
-
const baselineValues = this.extractBaselineValues(mainUiData, funnelMetrics);
|
|
57448
|
-
return calculateMetricTargetsFromRevenue(revenueTarget, priorYearRevenue, funnelMetrics, baselineValues);
|
|
57449
|
-
}
|
|
57450
|
-
calculateTargetsFromPercentage(percentageIncrease, mainUiData, funnelMetrics) {
|
|
57451
|
-
const priorYearRevenue = this.extractPriorYearRevenue(mainUiData);
|
|
57452
|
-
const revenueTarget = priorYearRevenue * (1 + percentageIncrease / 100);
|
|
57453
|
-
return this.calculateTargetsFromRevenue(revenueTarget, mainUiData, funnelMetrics);
|
|
57454
|
-
}
|
|
57455
|
-
extractPriorYearRevenue(mainUiData) {
|
|
57456
|
-
return sumMetricFromUiData(mainUiData, MetricEnum.PURCHASE_REVENUE, 'priorYear');
|
|
57457
|
-
}
|
|
57458
|
-
extractBaselineValues(mainUiData, funnelMetrics) {
|
|
57459
|
-
const baselineValues = new Map();
|
|
57460
|
-
if (!mainUiData) {
|
|
57461
|
-
return baselineValues;
|
|
57462
|
-
}
|
|
57463
|
-
funnelMetrics.forEach(fm => {
|
|
57464
|
-
if (fm.relatedMetric) {
|
|
57465
|
-
const value = sumMetricFromUiData(mainUiData, fm.relatedMetric, 'priorYear');
|
|
57466
|
-
baselineValues.set(fm.relatedMetric, value);
|
|
57467
|
-
}
|
|
57468
|
-
});
|
|
57469
|
-
return baselineValues;
|
|
57470
|
-
}
|
|
57471
|
-
getMetricsByFunnelStage(calculations) {
|
|
57472
|
-
const grouped = new Map();
|
|
57473
|
-
calculations.forEach(calc => {
|
|
57474
|
-
if (calc.isFunnelStage) {
|
|
57475
|
-
if (!grouped.has(calc.metric)) {
|
|
57476
|
-
grouped.set(calc.metric, []);
|
|
57477
|
-
}
|
|
57478
|
-
grouped.get(calc.metric).push(calc);
|
|
57479
|
-
}
|
|
57480
|
-
else if (calc.funnelMetric) {
|
|
57481
|
-
if (!grouped.has(calc.funnelMetric)) {
|
|
57482
|
-
grouped.set(calc.funnelMetric, []);
|
|
57483
|
-
}
|
|
57484
|
-
grouped.get(calc.funnelMetric).push(calc);
|
|
57485
|
-
}
|
|
57486
|
-
});
|
|
57487
|
-
return grouped;
|
|
57488
|
-
}
|
|
57489
|
-
static { this.ɵfac = function RevenueCalculatorService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || RevenueCalculatorService)(); }; }
|
|
57490
|
-
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: RevenueCalculatorService, factory: RevenueCalculatorService.ɵfac, providedIn: 'root' }); }
|
|
57491
|
-
}
|
|
57492
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RevenueCalculatorService, [{
|
|
57493
|
-
type: Injectable,
|
|
57494
|
-
args: [{
|
|
57495
|
-
providedIn: 'root'
|
|
57496
|
-
}]
|
|
57497
|
-
}], null, null); })();
|
|
57498
|
-
|
|
57499
57711
|
const _c0$r = ["absoluteInputRef"];
|
|
57712
|
+
const _c1$b = ["percentageInputRef"];
|
|
57500
57713
|
function InitialTargetSettingComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
57501
|
-
i0.ɵɵelementStart(0, "p",
|
|
57714
|
+
i0.ɵɵelementStart(0, "p", 9);
|
|
57502
57715
|
i0.ɵɵtext(1);
|
|
57503
57716
|
i0.ɵɵelementEnd();
|
|
57504
57717
|
} if (rf & 2) {
|
|
@@ -57509,10 +57722,10 @@ function InitialTargetSettingComponent_Conditional_12_Template(rf, ctx) { if (rf
|
|
|
57509
57722
|
} }
|
|
57510
57723
|
function InitialTargetSettingComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
57511
57724
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
57512
|
-
i0.ɵɵelementStart(0, "div",
|
|
57725
|
+
i0.ɵɵelementStart(0, "div", 12)(1, "span", 19);
|
|
57513
57726
|
i0.ɵɵtext(2, " $ ");
|
|
57514
57727
|
i0.ɵɵelementEnd();
|
|
57515
|
-
i0.ɵɵelementStart(3, "input",
|
|
57728
|
+
i0.ɵɵelementStart(3, "input", 20, 0);
|
|
57516
57729
|
i0.ɵɵtwoWayListener("ngModelChange", function InitialTargetSettingComponent_Conditional_18_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.absoluteInput, $event) || (ctx_r0.absoluteInput = $event); return i0.ɵɵresetView($event); });
|
|
57517
57730
|
i0.ɵɵlistener("ngModelChange", function InitialTargetSettingComponent_Conditional_18_Template_input_ngModelChange_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onAbsoluteInputChange()); });
|
|
57518
57731
|
i0.ɵɵelementEnd()();
|
|
@@ -57526,32 +57739,32 @@ function InitialTargetSettingComponent_Conditional_18_Template(rf, ctx) { if (rf
|
|
|
57526
57739
|
} }
|
|
57527
57740
|
function InitialTargetSettingComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
57528
57741
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
57529
|
-
i0.ɵɵelementStart(0, "div",
|
|
57742
|
+
i0.ɵɵelementStart(0, "div", 12)(1, "input", 21, 1);
|
|
57530
57743
|
i0.ɵɵtwoWayListener("ngModelChange", function InitialTargetSettingComponent_Conditional_19_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.percentageInput, $event) || (ctx_r0.percentageInput = $event); return i0.ɵɵresetView($event); });
|
|
57531
57744
|
i0.ɵɵlistener("ngModelChange", function InitialTargetSettingComponent_Conditional_19_Template_input_ngModelChange_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onPercentageInputChange()); });
|
|
57532
57745
|
i0.ɵɵelementEnd();
|
|
57533
|
-
i0.ɵɵelementStart(
|
|
57534
|
-
i0.ɵɵtext(
|
|
57746
|
+
i0.ɵɵelementStart(3, "span", 22);
|
|
57747
|
+
i0.ɵɵtext(4, " % ");
|
|
57535
57748
|
i0.ɵɵelementEnd()();
|
|
57536
57749
|
} if (rf & 2) {
|
|
57537
57750
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
57538
57751
|
i0.ɵɵadvance();
|
|
57539
57752
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.percentageInput);
|
|
57540
57753
|
i0.ɵɵproperty("ngClass", ctx_r0.inputClasses());
|
|
57541
|
-
i0.ɵɵadvance();
|
|
57754
|
+
i0.ɵɵadvance(2);
|
|
57542
57755
|
i0.ɵɵproperty("ngClass", ctx_r0.inputSuffixClasses());
|
|
57543
57756
|
} }
|
|
57544
57757
|
function InitialTargetSettingComponent_Conditional_20_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
57545
|
-
i0.ɵɵelementStart(0, "div",
|
|
57758
|
+
i0.ɵɵelementStart(0, "div", 26)(1, "div")(2, "p", 24);
|
|
57546
57759
|
i0.ɵɵtext(3, " Gap to Close ");
|
|
57547
57760
|
i0.ɵɵelementEnd();
|
|
57548
|
-
i0.ɵɵelementStart(4, "p",
|
|
57761
|
+
i0.ɵɵelementStart(4, "p", 27);
|
|
57549
57762
|
i0.ɵɵtext(5);
|
|
57550
57763
|
i0.ɵɵelementEnd()();
|
|
57551
|
-
i0.ɵɵelementStart(6, "div")(7, "p",
|
|
57764
|
+
i0.ɵɵelementStart(6, "div")(7, "p", 24);
|
|
57552
57765
|
i0.ɵɵtext(8, " Additional Growth Needed ");
|
|
57553
57766
|
i0.ɵɵelementEnd();
|
|
57554
|
-
i0.ɵɵelementStart(9, "p",
|
|
57767
|
+
i0.ɵɵelementStart(9, "p", 27);
|
|
57555
57768
|
i0.ɵɵtext(10);
|
|
57556
57769
|
i0.ɵɵelementEnd()()();
|
|
57557
57770
|
} if (rf & 2) {
|
|
@@ -57571,25 +57784,25 @@ function InitialTargetSettingComponent_Conditional_20_Conditional_18_Template(rf
|
|
|
57571
57784
|
i0.ɵɵtextInterpolate2(" ", ctx_r0.gapToClose().amount > 0 ? "+" : "", "", ctx_r0.formatPercentage(ctx_r0.gapToClose().percentage, 1), " ");
|
|
57572
57785
|
} }
|
|
57573
57786
|
function InitialTargetSettingComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
57574
|
-
i0.ɵɵelementStart(0, "div",
|
|
57787
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div", 23)(2, "div")(3, "p", 24);
|
|
57575
57788
|
i0.ɵɵtext(4);
|
|
57576
57789
|
i0.ɵɵelementEnd();
|
|
57577
|
-
i0.ɵɵelementStart(5, "p",
|
|
57790
|
+
i0.ɵɵelementStart(5, "p", 25);
|
|
57578
57791
|
i0.ɵɵtext(6);
|
|
57579
57792
|
i0.ɵɵelementEnd()();
|
|
57580
|
-
i0.ɵɵelementStart(7, "div",
|
|
57793
|
+
i0.ɵɵelementStart(7, "div", 26)(8, "div")(9, "p", 24);
|
|
57581
57794
|
i0.ɵɵtext(10, " Increase Amount ");
|
|
57582
57795
|
i0.ɵɵelementEnd();
|
|
57583
|
-
i0.ɵɵelementStart(11, "p",
|
|
57796
|
+
i0.ɵɵelementStart(11, "p", 27);
|
|
57584
57797
|
i0.ɵɵtext(12);
|
|
57585
57798
|
i0.ɵɵelementEnd()();
|
|
57586
|
-
i0.ɵɵelementStart(13, "div")(14, "p",
|
|
57799
|
+
i0.ɵɵelementStart(13, "div")(14, "p", 24);
|
|
57587
57800
|
i0.ɵɵtext(15, " % Growth ");
|
|
57588
57801
|
i0.ɵɵelementEnd();
|
|
57589
|
-
i0.ɵɵelementStart(16, "p",
|
|
57802
|
+
i0.ɵɵelementStart(16, "p", 27);
|
|
57590
57803
|
i0.ɵɵtext(17);
|
|
57591
57804
|
i0.ɵɵelementEnd()()();
|
|
57592
|
-
i0.ɵɵconditionalCreate(18, InitialTargetSettingComponent_Conditional_20_Conditional_18_Template, 11, 8, "div",
|
|
57805
|
+
i0.ɵɵconditionalCreate(18, InitialTargetSettingComponent_Conditional_20_Conditional_18_Template, 11, 8, "div", 26);
|
|
57593
57806
|
i0.ɵɵelementEnd()();
|
|
57594
57807
|
} if (rf & 2) {
|
|
57595
57808
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -57620,13 +57833,13 @@ function InitialTargetSettingComponent_Conditional_20_Template(rf, ctx) { if (rf
|
|
|
57620
57833
|
i0.ɵɵconditional(ctx_r0.currentPaceProjection() > 0 && ctx_r0.gapToClose().amount !== 0 ? 18 : -1);
|
|
57621
57834
|
} }
|
|
57622
57835
|
function InitialTargetSettingComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
57623
|
-
i0.ɵɵelement(0, "symphiq-area-chart",
|
|
57836
|
+
i0.ɵɵelement(0, "symphiq-area-chart", 16);
|
|
57624
57837
|
} if (rf & 2) {
|
|
57625
57838
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
57626
57839
|
i0.ɵɵproperty("chart", ctx_r0.revenueChartData())("showAxisLabels", true)("viewMode", ctx_r0.viewMode())("currencySymbol", "$")("height", "320px");
|
|
57627
57840
|
} }
|
|
57628
57841
|
function InitialTargetSettingComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
57629
|
-
i0.ɵɵelementStart(0, "div",
|
|
57842
|
+
i0.ɵɵelementStart(0, "div", 17)(1, "p", 28);
|
|
57630
57843
|
i0.ɵɵtext(2, " No revenue data available ");
|
|
57631
57844
|
i0.ɵɵelementEnd()();
|
|
57632
57845
|
} if (rf & 2) {
|
|
@@ -57635,13 +57848,13 @@ function InitialTargetSettingComponent_Conditional_26_Template(rf, ctx) { if (rf
|
|
|
57635
57848
|
i0.ɵɵproperty("ngClass", ctx_r0.noDataClasses());
|
|
57636
57849
|
} }
|
|
57637
57850
|
function InitialTargetSettingComponent_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
57638
|
-
i0.ɵɵelementStart(0, "div",
|
|
57851
|
+
i0.ɵɵelementStart(0, "div", 3)(1, "div", 29)(2, "h2", 30);
|
|
57639
57852
|
i0.ɵɵtext(3, " Contributing Metrics ");
|
|
57640
57853
|
i0.ɵɵelementEnd();
|
|
57641
|
-
i0.ɵɵelementStart(4, "p",
|
|
57854
|
+
i0.ɵɵelementStart(4, "p", 28);
|
|
57642
57855
|
i0.ɵɵtext(5);
|
|
57643
57856
|
i0.ɵɵelementEnd()();
|
|
57644
|
-
i0.ɵɵelement(6, "symphiq-funnel-metrics-visualization",
|
|
57857
|
+
i0.ɵɵelement(6, "symphiq-funnel-metrics-visualization", 31);
|
|
57645
57858
|
i0.ɵɵelementEnd();
|
|
57646
57859
|
} if (rf & 2) {
|
|
57647
57860
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -57773,6 +57986,14 @@ class InitialTargetSettingComponent {
|
|
|
57773
57986
|
}
|
|
57774
57987
|
setInputMode(mode) {
|
|
57775
57988
|
this.inputMode.set(mode);
|
|
57989
|
+
setTimeout(() => {
|
|
57990
|
+
if (mode === 'absolute' && this.absoluteInput() === null) {
|
|
57991
|
+
this.absoluteInputRef?.nativeElement?.focus();
|
|
57992
|
+
}
|
|
57993
|
+
else if (mode === 'percentage' && this.percentageInput() === null) {
|
|
57994
|
+
this.percentageInputRef?.nativeElement?.focus();
|
|
57995
|
+
}
|
|
57996
|
+
});
|
|
57776
57997
|
}
|
|
57777
57998
|
onAbsoluteInputChange() {
|
|
57778
57999
|
const value = this.absoluteInput() ?? 0;
|
|
@@ -57902,41 +58123,43 @@ class InitialTargetSettingComponent {
|
|
|
57902
58123
|
static { this.ɵfac = function InitialTargetSettingComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || InitialTargetSettingComponent)(); }; }
|
|
57903
58124
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: InitialTargetSettingComponent, selectors: [["symphiq-initial-target-setting"]], viewQuery: function InitialTargetSettingComponent_Query(rf, ctx) { if (rf & 1) {
|
|
57904
58125
|
i0.ɵɵviewQuery(_c0$r, 5);
|
|
58126
|
+
i0.ɵɵviewQuery(_c1$b, 5);
|
|
57905
58127
|
} if (rf & 2) {
|
|
57906
58128
|
let _t;
|
|
57907
58129
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.absoluteInputRef = _t.first);
|
|
57908
|
-
|
|
57909
|
-
|
|
58130
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.percentageInputRef = _t.first);
|
|
58131
|
+
} }, inputs: { viewMode: [1, "viewMode"], funnelMetrics: [1, "funnelMetrics"], mainUiData: [1, "mainUiData"], trendUiData: [1, "trendUiData"], shopId: [1, "shopId"], pacingMetrics: [1, "pacingMetrics"], dataResults: [1, "dataResults"] }, outputs: { targetsCreated: "targetsCreated" }, decls: 29, vars: 21, 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, "grid", "lg:grid-cols-2", "gap-8"], [1, "space-y-6"], [1, "block", "text-sm", "font-semibold", "mb-2", 3, "ngClass"], [1, "space-y-1", "mb-4"], [1, "text-xs", 3, "ngClass"], [1, "flex", "gap-2", "mb-4"], [1, "flex-1", "py-2", "px-4", "rounded-lg", "text-sm", "font-semibold", "transition-all", 3, "click", "ngClass"], [1, "relative"], [1, "p-6", "rounded-xl", "border-2", 3, "ngClass"], [1, "text-sm", "font-semibold", "mb-3", 3, "ngClass"], [1, "rounded-xl", "border", "p-4", 3, "ngClass"], [3, "chart", "showAxisLabels", "viewMode", "currencySymbol", "height"], [1, "h-64", "flex", "items-center", "justify-center"], [3, "submitClick", "viewMode", "isValid", "isSubmitting", "validationMessage", "buttonText"], [1, "absolute", "left-4", "top-1/2", "-translate-y-1/2", "text-xl", "font-bold", 3, "ngClass"], ["type", "number", "placeholder", "0", "min", "0", "step", "1000", 1, "w-full", "pl-10", "pr-4", "py-4", "rounded-xl", "text-2xl", "font-bold", "border-2", "transition-all", 3, "ngModelChange", "ngModel", "ngClass"], ["type", "number", "placeholder", "0", "min", "0", "max", "1000", "step", "0.1", 1, "w-full", "pr-10", "pl-4", "py-4", "rounded-xl", "text-2xl", "font-bold", "border-2", "transition-all", 3, "ngModelChange", "ngModel", "ngClass"], [1, "absolute", "right-4", "top-1/2", "-translate-y-1/2", "text-xl", "font-bold", 3, "ngClass"], [1, "space-y-4"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-3xl", "font-bold", 3, "ngClass"], [1, "grid", "grid-cols-2", "gap-4", "pt-4", 3, "ngClass"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "mb-6"], [1, "text-2xl", "font-bold", "mb-2", 3, "ngClass"], [3, "viewMode", "calculations", "pacingMetrics"]], template: function InitialTargetSettingComponent_Template(rf, ctx) { if (rf & 1) {
|
|
58132
|
+
i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "h2", 4);
|
|
57910
58133
|
i0.ɵɵtext(3, " Calculate Your Revenue Target ");
|
|
57911
58134
|
i0.ɵɵelementEnd();
|
|
57912
|
-
i0.ɵɵelementStart(4, "div",
|
|
58135
|
+
i0.ɵɵelementStart(4, "div", 5)(5, "div", 6)(6, "div")(7, "label", 7);
|
|
57913
58136
|
i0.ɵɵtext(8);
|
|
57914
58137
|
i0.ɵɵelementEnd();
|
|
57915
|
-
i0.ɵɵelementStart(9, "div",
|
|
58138
|
+
i0.ɵɵelementStart(9, "div", 8)(10, "p", 9);
|
|
57916
58139
|
i0.ɵɵtext(11);
|
|
57917
58140
|
i0.ɵɵelementEnd();
|
|
57918
|
-
i0.ɵɵconditionalCreate(12, InitialTargetSettingComponent_Conditional_12_Template, 2, 2, "p",
|
|
58141
|
+
i0.ɵɵconditionalCreate(12, InitialTargetSettingComponent_Conditional_12_Template, 2, 2, "p", 9);
|
|
57919
58142
|
i0.ɵɵelementEnd();
|
|
57920
|
-
i0.ɵɵelementStart(13, "div",
|
|
58143
|
+
i0.ɵɵelementStart(13, "div", 10)(14, "button", 11);
|
|
57921
58144
|
i0.ɵɵlistener("click", function InitialTargetSettingComponent_Template_button_click_14_listener() { return ctx.setInputMode("absolute"); });
|
|
57922
58145
|
i0.ɵɵtext(15, " Absolute Amount ");
|
|
57923
58146
|
i0.ɵɵelementEnd();
|
|
57924
|
-
i0.ɵɵelementStart(16, "button",
|
|
58147
|
+
i0.ɵɵelementStart(16, "button", 11);
|
|
57925
58148
|
i0.ɵɵlistener("click", function InitialTargetSettingComponent_Template_button_click_16_listener() { return ctx.setInputMode("percentage"); });
|
|
57926
58149
|
i0.ɵɵtext(17, " % Increase ");
|
|
57927
58150
|
i0.ɵɵelementEnd()();
|
|
57928
|
-
i0.ɵɵconditionalCreate(18, InitialTargetSettingComponent_Conditional_18_Template, 5, 3, "div",
|
|
58151
|
+
i0.ɵɵconditionalCreate(18, InitialTargetSettingComponent_Conditional_18_Template, 5, 3, "div", 12)(19, InitialTargetSettingComponent_Conditional_19_Template, 5, 3, "div", 12);
|
|
57929
58152
|
i0.ɵɵelementEnd();
|
|
57930
|
-
i0.ɵɵconditionalCreate(20, InitialTargetSettingComponent_Conditional_20_Template, 19, 13, "div",
|
|
58153
|
+
i0.ɵɵconditionalCreate(20, InitialTargetSettingComponent_Conditional_20_Template, 19, 13, "div", 13);
|
|
57931
58154
|
i0.ɵɵelementEnd();
|
|
57932
|
-
i0.ɵɵelementStart(21, "div")(22, "p",
|
|
58155
|
+
i0.ɵɵelementStart(21, "div")(22, "p", 14);
|
|
57933
58156
|
i0.ɵɵtext(23, " Year-over-Year Revenue Trend ");
|
|
57934
58157
|
i0.ɵɵelementEnd();
|
|
57935
|
-
i0.ɵɵelementStart(24, "div",
|
|
57936
|
-
i0.ɵɵconditionalCreate(25, InitialTargetSettingComponent_Conditional_25_Template, 1, 5, "symphiq-area-chart",
|
|
58158
|
+
i0.ɵɵelementStart(24, "div", 15);
|
|
58159
|
+
i0.ɵɵconditionalCreate(25, InitialTargetSettingComponent_Conditional_25_Template, 1, 5, "symphiq-area-chart", 16)(26, InitialTargetSettingComponent_Conditional_26_Template, 3, 1, "div", 17);
|
|
57937
58160
|
i0.ɵɵelementEnd()()()();
|
|
57938
|
-
i0.ɵɵconditionalCreate(27, InitialTargetSettingComponent_Conditional_27_Template, 7, 7, "div",
|
|
57939
|
-
i0.ɵɵelementStart(28, "symphiq-sticky-submit-bar",
|
|
58161
|
+
i0.ɵɵconditionalCreate(27, InitialTargetSettingComponent_Conditional_27_Template, 7, 7, "div", 3);
|
|
58162
|
+
i0.ɵɵelementStart(28, "symphiq-sticky-submit-bar", 18);
|
|
57940
58163
|
i0.ɵɵlistener("submitClick", function InitialTargetSettingComponent_Template_symphiq_sticky_submit_bar_submitClick_28_listener() { return ctx.handleSubmit(); });
|
|
57941
58164
|
i0.ɵɵelementEnd()();
|
|
57942
58165
|
} if (rf & 2) {
|
|
@@ -57989,194 +58212,198 @@ class InitialTargetSettingComponent {
|
|
|
57989
58212
|
AreaChartComponent
|
|
57990
58213
|
],
|
|
57991
58214
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
57992
|
-
template: `
|
|
57993
|
-
<div class="space-y-8 pb-32">
|
|
57994
|
-
<div [ngClass]="sectionCardClasses()" class="rounded-2xl border shadow-lg p-8">
|
|
57995
|
-
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold mb-6">
|
|
57996
|
-
Calculate Your Revenue Target
|
|
57997
|
-
</h2>
|
|
57998
|
-
|
|
57999
|
-
<div class="grid lg:grid-cols-2 gap-8">
|
|
58000
|
-
<div class="space-y-6">
|
|
58001
|
-
<div>
|
|
58002
|
-
<label [ngClass]="labelClasses()" class="block text-sm font-semibold mb-2">
|
|
58003
|
-
{{ currentYear() }} Revenue
|
|
58004
|
-
</label>
|
|
58005
|
-
<div class="space-y-1 mb-4">
|
|
58006
|
-
<p [ngClass]="priorYearLabelClasses()" class="text-xs">
|
|
58007
|
-
{{ priorYear() }} Revenue: {{ formatCurrency(priorYearRevenue()) }}
|
|
58008
|
-
</p>
|
|
58009
|
-
@if (currentPaceProjection() > 0) {
|
|
58010
|
-
<p [ngClass]="priorYearLabelClasses()" class="text-xs">
|
|
58011
|
-
Current Pace Projection: {{ formatCurrency(currentPaceProjection()) }}
|
|
58012
|
-
</p>
|
|
58013
|
-
}
|
|
58014
|
-
</div>
|
|
58015
|
-
|
|
58016
|
-
<div class="flex gap-2 mb-4">
|
|
58017
|
-
<button
|
|
58018
|
-
(click)="setInputMode('absolute')"
|
|
58019
|
-
[ngClass]="inputModeButtonClasses('absolute')"
|
|
58020
|
-
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
58021
|
-
Absolute Amount
|
|
58022
|
-
</button>
|
|
58023
|
-
<button
|
|
58024
|
-
(click)="setInputMode('percentage')"
|
|
58025
|
-
[ngClass]="inputModeButtonClasses('percentage')"
|
|
58026
|
-
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
58027
|
-
% Increase
|
|
58028
|
-
</button>
|
|
58029
|
-
</div>
|
|
58030
|
-
|
|
58031
|
-
@if (inputMode() === 'absolute') {
|
|
58032
|
-
<div class="relative">
|
|
58033
|
-
<span [ngClass]="inputPrefixClasses()" class="absolute left-4 top-1/2 -translate-y-1/2 text-xl font-bold">
|
|
58034
|
-
$
|
|
58035
|
-
</span>
|
|
58036
|
-
<input
|
|
58037
|
-
#absoluteInputRef
|
|
58038
|
-
type="number"
|
|
58039
|
-
[(ngModel)]="absoluteInput"
|
|
58040
|
-
(ngModelChange)="onAbsoluteInputChange()"
|
|
58041
|
-
[ngClass]="inputClasses()"
|
|
58042
|
-
class="w-full pl-10 pr-4 py-4 rounded-xl text-2xl font-bold border-2 transition-all"
|
|
58043
|
-
placeholder="0"
|
|
58044
|
-
min="0"
|
|
58045
|
-
step="1000">
|
|
58046
|
-
</div>
|
|
58047
|
-
} @else {
|
|
58048
|
-
<div class="relative">
|
|
58049
|
-
<input
|
|
58050
|
-
|
|
58051
|
-
|
|
58052
|
-
(
|
|
58053
|
-
|
|
58054
|
-
|
|
58055
|
-
|
|
58056
|
-
|
|
58057
|
-
|
|
58058
|
-
|
|
58059
|
-
|
|
58060
|
-
|
|
58061
|
-
|
|
58062
|
-
|
|
58063
|
-
|
|
58064
|
-
|
|
58065
|
-
|
|
58066
|
-
|
|
58067
|
-
|
|
58068
|
-
|
|
58069
|
-
|
|
58070
|
-
|
|
58071
|
-
|
|
58072
|
-
|
|
58073
|
-
|
|
58074
|
-
|
|
58075
|
-
|
|
58076
|
-
|
|
58077
|
-
|
|
58078
|
-
|
|
58079
|
-
|
|
58080
|
-
|
|
58081
|
-
|
|
58082
|
-
|
|
58083
|
-
|
|
58084
|
-
|
|
58085
|
-
|
|
58086
|
-
|
|
58087
|
-
|
|
58088
|
-
|
|
58089
|
-
|
|
58090
|
-
|
|
58091
|
-
|
|
58092
|
-
|
|
58093
|
-
|
|
58094
|
-
|
|
58095
|
-
|
|
58096
|
-
|
|
58097
|
-
|
|
58098
|
-
|
|
58099
|
-
|
|
58100
|
-
|
|
58101
|
-
|
|
58102
|
-
|
|
58103
|
-
|
|
58104
|
-
|
|
58105
|
-
|
|
58106
|
-
|
|
58107
|
-
|
|
58108
|
-
|
|
58109
|
-
|
|
58110
|
-
|
|
58111
|
-
|
|
58112
|
-
|
|
58113
|
-
|
|
58114
|
-
|
|
58115
|
-
|
|
58116
|
-
|
|
58117
|
-
|
|
58118
|
-
|
|
58119
|
-
|
|
58120
|
-
|
|
58121
|
-
|
|
58122
|
-
|
|
58123
|
-
|
|
58124
|
-
|
|
58125
|
-
|
|
58126
|
-
|
|
58127
|
-
|
|
58128
|
-
[
|
|
58129
|
-
[
|
|
58130
|
-
[
|
|
58131
|
-
[
|
|
58132
|
-
|
|
58133
|
-
|
|
58134
|
-
|
|
58135
|
-
|
|
58136
|
-
|
|
58137
|
-
|
|
58138
|
-
|
|
58139
|
-
|
|
58140
|
-
|
|
58141
|
-
|
|
58142
|
-
|
|
58143
|
-
|
|
58144
|
-
|
|
58145
|
-
|
|
58146
|
-
|
|
58147
|
-
|
|
58148
|
-
|
|
58149
|
-
|
|
58150
|
-
|
|
58151
|
-
|
|
58152
|
-
|
|
58153
|
-
|
|
58154
|
-
|
|
58155
|
-
|
|
58156
|
-
|
|
58157
|
-
|
|
58158
|
-
[
|
|
58159
|
-
[
|
|
58160
|
-
|
|
58161
|
-
|
|
58162
|
-
|
|
58163
|
-
|
|
58164
|
-
|
|
58165
|
-
|
|
58166
|
-
[
|
|
58167
|
-
[
|
|
58168
|
-
[
|
|
58169
|
-
[
|
|
58170
|
-
|
|
58171
|
-
|
|
58172
|
-
|
|
58215
|
+
template: `
|
|
58216
|
+
<div class="space-y-8 pb-32">
|
|
58217
|
+
<div [ngClass]="sectionCardClasses()" class="rounded-2xl border shadow-lg p-8">
|
|
58218
|
+
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold mb-6">
|
|
58219
|
+
Calculate Your Revenue Target
|
|
58220
|
+
</h2>
|
|
58221
|
+
|
|
58222
|
+
<div class="grid lg:grid-cols-2 gap-8">
|
|
58223
|
+
<div class="space-y-6">
|
|
58224
|
+
<div>
|
|
58225
|
+
<label [ngClass]="labelClasses()" class="block text-sm font-semibold mb-2">
|
|
58226
|
+
{{ currentYear() }} Revenue
|
|
58227
|
+
</label>
|
|
58228
|
+
<div class="space-y-1 mb-4">
|
|
58229
|
+
<p [ngClass]="priorYearLabelClasses()" class="text-xs">
|
|
58230
|
+
{{ priorYear() }} Revenue: {{ formatCurrency(priorYearRevenue()) }}
|
|
58231
|
+
</p>
|
|
58232
|
+
@if (currentPaceProjection() > 0) {
|
|
58233
|
+
<p [ngClass]="priorYearLabelClasses()" class="text-xs">
|
|
58234
|
+
Current Pace Projection: {{ formatCurrency(currentPaceProjection()) }}
|
|
58235
|
+
</p>
|
|
58236
|
+
}
|
|
58237
|
+
</div>
|
|
58238
|
+
|
|
58239
|
+
<div class="flex gap-2 mb-4">
|
|
58240
|
+
<button
|
|
58241
|
+
(click)="setInputMode('absolute')"
|
|
58242
|
+
[ngClass]="inputModeButtonClasses('absolute')"
|
|
58243
|
+
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
58244
|
+
Absolute Amount
|
|
58245
|
+
</button>
|
|
58246
|
+
<button
|
|
58247
|
+
(click)="setInputMode('percentage')"
|
|
58248
|
+
[ngClass]="inputModeButtonClasses('percentage')"
|
|
58249
|
+
class="flex-1 py-2 px-4 rounded-lg text-sm font-semibold transition-all">
|
|
58250
|
+
% Increase
|
|
58251
|
+
</button>
|
|
58252
|
+
</div>
|
|
58253
|
+
|
|
58254
|
+
@if (inputMode() === 'absolute') {
|
|
58255
|
+
<div class="relative">
|
|
58256
|
+
<span [ngClass]="inputPrefixClasses()" class="absolute left-4 top-1/2 -translate-y-1/2 text-xl font-bold">
|
|
58257
|
+
$
|
|
58258
|
+
</span>
|
|
58259
|
+
<input
|
|
58260
|
+
#absoluteInputRef
|
|
58261
|
+
type="number"
|
|
58262
|
+
[(ngModel)]="absoluteInput"
|
|
58263
|
+
(ngModelChange)="onAbsoluteInputChange()"
|
|
58264
|
+
[ngClass]="inputClasses()"
|
|
58265
|
+
class="w-full pl-10 pr-4 py-4 rounded-xl text-2xl font-bold border-2 transition-all"
|
|
58266
|
+
placeholder="0"
|
|
58267
|
+
min="0"
|
|
58268
|
+
step="1000">
|
|
58269
|
+
</div>
|
|
58270
|
+
} @else {
|
|
58271
|
+
<div class="relative">
|
|
58272
|
+
<input
|
|
58273
|
+
#percentageInputRef
|
|
58274
|
+
type="number"
|
|
58275
|
+
[(ngModel)]="percentageInput"
|
|
58276
|
+
(ngModelChange)="onPercentageInputChange()"
|
|
58277
|
+
[ngClass]="inputClasses()"
|
|
58278
|
+
class="w-full pr-10 pl-4 py-4 rounded-xl text-2xl font-bold border-2 transition-all"
|
|
58279
|
+
placeholder="0"
|
|
58280
|
+
min="0"
|
|
58281
|
+
max="1000"
|
|
58282
|
+
step="0.1">
|
|
58283
|
+
<span [ngClass]="inputSuffixClasses()" class="absolute right-4 top-1/2 -translate-y-1/2 text-xl font-bold">
|
|
58284
|
+
%
|
|
58285
|
+
</span>
|
|
58286
|
+
</div>
|
|
58287
|
+
}
|
|
58288
|
+
</div>
|
|
58289
|
+
|
|
58290
|
+
@if (calculatedRevenue() > 0) {
|
|
58291
|
+
<div [ngClass]="calculatedValuesCardClasses()" class="p-6 rounded-xl border-2">
|
|
58292
|
+
<div class="space-y-4">
|
|
58293
|
+
<div>
|
|
58294
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
58295
|
+
{{ currentYear() }} Revenue Target
|
|
58296
|
+
</p>
|
|
58297
|
+
<p [ngClass]="calculatedValueClasses()" class="text-3xl font-bold">
|
|
58298
|
+
{{ formatCurrency(calculatedRevenue()) }}
|
|
58299
|
+
</p>
|
|
58300
|
+
</div>
|
|
58301
|
+
<div class="grid grid-cols-2 gap-4 pt-4" [ngClass]="calculatedDividerClasses()">
|
|
58302
|
+
<div>
|
|
58303
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
58304
|
+
Increase Amount
|
|
58305
|
+
</p>
|
|
58306
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
58307
|
+
{{ formatCurrency(calculatedRevenue() - priorYearRevenue()) }}
|
|
58308
|
+
</p>
|
|
58309
|
+
</div>
|
|
58310
|
+
<div>
|
|
58311
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
58312
|
+
% Growth
|
|
58313
|
+
</p>
|
|
58314
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
58315
|
+
+{{ formatPercentage(percentageIncrease(), 1) }}
|
|
58316
|
+
</p>
|
|
58317
|
+
</div>
|
|
58318
|
+
</div>
|
|
58319
|
+
@if (currentPaceProjection() > 0 && gapToClose().amount !== 0) {
|
|
58320
|
+
<div class="grid grid-cols-2 gap-4 pt-4" [ngClass]="calculatedDividerClasses()">
|
|
58321
|
+
<div>
|
|
58322
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
58323
|
+
Gap to Close
|
|
58324
|
+
</p>
|
|
58325
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
58326
|
+
{{ formatCurrency(absValue(gapToClose().amount)) }}
|
|
58327
|
+
</p>
|
|
58328
|
+
</div>
|
|
58329
|
+
<div>
|
|
58330
|
+
<p [ngClass]="calculatedLabelClasses()" class="text-xs font-medium uppercase tracking-wider mb-1">
|
|
58331
|
+
Additional Growth Needed
|
|
58332
|
+
</p>
|
|
58333
|
+
<p [ngClass]="calculatedSecondaryClasses()" class="text-xl font-bold">
|
|
58334
|
+
{{ gapToClose().amount > 0 ? '+' : '' }}{{ formatPercentage(gapToClose().percentage, 1) }}
|
|
58335
|
+
</p>
|
|
58336
|
+
</div>
|
|
58337
|
+
</div>
|
|
58338
|
+
}
|
|
58339
|
+
</div>
|
|
58340
|
+
</div>
|
|
58341
|
+
}
|
|
58342
|
+
</div>
|
|
58343
|
+
|
|
58344
|
+
<div>
|
|
58345
|
+
<p [ngClass]="chartTitleClasses()" class="text-sm font-semibold mb-3">
|
|
58346
|
+
Year-over-Year Revenue Trend
|
|
58347
|
+
</p>
|
|
58348
|
+
<div [ngClass]="chartContainerClasses()" class="rounded-xl border p-4">
|
|
58349
|
+
@if (revenueChartData()) {
|
|
58350
|
+
<symphiq-area-chart
|
|
58351
|
+
[chart]="revenueChartData()!"
|
|
58352
|
+
[showAxisLabels]="true"
|
|
58353
|
+
[viewMode]="viewMode()"
|
|
58354
|
+
[currencySymbol]="'$'"
|
|
58355
|
+
[height]="'320px'"
|
|
58356
|
+
/>
|
|
58357
|
+
} @else {
|
|
58358
|
+
<div class="h-64 flex items-center justify-center">
|
|
58359
|
+
<p [ngClass]="noDataClasses()" class="text-sm">
|
|
58360
|
+
No revenue data available
|
|
58361
|
+
</p>
|
|
58362
|
+
</div>
|
|
58363
|
+
}
|
|
58364
|
+
</div>
|
|
58365
|
+
</div>
|
|
58366
|
+
</div>
|
|
58367
|
+
</div>
|
|
58368
|
+
|
|
58369
|
+
@if (showMetricsVisualization()) {
|
|
58370
|
+
<div [ngClass]="sectionCardClasses()" class="rounded-2xl border shadow-lg p-8">
|
|
58371
|
+
<div class="mb-6">
|
|
58372
|
+
<h2 [ngClass]="sectionTitleClasses()" class="text-2xl font-bold mb-2">
|
|
58373
|
+
Contributing Metrics
|
|
58374
|
+
</h2>
|
|
58375
|
+
<p [ngClass]="sectionDescriptionClasses()" class="text-sm">
|
|
58376
|
+
To achieve your revenue target of {{ formatCurrency(calculatedRevenue()) }}, the following metrics need to improve by these amounts. These improvements compound through your funnel to drive revenue growth.
|
|
58377
|
+
</p>
|
|
58378
|
+
</div>
|
|
58379
|
+
|
|
58380
|
+
<symphiq-funnel-metrics-visualization
|
|
58381
|
+
[viewMode]="viewMode()"
|
|
58382
|
+
[calculations]="metricCalculations()"
|
|
58383
|
+
[pacingMetrics]="pacingMetrics()"
|
|
58384
|
+
/>
|
|
58385
|
+
</div>
|
|
58386
|
+
}
|
|
58387
|
+
|
|
58388
|
+
<symphiq-sticky-submit-bar
|
|
58389
|
+
[viewMode]="viewMode()"
|
|
58390
|
+
[isValid]="isValid()"
|
|
58391
|
+
[isSubmitting]="isSubmitting()"
|
|
58392
|
+
[validationMessage]="validationMessage()"
|
|
58393
|
+
[buttonText]="'Set Revenue Targets'"
|
|
58394
|
+
(submitClick)="handleSubmit()"
|
|
58395
|
+
/>
|
|
58396
|
+
</div>
|
|
58173
58397
|
`
|
|
58174
58398
|
}]
|
|
58175
58399
|
}], () => [], { absoluteInputRef: [{
|
|
58176
58400
|
type: ViewChild,
|
|
58177
58401
|
args: ['absoluteInputRef']
|
|
58402
|
+
}], percentageInputRef: [{
|
|
58403
|
+
type: ViewChild,
|
|
58404
|
+
args: ['percentageInputRef']
|
|
58178
58405
|
}], 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 }] }], targetsCreated: [{ type: i0.Output, args: ["targetsCreated"] }] }); })();
|
|
58179
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber:
|
|
58406
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(InitialTargetSettingComponent, { className: "InitialTargetSettingComponent", filePath: "lib/components/revenue-calculator-dashboard/initial-target-setting.component.ts", lineNumber: 218 }); })();
|
|
58180
58407
|
|
|
58181
58408
|
function IndeterminateSpinnerComponent_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
58182
58409
|
i0.ɵɵelement(0, "div", 5);
|
|
@@ -108614,5 +108841,5 @@ const PROFILE_ANALYSIS_METRIC_SCREEN_PAGE_VIEWS = ({
|
|
|
108614
108841
|
* Generated bundle index. Do not edit.
|
|
108615
108842
|
*/
|
|
108616
108843
|
|
|
108617
|
-
export { AreaChartComponent, BUSINESS_PROFILE, BarChartComponent, BreakdownSectionComponent, BusinessAnalysisModalComponent, BusinessProfileSearchService, ChartCardComponent, ChartContainerComponent, ChartThemeService, CircularProgressComponent, CompetitivePositioningSummaryComponent, CompetitorAnalysisCardComponent, ConfettiService, ConfidenceLevelCardComponent, ContentGenerationProgressComponent, ContentGenerationProgressWithConfettiComponent, CrossDashboardRelationshipsService, FUNNEL_ANALYSIS, FloatingBackButtonComponent, FloatingTocComponent, FocusAreaDetailCardComponent, FocusAreaExecutiveSummaryComponent, FocusAreaQuestionComponent, FocusAreaToolsModalComponent, FunnelOrderService, GradeBadgeComponent, HeaderScrollService, HierarchyDisplayComponent, HorizontalBarComponent, IconService, IndeterminateSpinnerComponent, InsightCardComponent, JourneyProgressIndicatorComponent, JourneyStepIdEnum, LineChartComponent, MetricCardComponent, MetricExecutiveSummaryComponent, MetricFormatterService, MetricListItemComponent, MetricWelcomeBannerComponent, MobileBottomNavComponent, MobileFABComponent, ModalComponent, ModalService, NapkinVisualPlaceholderComponent, NavigationStateService, OpportunityHighlightBannerComponent, OverallAssessmentComponent, PROFILE_ANALYSIS_FOCUS_AREA_AFFILIATE, PROFILE_ANALYSIS_METRIC_SCREEN_PAGE_VIEWS, PROFILE_ANALYSIS_SHOP, PieChartComponent, ProfileItemCardComponent, ProfileSectionComponent, ProfileSubsectionComponent, RelatedContentSidebarComponent, RevenueCalculatorWelcomeBannerComponent, ScrollDepthService, ScrollProgressBarComponent, SearchButtonComponent, SearchModalComponent, SectionDividerComponent, SectionNavigationComponent, ShadowElevationDirective, ShopPlatformEnum, ShopWelcomeBannerComponent, SkeletonBarComponent, SkeletonCardBaseComponent, SkeletonCircleComponent, SkeletonCompetitorCardComponent, SkeletonCustomerSegmentCardComponent, SkeletonFocusAreaCardComponent, SkeletonGenericCardComponent, SkeletonLoaderComponent, SkeletonPriceTierCardComponent, SkeletonProductCategoryCardComponent, SkeletonRegionCardComponent, SkeletonSeasonCardComponent, SymphiqBusinessAnalysisDashboardComponent, SymphiqConnectGaDashboardComponent, SymphiqCreateAccountDashboardComponent, SymphiqFunnelAnalysisDashboardComponent, SymphiqFunnelAnalysisPreviewComponent, SymphiqIconComponent, SymphiqProfileAnalysisDashboardComponent, SymphiqRevenueCalculatorDashboardComponent, SymphiqWelcomeDashboardComponent, TooltipContainerComponent, TooltipDataService, TooltipDirective, TooltipService, ViewModeService, ViewportAnimationDirective, VisualizationContainerComponent, getBadgeLabelClasses, getButtonClasses, getCategoryBadgeClasses, getCategoryColor, getCompetitiveBadgeClasses, getContainerClasses, getFooterClasses, getGradeBadgeClasses, getHeaderClasses, getInsightsBadgeClasses, getInsightsCardClasses, getMetricLabelClasses, getMetricMiniCardClasses, getMetricValueClasses, getNarrativeTextClasses, getRevenueCardClasses, getRevenueIconClasses, getStatusBadgeClasses, getStatusDotClasses, getStatusIconClasses, getStatusSummaryClasses, getSubtitleClasses, getTitleClasses, getTrendClasses, getTrendIconClasses, getTrendValueClasses, isLightMode };
|
|
108844
|
+
export { AreaChartComponent, BUSINESS_PROFILE, BarChartComponent, BreakdownSectionComponent, BusinessAnalysisModalComponent, BusinessProfileSearchService, ChartCardComponent, ChartContainerComponent, ChartThemeService, CircularProgressComponent, CompetitivePositioningSummaryComponent, CompetitorAnalysisCardComponent, ConfettiService, ConfidenceLevelCardComponent, ContentGenerationProgressComponent, ContentGenerationProgressWithConfettiComponent, CrossDashboardRelationshipsService, FUNNEL_ANALYSIS, FloatingBackButtonComponent, FloatingTocComponent, FocusAreaDetailCardComponent, FocusAreaExecutiveSummaryComponent, FocusAreaQuestionComponent, FocusAreaToolsModalComponent, FunnelOrderService, GradeBadgeComponent, HeaderScrollService, HierarchyDisplayComponent, HorizontalBarComponent, IconService, IndeterminateSpinnerComponent, InsightCardComponent, JourneyProgressIndicatorComponent, JourneyStepIdEnum, LineChartComponent, MetricCardComponent, MetricExecutiveSummaryComponent, MetricFormatterService, MetricListItemComponent, MetricWelcomeBannerComponent, MobileBottomNavComponent, MobileFABComponent, ModalComponent, ModalService, NapkinVisualPlaceholderComponent, NavigationStateService, OpportunityHighlightBannerComponent, OverallAssessmentComponent, PROFILE_ANALYSIS_FOCUS_AREA_AFFILIATE, PROFILE_ANALYSIS_METRIC_SCREEN_PAGE_VIEWS, PROFILE_ANALYSIS_SHOP, PieChartComponent, ProfileItemCardComponent, ProfileSectionComponent, ProfileSubsectionComponent, RelatedContentSidebarComponent, RevenueCalculatorService, RevenueCalculatorWelcomeBannerComponent, ScrollDepthService, ScrollProgressBarComponent, SearchButtonComponent, SearchModalComponent, SectionDividerComponent, SectionNavigationComponent, ShadowElevationDirective, ShopPlatformEnum, ShopWelcomeBannerComponent, SkeletonBarComponent, SkeletonCardBaseComponent, SkeletonCircleComponent, SkeletonCompetitorCardComponent, SkeletonCustomerSegmentCardComponent, SkeletonFocusAreaCardComponent, SkeletonGenericCardComponent, SkeletonLoaderComponent, SkeletonPriceTierCardComponent, SkeletonProductCategoryCardComponent, SkeletonRegionCardComponent, SkeletonSeasonCardComponent, SymphiqBusinessAnalysisDashboardComponent, SymphiqConnectGaDashboardComponent, SymphiqCreateAccountDashboardComponent, SymphiqFunnelAnalysisDashboardComponent, SymphiqFunnelAnalysisPreviewComponent, SymphiqIconComponent, SymphiqProfileAnalysisDashboardComponent, SymphiqRevenueCalculatorDashboardComponent, SymphiqWelcomeDashboardComponent, TooltipContainerComponent, TooltipDataService, TooltipDirective, TooltipService, ViewModeService, ViewportAnimationDirective, VisualizationContainerComponent, calculateFunnelRatios, calculateMetricTargetsFromRevenue, calculateMetricTargetsFromRevenueReverse, calculateRelatedMetricRatios, generateTargetsFromCalculations, getBadgeLabelClasses, getButtonClasses, getCategoryBadgeClasses, getCategoryColor, getCompetitiveBadgeClasses, getContainerClasses, getFooterClasses, getFunnelStageMetrics, getGradeBadgeClasses, getHeaderClasses, getInsightsBadgeClasses, getInsightsCardClasses, getMetricLabelClasses, getMetricMiniCardClasses, getMetricValueClasses, getNarrativeTextClasses, getRevenueCardClasses, getRevenueIconClasses, getStatusBadgeClasses, getStatusDotClasses, getStatusIconClasses, getStatusSummaryClasses, getSubtitleClasses, getTitleClasses, getTrendClasses, getTrendIconClasses, getTrendValueClasses, groupMetricsByFunnelStage, isLightMode, validateRevenueTarget };
|
|
108618
108845
|
//# sourceMappingURL=symphiq-components.mjs.map
|