UNPKG

@onesy/ui-react

Version:
1,051 lines (1,035 loc) 74.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _utils = require("@onesy/utils"); var _styleReact = require("@onesy/style-react"); var _Surface = _interopRequireDefault(require("../Surface")); var _Line = _interopRequireDefault(require("../Line")); var _Type = _interopRequireDefault(require("../Type")); var _Path = _interopRequireDefault(require("../Path")); var _Append = _interopRequireDefault(require("../Append")); var _Grow = _interopRequireDefault(require("../Grow")); var _useMediaQuery = _interopRequireDefault(require("../useMediaQuery")); var _utils2 = require("../utils"); var _jsxRuntime = require("react/jsx-runtime"); const _excluded = ["ref", "tonal", "color", "title", "subtitle", "values", "pre", "elements", "names", "nameX", "nameY", "tooltip", "tooltipIndividually", "tooltipCloseOnMouseLeave", "elementTooltip", "guidelines", "guidelinesAppend", "guidelinesDisplayInactive", "additionalLines", "legend", "legendManageVisibility", "legendPosition", "animate", "animateTimeout", "labels", "labelsX", "labelsY", "labelDecimalPlaces", "labelsAutoNumber", "labelsYAutoNumber", "labelsXAutoNumber", "marks", "marksX", "marksY", "marksAutoNumber", "marksYAutoNumber", "marksXAutoNumber", "grid", "gridX", "gridY", "gridAutoNumber", "gridYAutoNumber", "gridXAutoNumber", "points", "pointsVisibility", "borders", "borderStart", "borderLeft", "borderEnd", "borderRight", "borderTop", "borderBottom", "minX", "maxX", "minY", "maxY", "minMaxPadding", "minPadding", "maxPadding", "minPaddingX", "minPaddingY", "maxPaddingX", "maxPaddingY", "noMain", "tooltipRender", "tooltipGroupRender", "labelRender", "labelResolve", "onUpdateRects", "Component", "SvgProps", "TypeProps", "TitleProps", "SubtitleProps", "PointsProps", "PointProps", "HeaderProps", "AppendProps", "AdditionalLineProps", "AdditionalLinesProps", "LegendProps", "LegendItemProps", "GuidelineProps", "WrapperProps", "className", "children"], _excluded2 = ["item", "className"]; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } const useStyle = (0, _styleReact.style)(theme => ({ root: { width: '100%', '&.onesy-Surface-root': { background: 'transparent' } }, additionalLines: { pointerEvents: 'none' }, append_wrapper: { userSelect: 'none', pointerEvents: 'none', zIndex: theme.z_index.tooltip }, wrapper: { position: 'relative', height: '400px', width: '100%', maxWidth: '1000px' }, wrapper_label_x: { margin: '0 0 30px 0' }, wrapper_label_y: { margin: '0 0 0 40px' }, wrapper_labels: { margin: '0 0 30px 40px' }, wrapper_name_x: { margin: '0 0 60px 0' }, wrapper_name_y: { margin: '0 0 0 70px' }, wrapper_names: { margin: '0 0 60px 70px' }, legend_offset_labels_y: { paddingLeft: theme.methods.space.value(5, 'px') }, legend_offset_names_y: { paddingLeft: theme.methods.space.value(9, 'px') }, svg: { position: 'relative', touchAction: 'none', userSelect: 'none', '& path, & circle, & rect, & g': { transition: theme.methods.transitions.make('opacity', { duration: 'xs' }) } }, header: { width: '100%', marginBottom: '24px' }, subtitle: { opacity: '0.74' }, append: { padding: `${theme.methods.space.value(1.5, 'px')} ${theme.methods.space.value(2.5, 'px')}`, borderRadius: theme.methods.shape.radius.value(1.5, 'px') }, name: { position: 'absolute', userSelect: 'none' }, name_x: { bottom: '-61px', left: '50%', transform: 'translateX(-50%)' }, name_y: { left: '-87px', top: '50%', transform: 'translateY(-50%) rotate(-90deg)' }, labels: { position: 'absolute', userSelect: 'none' }, labels_x: { top: 'calc(100% + 12px)', left: '0', width: '100%' }, labels_y: { top: '0', right: 'calc(100% + 12px)', height: '100%' }, label: { position: 'absolute', whiteSpace: 'nowrap' }, label_x: { transform: 'translateX(-50%)', top: '0' }, label_y: { transform: 'translateY(50%)', right: '0' }, marks: { position: 'absolute' }, marks_x: { top: 'calc(100% + 0px)', left: '0', width: '100%' }, marks_y: { top: '0', right: 'calc(100% + 0px)', height: '100%' }, mark: { position: 'absolute' }, mark_x: { width: '1px', height: '7px', top: '0', background: 'currentColor' }, mark_y: { width: '7px', height: '1px', right: '0', background: 'currentColor' }, grids: { position: 'absolute', width: '100%', height: '100%' }, grids_x: { top: '0', left: '0' }, grids_y: { top: '0', left: '0' }, grid: { position: 'absolute', width: '100%', height: '100%', opacity: theme.palette.light ? '0.07' : '0.14' }, grid_x: { width: '1px', background: 'currentColor' }, grid_y: { height: '1px', background: 'currentColor' }, border: { position: 'absolute', background: 'currentColor' }, borderX: { height: '1px', width: 'calc(100% + 1px)', left: '0' }, borderTop: { top: '0' }, borderBottom: { bottom: '0' }, borderY: { width: '1px', height: 'calc(100% + 1px)', top: '-1px' }, borderStart: { insetInlineStart: '0' }, borderLeft: { left: '0' }, borderEnd: { insetInlineEnd: '0' }, borderRight: { right: '0' }, point_visibility_hover: { opacity: '0', transition: theme.methods.transitions.make('opacity', { duration: 'xxs' }), '&:hover': { opacity: '1' } }, point_visibility_visible: { opacity: '1' }, point_active: { opacity: '1' }, point_visibility_hidden: { opacity: '0', pointerEvents: 'none' }, // Legend legend: {}, legend_position_top: { marginBottom: '16px' }, legend_position_bottom: { marginTop: '16px' }, legend_item: { userSelect: 'none' }, legend_item_manage_visibility: { cursor: 'pointer', transition: theme.methods.transitions.make('opacity', { duration: 'xs' }) }, legend_item_hidden: { opacity: '0.4' }, legend_icon: { width: '10px', height: '10px', borderRadius: theme.methods.shape.radius.value(40, 'px'), boxSizing: 'border-box' }, append_icon: { width: '8px', height: '8px', borderRadius: theme.methods.shape.radius.value(40, 'px'), boxSizing: 'border-box' }, // Guideline guidelines: { stroke: 'currentColor', strokeDasharray: '4', opacity: '0.44', pointerEvents: 'none' } }), { name: 'onesy-Chart' }); const Chart = props_ => { var _theme$ui, _theme$ui2, _theme$elements, _theme$elements2, _theme$elements3, _theme$elements4, _theme$elements5, _theme$elements6, _append$values, _append$values2, _append$values3, _append$values4; const theme = (0, _styleReact.useOnesyTheme)(); const props = _objectSpread(_objectSpread(_objectSpread({}, theme === null || theme === void 0 || (_theme$ui = theme.ui) === null || _theme$ui === void 0 || (_theme$ui = _theme$ui.elements) === null || _theme$ui === void 0 || (_theme$ui = _theme$ui.all) === null || _theme$ui === void 0 || (_theme$ui = _theme$ui.props) === null || _theme$ui === void 0 ? void 0 : _theme$ui.default), theme === null || theme === void 0 || (_theme$ui2 = theme.ui) === null || _theme$ui2 === void 0 || (_theme$ui2 = _theme$ui2.elements) === null || _theme$ui2 === void 0 || (_theme$ui2 = _theme$ui2.onesyChart) === null || _theme$ui2 === void 0 || (_theme$ui2 = _theme$ui2.props) === null || _theme$ui2 === void 0 ? void 0 : _theme$ui2.default), props_); const Line = (theme === null || theme === void 0 || (_theme$elements = theme.elements) === null || _theme$elements === void 0 ? void 0 : _theme$elements.Line) || _Line.default; const Surface = (theme === null || theme === void 0 || (_theme$elements2 = theme.elements) === null || _theme$elements2 === void 0 ? void 0 : _theme$elements2.Surface) || _Surface.default; const Type = (theme === null || theme === void 0 || (_theme$elements3 = theme.elements) === null || _theme$elements3 === void 0 ? void 0 : _theme$elements3.Type) || _Type.default; const Path = (theme === null || theme === void 0 || (_theme$elements4 = theme.elements) === null || _theme$elements4 === void 0 ? void 0 : _theme$elements4.Path) || _Path.default; const Append = (theme === null || theme === void 0 || (_theme$elements5 = theme.elements) === null || _theme$elements5 === void 0 ? void 0 : _theme$elements5.Append) || _Append.default; const Grow = (theme === null || theme === void 0 || (_theme$elements6 = theme.elements) === null || _theme$elements6 === void 0 ? void 0 : _theme$elements6.Grow) || _Grow.default; const { ref, tonal = true, color = 'primary', title, subtitle, // Values values, // Pre pre, // Elements elements, // Names names, nameX: nameX_, nameY: nameY_, // Tooltip tooltip: tooltip_, tooltipIndividually: tooltipIndividually_, tooltipCloseOnMouseLeave: tooltipCloseOnMouseLeave_, elementTooltip: elementTooltip_, // Guideline guidelines: guidelines_, guidelinesAppend: guidelinesAppend_, guidelinesDisplayInactive: guidelinesDisplayInactive_, // Additional lines additionalLines: additionalLines__, // Legend legend: legend___, legendManageVisibility = true, legendPosition = 'bottom', // Animation animate: animate_, animateTimeout: animateTimeout_, // Labels labels: labels___, labelsX: labelsX_, labelsY: labelsY_, labelDecimalPlaces: labelDecimalPlaces_, labelsAutoNumber: labelsAutoNumber_, labelsYAutoNumber: labelsYAutoNumber_, labelsXAutoNumber: labelsXAutoNumber_, // Marks marks: marks___, marksX: marksX_, marksY: marksY_, marksAutoNumber: marksAutoNumber_, marksYAutoNumber: marksYAutoNumber_, marksXAutoNumber: marksXAutoNumber_, // Grid grid: grid___, gridX: gridX_, gridY: gridY_, gridAutoNumber: gridAutoNumber_, gridYAutoNumber: gridYAutoNumber_, gridXAutoNumber: gridXAutoNumber_, // Points points: points___, pointsVisibility: pointsVisibility_, // Borders borders: borders_ = true, borderStart: borderStart_ = false, borderLeft: borderLeft_ = true, borderEnd: borderEnd_ = false, borderRight: borderRight_ = false, borderTop: borderTop_ = false, borderBottom: borderBottom_ = true, // Min, max minX: minX_, maxX: maxX_, minY: minY_, maxY: maxY_, minMaxPadding: minMaxPadding__, minPadding: minPadding__, maxPadding: maxPadding__, minPaddingX: minPaddingX__, minPaddingY: minPaddingY__, maxPaddingX: maxPaddingX__, maxPaddingY: maxPaddingY__, noMain, tooltipRender, tooltipGroupRender, labelRender, labelResolve, onUpdateRects, Component = 'div', SvgProps, TypeProps, TitleProps, SubtitleProps, PointsProps, PointProps, HeaderProps, AppendProps, AdditionalLineProps, AdditionalLinesProps, LegendProps, LegendItemProps, GuidelineProps, WrapperProps, className, children } = props, other = (0, _objectWithoutProperties2.default)(props, _excluded); const { classes } = useStyle(); const refs = { root: _react.default.useRef(undefined), wrapper: _react.default.useRef(undefined), svg: _react.default.useRef(undefined), defs: _react.default.useRef(undefined), minMax: _react.default.useRef(undefined), rects: _react.default.useRef(undefined), guidelines: _react.default.useRef(undefined), guidelinesIn: _react.default.useRef(undefined), guidelinesPosition: _react.default.useRef(undefined), guidelinesAppend: _react.default.useRef(undefined), hover: _react.default.useRef(undefined), allValues: _react.default.useRef([]), values: _react.default.useRef([]), visible: _react.default.useRef([]), appendStyle: _react.default.useRef({}), theme: _react.default.useRef([]) }; const keys = _react.default.useMemo(() => { const result = []; const items = [nameX_, nameY_, tooltip_, tooltipIndividually_, tooltipCloseOnMouseLeave_, elementTooltip_, guidelines_, guidelinesAppend_, guidelinesDisplayInactive_, animate_, animateTimeout_, legend___, labels___, labelsX_, labelsY_, labelDecimalPlaces_, labelsAutoNumber_, labelsYAutoNumber_, labelsXAutoNumber_, marks___, marksX_, marksY_, marksAutoNumber_, marksYAutoNumber_, marksXAutoNumber_, grid___, gridX_, gridY_, gridAutoNumber_, gridYAutoNumber_, gridXAutoNumber_, points___, pointsVisibility_]; items.forEach(item => { if ((0, _utils.is)('object', item)) Object.keys(item).filter(key => theme.breakpoints.media[key]).forEach(key_0 => result.push(key_0)); }); return (0, _utils.unique)(result); }, [nameX_, nameY_, tooltip_, tooltipIndividually_, tooltipCloseOnMouseLeave_, elementTooltip_, guidelines_, guidelinesAppend_, guidelinesDisplayInactive_, animate_, animateTimeout_, legend___, labels___, labelsX_, labelsY_, labelDecimalPlaces_, labelsAutoNumber_, labelsYAutoNumber_, labelsXAutoNumber_, marks___, marksX_, marksY_, marksAutoNumber_, marksYAutoNumber_, marksXAutoNumber_, grid___, gridX_, gridY_, gridAutoNumber_, gridYAutoNumber_, gridXAutoNumber_, points___, pointsVisibility_, borders_, borderStart_, borderLeft_, borderEnd_, borderRight_, borderTop_, borderBottom_, minX_, maxX_, minY_, maxY_, minMaxPadding__, minPadding__, maxPadding__, minPaddingX__, minPaddingY__, maxPaddingX__, maxPaddingY__]); const breakpoints = {}; keys.forEach(key_1 => { breakpoints[key_1] = (0, _useMediaQuery.default)(theme.breakpoints.media[key_1], { element: refs.root.current }); }); const nameX = (0, _utils2.valueBreakpoints)(nameX_, undefined, breakpoints, theme); const nameY = (0, _utils2.valueBreakpoints)(nameY_, undefined, breakpoints, theme); const tooltip = (0, _utils2.valueBreakpoints)(tooltip_, true, breakpoints, theme); const tooltipIndividually = (0, _utils2.valueBreakpoints)(tooltipIndividually_, true, breakpoints, theme); const tooltipCloseOnMouseLeave = (0, _utils2.valueBreakpoints)(tooltipCloseOnMouseLeave_, true, breakpoints, theme); const elementTooltip = (0, _utils2.valueBreakpoints)(elementTooltip_, undefined, breakpoints, theme); const guidelines = (0, _utils2.valueBreakpoints)(guidelines_, undefined, breakpoints, theme); const guidelinesAppend = (0, _utils2.valueBreakpoints)(guidelinesAppend_, true, breakpoints, theme); const guidelinesDisplayInactive = (0, _utils2.valueBreakpoints)(guidelinesDisplayInactive_, false, breakpoints, theme); const animate = (0, _utils2.valueBreakpoints)(animate_, true, breakpoints, theme); const animateTimeout = (0, _utils2.valueBreakpoints)(animateTimeout_, 140, breakpoints, theme); const legend__ = (0, _utils2.valueBreakpoints)(legend___, 'auto', breakpoints, theme); const labels__ = (0, _utils2.valueBreakpoints)(labels___, 'auto', breakpoints, theme); const labelsX = (0, _utils2.valueBreakpoints)(labelsX_, true, breakpoints, theme); const labelsY = (0, _utils2.valueBreakpoints)(labelsY_, true, breakpoints, theme); const labelDecimalPlaces = (0, _utils2.valueBreakpoints)(labelDecimalPlaces_, 0, breakpoints, theme); const labelsAutoNumber = (0, _utils2.valueBreakpoints)(labelsAutoNumber_, 10, breakpoints, theme); const labelsYAutoNumber = (0, _utils2.valueBreakpoints)(labelsYAutoNumber_, undefined, breakpoints, theme); const labelsXAutoNumber = (0, _utils2.valueBreakpoints)(labelsXAutoNumber_, undefined, breakpoints, theme); const marks__ = (0, _utils2.valueBreakpoints)(marks___, 'auto', breakpoints, theme); const marksX = (0, _utils2.valueBreakpoints)(marksX_, true, breakpoints, theme); const marksY = (0, _utils2.valueBreakpoints)(marksY_, true, breakpoints, theme); const marksAutoNumber = (0, _utils2.valueBreakpoints)(marksAutoNumber_, 10, breakpoints, theme); const marksYAutoNumber = (0, _utils2.valueBreakpoints)(marksYAutoNumber_, undefined, breakpoints, theme); const marksXAutoNumber = (0, _utils2.valueBreakpoints)(marksXAutoNumber_, undefined, breakpoints, theme); const grid__ = (0, _utils2.valueBreakpoints)(grid___, undefined, breakpoints, theme); const gridX = (0, _utils2.valueBreakpoints)(gridX_, true, breakpoints, theme); const gridY = (0, _utils2.valueBreakpoints)(gridY_, true, breakpoints, theme); const gridAutoNumber = (0, _utils2.valueBreakpoints)(gridAutoNumber_, 10, breakpoints, theme); const gridYAutoNumber = (0, _utils2.valueBreakpoints)(gridYAutoNumber_, undefined, breakpoints, theme); const gridXAutoNumber = (0, _utils2.valueBreakpoints)(gridXAutoNumber_, undefined, breakpoints, theme); const points__ = (0, _utils2.valueBreakpoints)(points___, true, breakpoints, theme); const pointsVisibility = (0, _utils2.valueBreakpoints)(pointsVisibility_, 'hover', breakpoints, theme); const borders = (0, _utils2.valueBreakpoints)(borders_, true, breakpoints, theme); const borderStart = (0, _utils2.valueBreakpoints)(borderStart_, false, breakpoints, theme); const borderLeft = (0, _utils2.valueBreakpoints)(borderLeft_, true, breakpoints, theme); const borderEnd = (0, _utils2.valueBreakpoints)(borderEnd_, false, breakpoints, theme); const borderRight = (0, _utils2.valueBreakpoints)(borderRight_, false, breakpoints, theme); const borderTop = (0, _utils2.valueBreakpoints)(borderTop_, false, breakpoints, theme); const borderBottom = (0, _utils2.valueBreakpoints)(borderBottom_, true, breakpoints, theme); const minX = (0, _utils2.valueBreakpoints)(minX_, undefined, breakpoints, theme); const maxX = (0, _utils2.valueBreakpoints)(maxX_, undefined, breakpoints, theme); const minY = (0, _utils2.valueBreakpoints)(minY_, undefined, breakpoints, theme); const maxY = (0, _utils2.valueBreakpoints)(maxY_, undefined, breakpoints, theme); const minMaxPadding = (0, _utils2.valueBreakpoints)(minMaxPadding__, undefined, breakpoints, theme); const minPadding = (0, _utils2.valueBreakpoints)(minPadding__, undefined, breakpoints, theme); const maxPadding = (0, _utils2.valueBreakpoints)(maxPadding__, undefined, breakpoints, theme); const minPaddingX = (0, _utils2.valueBreakpoints)(minPaddingX__, undefined, breakpoints, theme); const minPaddingY = (0, _utils2.valueBreakpoints)(minPaddingY__, undefined, breakpoints, theme); const maxPaddingX = (0, _utils2.valueBreakpoints)(maxPaddingX__, undefined, breakpoints, theme); const maxPaddingY = (0, _utils2.valueBreakpoints)(maxPaddingY__, undefined, breakpoints, theme); const [rects, setRects] = _react.default.useState(); const [points, setPoints] = _react.default.useState(); const [labels, setLabels] = _react.default.useState(); const [marks, setMarks] = _react.default.useState(); const [grid, setGrid] = _react.default.useState(); const [additionalLines, setAdditionalLines] = _react.default.useState(); const [legend, setLegend] = _react.default.useState([]); const [defs, setDefs] = _react.default.useState([]); const [append, setAppend] = _react.default.useState(); const [visible, setVisible] = _react.default.useState({}); const [guidelinesIn, setGuidelineIn] = _react.default.useState(false); const [guidelinesPosition, setGuidelinePosition] = _react.default.useState({}); const [hover, setHover] = _react.default.useState(false); refs.rects.current = rects; refs.guidelines.current = guidelines; refs.guidelinesIn.current = guidelinesIn; refs.guidelinesPosition.current = guidelinesPosition; refs.guidelinesAppend.current = guidelinesAppend; refs.hover.current = hover; refs.values.current = values; refs.visible.current = visible; refs.theme.current = theme; const minMax = _react.default.useMemo(() => { const values_ = { min: { x: minX || Number.MAX_SAFE_INTEGER, y: minY || Number.MAX_SAFE_INTEGER }, max: { x: maxX || Number.MIN_SAFE_INTEGER, y: maxY || Number.MIN_SAFE_INTEGER } }; if (!noMain) { const allItems = values.flatMap(item_0 => (0, _utils.is)('array', item_0.values[0]) ? item_0.values : [item_0.values]); if ((0, _utils.is)('array', values)) { allItems.forEach(item_1 => { const [x, y] = item_1; if (minX === undefined) values_.min.x = Math.min(values_.min.x, x); if (maxX === undefined) values_.max.x = Math.max(values_.max.x, x); if (minY === undefined) values_.min.y = Math.min(values_.min.y, y); if (maxY === undefined) values_.max.y = Math.max(values_.max.y, y); }); } const minPaddingY_ = minPaddingY !== undefined ? minPaddingY : minPadding !== undefined ? minPadding : minMaxPadding; const maxPaddingY_ = maxPaddingY !== undefined ? maxPaddingY : maxPadding !== undefined ? maxPadding : minMaxPadding; const minPaddingX_ = minPaddingX !== undefined ? minPaddingX : minPadding !== undefined ? minPadding : minMaxPadding; const maxPaddingX_ = maxPaddingX !== undefined ? maxPaddingX : maxPadding !== undefined ? maxPadding : minMaxPadding; const totals = { x: values_.max.x - values_.min.x, y: values_.max.y - values_.min.y }; if (minPaddingY_ !== undefined) values_.min.y -= totals.y * minPaddingY_; if (maxPaddingY_ !== undefined) values_.max.y += totals.y * maxPaddingY_; if (minPaddingX_ !== undefined) values_.min.x -= totals.x * minPaddingX_; if (maxPaddingX_ !== undefined) values_.max.x += totals.x * maxPaddingX_; } return values_; }, [values, minX, maxX, minY, maxY, minMaxPadding, minPadding, maxPadding, minPaddingX, minPaddingY, maxPaddingX, maxPaddingY, noMain]); refs.minMax.current = minMax; const onWrapperMouseEnter = () => { if (!refs.guidelinesIn.current) setGuidelineIn(true); setHover(true); }; const onWrapperMouseLeave = () => { if (refs.hover.current) { setHover(false); setTimeout(() => { if (tooltipCloseOnMouseLeave) setAppend(values__0 => _objectSpread(_objectSpread({}, values__0), {}, { open: false })); if (!guidelinesDisplayInactive) setGuidelineIn(false); setGuidelinePosition({}); }); } }; const makeGroupTooltip = (x_, y_) => { const items_0 = refs.allValues.current.filter(item_2 => item_2.normalized[0] === x_); const itemsY = (0, _utils.copy)(items_0).sort((a, b) => a.normalized[1] - b.normalized[1]); const x_0 = x_; const y_0 = itemsY[0].normalized[1]; const groups = {}; items_0.forEach(item_3 => { var _item_3$item; const color_ = ((_item_3$item = item_3.item) === null || _item_3$item === void 0 ? void 0 : _item_3$item.color) || 'primary'; if (!groups[color_]) groups[color_] = []; groups[color_].push(item_3); }); // Group sorted by y largest, to smallest Object.keys(groups).forEach(group => groups[group].sort((a_0, b_0) => { var _a_0$normalized, _b_0$normalized; return ((_a_0$normalized = a_0.normalized) === null || _a_0$normalized === void 0 ? void 0 : _a_0$normalized[1]) - ((_b_0$normalized = b_0.normalized) === null || _b_0$normalized === void 0 ? void 0 : _b_0$normalized[1]); })); // Groups sorted by y largest, to smallest const groupsSorted = Object.keys(groups).sort((a_1, b_1) => { var _groups$a_1$, _groups$b_1$; return ((_groups$a_1$ = groups[a_1][0]) === null || _groups$a_1$ === void 0 || (_groups$a_1$ = _groups$a_1$.normalized) === null || _groups$a_1$ === void 0 ? void 0 : _groups$a_1$[1]) - ((_groups$b_1$ = groups[b_1][0]) === null || _groups$b_1$ === void 0 || (_groups$b_1$ = _groups$b_1$.normalized) === null || _groups$b_1$ === void 0 ? void 0 : _groups$b_1$[1]); }); const element = (0, _utils.is)('function', tooltipGroupRender) ? tooltipGroupRender(groups, groupsSorted) : /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, { tonal: tonal, color: color, elevation: 1, gap: 0.25, direction: "column", Component: Surface, className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Chart-append'], classes.append]), children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(Line, { gap: 1, direction: "column", style: { width: '100%' }, children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(Line, { gap: 1, direction: "row", align: "center", children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Type, { version: "b3", style: { fontWeight: 600 }, children: (names === null || names === void 0 ? void 0 : names.y) || 'y' }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Type, { version: "b3", style: { fontWeight: 600 }, children: (names === null || names === void 0 ? void 0 : names.x) || 'x' })] }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, { gap: 1, direction: "column", children: groupsSorted.map((group_0, index) => { var _groups$group_0$; return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Line, { gap: 1, direction: "column", style: { width: '100%' }, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Chart-append-icon'], classes.append_icon]), style: { background: !refs.theme.current.palette.color[group_0] ? group_0 : refs.theme.current.palette.color[group_0][((_groups$group_0$ = groups[group_0][0]) === null || _groups$group_0$ === void 0 || (_groups$group_0$ = _groups$group_0$.item) === null || _groups$group_0$ === void 0 ? void 0 : _groups$group_0$.tone) || 'main'] } }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, { gap: 0, direction: "column", style: { width: '100%' }, children: groups[group_0].map((item_4, index_) => { var _item_4$values, _item_4$values2, _item_4$values3, _item_4$values4; return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Line, { gap: 1, direction: "row", style: { width: '100%' }, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Type, { version: "b3", children: (0, _utils.is)('function', labelResolve) ? labelResolve(item_4 === null || item_4 === void 0 || (_item_4$values = item_4.values) === null || _item_4$values === void 0 ? void 0 : _item_4$values[1], 'y', item_4, 'group') : item_4 === null || item_4 === void 0 || (_item_4$values2 = item_4.values) === null || _item_4$values2 === void 0 ? void 0 : _item_4$values2[1] }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Type, { version: "b3", children: (0, _utils.is)('function', labelResolve) ? labelResolve(item_4 === null || item_4 === void 0 || (_item_4$values3 = item_4.values) === null || _item_4$values3 === void 0 ? void 0 : _item_4$values3[0], 'x', item_4, 'group') : item_4 === null || item_4 === void 0 || (_item_4$values4 = item_4.values) === null || _item_4$values4 === void 0 ? void 0 : _item_4$values4[0] })] }, index_); }) })] }, index); }) })] }) }); const rectSvg = refs.svg.current.getBoundingClientRect(); const width = 8; const height = 8; const rect_ = { x: x_0 + rectSvg.x - width, y: y_0 + rectSvg.y - width, width, height }; rect_.top = rect_.y; rect_.bottom = rect_.y + height; rect_.left = rect_.x; rect_.right = rect_.x + width; setAppend({ open: true, element, rect: rect_ }); }; _react.default.useEffect(() => { var _refs$root$current; const onMove = (x__0, y__0) => { // Only horizontal move at the moment // ie. vertical guidelines const rectWrapper = refs.rects.current.wrapper; const rectSvg_0 = refs.svg.current.getBoundingClientRect(); let x_1 = (0, _utils.clamp)(x__0 - (rectSvg_0 === null || rectSvg_0 === void 0 ? void 0 : rectSvg_0.x), 0, rectWrapper === null || rectWrapper === void 0 ? void 0 : rectWrapper.width); const y_1 = (0, _utils.clamp)(y__0 - (rectSvg_0 === null || rectSvg_0 === void 0 ? void 0 : rectSvg_0.y), 0, rectWrapper === null || rectWrapper === void 0 ? void 0 : rectWrapper.height); if (refs.guidelinesAppend.current && ['both', 'vertical'].includes(refs.guidelines.current)) { const allValues = refs.allValues.current; let index_0; let previous; let item_5; for (let i = 0; i < allValues.length; i++) { var _previous, _item_; previous = allValues[i - 1]; item_5 = allValues[i]; if (((_previous = previous) === null || _previous === void 0 || (_previous = _previous.normalized) === null || _previous === void 0 ? void 0 : _previous[0]) <= x_1 && x_1 <= ((_item_ = item_5) === null || _item_ === void 0 || (_item_ = _item_.normalized) === null || _item_ === void 0 ? void 0 : _item_[0])) { index_0 = i; break; } } if (index_0 === undefined) { var _allValues$; index_0 = x_1 <= ((_allValues$ = allValues[0]) === null || _allValues$ === void 0 || (_allValues$ = _allValues$.normalized) === null || _allValues$ === void 0 ? void 0 : _allValues$[0]) ? 0 : allValues.length - 1; previous = allValues[index_0 - 1]; item_5 = allValues[index_0]; } if (previous || item_5) { var _item_5$normalized, _previous$normalized; if (!previous) x_1 = (_item_5$normalized = item_5.normalized) === null || _item_5$normalized === void 0 ? void 0 : _item_5$normalized[0];else if (!item_5) x_1 = (_previous$normalized = previous.normalized) === null || _previous$normalized === void 0 ? void 0 : _previous$normalized[0];else { const len = item_5.normalized[0] - previous.normalized[0]; const part = len / 2; x_1 = x_1 < previous.normalized[0] + part ? previous.normalized[0] : item_5.normalized[0]; } } makeGroupTooltip(x_1, y_1); } setGuidelinePosition(value_ => _objectSpread(_objectSpread({}, value_), {}, { x: x_1, y: y_1 })); }; const onMouseMove = event => { if (refs.hover.current) { const x_2 = event.clientX; const y_2 = event.clientY; onMove(x_2, y_2); } }; const onTouchMove = event_0 => { if (refs.hover.current) { const x_3 = event_0.touches[0].clientX; const y_3 = event_0.touches[0].clientY; onMove(x_3, y_3); } }; const method = () => { if (refs.wrapper.current) { const rectWrapper_0 = refs.wrapper.current.getBoundingClientRect(); const rectSvg_1 = refs.svg.current.getBoundingClientRect(); const rects_ = { wrapper: rectWrapper_0, svg: rectSvg_1 }; setRects(rects_); if ((0, _utils.is)('function', onUpdateRects)) onUpdateRects(rects_); } }; method(); const observer = new ResizeObserver(method); observer.observe(refs.root.current); const rootDocument = (0, _utils.isEnvironment)('browser') ? ((_refs$root$current = refs.root.current) === null || _refs$root$current === void 0 ? void 0 : _refs$root$current.ownerDocument) || window.document : undefined; rootDocument.addEventListener('mousemove', onMouseMove); rootDocument.addEventListener('touchmove', onTouchMove); rootDocument.addEventListener('touchend', onWrapperMouseLeave); return () => { observer.disconnect(); rootDocument.removeEventListener('mousemove', onMouseMove); rootDocument.removeEventListener('touchmove', onTouchMove); rootDocument.removeEventListener('touchend', onWrapperMouseLeave); }; }, []); _react.default.useEffect(() => { make(); }, [values, labels__, marks__, grid__, additionalLines__, legend__, visible, guidelinesAppend && guidelinesPosition, rects, theme]); const onPointMouseEnter = values__1 => { if (tooltipIndividually) { setAppend(_objectSpread(_objectSpread({}, (0, _utils.is)('function', tooltipRender) ? tooltipRender(values__1) : values__1), {}, { rect: values__1.rect, open: true })); } }; const onPointMouseLeave = () => { setAppend(append_ => _objectSpread(_objectSpread({}, append_), {}, { open: false })); }; const onLegendClick = value => { if (value !== undefined && legendManageVisibility) { setVisible(visible_ => _objectSpread(_objectSpread({}, visible_), {}, { [value]: ![undefined, true].includes(visible_[value]) })); } }; const LegendItem = props__ => { const { item: item_6 = {}, className: className_ } = props__, other_ = (0, _objectWithoutProperties2.default)(props__, _excluded2); const { color: color__0, tone = 'main', name = 'No name' } = item_6; return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Line, _objectSpread(_objectSpread(_objectSpread({ gap: 1, direction: "row", align: "center" }, LegendItemProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Chart-legend-item'], className_, LegendItemProps === null || LegendItemProps === void 0 ? void 0 : LegendItemProps.className, classes.legend_item]) }, other_), {}, { children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Chart-legend-icon'], classes.legend_icon]), style: { color: !theme.palette.color[color__0] ? color__0 : theme.palette.color[color__0][tone], background: !theme.palette.color[color__0] ? color__0 : theme.palette.color[color__0][tone] } }), /*#__PURE__*/(0, _jsxRuntime.jsx)(Type, { version: "b2", children: name })] })); }; const make = (valueNew = refs.values.current) => { // Make values into x, y, coordinates // normalized in rect width, height values // invert y so 0, 0 is at bottom left if (refs.rects.current && valueNew && !noMain) { const { width: width_0, height: height_0 } = refs.rects.current.wrapper; // Labels const labels_ = { x: (0, _utils.is)('array', labels__ === null || labels__ === void 0 ? void 0 : labels__.x) ? labels__.x : (0, _utils2.minMaxBetweenNumbers)(labelsXAutoNumber !== undefined ? labelsXAutoNumber : labelsAutoNumber !== undefined ? labelsAutoNumber : 10, refs.minMax.current.min.x, refs.minMax.current.max.x).map(item_7 => ({ value: item_7, label: (0, _utils.castParam)(item_7.toFixed(labelDecimalPlaces || 0)) })), y: (0, _utils.is)('array', labels__ === null || labels__ === void 0 ? void 0 : labels__.y) ? labels__.y : (0, _utils2.minMaxBetweenNumbers)(labelsYAutoNumber !== undefined ? labelsYAutoNumber : labelsAutoNumber !== undefined ? labelsAutoNumber : 10, refs.minMax.current.min.y, refs.minMax.current.max.y).map(item_8 => ({ value: item_8, label: (0, _utils.castParam)(item_8.toFixed(labelDecimalPlaces || 0)) })) }; labels_.x = labels_.x.map(item_9 => _objectSpread(_objectSpread({}, item_9), {}, { percentage: (0, _utils.percentageFromValueWithinRange)(item_9.value, refs.minMax.current.min.x, refs.minMax.current.max.x) })); labels_.y = labels_.y.map(item_10 => _objectSpread(_objectSpread({}, item_10), {}, { percentage: (0, _utils.percentageFromValueWithinRange)(item_10.value, refs.minMax.current.min.y, refs.minMax.current.max.y) })); // Marks const marks_ = { x: (0, _utils.is)('array', marks__ === null || marks__ === void 0 ? void 0 : marks__.x) ? marks__.x : (0, _utils2.minMaxBetweenNumbers)(marksXAutoNumber !== undefined ? marksXAutoNumber : marksAutoNumber !== undefined ? marksAutoNumber : 10, refs.minMax.current.min.x, refs.minMax.current.max.x).map(item_11 => ({ value: item_11 })), y: (0, _utils.is)('array', marks__ === null || marks__ === void 0 ? void 0 : marks__.y) ? marks__.y : (0, _utils2.minMaxBetweenNumbers)(marksYAutoNumber !== undefined ? marksYAutoNumber : marksAutoNumber !== undefined ? marksAutoNumber : 10, refs.minMax.current.min.y, refs.minMax.current.max.y).map(item_12 => ({ value: item_12 })) }; marks_.x = marks_.x.map(item_13 => _objectSpread(_objectSpread({}, item_13), {}, { percentage: (0, _utils.percentageFromValueWithinRange)(item_13.value, refs.minMax.current.min.x, refs.minMax.current.max.x) })); marks_.y = marks_.y.map(item_14 => _objectSpread(_objectSpread({}, item_14), {}, { percentage: (0, _utils.percentageFromValueWithinRange)(item_14.value, refs.minMax.current.min.y, refs.minMax.current.max.y) })); // Grid const grid_ = { x: (0, _utils.is)('array', grid__ === null || grid__ === void 0 ? void 0 : grid__.x) ? grid__.x : (0, _utils2.minMaxBetweenNumbers)(gridXAutoNumber !== undefined ? gridXAutoNumber : gridAutoNumber !== undefined ? gridAutoNumber : 10, refs.minMax.current.min.x, refs.minMax.current.max.x).map(item_15 => ({ value: item_15 })), y: (0, _utils.is)('array', grid__ === null || grid__ === void 0 ? void 0 : grid__.y) ? grid__.y : (0, _utils2.minMaxBetweenNumbers)(gridYAutoNumber !== undefined ? gridYAutoNumber : gridAutoNumber !== undefined ? gridAutoNumber : 10, refs.minMax.current.min.y, refs.minMax.current.max.y).map(item_16 => ({ value: item_16 })) }; grid_.x = grid_.x.map(item_17 => _objectSpread(_objectSpread({}, item_17), {}, { percentage: (0, _utils.percentageFromValueWithinRange)(item_17.value, refs.minMax.current.min.x, refs.minMax.current.max.x) })); grid_.y = grid_.y.map(item_18 => _objectSpread(_objectSpread({}, item_18), {}, { percentage: (0, _utils.percentageFromValueWithinRange)(item_18.value, refs.minMax.current.min.y, refs.minMax.current.max.y) })); refs.allValues.current = []; // Points const points_ = (0, _utils.copy)(valueNew).flatMap(item_19 => { var _item_19$values; const { color: color__1, tone: tone_0 = 'main', name: name_0 } = item_19; const itemValues = ([x_4, y_4, ...args]) => { const values__ = { x: (0, _utils.percentageFromValueWithinRange)(x_4, refs.minMax.current.min.x, refs.minMax.current.max.x), y: (0, _utils.percentageFromValueWithinRange)(y_4, refs.minMax.current.min.y, refs.minMax.current.max.y) }; values__.x = (0, _utils.valueFromPercentageWithinRange)(values__.x, 0, width_0); values__.y = (0, _utils.valueFromPercentageWithinRange)(values__.y, 0, height_0); if (refs.visible.current[name_0] !== false) { refs.allValues.current.push({ item: item_19, values: [x_4, y_4, ...args], normalized: [values__.x, height_0 - values__.y].map(item_ => Math.abs(item_)) }); } return { values: [x_4, y_4, ...args], normalized: [values__.x, height_0 - values__.y].map(item__0 => Math.abs(item__0)) }; }; const itemArrayNested = (0, _utils.is)('array', (_item_19$values = item_19.values) === null || _item_19$values === void 0 ? void 0 : _item_19$values[0]); const values__2 = itemArrayNested ? (0, _utils.copy)(item_19.values) // Sort for x from smallest to largest .sort((a_2, b_2) => a_2[0] - b_2[0]).map(itemValues) : [itemValues(item_19.values)]; return values__2.map((item__1, index_1) => /*#__PURE__*/(0, _jsxRuntime.jsx)(Path, _objectSpread(_objectSpread(_objectSpread({ Component: "circle", r: 4, cx: item__1.normalized[0], cy: item__1.normalized[1], fill: !theme.palette.color[color__1] ? color__1 : theme.palette.color[color__1][tone_0], stroke: "none" }, !elementTooltip ? { onMouseEnter: event_1 => { const rect__0 = event_1.target.getBoundingClientRect(); onPointMouseEnter({ values: item__1.values, rect: rect__0 }); }, onMouseLeave: onPointMouseLeave } : undefined), PointProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Chart-point'], PointProps === null || PointProps === void 0 ? void 0 : PointProps.className, classes.point, classes[`point_visibility_${pointsVisibility}`], refs.guidelinesAppend.current && refs.guidelinesPosition.current.x === item__1.normalized[0] && classes.point_active]), style: _objectSpread(_objectSpread({}, refs.visible.current[name_0] === false ? { opacity: 0, pointerEvents: 'none' } : undefined), PointProps === null || PointProps === void 0 ? void 0 : PointProps.style) }), index_1)); }); refs.allValues.current.sort((a_3, b_3) => (a_3 === null || a_3 === void 0 ? void 0 : a_3.normalized[0]) - (b_3 === null || b_3 === void 0 ? void 0 : b_3.normalized[0])); // Guidelines const additionalLines_ = additionalLines__ && additionalLines__.map((item_20, index_2) => { const { color: color__2, tone: tone_1 = 'main', style } = item_20; const values__3 = { x1: (0, _utils.percentageFromValueWithinRange)(item_20.x1, refs.minMax.current.min.x, refs.minMax.current.max.x), y1: (0, _utils.percentageFromValueWithinRange)(item_20.y1, refs.minMax.current.min.y, refs.minMax.current.max.y), x2: (0, _utils.percentageFromValueWithinRange)(item_20.x2, refs.minMax.current.min.x, refs.minMax.current.max.x), y2: (0, _utils.percentageFromValueWithinRange)(item_20.y2, refs.minMax.current.min.y, refs.minMax.current.max.y) }; values__3.x1 = (0, _utils.valueFromPercentageWithinRange)(values__3.x1, 0, width_0); values__3.y1 = (0, _utils.valueFromPercentageWithinRange)(values__3.y1, 0, height_0); values__3.x2 = (0, _utils.valueFromPercentageWithinRange)(values__3.x2, 0, width_0); values__3.y2 = (0, _utils.valueFromPercentageWithinRange)(values__3.y2, 0, height_0); return /*#__PURE__*/(0, _jsxRuntime.jsx)(Path, _objectSpread(_objectSpread({ d: `M ${values__3.x1} ${height_0 - values__3.y1} L ${values__3.x2} ${height_0 - values__3.y2}`, fill: "none", stroke: !theme.palette.color[color__2] ? color__2 : theme.palette.color[color__2][tone_1] }, AdditionalLineProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Chart-additional-lines'], AdditionalLineProps === null || AdditionalLineProps === void 0 ? void 0 : AdditionalLineProps.className, classes.additionalLines]), style: _objectSpread(_objectSpread({}, style), AdditionalLineProps === null || AdditionalLineProps === void 0 ? void 0 : AdditionalLineProps.style) }), index_2); }); // Labels setLabels(labels_); // Marks setMarks(marks_); // Grid setGrid(grid_); // Guidelines setAdditionalLines(additionalLines_); // Update children value setPoints(points_); } // Legend const legend_ = legend__ !== 'auto' ? legend__ : []; if (legend__ === 'auto') { const map = {}; values.forEach(item_21 => { const name_1 = (item_21 === null || item_21 === void 0 ? void 0 : item_21.name) || ''; if (!map[name_1]) { legend_.push({ item: item_21, element: /*#__PURE__*/(0, _jsxRuntime.jsx)(LegendItem, { item: item_21 }) }); map[name_1] = true; } }); } // Legend if ((0, _utils.is)('array', legend_)) setLegend(legend_); }; return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Surface, _objectSpread(_objectSpread({ ref: item_22 => { if (ref) { if ((0, _utils.is)('function', ref)) ref(item_22);else ref.current = item_22; } refs.root.current = item_22; }, tonal: tonal, color: color, gap: 0, direction: "column", align: "center", Component: Line, AdditionalProps: { Component }, className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Chart-root'], className, classes.root]) }, other), {}, { children: [(title || subtitle) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(Line, _objectSpread(_objectSpread({ gap: 0.5, align: "center", justify: "center" }, HeaderProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Chart-header'], HeaderProps === null || HeaderProps === void 0 ? void 0 : HeaderProps.className, classes.header, (labels === null || labels === void 0 ? void 0 : labels.y) && labelsY && classes.legend_offset_labels_y, (names === null || names === void 0 ? void 0 : names.y) && nameY && classes.legend_offset_names_y]), children: [(0, _utils.is)('simple', title) ? /*#__PURE__*/(0, _jsxRuntime.jsx)(Type, _objectSpread(_objectSpread(_objectSpread({ version: "t2" }, TypeProps), TitleProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Chart-title'], TypeProps === null || TypeProps === void 0 ? void 0 : TypeProps.className, TitleProps === null || TitleProps === void 0 ? void 0 : TitleProps.className, classes.title]), children: title })) : title, (0, _utils.is)('simple', subtitle) ? /*#__PURE__*/(0, _jsxRuntime.jsx)(Type, _objectSpread(_objectSpread(_objectSpread({ version: "b3" }, TypeProps), SubtitleProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Chart-title'], TypeProps === null || TypeProps === void 0 ? void 0 : TypeProps.className, SubtitleProps === null || SubtitleProps === void 0 ? void 0 : SubtitleProps.className, classes.subtitle]), children: subtitle })) : subtitle] })), legend__ && legendPosition === 'top' && legend && /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, _objectSpread(_objectSpread({ gap: 2, direction: "row", align: "center", justify: "center", wrap: "wrap" }, LegendProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Chart-legend', `onesy-Chart-legend-position-${legendPosition}`], LegendProps === null || LegendProps === void 0 ? void 0 : LegendProps.className, classes.legend, classes[`legend_position_${legendPosition}`], (labels === null || labels === void 0 ? void 0 : labels.y) && labelsY && classes.legend_offset_labels_y, (names === null || names === void 0 ? void 0 : names.y) && nameY && classes.legend_offset_names_y]), children: legend.map(({ item: item_23, element: element_0 }) => { var _element_0$props; return /*#__PURE__*/_react.default.cloneElement(element_0, { onClick: () => onLegendClick(item_23.name), className: (0, _styleReact.classNames)([element_0 === null || element_0 === void 0 || (_element_0$props = element_0.props) === null || _element_0$props === void 0 ? void 0 : _element_0$props.className, legendManageVisibility && classes.legend_item_manage_visibility, refs.visible.current[item_23.name] === false && classes.legend_item_hidden]) }); }) })), /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, _objectSpread(_objectSpread({ ref: refs.wrapper }, WrapperProps), {}, { className: (0, _styleReact.classNames)([(0, _utils2.staticClassName)('Chart', theme) && ['onesy-Cha