@eric-emg/symphiq-components 1.2.251 → 1.2.253

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