UNPKG

rumble-charts

Version:

Truly declarative React charts components

186 lines (179 loc) 11 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib_es6 = require('./external/tslib/tslib.es6.js'); var React = require('react'); var d3Shape = require('d3-shape'); var colorFunc = require('./helpers/colorFunc.js'); require('d3-ease'); var isFunction = require('./helpers/isFunction.js'); var isString = require('./helpers/isString.js'); var value = require('./helpers/value.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); var symbolsMap = { 'circle': d3Shape.symbolCircle, 'cross': d3Shape.symbolCross, 'diamond': d3Shape.symbolDiamond, 'square': d3Shape.symbolSquare, 'triangle-down': d3Shape.symbolWye, 'triangle-up': d3Shape.symbolTriangle, 'star': d3Shape.symbolStar }; var methods = { dots: renderCircle, dot: renderCircle, circles: renderCircle, circle: renderCircle, ellipses: renderEllipse, ellipse: renderEllipse, symbols: renderSymbol, symbol: renderSymbol, labels: renderLabel, label: renderLabel, path: renderPath }; /** * Renders dots for your scatter plot. */ function Dots(props) { var _a; var className = props.className, scaleX = props.scaleX, scaleY = props.scaleY, _b = props.colors, colors = _b === void 0 ? colorFunc.defaultSchemeName : _b; var x = scaleX.factory(props); var y = scaleY.factory(props); var rotate = scaleX.swap || scaleY.swap; var color = colorFunc.colorFunc(colors); return React__default["default"].createElement("g", { className: className, style: props.style, opacity: props.opacity }, (_a = props.series) === null || _a === void 0 ? void 0 : _a.map(function (series, index) { if ('seriesVisible' in props) { var seriesVisible = value.value(props.seriesVisible, { seriesIndex: index, series: series, props: props }); if (!seriesVisible) { return; } } var seriesAttributes = value.value(props.seriesAttributes, { seriesIndex: index, series: series, props: props }); var seriesStyle = value.value(props.seriesStyle, { seriesIndex: index, series: series, props: props }); return React__default["default"].createElement("g", tslib_es6.__assign({ key: index, className: className && (className + '-series ' + className + '-series-' + index), style: seriesStyle, opacity: series.opacity }, seriesAttributes), series.data.map(function (point, pointIndex) { if (rotate) { return renderDot(props, color, y(point.y), x(point.x), index, pointIndex, point); } else { return renderDot(props, color, x(point.x), y(point.y), index, pointIndex, point); } })); })); } function renderDot(props, color, x, y, seriesIndex, pointIndex, point) { var className = props.className, _a = props.dotType, dotType = _a === void 0 ? 'circles' : _a; var series = props.series[seriesIndex]; if ('dotVisible' in props) { var dotVisible = value.value(props.dotVisible, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); if (!dotVisible) { return; } } var groupStyle = value.value(props.groupStyle, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); var _dotType = value.value([dotType], { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); var dotAttributes = value.value(props.dotAttributes, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, dotType: _dotType, series: series, props: props }); var dotStyle = value.value([point.style, series.style, props.dotStyle], { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, dotType: _dotType, series: series, props: props }); var dot; if (isFunction.isFunction(props.dotRender)) { dot = props.dotRender({ seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, dotStyle: dotStyle, dotAttributes: dotAttributes, props: props, color: color }); } else { if (isString.isString(_dotType)) { dot = methods[_dotType] && methods[_dotType]({ seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, dotStyle: dotStyle, dotAttributes: dotAttributes, props: props, color: color }); } else if (Array.isArray(_dotType)) { dot = _dotType.map(function (_dotType, key) { return methods[_dotType]({ key: key, seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, dotStyle: dotStyle, dotAttributes: dotAttributes, props: props, color: color }); }); } else { dot = null; } } return React__default["default"].createElement("g", { key: pointIndex, className: className && ("".concat(className, "-dot ").concat(className, "-dot-").concat(pointIndex)), transform: "translate(".concat(x, " ").concat(y, ")"), style: groupStyle }, dot); } function renderCircle(_a) { var key = _a.key, seriesIndex = _a.seriesIndex, pointIndex = _a.pointIndex, point = _a.point, dotStyle = _a.dotStyle, dotAttributes = _a.dotAttributes, props = _a.props, color = _a.color; var className = props.className; var series = props.series[seriesIndex]; var _b = props.circleRadius, circleRadius = _b === void 0 ? 4 : _b; var _circleRadius = value.value(circleRadius, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); var circleAttributes = value.value(props.circleAttributes, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); return React__default["default"].createElement("circle", tslib_es6.__assign({ key: key, className: className && ("".concat(className, "-circle ").concat(className, "-circle-").concat(seriesIndex, "-").concat(pointIndex)), cx: 0, cy: 0, r: _circleRadius, style: dotStyle, fill: point.color || series.color || color(seriesIndex), fillOpacity: point.opacity }, dotAttributes, circleAttributes)); } function renderEllipse(_a) { var key = _a.key, seriesIndex = _a.seriesIndex, pointIndex = _a.pointIndex, point = _a.point, dotStyle = _a.dotStyle, dotAttributes = _a.dotAttributes, props = _a.props, color = _a.color; var className = props.className; var series = props.series[seriesIndex]; var _b = props.ellipseRadiusX, ellipseRadiusX = _b === void 0 ? 6 : _b, _c = props.ellipseRadiusY, ellipseRadiusY = _c === void 0 ? 4 : _c; var _ellipseRadiusX = value.value(ellipseRadiusX, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); var _ellipseRadiusY = value.value(ellipseRadiusY, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); var ellipseAttributes = value.value(props.ellipseAttributes, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); return React__default["default"].createElement("ellipse", tslib_es6.__assign({ key: key, className: className && (className + '-ellipse ' + className + '-ellipse-' + seriesIndex + '-' + pointIndex), cx: 0, cy: 0, rx: _ellipseRadiusX, ry: _ellipseRadiusY, style: dotStyle, fill: point.color || series.color || color(seriesIndex), fillOpacity: point.opacity }, dotAttributes, ellipseAttributes)); } function renderPath(_a) { var key = _a.key, seriesIndex = _a.seriesIndex, pointIndex = _a.pointIndex, point = _a.point, dotStyle = _a.dotStyle, dotAttributes = _a.dotAttributes, props = _a.props, color = _a.color; var className = props.className; var series = props.series[seriesIndex]; var path = value.value(props.path, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); var pathAttributes = value.value(props.pathAttributes, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); return React__default["default"].createElement("path", tslib_es6.__assign({ key: key, className: className && (className + '-path ' + className + '-path-' + seriesIndex + '-' + pointIndex), d: path, style: dotStyle, fill: point.color || series.color || color(seriesIndex), fillOpacity: point.opacity }, dotAttributes, pathAttributes)); } function renderSymbol(_a) { var key = _a.key, seriesIndex = _a.seriesIndex, pointIndex = _a.pointIndex, point = _a.point, dotStyle = _a.dotStyle, dotAttributes = _a.dotAttributes, props = _a.props, color = _a.color; var className = props.className; var series = props.series[seriesIndex]; var symbolType = value.value(props.symbolType, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); var symbolAttributes = value.value(props.symbolAttributes, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); var type = isString.isString(symbolType) ? symbolsMap[symbolType] : symbolType; return React__default["default"].createElement("path", tslib_es6.__assign({ key: key, className: className && (className + '-symbol ' + className + '-symbol-' + seriesIndex + '-' + pointIndex), d: d3Shape.symbol().type(type)(point, pointIndex), style: dotStyle, fill: point.color || series.color || color(seriesIndex), fillOpacity: point.opacity }, dotAttributes, symbolAttributes)); } function renderLabel(_a) { var key = _a.key, seriesIndex = _a.seriesIndex, pointIndex = _a.pointIndex, point = _a.point, dotStyle = _a.dotStyle, dotAttributes = _a.dotAttributes, props = _a.props, color = _a.color; var className = props.className; var series = props.series[seriesIndex]; var label = value.value(props.label, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); var labelAttributes = value.value(props.labelAttributes, { seriesIndex: seriesIndex, pointIndex: pointIndex, point: point, series: series, props: props }); return React__default["default"].createElement("text", tslib_es6.__assign({ key: key, className: className && (className + '-label ' + className + '-label-' + seriesIndex + '-' + pointIndex), style: dotStyle, fill: point.color || series.color || color(seriesIndex), fillOpacity: point.opacity }, dotAttributes, labelAttributes), label); } exports.Dots = Dots;