@spteck/fluentui-react-charts 1.0.11 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -304,6 +304,31 @@ const targetData = [
304
304
  title="Sales vs Target"
305
305
  theme={webLightTheme}
306
306
  />
307
+
308
+ > Note: ComboChart supports a backward-compatible dual-axis layout via the `axesMode` prop.
309
+ > - Default: `axesMode="legacy"` — preserves previous behavior: a single y-axis named `y` and a non-stacked x-axis.
310
+ > - Dual mode: `axesMode="dual"` — enables a stacked x-axis and two named y-axes: `y-bar` (left) and `y-line` (right).
311
+
312
+ Usage examples:
313
+
314
+ ```tsx
315
+ // legacy (default) — unchanged behavior for existing consumers
316
+ <ComboChart
317
+ data={[{ label: 'Sales', data: salesData, type: 'bar' }]}
318
+ getPrimary={(d) => d.month}
319
+ getSecondary={(d) => d.value}
320
+ />
321
+
322
+ // dual mode — bars default to 'y-bar' (stacked on x), lines default to 'y-line'
323
+ <ComboChart
324
+ data={[
325
+ { label: 'Sales', data: salesData, type: 'bar' },
326
+ { label: 'Target', data: targetData, type: 'line' }
327
+ ]}
328
+ getPrimary={(d) => d.month}
329
+ getSecondary={(d) => d.value}
330
+ axesMode="dual"
331
+ />
307
332
  ```
308
333
 
309
334
  #### BubbleChart
@@ -12,6 +12,11 @@ export interface ComboChartProps<T> {
12
12
  title?: string;
13
13
  showDataLabels?: boolean;
14
14
  theme?: Theme;
15
+ /**
16
+ * 'legacy' keeps previous behaviour (single 'y' axis, non-stacked x).
17
+ * 'dual' enables named y-axes ('y-bar' and 'y-line') and stacked x.
18
+ */
19
+ axesMode?: 'legacy' | 'dual';
15
20
  }
16
- export declare function ComboChart<T extends object>({ data, getPrimary, getSecondary, title, showDataLabels, theme, }: ComboChartProps<T>): React.JSX.Element;
21
+ export declare function ComboChart<T extends object>({ data, getPrimary, getSecondary, title, showDataLabels, theme, axesMode, }: ComboChartProps<T>): React.JSX.Element;
17
22
  export default ComboChart;
@@ -1719,7 +1719,9 @@ function ComboChart(_ref) {
1719
1719
  _ref$showDataLabels = _ref.showDataLabels,
1720
1720
  showDataLabels = _ref$showDataLabels === void 0 ? false : _ref$showDataLabels,
1721
1721
  _ref$theme = _ref.theme,
1722
- theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme;
1722
+ theme = _ref$theme === void 0 ? reactComponents.webLightTheme : _ref$theme,
1723
+ _ref$axesMode = _ref.axesMode,
1724
+ axesMode = _ref$axesMode === void 0 ? 'legacy' : _ref$axesMode;
1723
1725
  var _useState = React.useState(function () {
1724
1726
  return data.map(function (s) {
1725
1727
  return s.label;
@@ -1774,7 +1776,8 @@ function ComboChart(_ref) {
1774
1776
  return {
1775
1777
  type: series.type,
1776
1778
  label: series.label,
1777
- yAxisID: (_series$yAxisID = series.yAxisID) != null ? _series$yAxisID : 'y',
1779
+ // default yAxis assignment: legacy uses single 'y', dual uses 'y-bar'/'y-line'
1780
+ yAxisID: (_series$yAxisID = series.yAxisID) != null ? _series$yAxisID : axesMode === 'dual' ? series.type === 'bar' ? 'y-bar' : 'y-line' : 'y',
1778
1781
  data: allCategories.map(function (cat) {
1779
1782
  var found = series.data.find(function (d) {
1780
1783
  return getPrimary(d) === cat;
@@ -1805,7 +1808,7 @@ function ComboChart(_ref) {
1805
1808
  labelColor = _useMemo.labelColor,
1806
1809
  gridColor = _useMemo.gridColor;
1807
1810
  var options = React.useMemo(function () {
1808
- return _extends({
1811
+ var base = _extends({
1809
1812
  responsive: true,
1810
1813
  maintainAspectRatio: false
1811
1814
  }, getInstantInteractionAnimations(), {
@@ -1836,9 +1839,61 @@ function ComboChart(_ref) {
1836
1839
  display: false
1837
1840
  },
1838
1841
  tooltip: createFluentTooltip(theme)
1839
- },
1842
+ }
1843
+ });
1844
+ if (axesMode === 'dual') {
1845
+ return _extends({}, base, {
1846
+ scales: {
1847
+ x: {
1848
+ stacked: true,
1849
+ ticks: {
1850
+ color: labelColor,
1851
+ font: {
1852
+ family: fontFamily,
1853
+ size: fontSize
1854
+ }
1855
+ },
1856
+ grid: {
1857
+ color: gridColor
1858
+ }
1859
+ },
1860
+ 'y-bar': {
1861
+ type: 'linear',
1862
+ position: 'left',
1863
+ stacked: true,
1864
+ ticks: {
1865
+ color: labelColor,
1866
+ font: {
1867
+ family: fontFamily,
1868
+ size: fontSize
1869
+ }
1870
+ },
1871
+ grid: {
1872
+ color: gridColor
1873
+ }
1874
+ },
1875
+ 'y-line': {
1876
+ type: 'linear',
1877
+ position: 'right',
1878
+ stacked: false,
1879
+ ticks: {
1880
+ color: labelColor,
1881
+ font: {
1882
+ family: fontFamily,
1883
+ size: fontSize
1884
+ }
1885
+ },
1886
+ grid: {
1887
+ color: gridColor
1888
+ }
1889
+ }
1890
+ }
1891
+ });
1892
+ }
1893
+ return _extends({}, base, {
1840
1894
  scales: {
1841
1895
  x: {
1896
+ stacked: false,
1842
1897
  ticks: {
1843
1898
  color: labelColor,
1844
1899
  font: {
@@ -1851,7 +1906,9 @@ function ComboChart(_ref) {
1851
1906
  }
1852
1907
  },
1853
1908
  y: {
1909
+ type: 'linear',
1854
1910
  position: 'left',
1911
+ stacked: false,
1855
1912
  ticks: {
1856
1913
  color: labelColor,
1857
1914
  font: {
@@ -1861,12 +1918,11 @@ function ComboChart(_ref) {
1861
1918
  },
1862
1919
  grid: {
1863
1920
  color: gridColor
1864
- },
1865
- stacked: false
1921
+ }
1866
1922
  }
1867
1923
  }
1868
1924
  });
1869
- }, [title, showDataLabels, theme, fontFamily, fontSize, labelColor, gridColor, createFluentTooltip]);
1925
+ }, [title, showDataLabels, theme, fontFamily, fontSize, labelColor, gridColor, createFluentTooltip, getInstantInteractionAnimations, axesMode]);
1870
1926
  return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
1871
1927
  className: styles.chartWithLegend
1872
1928
  }, React__default.createElement("div", {