@visionaris-bruno/vs-echarts 9.0.4 → 9.0.7

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.
@@ -185,6 +185,7 @@ function defaultOptionsOverrides() {
185
185
  },
186
186
  };
187
187
  }
188
+ const defaultValueFormatter = (value) => `${value}`;
188
189
 
189
190
  // TODO: Exportar valores por defecto de vs-echarts.config.ts por este servicio y actualizar en logica de frontend.
190
191
  class VSEchartsConfigService {
@@ -241,7 +242,7 @@ class BaseEchartsComponent {
241
242
  /** Resolver de colores dinámico (Callback) */
242
243
  colorResolver;
243
244
  /** Formateador de valores para etiquetas y tooltips */
244
- valueFormatter = (value) => value.toLocaleString();
245
+ valueFormatter = defaultValueFormatter;
245
246
  chartClick = new EventEmitter();
246
247
  /** Subject para debouncing de actualizaciones. ReplaySubject asegura no perder el primer renderizado. */
247
248
  updateSubject = new ReplaySubject(1);
@@ -683,7 +684,7 @@ function getCellValue(val) {
683
684
  /**
684
685
  * Formatter generator for 'item' trigger strategy in tooltips.
685
686
  */
686
- function getItemTooltipFormatter(data, formatCellValue, opts) {
687
+ function getItemTooltipFormatter(data, valueFormatter, opts) {
687
688
  return (params) => {
688
689
  let title = '', subtitle = '', valFormatted = '', percentVal = '';
689
690
  const showSerieName = opts?.showSerieName ?? true;
@@ -694,15 +695,16 @@ function getItemTooltipFormatter(data, formatCellValue, opts) {
694
695
  return '';
695
696
  const rawValue = (row && typeof row === 'object') ? row[dimensionName] : params.value;
696
697
  const serieName = showSerieName ? `${params.marker} ${params.seriesName}<br/ >` : '';
697
- title = params.name || (row && typeof row === 'object' ? row.category : '');
698
+ const categoryName = params.name || (row && typeof row === 'object' ? row.category : '');
699
+ title = categoryName;
698
700
  subtitle = serieName;
699
- valFormatted = formatCellValue(Number(rawValue ?? 0), dimensionName);
700
- // pie/funnel series
701
+ valFormatted = valueFormatter(Number(rawValue ?? 0), dimensionName);
702
+ // pie/funnel/ring series
701
703
  if (params.percent != undefined) {
702
704
  percentVal = ` (${params.percent}%)`;
703
- if (data.dimensions.length <= 2) {
704
- subtitle = '';
705
- }
705
+ // invertir titulo y subtitulo
706
+ title = `${params.seriesName}`;
707
+ subtitle = `${params.marker} ${categoryName}</br>`;
706
708
  }
707
709
  // sankey
708
710
  if (params.dataType != undefined) {
@@ -712,11 +714,11 @@ function getItemTooltipFormatter(data, formatCellValue, opts) {
712
714
  const sourceName = params.data.source.split('___')[0];
713
715
  const targetName = params.data.target.split('___')[0];
714
716
  title = `${sourceName} &rarr; ${targetName}`;
715
- valFormatted = formatCellValue(Number(params.value ?? 0), dimensionName);
717
+ valFormatted = valueFormatter(Number(params.value ?? 0), dimensionName);
716
718
  }
717
719
  else if (dataType === 'node') {
718
720
  title = params.name.split('___')[0];
719
- valFormatted = formatCellValue(Number(params.value ?? 0), dimensionName);
721
+ valFormatted = valueFormatter(Number(params.value ?? 0), dimensionName);
720
722
  }
721
723
  }
722
724
  // sunburst treemap
@@ -735,7 +737,7 @@ function getItemTooltipFormatter(data, formatCellValue, opts) {
735
737
  /**
736
738
  * Formatter generator for 'axis' trigger strategy in tooltips.
737
739
  */
738
- function getAxisTooltipFormatter(data, formatCellValue, opts) {
740
+ function getAxisTooltipFormatter(data, valueFormatter, opts) {
739
741
  return (params) => {
740
742
  if (!params)
741
743
  return '';
@@ -753,7 +755,7 @@ function getAxisTooltipFormatter(data, formatCellValue, opts) {
753
755
  continue;
754
756
  const itemRow = item.value;
755
757
  const rawValue = (itemRow && typeof itemRow === 'object') ? itemRow[dimensionName] : item.value;
756
- const valFormatted = formatCellValue(Number(rawValue ?? 0), dimensionName);
758
+ const valFormatted = valueFormatter(Number(rawValue ?? 0), dimensionName);
757
759
  html += `${item.marker} ${item.seriesName}: <b>${valFormatted}</b><br/>`;
758
760
  }
759
761
  return html;
@@ -762,10 +764,10 @@ function getAxisTooltipFormatter(data, formatCellValue, opts) {
762
764
  /**
763
765
  * Unified tooltip formatter generator that selects the appropriate strategy based on the trigger.
764
766
  */
765
- function getTooltipFormatter(trigger, data, formatCellValue, opts) {
767
+ function getTooltipFormatter(trigger, data, valueFormatter, opts) {
766
768
  return trigger === 'axis'
767
- ? getAxisTooltipFormatter(data, formatCellValue, opts)
768
- : getItemTooltipFormatter(data, formatCellValue, opts);
769
+ ? getAxisTooltipFormatter(data, valueFormatter, opts)
770
+ : getItemTooltipFormatter(data, valueFormatter, opts);
769
771
  }
770
772
  function getCommons(opts) {
771
773
  const palette = opts?.palette ?? getDefaultPalette();
@@ -852,7 +854,7 @@ function getTreeDepth(nodes) {
852
854
  */
853
855
  class RingBuilder {
854
856
  baseProduct;
855
- valueFormatter = (value) => value.toLocaleString();
857
+ valueFormatter = defaultValueFormatter;
856
858
  palette = [];
857
859
  colorResolver;
858
860
  result = {};
@@ -948,10 +950,10 @@ class RingBuilder {
948
950
  }];
949
951
  }
950
952
  addTooltip(data, overrides) {
951
- merge(overrides, {
952
- formatter: getTooltipFormatter(overrides.trigger, data, this.formatCellValue.bind(this)),
953
- });
954
- const tooltip = getTooltipOptions(overrides);
953
+ const tooltipOptsOverrides = {};
954
+ tooltipOptsOverrides.formatter = getTooltipFormatter(overrides.trigger, data, this.valueFormatter);
955
+ merge(tooltipOptsOverrides, overrides);
956
+ const tooltip = getTooltipOptions(tooltipOptsOverrides);
955
957
  this.result.tooltip = tooltip;
956
958
  }
957
959
  addLegend() {
@@ -984,15 +986,12 @@ class RingBuilder {
984
986
  getResult() {
985
987
  return this.result;
986
988
  }
987
- formatCellValue(value, key) {
988
- return this.valueFormatter(value, key);
989
- }
990
989
  }
991
990
 
992
991
  class BoxPlotBuilder {
993
992
  baseProduct;
994
993
  translateService;
995
- valueFormatter = (value, key) => value.toLocaleString();
994
+ valueFormatter = defaultValueFormatter;
996
995
  palette = [];
997
996
  // TODO: Hay que implementar un valor por defecto.
998
997
  colorResolver;
@@ -1042,7 +1041,9 @@ class BoxPlotBuilder {
1042
1041
  };
1043
1042
  }
1044
1043
  ;
1045
- const resumen5NumerosXCat = data.source.map(s => {
1044
+ const resumen5NumerosXCat = data.source
1045
+ .reverse() // reverse para no modificar el orden original
1046
+ .map(s => {
1046
1047
  // filtro category para excluirlo de la lista de métricas
1047
1048
  const values = Object.entries(s)
1048
1049
  .filter(([key, val]) => key !== 'category' && !isNaN(val))
@@ -1208,9 +1209,8 @@ class BoxPlotBuilder {
1208
1209
  */
1209
1210
  class EChartBuilder {
1210
1211
  baseProduct = undefined;
1211
- valueFormatter = (value) => value.toLocaleString();
1212
+ valueFormatter = defaultValueFormatter;
1212
1213
  palette = [];
1213
- // TODO: Hay que implementar un valor por defecto.
1214
1214
  colorResolver;
1215
1215
  result = {};
1216
1216
  constructor(baseProduct) {
@@ -1263,19 +1263,21 @@ class EChartBuilder {
1263
1263
  const dynamicOverrides = {
1264
1264
  name: friendlyName,
1265
1265
  encode,
1266
- label: {
1267
- formatter: (params) => {
1268
- const row = params.value;
1269
- const rawValue = (row && typeof row === 'object') ? row[dimKey] : params.value;
1270
- return this.formatCellValue(Number(rawValue ?? 0), dimKey);
1271
- }
1272
- }
1273
1266
  };
1274
1267
  const seriesOption = merge$1(dynamicOverrides, overrides);
1275
1268
  // Inyectar el resolver de color si existe
1276
1269
  if (this.colorResolver && seriesOption.itemStyle) {
1277
1270
  seriesOption.itemStyle.color = this.colorResolver;
1278
1271
  }
1272
+ // Inyectar el formatter de etiquetas
1273
+ if (seriesOption.label && this.valueFormatter != undefined) {
1274
+ const valueFormatter = this.valueFormatter;
1275
+ seriesOption.label.formatter = (params) => {
1276
+ const row = params.value;
1277
+ const rawValue = (row && typeof row === 'object') ? row[dimKey] : params.value;
1278
+ return valueFormatter(Number(rawValue ?? 0), dimKey);
1279
+ };
1280
+ }
1279
1281
  return seriesOption;
1280
1282
  });
1281
1283
  this.result.series = series;
@@ -1286,11 +1288,11 @@ class EChartBuilder {
1286
1288
  * @param overrides
1287
1289
  */
1288
1290
  addTooltip(data, overrides) {
1289
- // inyecto formateador a overrides de tooltip
1290
- merge$1(overrides, {
1291
- formatter: getTooltipFormatter(overrides.trigger, data, this.formatCellValue.bind(this)),
1292
- });
1293
- const tooltip = getTooltipOptions(overrides);
1291
+ const optsOverrides = {};
1292
+ // inyecto formateador personalizado de tooltip
1293
+ optsOverrides.formatter = getTooltipFormatter(overrides.trigger, data, this.valueFormatter.bind(this));
1294
+ merge$1(optsOverrides, overrides);
1295
+ const tooltip = getTooltipOptions(optsOverrides);
1294
1296
  this.result.tooltip = tooltip;
1295
1297
  }
1296
1298
  addPolar() {
@@ -1385,12 +1387,6 @@ class EChartBuilder {
1385
1387
  return this.result;
1386
1388
  }
1387
1389
  ;
1388
- /**
1389
- * Formatea un valor utilizando el callback inyectado.
1390
- */
1391
- formatCellValue(value, key) {
1392
- return this.valueFormatter(value, key);
1393
- }
1394
1390
  // Setters
1395
1391
  /**
1396
1392
  * Permite inyectar un formateador de valores externo.
@@ -1439,7 +1435,7 @@ class EChartBuilder {
1439
1435
  */
1440
1436
  class PieBuilder {
1441
1437
  baseProduct;
1442
- valueFormatter = (value) => value.toLocaleString();
1438
+ valueFormatter = defaultValueFormatter;
1443
1439
  palette = [];
1444
1440
  colorResolver;
1445
1441
  result = {};
@@ -1551,10 +1547,10 @@ class PieBuilder {
1551
1547
  this.result.series = series;
1552
1548
  }
1553
1549
  addTooltip(data, overrides) {
1554
- merge(overrides, {
1555
- formatter: getTooltipFormatter(overrides.trigger, data, this.formatCellValue.bind(this)),
1556
- });
1557
- const tooltip = getTooltipOptions(overrides);
1550
+ const tooltipOptsOverrides = {};
1551
+ tooltipOptsOverrides.formatter = getTooltipFormatter(overrides.trigger, data, this.valueFormatter);
1552
+ merge(tooltipOptsOverrides, overrides);
1553
+ const tooltip = getTooltipOptions(tooltipOptsOverrides);
1558
1554
  this.result.tooltip = tooltip;
1559
1555
  }
1560
1556
  addLegend() {
@@ -1588,9 +1584,6 @@ class PieBuilder {
1588
1584
  getResult() {
1589
1585
  return this.result;
1590
1586
  }
1591
- formatCellValue(value, key) {
1592
- return this.valueFormatter(value, key);
1593
- }
1594
1587
  }
1595
1588
 
1596
1589
  /**
@@ -1600,7 +1593,7 @@ class PieBuilder {
1600
1593
  */
1601
1594
  class FunnelBuilder {
1602
1595
  baseProduct;
1603
- valueFormatter = (value) => value.toLocaleString();
1596
+ valueFormatter = defaultValueFormatter;
1604
1597
  palette = [];
1605
1598
  colorResolver;
1606
1599
  result = {};
@@ -1655,10 +1648,12 @@ class FunnelBuilder {
1655
1648
  this.result.series = seriesOption;
1656
1649
  }
1657
1650
  addTooltip(data, overrides) {
1658
- merge(overrides, {
1659
- formatter: getTooltipFormatter(overrides.trigger, data, this.formatCellValue.bind(this)),
1660
- });
1661
- const tooltip = getTooltipOptions(overrides);
1651
+ const tooltipOptsOverrides = {};
1652
+ if (this.valueFormatter != undefined) {
1653
+ tooltipOptsOverrides.formatter = getTooltipFormatter(overrides.trigger, data, this.valueFormatter);
1654
+ }
1655
+ merge(tooltipOptsOverrides, overrides);
1656
+ const tooltip = getTooltipOptions(tooltipOptsOverrides);
1662
1657
  this.result.tooltip = tooltip;
1663
1658
  }
1664
1659
  addLegend() {
@@ -1692,14 +1687,11 @@ class FunnelBuilder {
1692
1687
  getResult() {
1693
1688
  return this.result;
1694
1689
  }
1695
- formatCellValue(value, key) {
1696
- return this.valueFormatter(value, key);
1697
- }
1698
1690
  }
1699
1691
 
1700
1692
  class SunburstBuilder {
1701
1693
  baseProduct;
1702
- valueFormatter = (value) => value.toLocaleString();
1694
+ valueFormatter = defaultValueFormatter;
1703
1695
  palette = [];
1704
1696
  colorResolver;
1705
1697
  result = {};
@@ -1738,10 +1730,10 @@ class SunburstBuilder {
1738
1730
  this.result.series = serie;
1739
1731
  }
1740
1732
  addTooltip(data, overrides) {
1741
- merge$1(overrides, {
1742
- formatter: getTooltipFormatter(overrides.trigger || 'item', data, this.valueFormatter),
1743
- });
1744
- const tooltip = getTooltipOptions(overrides);
1733
+ const tooltipOptsOverrides = {};
1734
+ tooltipOptsOverrides.formatter = getTooltipFormatter(overrides.trigger || 'item', data, this.valueFormatter);
1735
+ merge$1(tooltipOptsOverrides, overrides);
1736
+ const tooltip = getTooltipOptions(tooltipOptsOverrides);
1745
1737
  this.result.tooltip = tooltip;
1746
1738
  }
1747
1739
  addCommons() {
@@ -1798,7 +1790,7 @@ class SunburstBuilder {
1798
1790
  */
1799
1791
  class SankeyBuilder {
1800
1792
  baseProduct;
1801
- valueFormatter = (value) => value.toLocaleString();
1793
+ valueFormatter = defaultValueFormatter;
1802
1794
  palette = [];
1803
1795
  colorResolver;
1804
1796
  result = {};
@@ -1902,10 +1894,10 @@ class SankeyBuilder {
1902
1894
  this.result.series = serie;
1903
1895
  }
1904
1896
  addTooltip(data, overrides) {
1905
- merge$1(overrides, {
1906
- formatter: getTooltipFormatter(overrides.trigger || 'item', data, this.valueFormatter),
1907
- });
1908
- const tooltip = getTooltipOptions(overrides);
1897
+ const tooltipOptsOverrides = {};
1898
+ tooltipOptsOverrides.formatter = getTooltipFormatter(overrides.trigger || 'item', data, this.valueFormatter);
1899
+ merge$1(tooltipOptsOverrides, overrides);
1900
+ const tooltip = getTooltipOptions(tooltipOptsOverrides);
1909
1901
  this.result.tooltip = tooltip;
1910
1902
  }
1911
1903
  addPolar() { }
@@ -3016,7 +3008,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
3016
3008
  ], template: "<div\n class=\"echarts-container\"\n echarts\n [options]=\"{}\"\n [initOpts]=\"initOptions\"\n [autoResize]=\"true\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n", styles: [".echarts-container{width:100%;height:100%;position:relative}\n"] }]
3017
3009
  }] });
3018
3010
 
3019
- // Interfaces de Inputs de Base EChart Component //
3011
+ // Interfaces de Inputs de Base EChart Component //
3012
+ // TopLevelFormatterParams
3020
3013
 
3021
3014
  ;
3022
3015
  ;