/* eslint no-magic-numbers: ["error", { "ignore": [-1, 0, 1, 2] }]*/ import React from "react"; import defaults from "lodash/defaults"; import { Helpers, Path, LineHelpers, UserProps, StringOrCallback, NumberOrCallback, VictoryCommonPrimitiveProps, } from "victory-core"; const evaluateProps = (props) => { /** * Potential evaluated props are: * `ariaLabel` * `id` * `style` * `tabIndex` */ const ariaLabel = Helpers.evaluateProp(props.ariaLabel, props); const id = Helpers.evaluateProp(props.id, props); const style = Helpers.evaluateStyle( Object.assign( { fill: "none", stroke: "black", pointerEvents: "stroke" }, props.style, ), props, ); const tabIndex = Helpers.evaluateProp(props.tabIndex, props); return Object.assign({}, props, { ariaLabel, id, style, tabIndex }); }; const defaultProps = { pathComponent: , role: "presentation", shapeRendering: "auto", }; export const Curve: React.FC = (initialProps) => { const props = evaluateProps(defaults({}, initialProps, defaultProps)); const userProps = UserProps.getSafeUserProps(props); const { polar, origin } = props; const lineFunction = LineHelpers.getLineFunction(props); const defaultTransform = polar && origin ? `translate(${origin.x}, ${origin.y})` : undefined; const d = lineFunction(props.data); return React.cloneElement(props.pathComponent!, { ...props.events, ...userProps, "aria-label": props.ariaLabel, d, style: props.style, transform: props.transform || defaultTransform, className: props.className, role: props.role, shapeRendering: props.shapeRendering, clipPath: props.clipPath, tabIndex: props.tabIndex, }); }; export interface CurveProps extends VictoryCommonPrimitiveProps { ariaLabel?: StringOrCallback; // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type interpolation?: string | Function; openCurve?: boolean; pathComponent?: React.ReactElement; tabIndex?: NumberOrCallback; }