@spteck/fluentui-react-charts 1.1.1 → 1.1.3

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.
@@ -769,6 +769,18 @@ function LegendContainer(props) {
769
769
  }))))));
770
770
  }
771
771
 
772
+ var pallete1 = ['#289CEF', '#f05075ff', '#45B0A2', '#a4262c', '#F49E31', '#A366FF', '#FCCE51', '#062843ff', '#7f7f82ff', '#376102ff', '#4e79a7'];
773
+ var pallete2 = ['#f28e2c', '#e15759', '#76b7b2', '#59a14f', '#edc949', '#af7aa1', '#ff9da7', '#9c755f', '#bab0ab', '#8cd17d', '#b6992d', '#d37295', '#fabfd2', '#79706e'];
774
+ var getPalleteById = function getPalleteById(id) {
775
+ switch (id) {
776
+ case 1:
777
+ return pallete1;
778
+ case 2:
779
+ return pallete2;
780
+ default:
781
+ return pallete1;
782
+ }
783
+ };
772
784
  /**
773
785
  * Lightens a given hex color by a percentage amount (0 to 1).
774
786
  */
@@ -786,10 +798,10 @@ var lightenColor = function lightenColor(hex, amount) {
786
798
  };
787
799
  return "#" + toHex(r) + toHex(g) + toHex(b);
788
800
  };
789
- var getFluentPalette = function getFluentPalette(theme) {
801
+ var getFluentPalette = function getFluentPalette(theme, palleteId) {
790
802
  // Check if theme is dark by looking at global color tokens
791
803
  var isDark = theme.colorNeutralBackground1.startsWith('#1') || theme.colorNeutralBackground1 === '#000000';
792
- return isDark ? ['#2899f5', '#ff8c00', '#32cd32', '#f06b71', '#c390f2', '#00b7c3', '#ffb900', '#b4a0ff', '#60cdff', '#92c353'] : ['#289CEF', '#f05075ff', '#45B0A2', '#a4262c', '#F49E31', '#A366FF', '#FCCE51', '#062843ff', '#7f7f82ff', '#376102ff'];
804
+ return isDark ? ['#2899f5', '#ff8c00', '#32cd32', '#f06b71', '#c390f2', '#00b7c3', '#ffb900', '#b4a0ff', '#60cdff', '#92c353'] : [].concat(getPalleteById(palleteId || 1));
793
805
  };
794
806
  /**
795
807
  * Returns animation configuration for instant interactions.
@@ -811,7 +823,12 @@ var getInstantInteractionAnimations = function getInstantInteractionAnimations()
811
823
  * Smart Fluent tooltip generator with chart-type awareness.
812
824
  * Optimized for fast performance with reduced animation delays.
813
825
  */
814
- function createFluentTooltip(theme) {
826
+ function createFluentTooltip(theme,
827
+ // optional options: allow a global extraField (string or function) that will be
828
+ // appended to the default label. If a dataset supplies `extraField` (string or
829
+ // array indexed by data point) that value will be used instead of the global
830
+ // option. Example: value (x%) where x% is the extraField value.
831
+ opts) {
815
832
  var fontFamily = theme.fontFamilyBase;
816
833
  var fontSize = parseInt(theme.fontSizeBase200.replace('px', '')) || 14;
817
834
  var tooltipBg = theme.colorNeutralBackground1;
@@ -824,29 +841,45 @@ function createFluentTooltip(theme) {
824
841
  return (_context$0$label = (_context$ = context[0]) == null ? void 0 : _context$.label) != null ? _context$0$label : '';
825
842
  },
826
843
  label: function label(item) {
827
- var datasetLabel = 'label' in item.dataset && typeof item.dataset.label === 'string' ? item.dataset.label : 'Value';
844
+ var dataset = item.dataset;
845
+ var datasetLabel = 'label' in dataset && typeof dataset.label === 'string' ? dataset.label : 'Value';
828
846
  var raw = item.raw;
847
+ // determine extraField value, precedence: dataset.extraField > opts.extraField
848
+ var extra;
849
+ if (dataset && dataset.extraField !== undefined) {
850
+ var _item$dataIndex;
851
+ var ef = dataset.extraField;
852
+ // dataset extraField can be array (per-data) or single value
853
+ if (Array.isArray(ef)) extra = ef[(_item$dataIndex = item.dataIndex) != null ? _item$dataIndex : 0];else extra = ef;
854
+ } else if (opts && opts.extraField) {
855
+ if (typeof opts.extraField === 'function') {
856
+ extra = opts.extraField(item);
857
+ } else {
858
+ extra = opts.extraField;
859
+ }
860
+ }
861
+ var suffix = extra !== undefined && extra !== null ? " (" + String(extra) + ")" : '';
829
862
  // Bubble format { x, y, r }
830
863
  if (typeof raw === 'object' && raw !== null && 'x' in raw && 'y' in raw && 'r' in raw) {
831
864
  var x = raw.x,
832
865
  y = raw.y,
833
866
  r = raw.r;
834
- return datasetLabel + " \u2014 x: " + x + ", y: " + y + ", r: " + r;
867
+ return datasetLabel + " \u2014 x: " + x + ", y: " + y + ", r: " + r + suffix;
835
868
  }
836
869
  // Scatter format { x, y }
837
870
  if (typeof raw === 'object' && raw !== null && 'x' in raw && 'y' in raw) {
838
871
  var _x = raw.x,
839
872
  _y = raw.y;
840
- return datasetLabel + " \u2014 x: " + _x + ", y: " + _y;
873
+ return datasetLabel + " \u2014 x: " + _x + ", y: " + _y + suffix;
841
874
  }
842
875
  // Floating bar [min, max]
843
876
  if (Array.isArray(raw) && raw.length === 2) {
844
877
  var min = raw[0],
845
878
  max = raw[1];
846
- return datasetLabel + ": " + min + " \u2013 " + max;
879
+ return datasetLabel + ": " + min + " \u2013 " + max + suffix;
847
880
  }
848
881
  // Default: single number or string
849
- return datasetLabel + ": " + raw;
882
+ return datasetLabel + ": " + raw + suffix;
850
883
  },
851
884
  beforeTitle: function beforeTitle() {
852
885
  return '';
@@ -868,13 +901,13 @@ function createFluentTooltip(theme) {
868
901
  },
869
902
  // Provide sensible defaults for tooltip label colors using dataset colors when available
870
903
  labelColor: function labelColor(item) {
871
- var _item$dataIndex, _item$dataIndex2, _ref, _ref2;
904
+ var _item$dataIndex2, _item$dataIndex3, _ref, _ref2;
872
905
  var ds = item.dataset || {};
873
906
  // dataset colors can be a single value or an array per data point
874
907
  var bg = ds.backgroundColor;
875
- if (Array.isArray(bg)) bg = bg[(_item$dataIndex = item.dataIndex) != null ? _item$dataIndex : 0];
908
+ if (Array.isArray(bg)) bg = bg[(_item$dataIndex2 = item.dataIndex) != null ? _item$dataIndex2 : 0];
876
909
  var border = ds.borderColor;
877
- if (Array.isArray(border)) border = border[(_item$dataIndex2 = item.dataIndex) != null ? _item$dataIndex2 : 0];
910
+ if (Array.isArray(border)) border = border[(_item$dataIndex3 = item.dataIndex) != null ? _item$dataIndex3 : 0];
878
911
  var backgroundColor = (_ref = bg != null ? bg : ds.pointBackgroundColor) != null ? _ref : tooltipBg;
879
912
  var borderColorOut = (_ref2 = border != null ? border : ds.pointBorderColor) != null ? _ref2 : borderColor;
880
913
  return {
@@ -1059,7 +1092,10 @@ function AreaChart(_ref) {
1059
1092
  _ref$theme = _ref.theme,
1060
1093
  theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
1061
1094
  _ref$stacked = _ref.stacked,
1062
- stacked = _ref$stacked === void 0 ? false : _ref$stacked;
1095
+ stacked = _ref$stacked === void 0 ? false : _ref$stacked,
1096
+ renderTooltipLabel = _ref.renderTooltipLabel,
1097
+ _ref$paletteId = _ref.paletteId,
1098
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
1063
1099
  var _useState = React.useState(function () {
1064
1100
  var _data$;
1065
1101
  return data.length > 1 ? data.map(function (s) {
@@ -1075,13 +1111,14 @@ function AreaChart(_ref) {
1075
1111
  createFluentTooltip = _useChartUtils.createFluentTooltip,
1076
1112
  getInstantInteractionAnimations = _useChartUtils.getInstantInteractionAnimations;
1077
1113
  var seriesColors = React.useMemo(function () {
1114
+ var palette = getFluentPalette(theme, paletteId);
1078
1115
  return data.reduce(function (acc, series, idx) {
1079
- var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
1116
+ var base = palette[idx % palette.length];
1080
1117
  var color = lightenColor(base, 0.3);
1081
1118
  acc[series.label] = color;
1082
1119
  return acc;
1083
1120
  }, {});
1084
- }, [data, theme]);
1121
+ }, [data, getFluentPalette, lightenColor, theme, paletteId]);
1085
1122
  var toggleSeries = function toggleSeries(label) {
1086
1123
  setVisibleSeries(function (prev) {
1087
1124
  var isVisible = prev.includes(label);
@@ -1166,7 +1203,9 @@ function AreaChart(_ref) {
1166
1203
  legend: {
1167
1204
  display: false
1168
1205
  },
1169
- tooltip: createFluentTooltip(theme)
1206
+ tooltip: createFluentTooltip(theme, {
1207
+ extraField: renderTooltipLabel
1208
+ })
1170
1209
  },
1171
1210
  scales: {
1172
1211
  x: {
@@ -1223,7 +1262,10 @@ function BarChart(_ref) {
1223
1262
  showDatalabels = _ref$showDatalabels === void 0 ? false : _ref$showDatalabels,
1224
1263
  _ref$stacked = _ref.stacked,
1225
1264
  stacked = _ref$stacked === void 0 ? false : _ref$stacked,
1226
- theme = _ref.theme;
1265
+ theme = _ref.theme,
1266
+ renderTooltipLabel = _ref.renderTooltipLabel,
1267
+ _ref$paletteId = _ref.paletteId,
1268
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
1227
1269
  var _useState = React.useState(function () {
1228
1270
  var _data$;
1229
1271
  return data.length > 1 ? data.map(function (s) {
@@ -1239,13 +1281,14 @@ function BarChart(_ref) {
1239
1281
  getInstantInteractionAnimations = _useChartUtils.getInstantInteractionAnimations;
1240
1282
  var styles = useGraphGlobalStyles();
1241
1283
  var seriesColors = React.useMemo(function () {
1284
+ var palette = getFluentPalette(theme, paletteId);
1242
1285
  return data.reduce(function (acc, series, idx) {
1243
- var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
1286
+ var base = palette[idx % palette.length];
1244
1287
  var color = lightenColor(base, 0.3);
1245
1288
  acc[series.label] = color;
1246
1289
  return acc;
1247
1290
  }, {});
1248
- }, [data]);
1291
+ }, [data, getFluentPalette, lightenColor, theme, paletteId]);
1249
1292
  var toggleSeries = function toggleSeries(label) {
1250
1293
  setVisibleSeries(function (prev) {
1251
1294
  var isVisible = prev.includes(label);
@@ -1330,7 +1373,9 @@ function BarChart(_ref) {
1330
1373
  legend: {
1331
1374
  display: false
1332
1375
  },
1333
- tooltip: createFluentTooltip(theme)
1376
+ tooltip: createFluentTooltip(theme, {
1377
+ extraField: renderTooltipLabel
1378
+ })
1334
1379
  },
1335
1380
  scales: _extends({
1336
1381
  x: {
@@ -1415,7 +1460,10 @@ function BarHorizontalChart(_ref) {
1415
1460
  _ref$showDatalabels = _ref.showDatalabels,
1416
1461
  showDatalabels = _ref$showDatalabels === void 0 ? false : _ref$showDatalabels,
1417
1462
  title = _ref.title,
1418
- theme = _ref.theme;
1463
+ theme = _ref.theme,
1464
+ renderTooltipLabel = _ref.renderTooltipLabel,
1465
+ _ref$paletteId = _ref.paletteId,
1466
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
1419
1467
  var _useState = React.useState(function () {
1420
1468
  var _data$;
1421
1469
  return data.length > 1 ? data.map(function (s) {
@@ -1431,13 +1479,14 @@ function BarHorizontalChart(_ref) {
1431
1479
  createFluentTooltip = _useChartUtils.createFluentTooltip,
1432
1480
  getInstantInteractionAnimations = _useChartUtils.getInstantInteractionAnimations;
1433
1481
  var seriesColors = React.useMemo(function () {
1482
+ var palette = getFluentPalette(theme, paletteId);
1434
1483
  return data.reduce(function (acc, series, idx) {
1435
- var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
1484
+ var base = palette[idx % palette.length];
1436
1485
  var color = lightenColor(base, 0.3);
1437
1486
  acc[series.label] = color;
1438
1487
  return acc;
1439
1488
  }, {});
1440
- }, [data]);
1489
+ }, [data, getFluentPalette, lightenColor, theme, paletteId]);
1441
1490
  var toggleSeries = function toggleSeries(label) {
1442
1491
  setVisibleSeries(function (prev) {
1443
1492
  var isVisible = prev.includes(label);
@@ -1519,7 +1568,9 @@ function BarHorizontalChart(_ref) {
1519
1568
  legend: {
1520
1569
  display: false
1521
1570
  },
1522
- tooltip: createFluentTooltip(theme)
1571
+ tooltip: createFluentTooltip(theme, {
1572
+ extraField: renderTooltipLabel
1573
+ })
1523
1574
  },
1524
1575
  scales: {
1525
1576
  x: {
@@ -1576,8 +1627,11 @@ function BubbleChart(_ref) {
1576
1627
  getRadius = _ref.getRadius,
1577
1628
  showDataLabels = _ref.showDataLabels,
1578
1629
  title = _ref.title,
1630
+ renderTooltipLabel = _ref.renderTooltipLabel,
1579
1631
  _ref$theme = _ref.theme,
1580
- theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
1632
+ theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
1633
+ _ref$paletteId = _ref.paletteId,
1634
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
1581
1635
  var _useState = React.useState(function () {
1582
1636
  var _data$;
1583
1637
  return data.length > 1 ? data.map(function (s) {
@@ -1593,13 +1647,14 @@ function BubbleChart(_ref) {
1593
1647
  getInstantInteractionAnimations = _useChartUtils.getInstantInteractionAnimations;
1594
1648
  var styles = useGraphGlobalStyles();
1595
1649
  var seriesColors = React.useMemo(function () {
1650
+ var palette = getFluentPalette(theme, paletteId);
1596
1651
  return data.reduce(function (acc, series, idx) {
1597
- var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
1652
+ var base = palette[idx % palette.length];
1598
1653
  var color = lightenColor(base, 0.3);
1599
1654
  acc[series.label] = color;
1600
1655
  return acc;
1601
1656
  }, {});
1602
- }, [data, theme]);
1657
+ }, [data, getFluentPalette, lightenColor, theme, paletteId]);
1603
1658
  var toggleSeries = function toggleSeries(label) {
1604
1659
  setVisibleSeries(function (prev) {
1605
1660
  var isVisible = prev.includes(label);
@@ -1675,7 +1730,9 @@ function BubbleChart(_ref) {
1675
1730
  legend: {
1676
1731
  display: false
1677
1732
  },
1678
- tooltip: createFluentTooltip(theme)
1733
+ tooltip: createFluentTooltip(theme, {
1734
+ extraField: renderTooltipLabel
1735
+ })
1679
1736
  },
1680
1737
  scales: {
1681
1738
  x: {
@@ -1735,7 +1792,10 @@ function ComboChart(_ref) {
1735
1792
  _ref$theme = _ref.theme,
1736
1793
  theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
1737
1794
  _ref$axesMode = _ref.axesMode,
1738
- axesMode = _ref$axesMode === void 0 ? 'legacy' : _ref$axesMode;
1795
+ axesMode = _ref$axesMode === void 0 ? 'legacy' : _ref$axesMode,
1796
+ renderTooltipLabel = _ref.renderTooltipLabel,
1797
+ _ref$paletteId = _ref.paletteId,
1798
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
1739
1799
  var _useState = React.useState(function () {
1740
1800
  return data.map(function (s) {
1741
1801
  return s.label;
@@ -1750,12 +1810,13 @@ function ComboChart(_ref) {
1750
1810
  createFluentTooltip = _useChartUtils.createFluentTooltip,
1751
1811
  getInstantInteractionAnimations = _useChartUtils.getInstantInteractionAnimations;
1752
1812
  var seriesColors = React.useMemo(function () {
1813
+ var palette = getFluentPalette(theme, paletteId);
1753
1814
  return data.reduce(function (acc, series, idx) {
1754
- var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
1815
+ var base = palette[idx % palette.length];
1755
1816
  acc[series.label] = lightenColor(base, 0.3);
1756
1817
  return acc;
1757
1818
  }, {});
1758
- }, [data, theme]);
1819
+ }, [data, getFluentPalette, lightenColor, theme, paletteId]);
1759
1820
  var toggleSeries = function toggleSeries(label) {
1760
1821
  setVisibleSeries(function (prev) {
1761
1822
  var isVisible = prev.includes(label);
@@ -1854,7 +1915,9 @@ function ComboChart(_ref) {
1854
1915
  legend: {
1855
1916
  display: false
1856
1917
  },
1857
- tooltip: createFluentTooltip(theme)
1918
+ tooltip: createFluentTooltip(theme, {
1919
+ extraField: renderTooltipLabel
1920
+ })
1858
1921
  }
1859
1922
  });
1860
1923
  if (axesMode === 'dual') {
@@ -1989,7 +2052,10 @@ function DoughnutChart(_ref) {
1989
2052
  _ref$showDataLabels = _ref.showDataLabels,
1990
2053
  showDataLabels = _ref$showDataLabels === void 0 ? true : _ref$showDataLabels,
1991
2054
  _ref$theme = _ref.theme,
1992
- theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
2055
+ theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
2056
+ renderTooltipLabel = _ref.renderTooltipLabel,
2057
+ _ref$paletteId = _ref.paletteId,
2058
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
1993
2059
  var styles = useGraphGlobalStyles();
1994
2060
  var _useChartUtils = useChartUtils(theme),
1995
2061
  lightenColor = _useChartUtils.lightenColor,
@@ -2019,7 +2085,7 @@ function DoughnutChart(_ref) {
2019
2085
  }, [data, getLabel, getValue]);
2020
2086
  var _useMemo = React.useMemo(function () {
2021
2087
  var allLabels = Array.from(valueMap.keys());
2022
- var palette = getFluentPalette(theme);
2088
+ var palette = getFluentPalette(theme, paletteId);
2023
2089
  var colors = allLabels.map(function (_, i) {
2024
2090
  return lightenColor(palette[i % palette.length], 0.3);
2025
2091
  });
@@ -2027,7 +2093,7 @@ function DoughnutChart(_ref) {
2027
2093
  allLabels: allLabels,
2028
2094
  colors: colors
2029
2095
  };
2030
- }, [valueMap, getFluentPalette, theme, lightenColor]),
2096
+ }, [valueMap, getFluentPalette, theme, lightenColor, paletteId]),
2031
2097
  allLabels = _useMemo.allLabels,
2032
2098
  colors = _useMemo.colors;
2033
2099
  var _useMemo2 = React.useMemo(function () {
@@ -2078,7 +2144,9 @@ function DoughnutChart(_ref) {
2078
2144
  legend: {
2079
2145
  display: false
2080
2146
  },
2081
- tooltip: createFluentTooltip(theme),
2147
+ tooltip: createFluentTooltip(theme, {
2148
+ extraField: renderTooltipLabel
2149
+ }),
2082
2150
  title: {
2083
2151
  display: !!title,
2084
2152
  text: title,
@@ -2133,7 +2201,10 @@ function FloatingBarChart(_ref) {
2133
2201
  _ref$showDataLabels = _ref.showDataLabels,
2134
2202
  showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
2135
2203
  _ref$theme = _ref.theme,
2136
- theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
2204
+ theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
2205
+ renderTooltipLabel = _ref.renderTooltipLabel,
2206
+ _ref$paletteId = _ref.paletteId,
2207
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
2137
2208
  var _useState = React.useState(function () {
2138
2209
  var _data$;
2139
2210
  return data.length > 1 ? data.map(function (s) {
@@ -2149,13 +2220,14 @@ function FloatingBarChart(_ref) {
2149
2220
  createFluentTooltip = _useChartUtils.createFluentTooltip,
2150
2221
  getInstantInteractionAnimations = _useChartUtils.getInstantInteractionAnimations;
2151
2222
  var seriesColors = React.useMemo(function () {
2223
+ var palette = getFluentPalette(theme, paletteId);
2152
2224
  return data.reduce(function (acc, series, idx) {
2153
- var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
2225
+ var base = palette[idx % palette.length];
2154
2226
  var color = lightenColor(base, 0.3);
2155
2227
  acc[series.label] = color;
2156
2228
  return acc;
2157
2229
  }, {});
2158
- }, [data, theme]);
2230
+ }, [data, getFluentPalette, lightenColor, theme, paletteId]);
2159
2231
  var toggleSeries = function toggleSeries(label) {
2160
2232
  setVisibleSeries(function (prev) {
2161
2233
  var isVisible = prev.includes(label);
@@ -2237,7 +2309,9 @@ function FloatingBarChart(_ref) {
2237
2309
  legend: {
2238
2310
  display: false
2239
2311
  },
2240
- tooltip: createFluentTooltip(theme)
2312
+ tooltip: createFluentTooltip(theme, {
2313
+ extraField: renderTooltipLabel
2314
+ })
2241
2315
  },
2242
2316
  scales: {
2243
2317
  x: {
@@ -2294,7 +2368,10 @@ function LineChart(_ref) {
2294
2368
  _ref$showDataLabels = _ref.showDataLabels,
2295
2369
  showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
2296
2370
  _ref$theme = _ref.theme,
2297
- theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
2371
+ theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
2372
+ renderTooltipLabel = _ref.renderTooltipLabel,
2373
+ _ref$paletteId = _ref.paletteId,
2374
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
2298
2375
  var _useState = React.useState(function () {
2299
2376
  var _data$;
2300
2377
  return data.length > 1 ? data.map(function (s) {
@@ -2310,13 +2387,14 @@ function LineChart(_ref) {
2310
2387
  createFluentTooltip = _useChartUtils.createFluentTooltip,
2311
2388
  getInstantInteractionAnimations = _useChartUtils.getInstantInteractionAnimations;
2312
2389
  var seriesColors = React.useMemo(function () {
2390
+ var palette = getFluentPalette(theme, paletteId);
2313
2391
  return data.reduce(function (acc, series, idx) {
2314
- var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
2392
+ var base = palette[idx % palette.length];
2315
2393
  var color = lightenColor(base, 0.3);
2316
2394
  acc[series.label] = color;
2317
2395
  return acc;
2318
2396
  }, {});
2319
- }, [data, theme]);
2397
+ }, [data, getFluentPalette, lightenColor, theme, paletteId]);
2320
2398
  var toggleSeries = function toggleSeries(label) {
2321
2399
  setVisibleSeries(function (prev) {
2322
2400
  var isVisible = prev.includes(label);
@@ -2401,7 +2479,9 @@ function LineChart(_ref) {
2401
2479
  legend: {
2402
2480
  display: false
2403
2481
  },
2404
- tooltip: createFluentTooltip(theme)
2482
+ tooltip: createFluentTooltip(theme, {
2483
+ extraField: renderTooltipLabel
2484
+ })
2405
2485
  },
2406
2486
  scales: {
2407
2487
  x: {
@@ -2458,7 +2538,10 @@ function PieChart(_ref) {
2458
2538
  _ref$showDataLabels = _ref.showDataLabels,
2459
2539
  showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
2460
2540
  _ref$theme = _ref.theme,
2461
- theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
2541
+ theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
2542
+ renderTooltipLabel = _ref.renderTooltipLabel,
2543
+ _ref$paletteId = _ref.paletteId,
2544
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
2462
2545
  var _useChartUtils = useChartUtils(theme),
2463
2546
  getFluentPalette = _useChartUtils.getFluentPalette,
2464
2547
  lightenColor = _useChartUtils.lightenColor;
@@ -2486,7 +2569,7 @@ function PieChart(_ref) {
2486
2569
  }, [data, getLabel, getValue]);
2487
2570
  var _useMemo = React.useMemo(function () {
2488
2571
  var allLabels = Array.from(valueMap.keys());
2489
- var palette = getFluentPalette(theme);
2572
+ var palette = getFluentPalette(theme, paletteId);
2490
2573
  var colors = allLabels.map(function (_, i) {
2491
2574
  return lightenColor(palette[i % palette.length], 0.3);
2492
2575
  });
@@ -2507,7 +2590,7 @@ function PieChart(_ref) {
2507
2590
  values: values,
2508
2591
  visibleColors: visibleColors
2509
2592
  };
2510
- }, [valueMap, getFluentPalette, lightenColor, theme, hiddenLabels]),
2593
+ }, [valueMap, getFluentPalette, lightenColor, theme, hiddenLabels, paletteId]),
2511
2594
  allLabels = _useMemo.allLabels,
2512
2595
  colors = _useMemo.colors,
2513
2596
  filteredLabels = _useMemo.filteredLabels,
@@ -2542,7 +2625,9 @@ function PieChart(_ref) {
2542
2625
  maintainAspectRatio: false
2543
2626
  }, getInstantInteractionAnimations(), {
2544
2627
  plugins: {
2545
- tooltip: createFluentTooltip(theme),
2628
+ tooltip: createFluentTooltip(theme, {
2629
+ extraField: renderTooltipLabel
2630
+ }),
2546
2631
  legend: {
2547
2632
  display: false
2548
2633
  },
@@ -2627,7 +2712,10 @@ function PolarChart(_ref) {
2627
2712
  _ref$showDataLabels = _ref.showDataLabels,
2628
2713
  showDataLabels = _ref$showDataLabels === void 0 ? true : _ref$showDataLabels,
2629
2714
  _ref$theme = _ref.theme,
2630
- theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
2715
+ theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
2716
+ renderTooltipLabel = _ref.renderTooltipLabel,
2717
+ _ref$paletteId = _ref.paletteId,
2718
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
2631
2719
  var _useChartUtils = useChartUtils(theme),
2632
2720
  getFluentPalette = _useChartUtils.getFluentPalette,
2633
2721
  lightenColor = _useChartUtils.lightenColor,
@@ -2656,7 +2744,7 @@ function PolarChart(_ref) {
2656
2744
  }, [data, getLabel, getValue]);
2657
2745
  var _useMemo = React.useMemo(function () {
2658
2746
  var allLabels = Array.from(valueMap.keys());
2659
- var palette = getFluentPalette(theme);
2747
+ var palette = getFluentPalette(theme, paletteId);
2660
2748
  var colors = allLabels.map(function (_, i) {
2661
2749
  return lightenColor(palette[i % palette.length], 0.3);
2662
2750
  });
@@ -2677,7 +2765,7 @@ function PolarChart(_ref) {
2677
2765
  values: values,
2678
2766
  visibleColors: visibleColors
2679
2767
  };
2680
- }, [valueMap, getFluentPalette, lightenColor, theme, hiddenLabels]),
2768
+ }, [valueMap, getFluentPalette, lightenColor, theme, hiddenLabels, paletteId]),
2681
2769
  allLabels = _useMemo.allLabels,
2682
2770
  colors = _useMemo.colors,
2683
2771
  filteredLabels = _useMemo.filteredLabels,
@@ -2724,7 +2812,9 @@ function PolarChart(_ref) {
2724
2812
  return value;
2725
2813
  }
2726
2814
  },
2727
- tooltip: createFluentTooltip(theme),
2815
+ tooltip: createFluentTooltip(theme, {
2816
+ extraField: renderTooltipLabel
2817
+ }),
2728
2818
  legend: {
2729
2819
  display: false
2730
2820
  }
@@ -2773,7 +2863,10 @@ function RadarChart(_ref) {
2773
2863
  _ref$showDataLabels = _ref.showDataLabels,
2774
2864
  showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
2775
2865
  _ref$theme = _ref.theme,
2776
- theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
2866
+ theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
2867
+ renderTooltipLabel = _ref.renderTooltipLabel,
2868
+ _ref$paletteId = _ref.paletteId,
2869
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
2777
2870
  var _useState = React.useState(function () {
2778
2871
  return data.map(function (s) {
2779
2872
  return s.label;
@@ -2787,12 +2880,13 @@ function RadarChart(_ref) {
2787
2880
  getFluentPalette = _useChartUtils.getFluentPalette,
2788
2881
  getInstantInteractionAnimations = _useChartUtils.getInstantInteractionAnimations;
2789
2882
  var seriesColors = React.useMemo(function () {
2883
+ var palette = getFluentPalette(theme, paletteId);
2790
2884
  return data.reduce(function (acc, series, idx) {
2791
- var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
2885
+ var base = palette[idx % palette.length];
2792
2886
  acc[series.label] = lightenColor(base, 0.3);
2793
2887
  return acc;
2794
2888
  }, {});
2795
- }, [data, getFluentPalette, lightenColor, theme]);
2889
+ }, [data, getFluentPalette, lightenColor, theme, paletteId]);
2796
2890
  var toggleSeries = function toggleSeries(label) {
2797
2891
  setVisibleSeries(function (prev) {
2798
2892
  return prev.includes(label) ? prev.filter(function (l) {
@@ -2871,7 +2965,9 @@ function RadarChart(_ref) {
2871
2965
  size: parseInt(theme.fontSizeBase200.replace('px', '')) || 14
2872
2966
  }
2873
2967
  },
2874
- tooltip: createFluentTooltip(theme),
2968
+ tooltip: createFluentTooltip(theme, {
2969
+ extraField: renderTooltipLabel
2970
+ }),
2875
2971
  legend: {
2876
2972
  display: false
2877
2973
  }
@@ -2927,7 +3023,10 @@ function ScatterChart(_ref) {
2927
3023
  _ref$showDataLabels = _ref.showDataLabels,
2928
3024
  showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
2929
3025
  _ref$theme = _ref.theme,
2930
- theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
3026
+ theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
3027
+ renderTooltipLabel = _ref.renderTooltipLabel,
3028
+ _ref$paletteId = _ref.paletteId,
3029
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
2931
3030
  var _useState = React.useState(function () {
2932
3031
  return data.map(function (s) {
2933
3032
  return s.label;
@@ -2942,12 +3041,13 @@ function ScatterChart(_ref) {
2942
3041
  createFluentTooltip = _useChartUtils.createFluentTooltip,
2943
3042
  getInstantInteractionAnimations = _useChartUtils.getInstantInteractionAnimations;
2944
3043
  var seriesColors = React.useMemo(function () {
3044
+ var palette = getFluentPalette(theme, paletteId);
2945
3045
  return data.reduce(function (acc, series, idx) {
2946
- var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
3046
+ var base = palette[idx % palette.length];
2947
3047
  acc[series.label] = lightenColor(base, 0.3);
2948
3048
  return acc;
2949
3049
  }, {});
2950
- }, [data, theme]);
3050
+ }, [data, getFluentPalette, lightenColor, theme, paletteId]);
2951
3051
  var toggleSeries = React__default.useCallback(function (label) {
2952
3052
  setVisibleSeries(function (prev) {
2953
3053
  return prev.includes(label) ? prev.filter(function (l) {
@@ -3018,7 +3118,9 @@ function ScatterChart(_ref) {
3018
3118
  legend: {
3019
3119
  display: false
3020
3120
  },
3021
- tooltip: createFluentTooltip(theme)
3121
+ tooltip: createFluentTooltip(theme, {
3122
+ extraField: renderTooltipLabel
3123
+ })
3022
3124
  },
3023
3125
  scales: {
3024
3126
  x: {
@@ -3076,7 +3178,10 @@ function StackedLineChart(_ref) {
3076
3178
  _ref$showDataLabels = _ref.showDataLabels,
3077
3179
  showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
3078
3180
  _ref$theme = _ref.theme,
3079
- theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
3181
+ theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
3182
+ renderTooltipLabel = _ref.renderTooltipLabel,
3183
+ _ref$paletteId = _ref.paletteId,
3184
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
3080
3185
  var _useState = React.useState(function () {
3081
3186
  var _data$;
3082
3187
  return data.length > 1 ? data.map(function (s) {
@@ -3092,13 +3197,14 @@ function StackedLineChart(_ref) {
3092
3197
  createFluentTooltip = _useChartUtils.createFluentTooltip,
3093
3198
  getInstantInteractionAnimations = _useChartUtils.getInstantInteractionAnimations;
3094
3199
  var seriesColors = React.useMemo(function () {
3200
+ var palette = getFluentPalette(theme, paletteId);
3095
3201
  return data.reduce(function (acc, series, idx) {
3096
- var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
3202
+ var base = palette[idx % palette.length];
3097
3203
  var color = lightenColor(base, 0.3);
3098
3204
  acc[series.label] = color;
3099
3205
  return acc;
3100
3206
  }, {});
3101
- }, [data, theme]);
3207
+ }, [data, getFluentPalette, lightenColor, theme, paletteId]);
3102
3208
  var toggleSeries = function toggleSeries(label) {
3103
3209
  setVisibleSeries(function (prev) {
3104
3210
  var isVisible = prev.includes(label);
@@ -3183,7 +3289,9 @@ function StackedLineChart(_ref) {
3183
3289
  legend: {
3184
3290
  display: false
3185
3291
  },
3186
- tooltip: createFluentTooltip(theme)
3292
+ tooltip: createFluentTooltip(theme, {
3293
+ extraField: renderTooltipLabel
3294
+ })
3187
3295
  },
3188
3296
  scales: {
3189
3297
  x: {
@@ -3240,7 +3348,10 @@ function SteamChart(_ref) {
3240
3348
  _ref$showDataLabels = _ref.showDataLabels,
3241
3349
  showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
3242
3350
  _ref$theme = _ref.theme,
3243
- theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
3351
+ theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
3352
+ renderTooltipLabel = _ref.renderTooltipLabel,
3353
+ _ref$paletteId = _ref.paletteId,
3354
+ paletteId = _ref$paletteId === void 0 ? 1 : _ref$paletteId;
3244
3355
  var _useState = React.useState(function () {
3245
3356
  var _data$;
3246
3357
  return data.length > 1 ? data.map(function (s) {
@@ -3258,12 +3369,13 @@ function SteamChart(_ref) {
3258
3369
  getFluentPalette = _useChartUtils.getFluentPalette,
3259
3370
  getInstantInteractionAnimations = _useChartUtils.getInstantInteractionAnimations;
3260
3371
  var seriesColors = React.useMemo(function () {
3372
+ var palette = getFluentPalette(theme, paletteId);
3261
3373
  return data.reduce(function (acc, series, idx) {
3262
- var base = getFluentPalette(theme)[idx % getFluentPalette(theme).length];
3374
+ var base = palette[idx % palette.length];
3263
3375
  acc[series.label] = lightenColor(base, 0.3);
3264
3376
  return acc;
3265
3377
  }, {});
3266
- }, [data, getFluentPalette, lightenColor, theme]);
3378
+ }, [data, getFluentPalette, lightenColor, theme, paletteId]);
3267
3379
  var toggleSeries = React__default.useCallback(function (label) {
3268
3380
  setVisibleSeries(function (prev) {
3269
3381
  var isVisible = prev.includes(label);
@@ -3360,7 +3472,9 @@ function SteamChart(_ref) {
3360
3472
  legend: {
3361
3473
  display: false
3362
3474
  },
3363
- tooltip: createFluentTooltip(theme)
3475
+ tooltip: createFluentTooltip(theme, {
3476
+ extraField: renderTooltipLabel
3477
+ })
3364
3478
  },
3365
3479
  interaction: {
3366
3480
  mode: 'index',
@@ -3443,7 +3557,10 @@ var chartProps = function chartProps(chart) {
3443
3557
  },
3444
3558
  getSecondary: function getSecondary(d) {
3445
3559
  return d.value;
3446
- }
3560
+ },
3561
+ // forward optional renderTooltipLabel if provided on the chart config
3562
+ renderTooltipLabel: chart.renderTooltipLabel,
3563
+ paletteId: chart.paletteId
3447
3564
  };
3448
3565
  };
3449
3566
  var getChartComponent = function getChartComponent(chart, theme) {
@@ -3454,6 +3571,7 @@ var getChartComponent = function getChartComponent(chart, theme) {
3454
3571
  switch (type) {
3455
3572
  case 'bar':
3456
3573
  return React__default.createElement(BarChart, Object.assign({}, chartProps(chart), {
3574
+ showDatalabels: showDataLabels != null ? showDataLabels : false,
3457
3575
  stacked: false,
3458
3576
  theme: fuiTheme
3459
3577
  }));
@@ -3464,12 +3582,16 @@ var getChartComponent = function getChartComponent(chart, theme) {
3464
3582
  theme: fuiTheme
3465
3583
  }));
3466
3584
  case 'area':
3467
- return React__default.createElement(AreaChart, Object.assign({}, chartProps(chart), {
3585
+ return React__default.createElement(AreaChart, Object.assign({
3586
+ showDatalabels: showDataLabels != null ? showDataLabels : false
3587
+ }, chartProps(chart), {
3468
3588
  stacked: false,
3469
3589
  theme: fuiTheme
3470
3590
  }));
3471
3591
  case 'bar-horizontal':
3472
- return React__default.createElement(BarHorizontalChart, Object.assign({}, chartProps(chart), {
3592
+ return React__default.createElement(BarHorizontalChart, Object.assign({
3593
+ showDatalabels: showDataLabels != null ? showDataLabels : false
3594
+ }, chartProps(chart), {
3473
3595
  stacked: true,
3474
3596
  theme: fuiTheme
3475
3597
  }));
@@ -3500,7 +3622,9 @@ var getChartComponent = function getChartComponent(chart, theme) {
3500
3622
  })
3501
3623
  }));
3502
3624
  case 'steam':
3503
- return React__default.createElement(SteamChart, Object.assign({}, chartProps(chart), {
3625
+ return React__default.createElement(SteamChart, Object.assign({
3626
+ showDataLabels: showDataLabels != null ? showDataLabels : false
3627
+ }, chartProps(chart), {
3504
3628
  theme: fuiTheme
3505
3629
  }));
3506
3630
  case 'floating-bar':
@@ -3514,7 +3638,9 @@ var getChartComponent = function getChartComponent(chart, theme) {
3514
3638
  theme: fuiTheme
3515
3639
  }));
3516
3640
  case 'stacked-line':
3517
- return React__default.createElement(StackedLineChart, Object.assign({}, chartProps(chart), {
3641
+ return React__default.createElement(StackedLineChart, Object.assign({
3642
+ showDataLabels: showDataLabels != null ? showDataLabels : false
3643
+ }, chartProps(chart), {
3518
3644
  theme: fuiTheme
3519
3645
  }));
3520
3646
  case 'doughnut':