@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 +47 -2
- package/dist/charts.js.map +1 -1
- package/dist/charts.modern.module.js +48 -3
- package/dist/charts.modern.module.js.map +1 -1
- package/dist/charts.umd.js +209 -7
- package/dist/charts.umd.js.map +1 -1
- package/dist/components/CarbonChart/CarbonChart.d.ts +5 -0
- package/package.json +1 -1
- package/src/components/CarbonChart/CarbonChart.test.js +29 -3
- package/src/components/CarbonChart/CarbonChart.tsx +66 -2
- package/src/components/CarbonChart/CarbonChartBar.stories.tsx +9 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { ComboChart, ScatterChart, MeterChart, HistogramChart, GaugeChart, BulletChart, BubbleChart, BoxplotChart, RadarChart, PieChart, LollipopChart, LineChart, DonutChart, StackedBarChart, GroupedBarChart, SimpleBarChart, StackedAreaChart, AreaChart } from '@carbon/charts-react';
|
|
3
3
|
import styled from '@emotion/styled';
|
|
4
|
-
import { Table, TableHead, TableRow, TableHeaderCell, TableBody, TableCell, I18nContext, Tooltip, IconButton, ButtonVariant, Dropdown, DropdownButton, DropdownContent, ModalSize, ThemeContext, Modal, Button, TypographyVisualStyle, Heading, useIsInverse, DropdownMenuItem, DropdownDivider } from 'react-magma-dom';
|
|
4
|
+
import { Table, TableHead, TableRow, TableHeaderCell, TableBody, TableCell, I18nContext, Tooltip, IconButton, ButtonVariant, Dropdown, DropdownButton, DropdownContent, ModalSize, ThemeContext, Modal, Button, TypographyVisualStyle, Heading, useIsInverse, VisuallyHidden, Announce, DropdownMenuItem, DropdownDivider } from 'react-magma-dom';
|
|
5
5
|
import { TableIcon, FullscreenExitIcon, FullscreenIcon, MoreVertIcon } from 'react-magma-icons';
|
|
6
6
|
|
|
7
7
|
/******************************************************************************
|
|
@@ -1446,6 +1446,7 @@ function downloadImage(wrapperRef, title, format) {
|
|
|
1446
1446
|
img.src = url;
|
|
1447
1447
|
}
|
|
1448
1448
|
function CarbonChartToolbar(_a) {
|
|
1449
|
+
var _b;
|
|
1449
1450
|
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;
|
|
1450
1451
|
var t = useChartToolbarI18n();
|
|
1451
1452
|
var showTable = config.showAsTable !== false;
|
|
@@ -1468,7 +1469,7 @@ function CarbonChartToolbar(_a) {
|
|
|
1468
1469
|
React.createElement(DropdownDivider, null),
|
|
1469
1470
|
config.moreOptions))));
|
|
1470
1471
|
return (React.createElement(ToolbarWrapper, { isFullscreen: isFullscreen, isInverse: isInverse, theme: theme },
|
|
1471
|
-
React.createElement(ChartTitle, { isInverse: isInverse, theme: theme }, resolvedTitle),
|
|
1472
|
+
React.createElement(ChartTitle, { as: "h".concat((_b = config.titleLevel) !== null && _b !== void 0 ? _b : 2), isInverse: isInverse, theme: theme }, resolvedTitle),
|
|
1472
1473
|
React.createElement(ToolbarActions, { theme: theme },
|
|
1473
1474
|
showTable && (React.createElement(ChartTableButton, { ariaLabel: resolvedTitle, icon: React.createElement(TableIcon, { size: 20 }), isInverse: isInverse, isTableOpen: isTableOpen, onClick: onOpenTable })),
|
|
1474
1475
|
showFullscreen && (React.createElement(ChartFullscreenButton, { ariaLabel: "".concat(isFullscreen ? 'Exit' : 'View', " ").concat(resolvedTitle, " full screen"), icon: React.createElement(FullscreenIcon, { size: 20 }), exitIcon: React.createElement(FullscreenExitIcon, { size: 20 }), isInverse: isInverse, isFullscreen: isFullscreen, onClick: onToggleFullscreen })),
|
|
@@ -1482,7 +1483,9 @@ var CarbonChart = React.forwardRef(function (props, ref) {
|
|
|
1482
1483
|
var internalRef = React.useRef(null);
|
|
1483
1484
|
var _a = React.useState(false), isTableOpen = _a[0], setIsTableOpen = _a[1];
|
|
1484
1485
|
var _b = React.useState(false), isFullscreen = _b[0], setIsFullscreen = _b[1];
|
|
1486
|
+
var _c = React.useState(''), legendAnnouncement = _c[0], setLegendAnnouncement = _c[1];
|
|
1485
1487
|
var lastTableTriggerRef = React.useRef(null);
|
|
1488
|
+
var legendAnnouncedRef = React.useRef(false);
|
|
1486
1489
|
var mergedRef = React.useCallback(function (node) {
|
|
1487
1490
|
internalRef.current = node;
|
|
1488
1491
|
if (typeof ref === 'function') {
|
|
@@ -1563,8 +1566,9 @@ var CarbonChart = React.forwardRef(function (props, ref) {
|
|
|
1563
1566
|
var parent = legend.parentElement;
|
|
1564
1567
|
if ((parent === null || parent === void 0 ? void 0 : parent.tagName) === 'FIELDSET') {
|
|
1565
1568
|
var existingCaption = parent.querySelector('legend');
|
|
1566
|
-
if (existingCaption)
|
|
1569
|
+
if (existingCaption && existingCaption.textContent !== legendLabel) {
|
|
1567
1570
|
existingCaption.textContent = legendLabel;
|
|
1571
|
+
}
|
|
1568
1572
|
return;
|
|
1569
1573
|
}
|
|
1570
1574
|
var fieldset = document.createElement('fieldset');
|
|
@@ -1646,9 +1650,50 @@ var CarbonChart = React.forwardRef(function (props, ref) {
|
|
|
1646
1650
|
}, 0);
|
|
1647
1651
|
return function () { return clearTimeout(timer); };
|
|
1648
1652
|
}, [type, dataSet]);
|
|
1653
|
+
React.useEffect(function () {
|
|
1654
|
+
var wrapper = internalRef.current;
|
|
1655
|
+
if (!wrapper)
|
|
1656
|
+
return;
|
|
1657
|
+
var observer = new MutationObserver(function () {
|
|
1658
|
+
var allItems = wrapper.querySelectorAll('.legend-item:not(.additional)');
|
|
1659
|
+
if (allItems.length <= 1)
|
|
1660
|
+
return;
|
|
1661
|
+
var activeLabels = [];
|
|
1662
|
+
allItems.forEach(function (el) {
|
|
1663
|
+
var _a;
|
|
1664
|
+
var checkbox = el.querySelector('.checkbox');
|
|
1665
|
+
var label = el.querySelector('p');
|
|
1666
|
+
if ((checkbox === null || checkbox === void 0 ? void 0 : checkbox.getAttribute('aria-checked')) === 'true' && label) {
|
|
1667
|
+
activeLabels.push(((_a = label.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '');
|
|
1668
|
+
}
|
|
1669
|
+
});
|
|
1670
|
+
if (activeLabels.length === 1) {
|
|
1671
|
+
if (!legendAnnouncedRef.current) {
|
|
1672
|
+
legendAnnouncedRef.current = true;
|
|
1673
|
+
setLegendAnnouncement("Only ".concat(activeLabels[0], " is selected"));
|
|
1674
|
+
}
|
|
1675
|
+
}
|
|
1676
|
+
else if (activeLabels.length === allItems.length) {
|
|
1677
|
+
legendAnnouncedRef.current = false;
|
|
1678
|
+
setLegendAnnouncement('All items selected');
|
|
1679
|
+
}
|
|
1680
|
+
else {
|
|
1681
|
+
legendAnnouncedRef.current = false;
|
|
1682
|
+
setLegendAnnouncement('');
|
|
1683
|
+
}
|
|
1684
|
+
});
|
|
1685
|
+
observer.observe(wrapper, {
|
|
1686
|
+
subtree: true,
|
|
1687
|
+
attributes: true,
|
|
1688
|
+
attributeFilter: ['aria-checked'],
|
|
1689
|
+
});
|
|
1690
|
+
return function () { return observer.disconnect(); };
|
|
1691
|
+
}, [type, dataSet]);
|
|
1649
1692
|
var groupsLength = Object.keys(buildColors()).length;
|
|
1650
1693
|
var showTable = (chartToolbar === null || chartToolbar === void 0 ? void 0 : chartToolbar.showAsTable) !== false;
|
|
1651
1694
|
return (React.createElement(FullscreenRoot, { ref: mergedRef, isInverse: isInverse, theme: theme },
|
|
1695
|
+
React.createElement(VisuallyHidden, null,
|
|
1696
|
+
React.createElement(Announce, null, legendAnnouncement)),
|
|
1652
1697
|
React.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),
|
|
1653
1698
|
React.createElement(ChartContentWrapper, null,
|
|
1654
1699
|
chartToolbar && (React.createElement(CarbonChartToolbar, { config: chartToolbar, dataSet: dataSet, isInverse: isInverse, isTableOpen: isTableOpen, isFullscreen: isFullscreen, onOpenTable: openTableModal, onToggleFullscreen: toggleFullscreen, theme: theme, title: chartTitle, wrapperRef: internalRef })),
|