@react-magma/charts 15.0.0-rc.2 → 15.0.0-rc.4

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/dist/charts.js CHANGED
@@ -1467,6 +1467,7 @@ function downloadImage(wrapperRef, title, format) {
1467
1467
  img.src = url;
1468
1468
  }
1469
1469
  function CarbonChartToolbar(_a) {
1470
+ var _b;
1470
1471
  var config = _a.config, dataSet = _a.dataSet, isInverse = _a.isInverse, isTableOpen = _a.isTableOpen, isFullscreen = _a.isFullscreen, onOpenTable = _a.onOpenTable, onToggleFullscreen = _a.onToggleFullscreen, theme = _a.theme, title = _a.title, wrapperRef = _a.wrapperRef;
1471
1472
  var t = useChartToolbarI18n();
1472
1473
  var showTable = config.showAsTable !== false;
@@ -1489,7 +1490,7 @@ function CarbonChartToolbar(_a) {
1489
1490
  React__namespace.createElement(reactMagmaDom.DropdownDivider, null),
1490
1491
  config.moreOptions))));
1491
1492
  return (React__namespace.createElement(ToolbarWrapper, { isFullscreen: isFullscreen, isInverse: isInverse, theme: theme },
1492
- React__namespace.createElement(ChartTitle, { isInverse: isInverse, theme: theme }, resolvedTitle),
1493
+ React__namespace.createElement(ChartTitle, { as: "h".concat((_b = config.titleLevel) !== null && _b !== void 0 ? _b : 2), isInverse: isInverse, theme: theme }, resolvedTitle),
1493
1494
  React__namespace.createElement(ToolbarActions, { theme: theme },
1494
1495
  showTable && (React__namespace.createElement(ChartTableButton, { ariaLabel: resolvedTitle, icon: React__namespace.createElement(reactMagmaIcons.TableIcon, { size: 20 }), isInverse: isInverse, isTableOpen: isTableOpen, onClick: onOpenTable })),
1495
1496
  showFullscreen && (React__namespace.createElement(ChartFullscreenButton, { ariaLabel: "".concat(isFullscreen ? 'Exit' : 'View', " ").concat(resolvedTitle, " full screen"), icon: React__namespace.createElement(reactMagmaIcons.FullscreenIcon, { size: 20 }), exitIcon: React__namespace.createElement(reactMagmaIcons.FullscreenExitIcon, { size: 20 }), isInverse: isInverse, isFullscreen: isFullscreen, onClick: onToggleFullscreen })),
@@ -1503,7 +1504,9 @@ var CarbonChart = React__namespace.forwardRef(function (props, ref) {
1503
1504
  var internalRef = React__namespace.useRef(null);
1504
1505
  var _a = React__namespace.useState(false), isTableOpen = _a[0], setIsTableOpen = _a[1];
1505
1506
  var _b = React__namespace.useState(false), isFullscreen = _b[0], setIsFullscreen = _b[1];
1507
+ var _c = React__namespace.useState(''), legendAnnouncement = _c[0], setLegendAnnouncement = _c[1];
1506
1508
  var lastTableTriggerRef = React__namespace.useRef(null);
1509
+ var legendAnnouncedRef = React__namespace.useRef(false);
1507
1510
  var mergedRef = React__namespace.useCallback(function (node) {
1508
1511
  internalRef.current = node;
1509
1512
  if (typeof ref === 'function') {
@@ -1584,8 +1587,9 @@ var CarbonChart = React__namespace.forwardRef(function (props, ref) {
1584
1587
  var parent = legend.parentElement;
1585
1588
  if ((parent === null || parent === void 0 ? void 0 : parent.tagName) === 'FIELDSET') {
1586
1589
  var existingCaption = parent.querySelector('legend');
1587
- if (existingCaption)
1590
+ if (existingCaption && existingCaption.textContent !== legendLabel) {
1588
1591
  existingCaption.textContent = legendLabel;
1592
+ }
1589
1593
  return;
1590
1594
  }
1591
1595
  var fieldset = document.createElement('fieldset');
@@ -1667,9 +1671,50 @@ var CarbonChart = React__namespace.forwardRef(function (props, ref) {
1667
1671
  }, 0);
1668
1672
  return function () { return clearTimeout(timer); };
1669
1673
  }, [type, dataSet]);
1674
+ React__namespace.useEffect(function () {
1675
+ var wrapper = internalRef.current;
1676
+ if (!wrapper)
1677
+ return;
1678
+ var observer = new MutationObserver(function () {
1679
+ var allItems = wrapper.querySelectorAll('.legend-item:not(.additional)');
1680
+ if (allItems.length <= 1)
1681
+ return;
1682
+ var activeLabels = [];
1683
+ allItems.forEach(function (el) {
1684
+ var _a;
1685
+ var checkbox = el.querySelector('.checkbox');
1686
+ var label = el.querySelector('p');
1687
+ if ((checkbox === null || checkbox === void 0 ? void 0 : checkbox.getAttribute('aria-checked')) === 'true' && label) {
1688
+ activeLabels.push(((_a = label.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '');
1689
+ }
1690
+ });
1691
+ if (activeLabels.length === 1) {
1692
+ if (!legendAnnouncedRef.current) {
1693
+ legendAnnouncedRef.current = true;
1694
+ setLegendAnnouncement("Only ".concat(activeLabels[0], " is selected"));
1695
+ }
1696
+ }
1697
+ else if (activeLabels.length === allItems.length) {
1698
+ legendAnnouncedRef.current = false;
1699
+ setLegendAnnouncement('All items selected');
1700
+ }
1701
+ else {
1702
+ legendAnnouncedRef.current = false;
1703
+ setLegendAnnouncement('');
1704
+ }
1705
+ });
1706
+ observer.observe(wrapper, {
1707
+ subtree: true,
1708
+ attributes: true,
1709
+ attributeFilter: ['aria-checked'],
1710
+ });
1711
+ return function () { return observer.disconnect(); };
1712
+ }, [type, dataSet]);
1670
1713
  var groupsLength = Object.keys(buildColors()).length;
1671
1714
  var showTable = (chartToolbar === null || chartToolbar === void 0 ? void 0 : chartToolbar.showAsTable) !== false;
1672
1715
  return (React__namespace.createElement(FullscreenRoot, { ref: mergedRef, isInverse: isInverse, theme: theme },
1716
+ React__namespace.createElement(reactMagmaDom.VisuallyHidden, null,
1717
+ React__namespace.createElement(reactMagmaDom.Announce, null, legendAnnouncement)),
1673
1718
  React__namespace.createElement(CarbonChartWrapper, __assign({ "data-testid": testId, isInverse: isInverse, theme: theme, className: "carbon-chart-wrapper".concat(chartToolbar ? ' has-magma-toolbar' : ''), groupsLength: groupsLength < 6 ? groupsLength : 14, role: "region", "aria-label": ariaLabel || chartTitle, "aria-roledescription": "chart" }, rest),
1674
1719
  React__namespace.createElement(ChartContentWrapper, null,
1675
1720
  chartToolbar && (React__namespace.createElement(CarbonChartToolbar, { config: chartToolbar, dataSet: dataSet, isInverse: isInverse, isTableOpen: isTableOpen, isFullscreen: isFullscreen, onOpenTable: openTableModal, onToggleFullscreen: toggleFullscreen, theme: theme, title: chartTitle, wrapperRef: internalRef })),