UNPKG

@visx/shape

Version:
84 lines (83 loc) 2.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = BarStack; var _classnames = _interopRequireDefault(require("classnames")); var _d3Shape = require("@visx/vendor/d3-shape"); var _group = require("@visx/group"); var _accessors = require("../util/accessors"); var _getBandwidth = _interopRequireDefault(require("../util/getBandwidth")); var _setNumberOrNumberAccessor = _interopRequireDefault(require("../util/setNumberOrNumberAccessor")); var _stackOrder = _interopRequireDefault(require("../util/stackOrder")); var _stackOffset = _interopRequireDefault(require("../util/stackOffset")); var _Bar = _interopRequireDefault(require("./Bar")); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function BarStack(_ref) { let { data, className, top, left, x, y0 = _accessors.getFirstItem, y1 = _accessors.getSecondItem, xScale, yScale, color, keys, value, order, offset, children, ...restProps } = _ref; const stack = (0, _d3Shape.stack)(); if (keys) stack.keys(keys); if (value) (0, _setNumberOrNumberAccessor.default)(stack.value, value); if (order) stack.order((0, _stackOrder.default)(order)); if (offset) stack.offset((0, _stackOffset.default)(offset)); const stacks = stack(data); const barWidth = (0, _getBandwidth.default)(xScale); const barStacks = stacks.map((barStack, i) => { const { key } = barStack; return { index: i, key, bars: barStack.map((bar, j) => { const barHeight = (yScale(y0(bar)) || 0) - (yScale(y1(bar)) || 0); const barY = yScale(y1(bar)); const barX = 'bandwidth' in xScale ? xScale(x(bar.data)) : Math.max((xScale(x(bar.data)) || 0) - barWidth / 2); return { bar, key, index: j, height: barHeight, width: barWidth, x: barX || 0, y: barY || 0, color: color(barStack.key, j) }; }) }; }); if (children) return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, { children: children(barStacks) }); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_group.Group, { className: (0, _classnames.default)('visx-bar-stack', className), top: top, left: left, children: barStacks.map(barStack => barStack.bars.map(bar => /*#__PURE__*/(0, _jsxRuntime.jsx)(_Bar.default, { x: bar.x, y: bar.y, height: bar.height, width: bar.width, fill: bar.color, ...restProps }, `bar-stack-${barStack.index}-${bar.index}`))) }); }