UNPKG

@simspace/nivo-radar

Version:

[![version](https://img.shields.io/npm/v/@nivo/radar.svg?style=flat-square)](https://www.npmjs.com/package/@nivo/radar)

1,019 lines (952 loc) 32.7 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var react = require('react'); var nivoCore = require('@simspace/nivo-core'); var nivoLegends = require('@simspace/nivo-legends'); var web = require('@react-spring/web'); var d3Shape = require('d3-shape'); var nivoColors = require('@simspace/nivo-colors'); var jsxRuntime = require('react/jsx-runtime'); var nivoTooltip = require('@simspace/nivo-tooltip'); var d3Scale = require('d3-scale'); function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var RadarLayer = function RadarLayer(_ref) { var _fillByKey$key; var data = _ref.data, key = _ref.item, colorByKey = _ref.colorByKey, fillByKey = _ref.fillByKey, radiusScale = _ref.radiusScale, angleStep = _ref.angleStep, curveFactory = _ref.curveFactory, borderWidth = _ref.borderWidth, borderColor = _ref.borderColor, fillOpacity = _ref.fillOpacity, blendMode = _ref.blendMode; var theme = nivoCore.useTheme(); var getBorderColor = nivoColors.useInheritedColor(borderColor, theme); var lineGenerator = react.useMemo(function () { return d3Shape.lineRadial().radius(function (d) { return radiusScale(d); }).angle(function (_, i) { return i * angleStep; }).curve(curveFactory); }, [radiusScale, angleStep, curveFactory]); var _useMotionConfig = nivoCore.useMotionConfig(), animate = _useMotionConfig.animate, springConfig = _useMotionConfig.config; var animatedPath = nivoCore.useAnimatedPath(lineGenerator(data.map(function (d) { return d[key]; }))); var animatedProps = web.useSpring({ fill: colorByKey[key], stroke: getBorderColor({ key: key, color: colorByKey[key] }), config: springConfig, immediate: !animate }); var fill = (_fillByKey$key = fillByKey[key]) !== null && _fillByKey$key !== void 0 ? _fillByKey$key : animatedProps.fill; return jsxRuntime.jsx(web.animated.path, { d: animatedPath, fill: fill, fillOpacity: fillOpacity, stroke: animatedProps.stroke, strokeWidth: borderWidth, style: { mixBlendMode: blendMode } }, key); }; var textAnchorFromAngle = function textAnchorFromAngle(_angle) { var angle = nivoCore.radiansToDegrees(_angle) + 90; if (angle <= 10 || angle >= 350 || angle >= 170 && angle <= 190) return 'middle'; if (angle > 180) return 'end'; return 'start'; }; var RadarGridLabels = function RadarGridLabels(_ref) { var radius = _ref.radius, angles = _ref.angles, indices = _ref.indices, labelComponent = _ref.label, labelOffset = _ref.labelOffset; var _useMotionConfig = nivoCore.useMotionConfig(), animate = _useMotionConfig.animate, springConfig = _useMotionConfig.config; var labels = indices.map(function (index, i) { var position = nivoCore.positionFromAngle(angles[i], radius + labelOffset); var textAnchor = textAnchorFromAngle(angles[i]); return _objectSpread2({ id: index, angle: nivoCore.radiansToDegrees(angles[i]), anchor: textAnchor }, position); }); var springs = web.useSprings(labels.length, labels.map(function (label) { return { transform: "translate(".concat(label.x, ", ").concat(label.y, ")"), config: springConfig, immediate: !animate }; })); return jsxRuntime.jsx(jsxRuntime.Fragment, { children: springs.map(function (animatedProps, index) { var label = labels[index]; return react.createElement(labelComponent, { key: label.id, id: label.id, anchor: label.anchor, angle: label.angle, x: label.x, y: label.y, animated: animatedProps }); }) }); }; var RadarGridLevelCircular = react.memo(function (_ref) { var radius = _ref.radius; var theme = nivoCore.useTheme(); var _useMotionConfig = nivoCore.useMotionConfig(), animate = _useMotionConfig.animate, springConfig = _useMotionConfig.config; var animatedProps = web.useSpring({ radius: radius, config: springConfig, immediate: !animate }); return jsxRuntime.jsx(web.animated.circle, _objectSpread2({ fill: "none", r: web.to(animatedProps.radius, function (value) { return Math.max(value, 0); }) }, theme.grid.line)); }); var RadarGridLevelLinear = function RadarGridLevelLinear(_ref2) { var radius = _ref2.radius, angleStep = _ref2.angleStep, dataLength = _ref2.dataLength; var theme = nivoCore.useTheme(); var radarLineGenerator = react.useMemo(function () { return d3Shape.lineRadial().angle(function (i) { return i * angleStep; }).radius(radius).curve(d3Shape.curveLinearClosed); }, [angleStep, radius]); var points = Array.from({ length: dataLength }, function (_, i) { return i; }); var animatedPath = nivoCore.useAnimatedPath(radarLineGenerator(points)); return jsxRuntime.jsx(web.animated.path, _objectSpread2({ fill: "none", d: animatedPath }, theme.grid.line)); }; var RadarGridLevels = function RadarGridLevels(_ref3) { var shape = _ref3.shape, props = _objectWithoutProperties(_ref3, ["shape"]); return shape === 'circular' ? jsxRuntime.jsx(RadarGridLevelCircular, { radius: props.radius }) : jsxRuntime.jsx(RadarGridLevelLinear, _objectSpread2({}, props)); }; var RadarGrid = function RadarGrid(_ref) { var indices = _ref.indices, levels = _ref.levels, shape = _ref.shape, radius = _ref.radius, angleStep = _ref.angleStep, label = _ref.label, labelOffset = _ref.labelOffset; var theme = nivoCore.useTheme(); var _useMemo = react.useMemo(function () { return { radii: Array.from({ length: levels }).map(function (_, i) { return radius / levels * (i + 1); }).reverse(), angles: Array.from({ length: indices.length }, function (_, i) { return i * angleStep - Math.PI / 2; }) }; }, [indices, levels, radius, angleStep]), radii = _useMemo.radii, angles = _useMemo.angles; return jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [angles.map(function (angle, i) { var position = nivoCore.positionFromAngle(angle, radius); return jsxRuntime.jsx("line", _objectSpread2({ x1: 0, y1: 0, x2: position.x, y2: position.y }, theme.grid.line), "axis.".concat(i)); }), radii.map(function (radius, i) { return jsxRuntime.jsx(RadarGridLevels, { shape: shape, radius: radius, angleStep: angleStep, dataLength: indices.length }, "level.".concat(i)); }), jsxRuntime.jsx(RadarGridLabels, { radius: radius, angles: angles, indices: indices, labelOffset: labelOffset, label: label })] }); }; function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } var RadarSlice = function RadarSlice(_ref) { var datum = _ref.datum, keys = _ref.keys, index = _ref.index, formatValue = _ref.formatValue, colorByKey = _ref.colorByKey, radius = _ref.radius, startAngle = _ref.startAngle, endAngle = _ref.endAngle, arcGenerator = _ref.arcGenerator, tooltip = _ref.tooltip; var _useState = react.useState(false), _useState2 = _slicedToArray(_useState, 2), isHover = _useState2[0], setIsHover = _useState2[1]; var theme = nivoCore.useTheme(); var _useTooltip = nivoTooltip.useTooltip(), showTooltipFromEvent = _useTooltip.showTooltipFromEvent, hideTooltip = _useTooltip.hideTooltip; var tooltipData = react.useMemo(function () { var data = keys.map(function (key) { return { color: colorByKey[key], id: key, value: datum[key], formattedValue: formatValue(datum[key], key) }; }); data.sort(function (a, b) { return a.value - b.value; }); data.reverse(); return data; }, [datum, keys, formatValue, colorByKey]); var showItemTooltip = react.useCallback(function (event) { setIsHover(true); showTooltipFromEvent(react.createElement(tooltip, { index: index, data: tooltipData }), event); }, [showTooltipFromEvent, tooltip, index, tooltipData]); var hideItemTooltip = react.useCallback(function () { setIsHover(false); hideTooltip(); }, [hideTooltip, setIsHover]); var _useMemo = react.useMemo(function () { var position = nivoCore.positionFromAngle(startAngle + (endAngle - startAngle) * 0.5 - Math.PI / 2, radius); return { path: arcGenerator({ startAngle: startAngle, endAngle: endAngle }), tipX: position.x, tipY: position.y }; }, [startAngle, endAngle, radius, arcGenerator]), path = _useMemo.path, tipX = _useMemo.tipX, tipY = _useMemo.tipY; return jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isHover && jsxRuntime.jsx("line", { x1: 0, y1: 0, x2: tipX, y2: tipY, style: theme.crosshair.line }), jsxRuntime.jsx("path", { d: path, fill: "#F00", fillOpacity: 0, onMouseEnter: showItemTooltip, onMouseMove: showItemTooltip, onMouseLeave: hideItemTooltip })] }); }; var RadarSlices = function RadarSlices(_ref) { var data = _ref.data, keys = _ref.keys, getIndex = _ref.getIndex, formatValue = _ref.formatValue, colorByKey = _ref.colorByKey, radius = _ref.radius, angleStep = _ref.angleStep, tooltip = _ref.tooltip; var arc = d3Shape.arc().outerRadius(radius).innerRadius(0); var halfAngleStep = angleStep * 0.5; var rootStartAngle = -halfAngleStep; return jsxRuntime.jsx(jsxRuntime.Fragment, { children: data.map(function (d) { var index = getIndex(d); var startAngle = rootStartAngle; var endAngle = startAngle + angleStep; rootStartAngle += angleStep; return jsxRuntime.jsx(RadarSlice, { datum: d, keys: keys, index: index, formatValue: formatValue, colorByKey: colorByKey, startAngle: startAngle, endAngle: endAngle, radius: radius, arcGenerator: arc, tooltip: tooltip }, index); }) }); }; var RadarDots = function RadarDots(_ref) { var data = _ref.data, keys = _ref.keys, getIndex = _ref.getIndex, colorByKey = _ref.colorByKey, radiusScale = _ref.radiusScale, angleStep = _ref.angleStep, symbol = _ref.symbol, _ref$size = _ref.size, size = _ref$size === void 0 ? 6 : _ref$size, _ref$color = _ref.color, color = _ref$color === void 0 ? { from: 'color' } : _ref$color, _ref$borderWidth = _ref.borderWidth, borderWidth = _ref$borderWidth === void 0 ? 0 : _ref$borderWidth, _ref$borderColor = _ref.borderColor, borderColor = _ref$borderColor === void 0 ? { from: 'color' } : _ref$borderColor, _ref$enableLabel = _ref.enableLabel, enableLabel = _ref$enableLabel === void 0 ? false : _ref$enableLabel, _ref$label = _ref.label, label = _ref$label === void 0 ? 'value' : _ref$label, formatValue = _ref.formatValue, labelYOffset = _ref.labelYOffset; var theme = nivoCore.useTheme(); var fillColor = nivoColors.getInheritedColorGenerator(color, theme); var strokeColor = nivoColors.getInheritedColorGenerator(borderColor, theme); var getLabel = nivoCore.usePropertyAccessor(label); var points = react.useMemo(function () { return data.reduce(function (acc, datum, i) { var index = getIndex(datum); keys.forEach(function (key) { var value = datum[key]; var pointData = { index: index, key: key, value: value, formattedValue: formatValue(value, key), color: colorByKey[key] }; acc.push({ key: "".concat(key, ".").concat(index), label: enableLabel ? getLabel(pointData) : undefined, style: _objectSpread2({ fill: fillColor(pointData), stroke: strokeColor(pointData) }, nivoCore.positionFromAngle(angleStep * i - Math.PI / 2, radiusScale(datum[key]))), data: pointData }); }); return acc; }, []); }, [data, keys, getIndex, colorByKey, enableLabel, getLabel, formatValue, fillColor, strokeColor, angleStep, radiusScale]); return jsxRuntime.jsx(jsxRuntime.Fragment, { children: points.map(function (point) { return jsxRuntime.jsx(nivoCore.DotsItem, { x: point.style.x, y: point.style.y, symbol: symbol, size: size, color: point.style.fill, borderWidth: borderWidth, borderColor: point.style.stroke, label: point.label, labelYOffset: labelYOffset, datum: point.data }, point.key); }) }); }; var RadarGridLabel = function RadarGridLabel(_ref) { var id = _ref.id, anchor = _ref.anchor, animatedProps = _ref.animated; var theme = nivoCore.useTheme(); return jsxRuntime.jsx(web.animated.g, { transform: animatedProps.transform, children: jsxRuntime.jsx("text", { style: theme.axis.ticks.text, dominantBaseline: "central", textAnchor: anchor, children: id }) }); }; var RadarSliceTooltip = function RadarSliceTooltip(_ref) { var index = _ref.index, data = _ref.data; var rows = react.useMemo(function () { return data.map(function (datum) { return [jsxRuntime.jsx(nivoTooltip.Chip, { color: datum.color }, datum.id), datum.id, datum.formattedValue]; }); }, [data]); return jsxRuntime.jsx(nivoTooltip.TableTooltip, { title: jsxRuntime.jsx("strong", { children: index }), rows: rows }); }; var svgDefaultProps = { layers: ['grid', 'layers', 'slices', 'dots', 'legends'], maxValue: 'auto', curve: 'linearClosed', borderWidth: 2, borderColor: { from: 'color' }, gridLevels: 5, gridShape: 'circular', gridLabelOffset: 16, gridLabel: RadarGridLabel, enableDots: true, dotSize: 6, dotColor: { from: 'color' }, dotBorderWidth: 0, dotBorderColor: { from: 'color' }, enableDotLabel: false, dotLabel: 'formattedValue', dotLabelYOffset: -12, colors: { scheme: 'nivo' }, fillOpacity: 0.25, blendMode: 'normal', isInteractive: true, sliceTooltip: RadarSliceTooltip, legends: [], role: 'img', animate: true, motionConfig: 'gentle', defs: [], fill: [] }; function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } var useRadar = function useRadar(_ref) { var data = _ref.data, keys = _ref.keys, indexBy = _ref.indexBy, maxValue = _ref.maxValue, valueFormat = _ref.valueFormat, curve = _ref.curve, width = _ref.width, height = _ref.height, _ref$colors = _ref.colors, colors = _ref$colors === void 0 ? svgDefaultProps.colors : _ref$colors, legends = _ref.legends, defs = _ref.defs, fill = _ref.fill; var getIndex = nivoCore.usePropertyAccessor(indexBy); var indices = react.useMemo(function () { return data.map(getIndex); }, [data, getIndex]); var formatValue = nivoCore.useValueFormatter(valueFormat); var getColor = nivoColors.useOrdinalColorScale(colors, 'key'); var colorByKey = react.useMemo(function () { return keys.reduce(function (mapping, key, index) { mapping[key] = getColor({ key: key, index: index }); return mapping; }, {}); }, [keys, getColor]); var _useMemo = react.useMemo(function () { var keyData = keys.map(function (k) { return { key: k, color: colorByKey[k], data: data, fill: null }; }); var boundDefs = nivoCore.bindDefs(defs, keyData, fill); var fillByKey = keyData.reduce(function (mapping, keyDatum) { var keyName = keyDatum.key, fill = keyDatum.fill; mapping[keyName] = fill; return mapping; }, {}); return { boundDefs: boundDefs, fillByKey: fillByKey }; }, [keys, data, defs, fill, colorByKey]), boundDefs = _useMemo.boundDefs, fillByKey = _useMemo.fillByKey; var _useMemo2 = react.useMemo(function () { var allValues = data.reduce(function (acc, d) { return [].concat(_toConsumableArray(acc), _toConsumableArray(keys.map(function (key) { return d[key]; }))); }, []); var computedMaxValue = maxValue !== 'auto' ? maxValue : Math.max.apply(Math, _toConsumableArray(allValues)); var radius = Math.min(width, height) / 2; var radiusScale = d3Scale.scaleLinear().range([0, radius]).domain([0, computedMaxValue]); return { radius: radius, radiusScale: radiusScale, centerX: width / 2, centerY: height / 2, angleStep: Math.PI * 2 / data.length }; }, [keys, data, maxValue, width, height]), radius = _useMemo2.radius, radiusScale = _useMemo2.radiusScale, centerX = _useMemo2.centerX, centerY = _useMemo2.centerY, angleStep = _useMemo2.angleStep; var curveFactory = nivoCore.useCurveInterpolation(curve); var customLayerProps = react.useMemo(function () { return { data: data, keys: keys, indices: indices, colorByKey: colorByKey, centerX: centerX, centerY: centerY, radiusScale: radiusScale, angleStep: angleStep }; }, [data, keys, indices, colorByKey, centerX, centerY, radiusScale, angleStep]); var legendData = react.useMemo(function () { return keys.map(function (key) { return { id: key, label: key, color: colorByKey[key] }; }); }, [keys, colorByKey]); var boundLegends = react.useMemo(function () { return legends.map(function (_ref2) { var customData = _ref2.data, legend = _objectWithoutProperties(_ref2, ["data"]); var boundData = customData === null || customData === void 0 ? void 0 : customData.map(function (cd) { var findData = legendData.find(function (ld) { return ld.id === cd.id; }) || {}; return _objectSpread2(_objectSpread2({}, findData), cd); }); return _objectSpread2(_objectSpread2({}, legend), {}, { data: boundData || legendData }); }); }, [legends, legendData]); return { getIndex: getIndex, indices: indices, formatValue: formatValue, colorByKey: colorByKey, fillByKey: fillByKey, boundDefs: boundDefs, radius: radius, radiusScale: radiusScale, centerX: centerX, centerY: centerY, angleStep: angleStep, curveFactory: curveFactory, legendData: legendData, boundLegends: boundLegends, customLayerProps: customLayerProps }; }; var InnerRadar = function InnerRadar(_ref) { var data = _ref.data, keys = _ref.keys, indexBy = _ref.indexBy, _ref$layers = _ref.layers, layers = _ref$layers === void 0 ? svgDefaultProps.layers : _ref$layers, _ref$maxValue = _ref.maxValue, maxValue = _ref$maxValue === void 0 ? svgDefaultProps.maxValue : _ref$maxValue, valueFormat = _ref.valueFormat, _ref$curve = _ref.curve, curve = _ref$curve === void 0 ? svgDefaultProps.curve : _ref$curve, partialMargin = _ref.margin, width = _ref.width, height = _ref.height, _ref$borderWidth = _ref.borderWidth, borderWidth = _ref$borderWidth === void 0 ? svgDefaultProps.borderWidth : _ref$borderWidth, _ref$borderColor = _ref.borderColor, borderColor = _ref$borderColor === void 0 ? svgDefaultProps.borderColor : _ref$borderColor, _ref$gridLevels = _ref.gridLevels, gridLevels = _ref$gridLevels === void 0 ? svgDefaultProps.gridLevels : _ref$gridLevels, _ref$gridShape = _ref.gridShape, gridShape = _ref$gridShape === void 0 ? svgDefaultProps.gridShape : _ref$gridShape, _ref$gridLabel = _ref.gridLabel, gridLabel = _ref$gridLabel === void 0 ? svgDefaultProps.gridLabel : _ref$gridLabel, _ref$gridLabelOffset = _ref.gridLabelOffset, gridLabelOffset = _ref$gridLabelOffset === void 0 ? svgDefaultProps.gridLabelOffset : _ref$gridLabelOffset, _ref$enableDots = _ref.enableDots, enableDots = _ref$enableDots === void 0 ? svgDefaultProps.enableDots : _ref$enableDots, dotSymbol = _ref.dotSymbol, _ref$dotSize = _ref.dotSize, dotSize = _ref$dotSize === void 0 ? svgDefaultProps.dotSize : _ref$dotSize, _ref$dotColor = _ref.dotColor, dotColor = _ref$dotColor === void 0 ? svgDefaultProps.dotColor : _ref$dotColor, _ref$dotBorderWidth = _ref.dotBorderWidth, dotBorderWidth = _ref$dotBorderWidth === void 0 ? svgDefaultProps.dotBorderWidth : _ref$dotBorderWidth, _ref$dotBorderColor = _ref.dotBorderColor, dotBorderColor = _ref$dotBorderColor === void 0 ? svgDefaultProps.dotBorderColor : _ref$dotBorderColor, _ref$enableDotLabel = _ref.enableDotLabel, enableDotLabel = _ref$enableDotLabel === void 0 ? svgDefaultProps.enableDotLabel : _ref$enableDotLabel, _ref$dotLabel = _ref.dotLabel, dotLabel = _ref$dotLabel === void 0 ? svgDefaultProps.dotLabel : _ref$dotLabel, _ref$dotLabelYOffset = _ref.dotLabelYOffset, dotLabelYOffset = _ref$dotLabelYOffset === void 0 ? svgDefaultProps.dotLabelYOffset : _ref$dotLabelYOffset, _ref$colors = _ref.colors, colors = _ref$colors === void 0 ? svgDefaultProps.colors : _ref$colors, _ref$fillOpacity = _ref.fillOpacity, fillOpacity = _ref$fillOpacity === void 0 ? svgDefaultProps.fillOpacity : _ref$fillOpacity, _ref$blendMode = _ref.blendMode, blendMode = _ref$blendMode === void 0 ? svgDefaultProps.blendMode : _ref$blendMode, _ref$isInteractive = _ref.isInteractive, isInteractive = _ref$isInteractive === void 0 ? svgDefaultProps.isInteractive : _ref$isInteractive, _ref$sliceTooltip = _ref.sliceTooltip, sliceTooltip = _ref$sliceTooltip === void 0 ? svgDefaultProps.sliceTooltip : _ref$sliceTooltip, _ref$legends = _ref.legends, legends = _ref$legends === void 0 ? svgDefaultProps.legends : _ref$legends, role = _ref.role, ariaLabel = _ref.ariaLabel, ariaLabelledBy = _ref.ariaLabelledBy, ariaDescribedBy = _ref.ariaDescribedBy, _ref$defs = _ref.defs, defs = _ref$defs === void 0 ? svgDefaultProps.defs : _ref$defs, _ref$fill = _ref.fill, fill = _ref$fill === void 0 ? svgDefaultProps.fill : _ref$fill; var _useDimensions = nivoCore.useDimensions(width, height, partialMargin), margin = _useDimensions.margin, innerWidth = _useDimensions.innerWidth, innerHeight = _useDimensions.innerHeight, outerWidth = _useDimensions.outerWidth, outerHeight = _useDimensions.outerHeight; var _useRadar = useRadar({ data: data, keys: keys, indexBy: indexBy, maxValue: maxValue, valueFormat: valueFormat, curve: curve, width: innerWidth, height: innerHeight, colors: colors, legends: legends, defs: defs, fill: fill }), getIndex = _useRadar.getIndex, indices = _useRadar.indices, formatValue = _useRadar.formatValue, colorByKey = _useRadar.colorByKey, fillByKey = _useRadar.fillByKey, boundDefs = _useRadar.boundDefs, radius = _useRadar.radius, radiusScale = _useRadar.radiusScale, centerX = _useRadar.centerX, centerY = _useRadar.centerY, angleStep = _useRadar.angleStep, curveFactory = _useRadar.curveFactory, boundLegends = _useRadar.boundLegends, customLayerProps = _useRadar.customLayerProps; var layerById = { grid: null, layers: null, slices: null, dots: null, legends: null }; if (layers.includes('grid')) { layerById.grid = jsxRuntime.jsx("g", { transform: "translate(".concat(centerX, ", ").concat(centerY, ")"), children: jsxRuntime.jsx(RadarGrid, { levels: gridLevels, shape: gridShape, radius: radius, angleStep: angleStep, indices: indices, label: gridLabel, labelOffset: gridLabelOffset }) }, "grid"); } if (layers.includes('layers')) { layerById.layers = jsxRuntime.jsx("g", { transform: "translate(".concat(centerX, ", ").concat(centerY, ")"), children: keys.map(function (key) { return jsxRuntime.jsx(RadarLayer, { data: data, item: key, colorByKey: colorByKey, fillByKey: fillByKey, radiusScale: radiusScale, angleStep: angleStep, curveFactory: curveFactory, borderWidth: borderWidth, borderColor: borderColor, fillOpacity: fillOpacity, blendMode: blendMode }, key); }) }, "layers"); } if (layers.includes('slices') && isInteractive) { layerById.slices = jsxRuntime.jsx("g", { transform: "translate(".concat(centerX, ", ").concat(centerY, ")"), children: jsxRuntime.jsx(RadarSlices, { data: data, keys: keys, getIndex: getIndex, formatValue: formatValue, colorByKey: colorByKey, radius: radius, angleStep: angleStep, tooltip: sliceTooltip }) }, "slices"); } if (layers.includes('dots') && enableDots) { layerById.dots = jsxRuntime.jsx("g", { transform: "translate(".concat(centerX, ", ").concat(centerY, ")"), children: jsxRuntime.jsx(RadarDots, { data: data, keys: keys, getIndex: getIndex, radiusScale: radiusScale, angleStep: angleStep, symbol: dotSymbol, size: dotSize, colorByKey: colorByKey, color: dotColor, borderWidth: dotBorderWidth, borderColor: dotBorderColor, enableLabel: enableDotLabel, label: dotLabel, formatValue: formatValue, labelYOffset: dotLabelYOffset }) }, "dots"); } if (layers.includes('legends')) { layerById.legends = jsxRuntime.jsx(react.Fragment, { children: boundLegends.map(function (legend, i) { return jsxRuntime.jsx(nivoLegends.BoxLegendSvg, _objectSpread2(_objectSpread2({}, legend), {}, { containerWidth: width, containerHeight: height }), i); }) }, "legends"); } return jsxRuntime.jsx(nivoCore.SvgWrapper, { defs: boundDefs, width: outerWidth, height: outerHeight, margin: margin, role: role, ariaLabel: ariaLabel, ariaLabelledBy: ariaLabelledBy, ariaDescribedBy: ariaDescribedBy, children: layers.map(function (layer, i) { var _layerById$layer; if (typeof layer === 'function') { return jsxRuntime.jsx(react.Fragment, { children: react.createElement(layer, customLayerProps) }, i); } return (_layerById$layer = layerById === null || layerById === void 0 ? void 0 : layerById[layer]) !== null && _layerById$layer !== void 0 ? _layerById$layer : null; }) }); }; var Radar = function Radar(_ref2) { var _ref2$isInteractive = _ref2.isInteractive, isInteractive = _ref2$isInteractive === void 0 ? svgDefaultProps.isInteractive : _ref2$isInteractive, _ref2$animate = _ref2.animate, animate = _ref2$animate === void 0 ? svgDefaultProps.animate : _ref2$animate, _ref2$motionConfig = _ref2.motionConfig, motionConfig = _ref2$motionConfig === void 0 ? svgDefaultProps.motionConfig : _ref2$motionConfig, theme = _ref2.theme, renderWrapper = _ref2.renderWrapper, otherProps = _objectWithoutProperties(_ref2, ["isInteractive", "animate", "motionConfig", "theme", "renderWrapper"]); return jsxRuntime.jsx(nivoCore.Container, { animate: animate, isInteractive: isInteractive, motionConfig: motionConfig, renderWrapper: renderWrapper, theme: theme, children: jsxRuntime.jsx(InnerRadar, _objectSpread2({ isInteractive: isInteractive }, otherProps)) }); }; var ResponsiveRadar = function ResponsiveRadar(props) { return jsxRuntime.jsx(nivoCore.ResponsiveWrapper, { children: function children(_ref) { var width = _ref.width, height = _ref.height; return jsxRuntime.jsx(Radar, _objectSpread2({ width: width, height: height }, props)); } }); }; exports.Radar = Radar; exports.RadarDots = RadarDots; exports.ResponsiveRadar = ResponsiveRadar; exports.svgDefaultProps = svgDefaultProps; //# sourceMappingURL=nivo-radar.cjs.js.map