@lobehub/charts 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/BarChart/index.js +0 -1
- package/es/DataBars/CategoryBar.d.ts +13 -0
- package/es/DataBars/CategoryBar.js +191 -0
- package/es/DataBars/DeltaBar.d.ts +13 -0
- package/es/DataBars/DeltaBar.js +115 -0
- package/es/DataBars/MarkerBar.d.ts +16 -0
- package/es/DataBars/MarkerBar.js +91 -0
- package/es/DataBars/ProgressBar.d.ts +12 -0
- package/es/DataBars/ProgressBar.js +68 -0
- package/es/DataBars/index.d.ts +4 -0
- package/es/DataBars/index.js +4 -0
- package/es/DataBars/styles.d.ts +7 -0
- package/es/DataBars/styles.js +14 -0
- package/es/{components/Legend → Legend}/index.js +1 -1
- package/es/common/ChartLegend.js +1 -1
- package/es/index.d.ts +2 -1
- package/es/index.js +2 -1
- package/es/types.d.ts +5 -0
- package/es/types.js +8 -1
- package/es/utils/index.d.ts +1 -0
- package/es/utils/index.js +26 -1
- package/es/utils/theme.js +2 -2
- package/package.json +2 -2
- /package/es/{components/Legend → Legend}/LegendItem.d.ts +0 -0
- /package/es/{components/Legend → Legend}/LegendItem.js +0 -0
- /package/es/{components/Legend → Legend}/ScrollButton.d.ts +0 -0
- /package/es/{components/Legend → Legend}/ScrollButton.js +0 -0
- /package/es/{components/Legend → Legend}/index.d.ts +0 -0
package/es/BarChart/index.js
CHANGED
|
@@ -329,7 +329,6 @@ var BarChart = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
|
329
329
|
verticalAlign: "top"
|
|
330
330
|
}) : undefined, categories.map(function (category) {
|
|
331
331
|
var _categoryColors$get2;
|
|
332
|
-
console.log(categoryColors.get(category));
|
|
333
332
|
return /*#__PURE__*/_jsx(Bar, {
|
|
334
333
|
animationDuration: animationDuration,
|
|
335
334
|
className: cx(css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n fill: ", ";\n "])), (_categoryColors$get2 = categoryColors.get(category)) !== null && _categoryColors$get2 !== void 0 ? _categoryColors$get2 : theme.colorPrimary)),
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { FlexboxProps } from 'react-layout-kit';
|
|
3
|
+
export interface CategoryBarProps extends FlexboxProps {
|
|
4
|
+
colors?: string[];
|
|
5
|
+
markerValue?: number;
|
|
6
|
+
showAnimation?: boolean;
|
|
7
|
+
showLabels?: boolean;
|
|
8
|
+
size?: number;
|
|
9
|
+
tooltip?: string;
|
|
10
|
+
values: number[];
|
|
11
|
+
}
|
|
12
|
+
declare const CategoryBar: import("react").ForwardRefExoticComponent<CategoryBarProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
13
|
+
export default CategoryBar;
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
4
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
5
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
6
|
+
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
|
|
7
|
+
var _excluded = ["values", "colors", "markerValue", "showLabels", "tooltip", "showAnimation", "className", "width", "size", "style"];
|
|
8
|
+
import { Tooltip } from '@lobehub/ui';
|
|
9
|
+
import chroma from 'chroma-js';
|
|
10
|
+
import { forwardRef, memo, useMemo } from 'react';
|
|
11
|
+
import { Flexbox } from 'react-layout-kit';
|
|
12
|
+
import { sumNumericArray } from "../utils";
|
|
13
|
+
import { useStyles } from "./styles";
|
|
14
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
16
|
+
var getMarkerBgColor = function getMarkerBgColor(markerValue, values, colors) {
|
|
17
|
+
if (markerValue === undefined) return '';
|
|
18
|
+
var prefixSum = 0;
|
|
19
|
+
var _iterator = _createForOfIteratorHelper(values.entries()),
|
|
20
|
+
_step;
|
|
21
|
+
try {
|
|
22
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
23
|
+
var _step$value = _slicedToArray(_step.value, 2),
|
|
24
|
+
i = _step$value[0],
|
|
25
|
+
currentWidthPercentage = _step$value[1];
|
|
26
|
+
var currentBgColor = colors[i];
|
|
27
|
+
prefixSum += currentWidthPercentage;
|
|
28
|
+
if (prefixSum >= markerValue) return currentBgColor;
|
|
29
|
+
}
|
|
30
|
+
} catch (err) {
|
|
31
|
+
_iterator.e(err);
|
|
32
|
+
} finally {
|
|
33
|
+
_iterator.f();
|
|
34
|
+
}
|
|
35
|
+
return '';
|
|
36
|
+
};
|
|
37
|
+
var getPositionLeft = function getPositionLeft(value, maxValue) {
|
|
38
|
+
return value ? value / maxValue * 100 : 0;
|
|
39
|
+
};
|
|
40
|
+
var BarLabels = /*#__PURE__*/memo(function (_ref) {
|
|
41
|
+
var values = _ref.values;
|
|
42
|
+
var _useStyles = useStyles(),
|
|
43
|
+
cx = _useStyles.cx,
|
|
44
|
+
styles = _useStyles.styles;
|
|
45
|
+
var sumValues = useMemo(function () {
|
|
46
|
+
return sumNumericArray(values);
|
|
47
|
+
}, [values]);
|
|
48
|
+
var prefixSum = 0;
|
|
49
|
+
var sumConsecutiveHiddenLabels = 0;
|
|
50
|
+
return /*#__PURE__*/_jsxs(Flexbox, {
|
|
51
|
+
className: cx(styles.label, styles.emphasis),
|
|
52
|
+
horizontal: true,
|
|
53
|
+
style: {
|
|
54
|
+
position: 'relative'
|
|
55
|
+
},
|
|
56
|
+
children: [values.slice(0, values.length).map(function (widthPercentage, idx) {
|
|
57
|
+
prefixSum += widthPercentage;
|
|
58
|
+
var showLabel = (widthPercentage >= 0.1 * sumValues || sumConsecutiveHiddenLabels >= 0.09 * sumValues) && sumValues - prefixSum >= 0.15 * sumValues && prefixSum >= 0.1 * sumValues;
|
|
59
|
+
sumConsecutiveHiddenLabels = showLabel ? 0 : sumConsecutiveHiddenLabels += widthPercentage;
|
|
60
|
+
var widthPositionLeft = getPositionLeft(widthPercentage, sumValues);
|
|
61
|
+
if (prefixSum === sumValues) return null;
|
|
62
|
+
return /*#__PURE__*/_jsx(Flexbox, {
|
|
63
|
+
align: 'center',
|
|
64
|
+
horizontal: true,
|
|
65
|
+
justify: 'flex-end',
|
|
66
|
+
style: {
|
|
67
|
+
width: "".concat(widthPositionLeft, "%")
|
|
68
|
+
},
|
|
69
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
70
|
+
style: {
|
|
71
|
+
display: showLabel ? 'block' : 'hidden',
|
|
72
|
+
left: '50%',
|
|
73
|
+
transform: 'translateX(50%)'
|
|
74
|
+
},
|
|
75
|
+
children: prefixSum
|
|
76
|
+
})
|
|
77
|
+
}, "item-".concat(idx));
|
|
78
|
+
}), /*#__PURE__*/_jsx(Flexbox, {
|
|
79
|
+
align: 'center',
|
|
80
|
+
horizontal: true,
|
|
81
|
+
style: {
|
|
82
|
+
bottom: 0,
|
|
83
|
+
left: 0,
|
|
84
|
+
position: 'absolute'
|
|
85
|
+
},
|
|
86
|
+
children: "0"
|
|
87
|
+
}), /*#__PURE__*/_jsx(Flexbox, {
|
|
88
|
+
align: 'center',
|
|
89
|
+
horizontal: true,
|
|
90
|
+
style: {
|
|
91
|
+
bottom: 0,
|
|
92
|
+
position: 'absolute',
|
|
93
|
+
right: 0
|
|
94
|
+
},
|
|
95
|
+
children: sumValues
|
|
96
|
+
})]
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
var CategoryBar = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
100
|
+
var _useStyles2 = useStyles(),
|
|
101
|
+
cx = _useStyles2.cx,
|
|
102
|
+
styles = _useStyles2.styles,
|
|
103
|
+
theme = _useStyles2.theme;
|
|
104
|
+
var _props$values = props.values,
|
|
105
|
+
values = _props$values === void 0 ? [] : _props$values,
|
|
106
|
+
_props$colors = props.colors,
|
|
107
|
+
colors = _props$colors === void 0 ? [theme.colorSuccess, theme.colorWarning, theme.colorError] : _props$colors,
|
|
108
|
+
markerValue = props.markerValue,
|
|
109
|
+
_props$showLabels = props.showLabels,
|
|
110
|
+
showLabels = _props$showLabels === void 0 ? true : _props$showLabels,
|
|
111
|
+
tooltip = props.tooltip,
|
|
112
|
+
_props$showAnimation = props.showAnimation,
|
|
113
|
+
showAnimation = _props$showAnimation === void 0 ? false : _props$showAnimation,
|
|
114
|
+
className = props.className,
|
|
115
|
+
_props$width = props.width,
|
|
116
|
+
width = _props$width === void 0 ? '100%' : _props$width,
|
|
117
|
+
_props$size = props.size,
|
|
118
|
+
size = _props$size === void 0 ? 8 : _props$size,
|
|
119
|
+
style = props.style,
|
|
120
|
+
rest = _objectWithoutProperties(props, _excluded);
|
|
121
|
+
var colorGroup = colors.length === values.length ? colors : chroma.scale(colors).mode('lch').colors(values.length);
|
|
122
|
+
var markerBgColor = useMemo(function () {
|
|
123
|
+
return getMarkerBgColor(markerValue, values, colorGroup);
|
|
124
|
+
}, [markerValue, values, colorGroup]);
|
|
125
|
+
var maxValue = useMemo(function () {
|
|
126
|
+
return sumNumericArray(values);
|
|
127
|
+
}, [values]);
|
|
128
|
+
var markerPositionLeft = useMemo(function () {
|
|
129
|
+
return getPositionLeft(markerValue, maxValue);
|
|
130
|
+
}, [markerValue, maxValue]);
|
|
131
|
+
return /*#__PURE__*/_jsx(Tooltip, {
|
|
132
|
+
title: tooltip,
|
|
133
|
+
children: /*#__PURE__*/_jsxs(Flexbox, _objectSpread(_objectSpread({
|
|
134
|
+
className: className,
|
|
135
|
+
gap: 8,
|
|
136
|
+
ref: ref,
|
|
137
|
+
style: _objectSpread({
|
|
138
|
+
position: 'relative'
|
|
139
|
+
}, style),
|
|
140
|
+
width: width
|
|
141
|
+
}, rest), {}, {
|
|
142
|
+
children: [showLabels && /*#__PURE__*/_jsx(BarLabels, {
|
|
143
|
+
values: values
|
|
144
|
+
}), /*#__PURE__*/_jsxs(Flexbox, {
|
|
145
|
+
align: 'center',
|
|
146
|
+
className: cx('relative w-full flex items-center h-2'),
|
|
147
|
+
height: size,
|
|
148
|
+
horizontal: true,
|
|
149
|
+
style: {
|
|
150
|
+
position: 'relative'
|
|
151
|
+
},
|
|
152
|
+
children: [/*#__PURE__*/_jsx(Flexbox, {
|
|
153
|
+
align: 'center',
|
|
154
|
+
height: '100%',
|
|
155
|
+
horizontal: true,
|
|
156
|
+
style: {
|
|
157
|
+
borderRadius: size / 2,
|
|
158
|
+
overflow: 'hidden'
|
|
159
|
+
},
|
|
160
|
+
width: '100%',
|
|
161
|
+
children: values.map(function (value, idx) {
|
|
162
|
+
var _colorGroup$idx;
|
|
163
|
+
var baseColor = (_colorGroup$idx = colorGroup[idx]) !== null && _colorGroup$idx !== void 0 ? _colorGroup$idx : theme.colorPrimary;
|
|
164
|
+
var percentage = value / maxValue * 100;
|
|
165
|
+
return /*#__PURE__*/_jsx(Flexbox, {
|
|
166
|
+
height: '100%',
|
|
167
|
+
style: {
|
|
168
|
+
background: baseColor,
|
|
169
|
+
width: "".concat(percentage, "%")
|
|
170
|
+
}
|
|
171
|
+
}, "item-".concat(idx));
|
|
172
|
+
})
|
|
173
|
+
}), markerValue === undefined ? undefined : /*#__PURE__*/_jsx("div", {
|
|
174
|
+
className: cx(styles.markerWrapper, showAnimation && styles.showAnimation),
|
|
175
|
+
style: {
|
|
176
|
+
left: "".concat(markerPositionLeft, "%")
|
|
177
|
+
},
|
|
178
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
179
|
+
className: styles.marker,
|
|
180
|
+
style: {
|
|
181
|
+
background: markerBgColor || theme.colorPrimary,
|
|
182
|
+
height: size + 8
|
|
183
|
+
}
|
|
184
|
+
})
|
|
185
|
+
})]
|
|
186
|
+
})]
|
|
187
|
+
}))
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
CategoryBar.displayName = 'CategoryBar';
|
|
191
|
+
export default CategoryBar;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { FlexboxProps } from 'react-layout-kit';
|
|
3
|
+
export interface DeltaBarProps extends FlexboxProps {
|
|
4
|
+
bgColors?: string;
|
|
5
|
+
color?: string;
|
|
6
|
+
isIncreasePositive?: boolean;
|
|
7
|
+
showAnimation?: boolean;
|
|
8
|
+
size?: number;
|
|
9
|
+
tooltip?: ReactNode;
|
|
10
|
+
value: number;
|
|
11
|
+
}
|
|
12
|
+
declare const DeltaBar: import("react").ForwardRefExoticComponent<DeltaBarProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
13
|
+
export default DeltaBar;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
4
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
5
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
6
|
+
var _excluded = ["value", "bgColors", "color", "isIncreasePositive", "showAnimation", "className", "tooltip", "width", "size", "style"];
|
|
7
|
+
import { Tooltip } from '@lobehub/ui';
|
|
8
|
+
import { forwardRef } from 'react';
|
|
9
|
+
import { Flexbox } from 'react-layout-kit';
|
|
10
|
+
import { DeltaTypes } from "../types";
|
|
11
|
+
import { mapInputsToDeltaType } from "../utils";
|
|
12
|
+
import { useStyles } from "./styles";
|
|
13
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
15
|
+
var getDeltaType = function getDeltaType(value) {
|
|
16
|
+
return value >= 0 ? DeltaTypes.Increase : DeltaTypes.Decrease;
|
|
17
|
+
};
|
|
18
|
+
var DeltaBar = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
19
|
+
var _useStyles = useStyles(),
|
|
20
|
+
cx = _useStyles.cx,
|
|
21
|
+
styles = _useStyles.styles,
|
|
22
|
+
theme = _useStyles.theme;
|
|
23
|
+
var value = props.value,
|
|
24
|
+
bgColors = props.bgColors,
|
|
25
|
+
color = props.color,
|
|
26
|
+
_props$isIncreasePosi = props.isIncreasePositive,
|
|
27
|
+
isIncreasePositive = _props$isIncreasePosi === void 0 ? true : _props$isIncreasePosi,
|
|
28
|
+
_props$showAnimation = props.showAnimation,
|
|
29
|
+
showAnimation = _props$showAnimation === void 0 ? false : _props$showAnimation,
|
|
30
|
+
className = props.className,
|
|
31
|
+
tooltip = props.tooltip,
|
|
32
|
+
_props$width = props.width,
|
|
33
|
+
width = _props$width === void 0 ? '100%' : _props$width,
|
|
34
|
+
_props$size = props.size,
|
|
35
|
+
size = _props$size === void 0 ? 8 : _props$size,
|
|
36
|
+
style = props.style,
|
|
37
|
+
rest = _objectWithoutProperties(props, _excluded);
|
|
38
|
+
var deltaType = mapInputsToDeltaType(getDeltaType(value), isIncreasePositive);
|
|
39
|
+
var colors = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, DeltaTypes.Increase, theme.colorSuccess), DeltaTypes.ModerateIncrease, theme.colorSuccess), DeltaTypes.Decrease, theme.colorError), DeltaTypes.ModerateDecrease, theme.colorError), DeltaTypes.Unchanged, theme.colorWarning);
|
|
40
|
+
return /*#__PURE__*/_jsx(Tooltip, {
|
|
41
|
+
title: tooltip,
|
|
42
|
+
children: /*#__PURE__*/_jsxs(Flexbox, _objectSpread(_objectSpread({
|
|
43
|
+
align: 'center',
|
|
44
|
+
className: className,
|
|
45
|
+
height: size,
|
|
46
|
+
horizontal: true,
|
|
47
|
+
ref: ref,
|
|
48
|
+
style: _objectSpread({
|
|
49
|
+
position: 'relative'
|
|
50
|
+
}, style),
|
|
51
|
+
width: width
|
|
52
|
+
}, rest), {}, {
|
|
53
|
+
children: [/*#__PURE__*/_jsx(Flexbox, {
|
|
54
|
+
height: '100%',
|
|
55
|
+
style: {
|
|
56
|
+
background: bgColors || theme.colorFillTertiary,
|
|
57
|
+
borderRadius: size / 2,
|
|
58
|
+
inset: 0,
|
|
59
|
+
opacity: bgColors ? 0.2 : 1,
|
|
60
|
+
position: 'absolute',
|
|
61
|
+
zIndex: 0
|
|
62
|
+
},
|
|
63
|
+
width: '100%'
|
|
64
|
+
}), /*#__PURE__*/_jsx(Flexbox, {
|
|
65
|
+
align: 'center',
|
|
66
|
+
flex: 1,
|
|
67
|
+
height: '100%',
|
|
68
|
+
horizontal: true,
|
|
69
|
+
justify: 'flex-end',
|
|
70
|
+
style: {
|
|
71
|
+
position: 'relative'
|
|
72
|
+
},
|
|
73
|
+
children: value < 0 ? /*#__PURE__*/_jsx("div", {
|
|
74
|
+
className: cx(showAnimation && styles.showAnimation),
|
|
75
|
+
style: {
|
|
76
|
+
background: colors[deltaType],
|
|
77
|
+
borderBottomLeftRadius: size / 2,
|
|
78
|
+
borderTopLeftRadius: size / 2,
|
|
79
|
+
height: '100%',
|
|
80
|
+
width: "".concat(Math.abs(value), "%")
|
|
81
|
+
}
|
|
82
|
+
}) : undefined
|
|
83
|
+
}), /*#__PURE__*/_jsx(Flexbox, {
|
|
84
|
+
className: styles.marker,
|
|
85
|
+
flex: 'none',
|
|
86
|
+
style: {
|
|
87
|
+
background: color || theme.colorPrimary,
|
|
88
|
+
height: size + 8,
|
|
89
|
+
zIndex: 2
|
|
90
|
+
}
|
|
91
|
+
}), /*#__PURE__*/_jsx(Flexbox, {
|
|
92
|
+
align: 'center',
|
|
93
|
+
flex: 1,
|
|
94
|
+
height: '100%',
|
|
95
|
+
horizontal: true,
|
|
96
|
+
justify: 'flex-start',
|
|
97
|
+
style: {
|
|
98
|
+
position: 'relative'
|
|
99
|
+
},
|
|
100
|
+
children: value >= 0 ? /*#__PURE__*/_jsx("div", {
|
|
101
|
+
className: cx(showAnimation && styles.showAnimation),
|
|
102
|
+
style: {
|
|
103
|
+
background: colors[deltaType],
|
|
104
|
+
borderBottomRightRadius: size / 2,
|
|
105
|
+
borderTopRightRadius: size / 2,
|
|
106
|
+
height: '100%',
|
|
107
|
+
width: "".concat(Math.abs(value), "%")
|
|
108
|
+
}
|
|
109
|
+
}) : undefined
|
|
110
|
+
})]
|
|
111
|
+
}))
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
DeltaBar.displayName = 'DeltaBar';
|
|
115
|
+
export default DeltaBar;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { FlexboxProps } from 'react-layout-kit';
|
|
3
|
+
export interface MarkerBarProps extends FlexboxProps {
|
|
4
|
+
bgColors?: string;
|
|
5
|
+
color?: string;
|
|
6
|
+
markerTooltip?: ReactNode;
|
|
7
|
+
maxValue?: number;
|
|
8
|
+
minValue?: number;
|
|
9
|
+
rangeColors?: string;
|
|
10
|
+
rangeTooltip?: ReactNode;
|
|
11
|
+
showAnimation?: boolean;
|
|
12
|
+
size?: number;
|
|
13
|
+
value: number;
|
|
14
|
+
}
|
|
15
|
+
declare const MarkerBar: import("react").ForwardRefExoticComponent<MarkerBarProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
16
|
+
export default MarkerBar;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
4
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
5
|
+
var _excluded = ["value", "minValue", "maxValue", "markerTooltip", "rangeTooltip", "showAnimation", "color", "bgColors", "rangeColors", "className", "width", "style", "size"];
|
|
6
|
+
import { Tooltip } from '@lobehub/ui';
|
|
7
|
+
import { forwardRef } from 'react';
|
|
8
|
+
import { Flexbox } from 'react-layout-kit';
|
|
9
|
+
import { useStyles } from "./styles";
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
var MarkerBar = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
13
|
+
var value = props.value,
|
|
14
|
+
minValue = props.minValue,
|
|
15
|
+
maxValue = props.maxValue,
|
|
16
|
+
markerTooltip = props.markerTooltip,
|
|
17
|
+
rangeTooltip = props.rangeTooltip,
|
|
18
|
+
_props$showAnimation = props.showAnimation,
|
|
19
|
+
showAnimation = _props$showAnimation === void 0 ? false : _props$showAnimation,
|
|
20
|
+
color = props.color,
|
|
21
|
+
bgColors = props.bgColors,
|
|
22
|
+
rangeColors = props.rangeColors,
|
|
23
|
+
className = props.className,
|
|
24
|
+
_props$width = props.width,
|
|
25
|
+
width = _props$width === void 0 ? '100%' : _props$width,
|
|
26
|
+
style = props.style,
|
|
27
|
+
_props$size = props.size,
|
|
28
|
+
size = _props$size === void 0 ? 8 : _props$size,
|
|
29
|
+
rest = _objectWithoutProperties(props, _excluded);
|
|
30
|
+
var _useStyles = useStyles(),
|
|
31
|
+
cx = _useStyles.cx,
|
|
32
|
+
styles = _useStyles.styles,
|
|
33
|
+
theme = _useStyles.theme;
|
|
34
|
+
return /*#__PURE__*/_jsxs(Flexbox, _objectSpread(_objectSpread({
|
|
35
|
+
align: 'center',
|
|
36
|
+
className: className,
|
|
37
|
+
height: size,
|
|
38
|
+
horizontal: true,
|
|
39
|
+
ref: ref,
|
|
40
|
+
style: _objectSpread({
|
|
41
|
+
position: 'relative'
|
|
42
|
+
}, style),
|
|
43
|
+
width: width
|
|
44
|
+
}, rest), {}, {
|
|
45
|
+
children: [/*#__PURE__*/_jsx(Flexbox, {
|
|
46
|
+
height: '100%',
|
|
47
|
+
style: {
|
|
48
|
+
background: bgColors || theme.colorFillTertiary,
|
|
49
|
+
borderRadius: size / 2,
|
|
50
|
+
inset: 0,
|
|
51
|
+
opacity: bgColors ? 0.2 : 1,
|
|
52
|
+
position: 'absolute',
|
|
53
|
+
zIndex: 0
|
|
54
|
+
},
|
|
55
|
+
width: '100%'
|
|
56
|
+
}), minValue !== undefined && maxValue !== undefined ? /*#__PURE__*/_jsx(Tooltip, {
|
|
57
|
+
title: rangeTooltip,
|
|
58
|
+
children: /*#__PURE__*/_jsx(Flexbox, {
|
|
59
|
+
className: cx(showAnimation && styles.showAnimation),
|
|
60
|
+
height: '100%',
|
|
61
|
+
style: {
|
|
62
|
+
background: rangeColors || theme.colorFill,
|
|
63
|
+
borderRadius: size / 2,
|
|
64
|
+
inset: 0,
|
|
65
|
+
left: "".concat(minValue, "%"),
|
|
66
|
+
opacity: rangeColors ? 0.2 : 1,
|
|
67
|
+
position: 'absolute',
|
|
68
|
+
zIndex: 0
|
|
69
|
+
},
|
|
70
|
+
width: "".concat(maxValue - minValue, "%")
|
|
71
|
+
})
|
|
72
|
+
}) : null, /*#__PURE__*/_jsx(Tooltip, {
|
|
73
|
+
title: markerTooltip,
|
|
74
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
75
|
+
className: cx(styles.markerWrapper, showAnimation && styles.showAnimation),
|
|
76
|
+
style: {
|
|
77
|
+
left: "".concat(value, "%")
|
|
78
|
+
},
|
|
79
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
80
|
+
className: styles.marker,
|
|
81
|
+
style: {
|
|
82
|
+
background: color || theme.colorPrimary,
|
|
83
|
+
height: size + 8
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
})]
|
|
88
|
+
}));
|
|
89
|
+
});
|
|
90
|
+
MarkerBar.displayName = 'MarkerBar';
|
|
91
|
+
export default MarkerBar;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { FlexboxProps } from 'react-layout-kit';
|
|
3
|
+
export interface ProgressBarProps extends FlexboxProps {
|
|
4
|
+
bgColors?: string;
|
|
5
|
+
color?: string;
|
|
6
|
+
showAnimation?: boolean;
|
|
7
|
+
size?: number;
|
|
8
|
+
tooltip?: ReactNode;
|
|
9
|
+
value: number;
|
|
10
|
+
}
|
|
11
|
+
declare const ProgressBar: import("react").ForwardRefExoticComponent<ProgressBarProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
12
|
+
export default ProgressBar;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
4
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
5
|
+
var _excluded = ["value", "color", "bgColors", "tooltip", "showAnimation", "className", "width", "size", "style"];
|
|
6
|
+
import { Tooltip } from '@lobehub/ui';
|
|
7
|
+
import { forwardRef } from 'react';
|
|
8
|
+
import { Flexbox } from 'react-layout-kit';
|
|
9
|
+
import { useStyles } from "./styles";
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
var ProgressBar = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
13
|
+
var _useStyles = useStyles(),
|
|
14
|
+
cx = _useStyles.cx,
|
|
15
|
+
styles = _useStyles.styles,
|
|
16
|
+
theme = _useStyles.theme;
|
|
17
|
+
var value = props.value,
|
|
18
|
+
color = props.color,
|
|
19
|
+
bgColors = props.bgColors,
|
|
20
|
+
tooltip = props.tooltip,
|
|
21
|
+
_props$showAnimation = props.showAnimation,
|
|
22
|
+
showAnimation = _props$showAnimation === void 0 ? false : _props$showAnimation,
|
|
23
|
+
className = props.className,
|
|
24
|
+
_props$width = props.width,
|
|
25
|
+
width = _props$width === void 0 ? '100%' : _props$width,
|
|
26
|
+
_props$size = props.size,
|
|
27
|
+
size = _props$size === void 0 ? 8 : _props$size,
|
|
28
|
+
style = props.style,
|
|
29
|
+
rest = _objectWithoutProperties(props, _excluded);
|
|
30
|
+
return /*#__PURE__*/_jsx(Tooltip, {
|
|
31
|
+
title: tooltip,
|
|
32
|
+
children: /*#__PURE__*/_jsxs(Flexbox, _objectSpread(_objectSpread({
|
|
33
|
+
align: 'center',
|
|
34
|
+
className: className,
|
|
35
|
+
height: size,
|
|
36
|
+
horizontal: true,
|
|
37
|
+
ref: ref,
|
|
38
|
+
style: _objectSpread({
|
|
39
|
+
position: 'relative'
|
|
40
|
+
}, style),
|
|
41
|
+
width: width
|
|
42
|
+
}, rest), {}, {
|
|
43
|
+
children: [/*#__PURE__*/_jsx(Flexbox, {
|
|
44
|
+
height: '100%',
|
|
45
|
+
style: {
|
|
46
|
+
background: bgColors || theme.colorFillTertiary,
|
|
47
|
+
borderRadius: size / 2,
|
|
48
|
+
inset: 0,
|
|
49
|
+
opacity: bgColors ? 0.2 : 1,
|
|
50
|
+
position: 'absolute',
|
|
51
|
+
zIndex: 0
|
|
52
|
+
},
|
|
53
|
+
width: '100%'
|
|
54
|
+
}), /*#__PURE__*/_jsx(Flexbox, {
|
|
55
|
+
className: cx(showAnimation && styles.showAnimation),
|
|
56
|
+
height: '100%',
|
|
57
|
+
style: {
|
|
58
|
+
background: color || theme.colorPrimary,
|
|
59
|
+
borderRadius: size / 2,
|
|
60
|
+
zIndex: 1
|
|
61
|
+
},
|
|
62
|
+
width: "".concat(value, "%")
|
|
63
|
+
})]
|
|
64
|
+
}))
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
ProgressBar.displayName = 'ProgressBar';
|
|
68
|
+
export default ProgressBar;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as CategoryBar, type CategoryBarProps } from './CategoryBar';
|
|
2
|
+
export { default as DeltaBar, type DeltaBarProps } from './DeltaBar';
|
|
3
|
+
export { default as MarkerBar, type MarkerBarProps } from './MarkerBar';
|
|
4
|
+
export { default as ProgressBar, type ProgressBarProps } from './ProgressBar';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const useStyles: (props?: unknown) => import("antd-style").ReturnStyles<{
|
|
2
|
+
emphasis: import("antd-style").SerializedStyles;
|
|
3
|
+
label: import("antd-style").SerializedStyles;
|
|
4
|
+
marker: import("antd-style").SerializedStyles;
|
|
5
|
+
markerWrapper: import("antd-style").SerializedStyles;
|
|
6
|
+
showAnimation: import("antd-style").SerializedStyles;
|
|
7
|
+
}>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
|
|
2
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
|
3
|
+
import { createStyles } from 'antd-style';
|
|
4
|
+
export var useStyles = createStyles(function (_ref) {
|
|
5
|
+
var css = _ref.css,
|
|
6
|
+
token = _ref.token;
|
|
7
|
+
return {
|
|
8
|
+
emphasis: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n "]))),
|
|
9
|
+
label: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n font-size: 14px;\n line-height: 16px;\n fill: ", ";\n "])), token.colorTextDescription),
|
|
10
|
+
marker: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n width: 4px;\n border-radius: 4px;\n box-shadow: 0 0 0 3px ", ";\n "])), token.colorBgContainer),
|
|
11
|
+
markerWrapper: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n position: absolute;\n right: 50%;\n width: 1.25rem;\n "]))),
|
|
12
|
+
showAnimation: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n transition: all 0.25s ", ";\n "])), token.motionEaseInOut)
|
|
13
|
+
};
|
|
14
|
+
});
|
|
@@ -8,7 +8,7 @@ import { createStyles } from 'antd-style';
|
|
|
8
8
|
import { ChevronLeft, ChevronRight } from 'lucide-react';
|
|
9
9
|
import { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
|
|
10
10
|
import { Flexbox } from 'react-layout-kit';
|
|
11
|
-
import { useThemeColorRange } from "
|
|
11
|
+
import { useThemeColorRange } from "../hooks/useThemeColorRange";
|
|
12
12
|
import LegendItem from "./LegendItem";
|
|
13
13
|
import ScrollButton from "./ScrollButton";
|
|
14
14
|
import { jsx as _jsx } from "react/jsx-runtime";
|
package/es/common/ChartLegend.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useRef } from 'react';
|
|
2
2
|
import { Flexbox } from 'react-layout-kit';
|
|
3
|
-
import Legend from "../
|
|
3
|
+
import Legend from "../Legend";
|
|
4
4
|
import { useOnWindowResize } from "../hooks/useOnWindowResize";
|
|
5
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
6
|
var calculateHeight = function calculateHeight(height) {
|
package/es/index.d.ts
CHANGED
|
@@ -2,9 +2,10 @@ export { default as AreaChart, type AreaChartProps } from './AreaChart';
|
|
|
2
2
|
export { default as BarChart, type BarChartProps } from './BarChart';
|
|
3
3
|
export { type Bar, default as BarList, type BarListProps } from './BarList';
|
|
4
4
|
export { default as ChartTooltipFrame } from './common/ChartTooltip/ChartTooltipFrame';
|
|
5
|
-
export
|
|
5
|
+
export * from './DataBars';
|
|
6
6
|
export { default as DonutChart, type DonutChartProps } from './DonutChart';
|
|
7
7
|
export { default as Heatmaps, type HeatmapsProps } from './Heatmaps';
|
|
8
|
+
export { default as Legend, type LegendProps } from './Legend';
|
|
8
9
|
export { default as LineChart, type LineChartProps } from './LineChart';
|
|
9
10
|
export { default as ScatterChart, type ScatterChartProps } from './ScatterChart';
|
|
10
11
|
export * from './SparkChart';
|
package/es/index.js
CHANGED
|
@@ -2,9 +2,10 @@ export { default as AreaChart } from "./AreaChart";
|
|
|
2
2
|
export { default as BarChart } from "./BarChart";
|
|
3
3
|
export { default as BarList } from "./BarList";
|
|
4
4
|
export { default as ChartTooltipFrame } from "./common/ChartTooltip/ChartTooltipFrame";
|
|
5
|
-
export
|
|
5
|
+
export * from "./DataBars";
|
|
6
6
|
export { default as DonutChart } from "./DonutChart";
|
|
7
7
|
export { default as Heatmaps } from "./Heatmaps";
|
|
8
|
+
export { default as Legend } from "./Legend";
|
|
8
9
|
export { default as LineChart } from "./LineChart";
|
|
9
10
|
export { default as ScatterChart } from "./ScatterChart";
|
|
10
11
|
export * from "./SparkChart";
|
package/es/types.d.ts
CHANGED
|
@@ -42,4 +42,9 @@ export type ScatterChartValueFormatter = {
|
|
|
42
42
|
x?: ValueFormatter;
|
|
43
43
|
y?: ValueFormatter;
|
|
44
44
|
};
|
|
45
|
+
declare const deltaTypeValues: readonly ["increase", "moderateIncrease", "decrease", "moderateDecrease", "unchanged"];
|
|
46
|
+
export type DeltaType = (typeof deltaTypeValues)[number];
|
|
47
|
+
export declare const DeltaTypes: {
|
|
48
|
+
[key: string]: DeltaType;
|
|
49
|
+
};
|
|
45
50
|
export {};
|
package/es/types.js
CHANGED
|
@@ -1 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
var deltaTypeValues = ['increase', 'moderateIncrease', 'decrease', 'moderateDecrease', 'unchanged'];
|
|
2
|
+
export var DeltaTypes = {
|
|
3
|
+
Decrease: 'decrease',
|
|
4
|
+
Increase: 'increase',
|
|
5
|
+
ModerateDecrease: 'moderateDecrease',
|
|
6
|
+
ModerateIncrease: 'moderateIncrease',
|
|
7
|
+
Unchanged: 'unchanged'
|
|
8
|
+
};
|
package/es/utils/index.d.ts
CHANGED
|
@@ -2,3 +2,4 @@ import { ValueFormatter } from "../types";
|
|
|
2
2
|
export declare const defaultValueFormatter: ValueFormatter;
|
|
3
3
|
export declare const sumNumericArray: (arr: number[]) => number;
|
|
4
4
|
export declare const isOnSeverSide: boolean;
|
|
5
|
+
export declare const mapInputsToDeltaType: (deltaType: string, isIncreasePositive: boolean) => string;
|
package/es/utils/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DeltaTypes } from "../types";
|
|
1
2
|
export var defaultValueFormatter = function defaultValueFormatter(value) {
|
|
2
3
|
return value.toString();
|
|
3
4
|
};
|
|
@@ -6,4 +7,28 @@ export var sumNumericArray = function sumNumericArray(arr) {
|
|
|
6
7
|
return prefixSum + num;
|
|
7
8
|
}, 0);
|
|
8
9
|
};
|
|
9
|
-
export var isOnSeverSide = typeof document === 'undefined' || typeof window === 'undefined';
|
|
10
|
+
export var isOnSeverSide = typeof document === 'undefined' || typeof window === 'undefined';
|
|
11
|
+
export var mapInputsToDeltaType = function mapInputsToDeltaType(deltaType, isIncreasePositive) {
|
|
12
|
+
if (isIncreasePositive || deltaType === DeltaTypes.Unchanged) {
|
|
13
|
+
return deltaType;
|
|
14
|
+
}
|
|
15
|
+
switch (deltaType) {
|
|
16
|
+
case DeltaTypes.Increase:
|
|
17
|
+
{
|
|
18
|
+
return DeltaTypes.Decrease;
|
|
19
|
+
}
|
|
20
|
+
case DeltaTypes.ModerateIncrease:
|
|
21
|
+
{
|
|
22
|
+
return DeltaTypes.ModerateDecrease;
|
|
23
|
+
}
|
|
24
|
+
case DeltaTypes.Decrease:
|
|
25
|
+
{
|
|
26
|
+
return DeltaTypes.Increase;
|
|
27
|
+
}
|
|
28
|
+
case DeltaTypes.ModerateDecrease:
|
|
29
|
+
{
|
|
30
|
+
return DeltaTypes.ModerateIncrease;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return '';
|
|
34
|
+
};
|
package/es/utils/theme.js
CHANGED
|
@@ -14,12 +14,12 @@ var createstringScale = function createstringScale(colors, size) {
|
|
|
14
14
|
};
|
|
15
15
|
var validateTheme = function validateTheme(input, size) {
|
|
16
16
|
if (_typeof(input) !== 'object' || input === undefined) {
|
|
17
|
-
throw new Error("The theme object must contain at least
|
|
17
|
+
throw new Error("The theme object must contain at least 2 or ".concat(size, " colors respectively."));
|
|
18
18
|
}
|
|
19
19
|
if (input) {
|
|
20
20
|
var length = input.length;
|
|
21
21
|
if (length !== 2 && length !== size) {
|
|
22
|
-
throw new Error("theme
|
|
22
|
+
throw new Error("theme must contain exactly 2 or ".concat(size, " colors, ").concat(length, " passed."));
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lobehub/charts",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "React modern charts components built on recharts",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"lobehub",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"dumi-theme-lobehub": "^1.8.1",
|
|
93
93
|
"eslint": "^8.57.0",
|
|
94
94
|
"father": "4.3.1",
|
|
95
|
-
"husky": "
|
|
95
|
+
"husky": "9.0.11",
|
|
96
96
|
"jsdom": "^23.2.0",
|
|
97
97
|
"lint-staged": "^15.2.7",
|
|
98
98
|
"prettier": "^3.3.3",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|