@eric-emg/symphiq-components 1.2.182 → 1.2.184

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.
@@ -56032,14 +56032,25 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_17_Template(rf, c
56032
56032
  i0.ɵɵtextInterpolate1(" ", ctx_r1.formatMetricValue(stage_r1.pacingInfo.projectedValue, stage_r1.stageMetric.metric), " ");
56033
56033
  } }
56034
56034
  function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
56035
+ i0.ɵɵelementStart(0, "button", 24);
56036
+ i0.ɵɵnamespaceSVG();
56037
+ i0.ɵɵelementStart(1, "svg", 29);
56038
+ i0.ɵɵelement(2, "path", 15);
56039
+ i0.ɵɵelementEnd()();
56040
+ } if (rf & 2) {
56041
+ const metric_r3 = i0.ɵɵnextContext().$implicit;
56042
+ const ctx_r1 = i0.ɵɵnextContext(3);
56043
+ i0.ɵɵproperty("ngClass", ctx_r1.infoIconClasses())("libSymphiqTooltip", ctx_r1.getMarkdownTooltipContent(metric_r3.calc.description, ctx_r1.getMetricTitle(metric_r3.calc)));
56044
+ } }
56045
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_7_Template(rf, ctx) { if (rf & 1) {
56035
56046
  i0.ɵɵelement(0, "symphiq-pacing-status-badge", 9);
56036
56047
  } if (rf & 2) {
56037
56048
  const metric_r3 = i0.ɵɵnextContext().$implicit;
56038
56049
  const ctx_r1 = i0.ɵɵnextContext(3);
56039
56050
  i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("pacingPercentage", metric_r3.pacingInfo.pacingPercentage)("status", metric_r3.pacingInfo.status);
56040
56051
  } }
56041
- function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_12_Template(rf, ctx) { if (rf & 1) {
56042
- i0.ɵɵelementStart(0, "div")(1, "p", 26);
56052
+ function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_14_Template(rf, ctx) { if (rf & 1) {
56053
+ i0.ɵɵelementStart(0, "div")(1, "p", 28);
56043
56054
  i0.ɵɵtext(2);
56044
56055
  i0.ɵɵelementEnd()();
56045
56056
  } if (rf & 2) {
@@ -56051,31 +56062,35 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditio
56051
56062
  i0.ɵɵtextInterpolate1("Proj: ", ctx_r1.formatMetricValue(metric_r3.pacingInfo.projectedValue, metric_r3.calc.metric));
56052
56063
  } }
56053
56064
  function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Template(rf, ctx) { if (rf & 1) {
56054
- i0.ɵɵelementStart(0, "div", 20)(1, "div", 21)(2, "p", 22);
56055
- i0.ɵɵtext(3);
56065
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 21)(2, "div", 22)(3, "p", 23);
56066
+ i0.ɵɵtext(4);
56056
56067
  i0.ɵɵelementEnd();
56057
- i0.ɵɵelementStart(4, "div", 23);
56058
- i0.ɵɵconditionalCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_5_Template, 1, 3, "symphiq-pacing-status-badge", 9);
56059
- i0.ɵɵelementStart(6, "span", 24);
56060
- i0.ɵɵtext(7);
56068
+ i0.ɵɵconditionalCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_5_Template, 3, 2, "button", 24);
56069
+ i0.ɵɵelementEnd();
56070
+ i0.ɵɵelementStart(6, "div", 25);
56071
+ i0.ɵɵconditionalCreate(7, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_7_Template, 1, 3, "symphiq-pacing-status-badge", 9);
56072
+ i0.ɵɵelementStart(8, "span", 26);
56073
+ i0.ɵɵtext(9);
56061
56074
  i0.ɵɵelementEnd()()();
56062
- i0.ɵɵelementStart(8, "div", 25)(9, "div")(10, "p", 26);
56063
- i0.ɵɵtext(11);
56075
+ i0.ɵɵelementStart(10, "div", 27)(11, "div")(12, "p", 28);
56076
+ i0.ɵɵtext(13);
56064
56077
  i0.ɵɵelementEnd()();
56065
- i0.ɵɵconditionalCreate(12, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_12_Template, 3, 2, "div");
56066
- i0.ɵɵelementStart(13, "div")(14, "p", 26);
56067
- i0.ɵɵtext(15);
56078
+ i0.ɵɵconditionalCreate(14, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Conditional_14_Template, 3, 2, "div");
56079
+ i0.ɵɵelementStart(15, "div")(16, "p", 28);
56080
+ i0.ɵɵtext(17);
56068
56081
  i0.ɵɵelementEnd()()()();
56069
56082
  } if (rf & 2) {
56070
56083
  const metric_r3 = ctx.$implicit;
56071
56084
  const ctx_r1 = i0.ɵɵnextContext(3);
56072
56085
  i0.ɵɵproperty("ngClass", ctx_r1.relatedMetricCardClasses());
56073
- i0.ɵɵadvance(2);
56086
+ i0.ɵɵadvance(3);
56074
56087
  i0.ɵɵproperty("ngClass", ctx_r1.relatedMetricNameClasses());
56075
56088
  i0.ɵɵadvance();
56076
56089
  i0.ɵɵtextInterpolate1(" ", ctx_r1.getMetricTitle(metric_r3.calc), " ");
56090
+ i0.ɵɵadvance();
56091
+ i0.ɵɵconditional(metric_r3.calc.description ? 5 : -1);
56077
56092
  i0.ɵɵadvance(2);
56078
- i0.ɵɵconditional(metric_r3.pacingInfo ? 5 : -1);
56093
+ i0.ɵɵconditional(metric_r3.pacingInfo ? 7 : -1);
56079
56094
  i0.ɵɵadvance();
56080
56095
  i0.ɵɵproperty("ngClass", ctx_r1.relatedPercentageBadgeClasses());
56081
56096
  i0.ɵɵadvance();
@@ -56087,7 +56102,7 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Template
56087
56102
  i0.ɵɵadvance();
56088
56103
  i0.ɵɵtextInterpolate2("", ctx_r1.priorYear(), ": ", ctx_r1.formatMetricValue(metric_r3.calc.currentValue, metric_r3.calc.metric));
56089
56104
  i0.ɵɵadvance();
56090
- i0.ɵɵconditional(metric_r3.pacingInfo ? 12 : -1);
56105
+ i0.ɵɵconditional(metric_r3.pacingInfo ? 14 : -1);
56091
56106
  i0.ɵɵadvance(2);
56092
56107
  i0.ɵɵproperty("ngClass", ctx_r1.relatedLabelClasses());
56093
56108
  i0.ɵɵadvance();
@@ -56099,7 +56114,7 @@ function FunnelMetricsVisualizationComponent_For_4_Conditional_23_Template(rf, c
56099
56114
  i0.ɵɵtext(3, " Related Metrics ");
56100
56115
  i0.ɵɵelementEnd();
56101
56116
  i0.ɵɵelementStart(4, "div", 19);
56102
- i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Template, 16, 13, "div", 20, _forTrack1$3);
56117
+ i0.ɵɵrepeaterCreate(5, FunnelMetricsVisualizationComponent_For_4_Conditional_23_For_6_Template, 18, 14, "div", 20, _forTrack1$3);
56103
56118
  i0.ɵɵelementEnd()();
56104
56119
  } if (rf & 2) {
56105
56120
  const stage_r1 = i0.ɵɵnextContext().$implicit;
@@ -56305,7 +56320,7 @@ class FunnelMetricsVisualizationComponent {
56305
56320
  return { title, markdown };
56306
56321
  }
56307
56322
  static { this.ɵfac = function FunnelMetricsVisualizationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FunnelMetricsVisualizationComponent)(); }; }
56308
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FunnelMetricsVisualizationComponent, selectors: [["symphiq-funnel-metrics-visualization"]], inputs: { viewMode: [1, "viewMode"], calculations: [1, "calculations"], pacingMetrics: [1, "pacingMetrics"] }, decls: 5, vars: 0, consts: [[1, "space-y-6"], [1, "space-y-3"], [1, "rounded-xl", "p-6", "border-2", "transition-all", "duration-200", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "mb-4"], [1, "flex-1"], [1, "flex", "items-center", "gap-2", "mb-1"], [1, "text-lg", "font-bold", 3, "ngClass"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "right", 1, "flex-shrink-0", "w-6", "h-6", "rounded-full", "flex", "items-center", "justify-center", "transition-colors", "self-center", 3, "ngClass", "libSymphiqTooltip"], [1, "flex", "items-center", "gap-3"], [3, "viewMode", "pacingPercentage", "status"], [1, "px-4", "py-2", "rounded-lg", "font-bold", "text-sm", 3, "ngClass"], [1, "grid", "grid-cols-3", "gap-4", "mb-4"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "my-4", 3, "ngClass"], [1, "space-y-2"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "mb-3", 3, "ngClass"], [1, "grid", "gap-2"], [1, "p-3", "rounded-lg", 3, "ngClass"], [1, "flex", "items-center", "justify-between", "mb-2"], [1, "text-sm", "font-semibold", "flex-1", 3, "ngClass"], [1, "flex", "items-center", "gap-2"], [1, "px-2", "py-1", "rounded", "text-xs", "font-bold", 3, "ngClass"], [1, "grid", "gap-2", "text-xs", 3, "ngClass"], [3, "ngClass"]], template: function FunnelMetricsVisualizationComponent_Template(rf, ctx) { if (rf & 1) {
56323
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FunnelMetricsVisualizationComponent, selectors: [["symphiq-funnel-metrics-visualization"]], inputs: { viewMode: [1, "viewMode"], calculations: [1, "calculations"], pacingMetrics: [1, "pacingMetrics"] }, decls: 5, vars: 0, consts: [[1, "space-y-6"], [1, "space-y-3"], [1, "rounded-xl", "p-6", "border-2", "transition-all", "duration-200", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "mb-4"], [1, "flex-1"], [1, "flex", "items-center", "gap-2", "mb-1"], [1, "text-lg", "font-bold", "leading-tight", "m-0", 3, "ngClass"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "right", 1, "flex-shrink-0", "w-6", "h-6", "rounded-full", "inline-flex", "items-center", "justify-center", "transition-colors", 3, "ngClass", "libSymphiqTooltip"], [1, "flex", "items-center", "gap-3"], [3, "viewMode", "pacingPercentage", "status"], [1, "px-4", "py-2", "rounded-lg", "font-bold", "text-sm", 3, "ngClass"], [1, "grid", "grid-cols-3", "gap-4", "mb-4"], [1, "text-xs", "font-medium", "uppercase", "tracking-wider", "mb-1", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "my-4", 3, "ngClass"], [1, "space-y-2"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "mb-3", 3, "ngClass"], [1, "grid", "gap-2"], [1, "p-3", "rounded-lg", 3, "ngClass"], [1, "flex", "items-center", "justify-between", "mb-2"], [1, "flex", "items-center", "gap-2", "flex-1"], [1, "text-sm", "font-semibold", "leading-tight", 3, "ngClass"], ["type", "button", "tooltipType", "markdown", "tooltipPosition", "right", 1, "flex-shrink-0", "w-5", "h-5", "rounded-full", "inline-flex", "items-center", "justify-center", "transition-colors", 3, "ngClass", "libSymphiqTooltip"], [1, "flex", "items-center", "gap-2"], [1, "px-2", "py-1", "rounded", "text-xs", "font-bold", 3, "ngClass"], [1, "grid", "gap-2", "text-xs", 3, "ngClass"], [3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3.5", "h-3.5"]], template: function FunnelMetricsVisualizationComponent_Template(rf, ctx) { if (rf & 1) {
56309
56324
  i0.ɵɵelementStart(0, "div", 0);
56310
56325
  i0.ɵɵelement(1, "symphiq-tooltip-container");
56311
56326
  i0.ɵɵelementStart(2, "div", 1);
@@ -56332,14 +56347,14 @@ class FunnelMetricsVisualizationComponent {
56332
56347
  <div class="flex items-start justify-between mb-4">
56333
56348
  <div class="flex-1">
56334
56349
  <div class="flex items-center gap-2 mb-1">
56335
- <h3 [ngClass]="stageTitleClasses()" class="text-lg font-bold">
56350
+ <h3 [ngClass]="stageTitleClasses()" class="text-lg font-bold leading-tight m-0">
56336
56351
  {{ getMetricTitle(stage.stageMetric) }}
56337
56352
  </h3>
56338
56353
  @if (stage.stageMetric.description) {
56339
56354
  <button
56340
56355
  type="button"
56341
56356
  [ngClass]="infoIconClasses()"
56342
- class="flex-shrink-0 w-6 h-6 rounded-full flex items-center justify-center transition-colors self-center"
56357
+ class="flex-shrink-0 w-6 h-6 rounded-full inline-flex items-center justify-center transition-colors"
56343
56358
  [libSymphiqTooltip]="getMarkdownTooltipContent(stage.stageMetric.description, getMetricTitle(stage.stageMetric))"
56344
56359
  tooltipType="markdown"
56345
56360
  tooltipPosition="right">
@@ -56404,9 +56419,24 @@ class FunnelMetricsVisualizationComponent {
56404
56419
  @for (metric of stage.relatedMetrics; track metric.calc.metric) {
56405
56420
  <div [ngClass]="relatedMetricCardClasses()" class="p-3 rounded-lg">
56406
56421
  <div class="flex items-center justify-between mb-2">
56407
- <p [ngClass]="relatedMetricNameClasses()" class="text-sm font-semibold flex-1">
56408
- {{ getMetricTitle(metric.calc) }}
56409
- </p>
56422
+ <div class="flex items-center gap-2 flex-1">
56423
+ <p [ngClass]="relatedMetricNameClasses()" class="text-sm font-semibold leading-tight">
56424
+ {{ getMetricTitle(metric.calc) }}
56425
+ </p>
56426
+ @if (metric.calc.description) {
56427
+ <button
56428
+ type="button"
56429
+ [ngClass]="infoIconClasses()"
56430
+ class="flex-shrink-0 w-5 h-5 rounded-full inline-flex items-center justify-center transition-colors"
56431
+ [libSymphiqTooltip]="getMarkdownTooltipContent(metric.calc.description, getMetricTitle(metric.calc))"
56432
+ tooltipType="markdown"
56433
+ tooltipPosition="right">
56434
+ <svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
56435
+ <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" />
56436
+ </svg>
56437
+ </button>
56438
+ }
56439
+ </div>
56410
56440
  <div class="flex items-center gap-2">
56411
56441
  @if (metric.pacingInfo) {
56412
56442
  <symphiq-pacing-status-badge
@@ -56445,7 +56475,7 @@ class FunnelMetricsVisualizationComponent {
56445
56475
  `
56446
56476
  }]
56447
56477
  }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], calculations: [{ type: i0.Input, args: [{ isSignal: true, alias: "calculations", required: false }] }], pacingMetrics: [{ type: i0.Input, args: [{ isSignal: true, alias: "pacingMetrics", required: false }] }] }); })();
56448
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber: 137 }); })();
56478
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FunnelMetricsVisualizationComponent, { className: "FunnelMetricsVisualizationComponent", filePath: "lib/components/revenue-calculator-dashboard/funnel-metrics-visualization.component.ts", lineNumber: 152 }); })();
56449
56479
 
56450
56480
  function StickySubmitBarComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
56451
56481
  i0.ɵɵelementStart(0, "div", 4);
@@ -57369,27 +57399,34 @@ function transformTrendUiDataToChartSeries(trendUiData, metricToExtract) {
57369
57399
  return [];
57370
57400
  const dateIndex = convertedData.dimensions?.indexOf(DimensionEnum.DATE);
57371
57401
  const monthIndex = convertedData.dimensions?.indexOf(DimensionEnum.MONTH);
57372
- if (dateIndex === undefined || dateIndex === -1) {
57373
- if (monthIndex === undefined || monthIndex === -1)
57374
- return [];
57375
- return extractSeriesFromConvertedData(convertedData, metricToExtract, 'Current Year')
57376
- ? [extractSeriesFromConvertedData(convertedData, metricToExtract, 'Current Year')]
57377
- : [];
57378
- }
57402
+ const dimensionIndex = dateIndex !== undefined && dateIndex !== -1
57403
+ ? dateIndex
57404
+ : (monthIndex !== undefined && monthIndex !== -1 ? monthIndex : -1);
57405
+ if (dimensionIndex === -1)
57406
+ return [];
57379
57407
  const currentYear = new Date().getFullYear();
57380
57408
  const priorYear = currentYear - 1;
57381
57409
  const priorYearPoints = [];
57382
57410
  const currentYearPoints = [];
57383
- console.log('[transformTrendUiDataToChartSeries] dimensions:', convertedData.dimensions);
57384
- console.log('[transformTrendUiDataToChartSeries] dateIndex:', dateIndex, 'monthIndex:', monthIndex);
57385
- console.log('[transformTrendUiDataToChartSeries] sample rows:', convertedData.rows?.slice(0, 3));
57386
57411
  convertedData.rows?.forEach((row) => {
57387
- const dateValue = row.dimensionValues?.[dateIndex];
57412
+ const dimValue = row.dimensionValues?.[dimensionIndex];
57388
57413
  const metricValue = parseFloat(row.metricValues?.[metricIndex] || '0');
57389
- if (dateValue) {
57390
- const year = parseInt(dateValue.substring(0, 4), 10);
57391
- const month = parseInt(dateValue.substring(4, 6) || dateValue.substring(5, 7), 10);
57392
- console.log('[transformTrendUiDataToChartSeries] dateValue:', dateValue, '→ year:', year, 'month:', month);
57414
+ if (dimValue) {
57415
+ let year;
57416
+ let month;
57417
+ if (dimValue.includes('-')) {
57418
+ const parts = dimValue.split('-');
57419
+ year = parseInt(parts[0], 10);
57420
+ month = parseInt(parts[1], 10);
57421
+ }
57422
+ else if (dimValue.length >= 6) {
57423
+ year = parseInt(dimValue.substring(0, 4), 10);
57424
+ month = parseInt(dimValue.substring(4, 6), 10);
57425
+ }
57426
+ else {
57427
+ month = parseInt(dimValue, 10);
57428
+ year = currentYear;
57429
+ }
57393
57430
  const point = {
57394
57431
  category: String(month),
57395
57432
  value: metricValue,
@@ -57406,13 +57443,13 @@ function transformTrendUiDataToChartSeries(trendUiData, metricToExtract) {
57406
57443
  const series = [];
57407
57444
  if (priorYearPoints.length > 0) {
57408
57445
  series.push({
57409
- name: 'Prior Year',
57446
+ name: String(priorYear),
57410
57447
  data: aggregateAndSortByMonth(priorYearPoints)
57411
57448
  });
57412
57449
  }
57413
57450
  if (currentYearPoints.length > 0) {
57414
57451
  series.push({
57415
- name: 'Current Year',
57452
+ name: String(currentYear),
57416
57453
  data: aggregateAndSortByMonth(currentYearPoints)
57417
57454
  });
57418
57455
  }