@easyv/charts 1.4.25 → 1.4.28
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/.babelrc +8 -8
- package/.husky/commit-msg +3 -3
- package/CHANGELOG.md +18 -18
- package/commitlint.config.js +1 -1
- package/lib/components/AnimateData.js +8 -16
- package/lib/components/Axis.js +86 -133
- package/lib/components/Background.js +18 -26
- package/lib/components/Band.js +72 -98
- package/lib/components/BaseLine.js +33 -46
- package/lib/components/Brush.js +29 -46
- package/lib/components/Carousel.js +13 -40
- package/lib/components/CartesianChart.js +98 -146
- package/lib/components/Chart.js +23 -36
- package/lib/components/ChartContainer.js +18 -27
- package/lib/components/ConicalGradient.js +56 -89
- package/lib/components/Control.js +12 -28
- package/lib/components/ExtentData.js +9 -17
- package/lib/components/FilterData.js +16 -27
- package/lib/components/Indicator.js +23 -30
- package/lib/components/Label.js +96 -126
- package/lib/components/Legend.js +41 -66
- package/lib/components/Lighter.js +21 -50
- package/lib/components/Line.js +39 -59
- package/lib/components/LinearGradient.js +16 -22
- package/lib/components/Mapping.js +9 -34
- package/lib/components/Marquee.js +14 -30
- package/lib/components/PieChart.js +468 -489
- package/lib/components/StackData.js +8 -18
- package/lib/components/StereoBar.js +65 -105
- package/lib/components/TextOverflow.js +8 -21
- package/lib/components/Tooltip.js +41 -55
- package/lib/components/index.js +7 -28
- package/lib/components/pieTooltip.js +133 -0
- package/lib/context/index.js +0 -2
- package/lib/css/index.module.css +42 -42
- package/lib/css/piechart.module.css +26 -26
- package/lib/element/ConicGradient.js +29 -35
- package/lib/element/Line.js +9 -13
- package/lib/element/index.js +0 -2
- package/lib/formatter/index.js +0 -2
- package/lib/formatter/legend.js +30 -41
- package/lib/hooks/index.js +0 -9
- package/lib/hooks/useAiData.js +12 -20
- package/lib/hooks/useAnimateData.js +8 -21
- package/lib/hooks/useAxes.js +67 -117
- package/lib/hooks/useCarouselAxisX.js +27 -60
- package/lib/hooks/useExtentData.js +14 -46
- package/lib/hooks/useFilterData.js +13 -34
- package/lib/hooks/useStackData.js +12 -35
- package/lib/hooks/useTooltip.js +36 -53
- package/lib/index.js +0 -15
- package/lib/utils/index.js +95 -247
- package/package.json +55 -55
- package/src/components/Background.tsx +61 -61
- package/src/components/Band.tsx +274 -274
- package/src/components/Brush.js +159 -159
- package/src/components/CartesianChart.js +1 -1
- package/src/components/Chart.js +99 -99
- package/src/components/ChartContainer.tsx +71 -71
- package/src/components/ConicalGradient.js +258 -258
- package/src/components/Control.jsx +51 -51
- package/src/components/ExtentData.js +17 -17
- package/src/components/Indicator.js +61 -61
- package/src/components/Label.js +275 -275
- package/src/components/Legend.js +165 -165
- package/src/components/Lighter.jsx +173 -173
- package/src/components/Line.js +150 -150
- package/src/components/LinearGradient.js +29 -29
- package/src/components/Marquee.tsx +1 -1
- package/src/components/PieChart.js +404 -260
- package/src/components/PieTooltip.jsx +134 -0
- package/src/components/StereoBar.tsx +307 -307
- package/src/components/index.js +59 -57
- package/src/context/index.js +2 -2
- package/src/css/index.module.css +42 -42
- package/src/css/piechart.module.css +26 -26
- package/src/element/ConicGradient.jsx +55 -55
- package/src/element/Line.tsx +33 -33
- package/src/element/index.ts +3 -3
- package/src/formatter/index.js +1 -1
- package/src/formatter/legend.js +92 -92
- package/src/hooks/index.js +20 -20
- package/src/hooks/useAnimateData.ts +67 -67
- package/src/hooks/useCarouselAxisX.js +1 -1
- package/src/hooks/useFilterData.js +72 -72
- package/src/hooks/useStackData.js +101 -101
- package/src/hooks/useTooltip.ts +100 -100
- package/src/index.js +6 -6
- package/src/types/index.d.ts +67 -67
- package/src/utils/index.js +757 -757
- package/tsconfig.json +23 -23
package/src/hooks/useTooltip.ts
CHANGED
|
@@ -1,100 +1,100 @@
|
|
|
1
|
-
import { useCallback, useState, useEffect } from "react";
|
|
2
|
-
import { getMousePos } from "../utils";
|
|
3
|
-
const callback = () => {};
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* 主要用于轴类图表,返回当前选中的是哪一个x
|
|
7
|
-
* @param {Array} svg svg的dom实例
|
|
8
|
-
* @param {Number} marginLeft 左间距
|
|
9
|
-
* @param {Number} marginTop 上间距
|
|
10
|
-
* @param {Number} width 宽
|
|
11
|
-
* @param {Number} height 高
|
|
12
|
-
* @param {Number} axisX 类目轴
|
|
13
|
-
* @param {Object} config 轮播动画参数
|
|
14
|
-
* @returns {Object} 返回被选中的名称,坐标,选中方法
|
|
15
|
-
*/
|
|
16
|
-
type Props = {
|
|
17
|
-
svg: any;
|
|
18
|
-
marginLeft: number;
|
|
19
|
-
marginTop: number;
|
|
20
|
-
width: number;
|
|
21
|
-
height: number;
|
|
22
|
-
axisX: any;
|
|
23
|
-
isHover: boolean;
|
|
24
|
-
config: { auto?: boolean; interval?: number; manual?: boolean };
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export default ({
|
|
28
|
-
svg,
|
|
29
|
-
marginLeft,
|
|
30
|
-
marginTop,
|
|
31
|
-
width,
|
|
32
|
-
height,
|
|
33
|
-
axisX,
|
|
34
|
-
isHover,
|
|
35
|
-
config: { auto, interval = 0, manual } = {},
|
|
36
|
-
}: Props) => {
|
|
37
|
-
const [currentIndex, setCurrentIndex] = useState<number | null>(null);
|
|
38
|
-
const tickLength = axisX.allTicks.length;
|
|
39
|
-
const setIndex = useCallback(
|
|
40
|
-
(e: any) => {
|
|
41
|
-
if (svg) {
|
|
42
|
-
const {
|
|
43
|
-
x: mouseX,
|
|
44
|
-
y: mouseY,
|
|
45
|
-
w: boundWidth,
|
|
46
|
-
h: boundHeight,
|
|
47
|
-
} = getMousePos(e, svg.current);
|
|
48
|
-
const { carousel, allTicks, ticks, scaler, direction } = axisX;
|
|
49
|
-
const _ticks = carousel ? ticks : allTicks;
|
|
50
|
-
const ratioX = parseInt(svg.current.style.width) / boundWidth;
|
|
51
|
-
const ratioY = parseInt(svg.current.style.height) / boundHeight;
|
|
52
|
-
const resetX = mouseX * ratioX;
|
|
53
|
-
const resetY = mouseY * ratioY;
|
|
54
|
-
const x = resetX - marginLeft;
|
|
55
|
-
const y = resetY - marginTop;
|
|
56
|
-
if (x > 0 && x < width && y > 0 && y < height && _ticks.length) {
|
|
57
|
-
const position = direction === "vertical" ? y : x;
|
|
58
|
-
const name = _ticks.reduce((prev: string, current: string) =>
|
|
59
|
-
Math.abs(scaler(prev) - position) >
|
|
60
|
-
Math.abs(scaler(current) - position)
|
|
61
|
-
? current
|
|
62
|
-
: prev
|
|
63
|
-
);
|
|
64
|
-
setCurrentIndex(allTicks.findIndex((tick: string) => tick == name));
|
|
65
|
-
} else {
|
|
66
|
-
// 鼠标划出后,如果开启了自动轮播,就不需要让提示框消失了
|
|
67
|
-
if (!auto) {
|
|
68
|
-
setCurrentIndex(null);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
[svg, marginLeft, axisX, auto]
|
|
74
|
-
);
|
|
75
|
-
useEffect(() => {
|
|
76
|
-
const on = auto && tickLength && !isHover;
|
|
77
|
-
// if (!!on) setCurrentIndex(0);
|
|
78
|
-
const intervalHandler = on
|
|
79
|
-
? setInterval(() => {
|
|
80
|
-
setCurrentIndex((index) => {
|
|
81
|
-
const tmp = index == null ? 0 : index;
|
|
82
|
-
const currentIndex = tmp + 1;
|
|
83
|
-
if (currentIndex >= tickLength) {
|
|
84
|
-
return 0;
|
|
85
|
-
}
|
|
86
|
-
return currentIndex;
|
|
87
|
-
});
|
|
88
|
-
}, interval * 1000)
|
|
89
|
-
: null;
|
|
90
|
-
return () => {
|
|
91
|
-
intervalHandler && clearInterval(intervalHandler);
|
|
92
|
-
};
|
|
93
|
-
}, [auto, tickLength, interval, isHover]);
|
|
94
|
-
const name = currentIndex === null ? null : axisX.allTicks[currentIndex];
|
|
95
|
-
return {
|
|
96
|
-
name,
|
|
97
|
-
x: axisX.scaler(name),
|
|
98
|
-
setIndex: manual ? setIndex : callback,
|
|
99
|
-
};
|
|
100
|
-
};
|
|
1
|
+
import { useCallback, useState, useEffect } from "react";
|
|
2
|
+
import { getMousePos } from "../utils";
|
|
3
|
+
const callback = () => {};
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 主要用于轴类图表,返回当前选中的是哪一个x
|
|
7
|
+
* @param {Array} svg svg的dom实例
|
|
8
|
+
* @param {Number} marginLeft 左间距
|
|
9
|
+
* @param {Number} marginTop 上间距
|
|
10
|
+
* @param {Number} width 宽
|
|
11
|
+
* @param {Number} height 高
|
|
12
|
+
* @param {Number} axisX 类目轴
|
|
13
|
+
* @param {Object} config 轮播动画参数
|
|
14
|
+
* @returns {Object} 返回被选中的名称,坐标,选中方法
|
|
15
|
+
*/
|
|
16
|
+
type Props = {
|
|
17
|
+
svg: any;
|
|
18
|
+
marginLeft: number;
|
|
19
|
+
marginTop: number;
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
axisX: any;
|
|
23
|
+
isHover: boolean;
|
|
24
|
+
config: { auto?: boolean; interval?: number; manual?: boolean };
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export default ({
|
|
28
|
+
svg,
|
|
29
|
+
marginLeft,
|
|
30
|
+
marginTop,
|
|
31
|
+
width,
|
|
32
|
+
height,
|
|
33
|
+
axisX,
|
|
34
|
+
isHover,
|
|
35
|
+
config: { auto, interval = 0, manual } = {},
|
|
36
|
+
}: Props) => {
|
|
37
|
+
const [currentIndex, setCurrentIndex] = useState<number | null>(null);
|
|
38
|
+
const tickLength = axisX.allTicks.length;
|
|
39
|
+
const setIndex = useCallback(
|
|
40
|
+
(e: any) => {
|
|
41
|
+
if (svg) {
|
|
42
|
+
const {
|
|
43
|
+
x: mouseX,
|
|
44
|
+
y: mouseY,
|
|
45
|
+
w: boundWidth,
|
|
46
|
+
h: boundHeight,
|
|
47
|
+
} = getMousePos(e, svg.current);
|
|
48
|
+
const { carousel, allTicks, ticks, scaler, direction } = axisX;
|
|
49
|
+
const _ticks = carousel ? ticks : allTicks;
|
|
50
|
+
const ratioX = parseInt(svg.current.style.width) / boundWidth;
|
|
51
|
+
const ratioY = parseInt(svg.current.style.height) / boundHeight;
|
|
52
|
+
const resetX = mouseX * ratioX;
|
|
53
|
+
const resetY = mouseY * ratioY;
|
|
54
|
+
const x = resetX - marginLeft;
|
|
55
|
+
const y = resetY - marginTop;
|
|
56
|
+
if (x > 0 && x < width && y > 0 && y < height && _ticks.length) {
|
|
57
|
+
const position = direction === "vertical" ? y : x;
|
|
58
|
+
const name = _ticks.reduce((prev: string, current: string) =>
|
|
59
|
+
Math.abs(scaler(prev) - position) >
|
|
60
|
+
Math.abs(scaler(current) - position)
|
|
61
|
+
? current
|
|
62
|
+
: prev
|
|
63
|
+
);
|
|
64
|
+
setCurrentIndex(allTicks.findIndex((tick: string) => tick == name));
|
|
65
|
+
} else {
|
|
66
|
+
// 鼠标划出后,如果开启了自动轮播,就不需要让提示框消失了
|
|
67
|
+
if (!auto) {
|
|
68
|
+
setCurrentIndex(null);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
[svg, marginLeft, axisX, auto]
|
|
74
|
+
);
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
const on = auto && tickLength && !isHover;
|
|
77
|
+
// if (!!on) setCurrentIndex(0);
|
|
78
|
+
const intervalHandler = on
|
|
79
|
+
? setInterval(() => {
|
|
80
|
+
setCurrentIndex((index) => {
|
|
81
|
+
const tmp = index == null ? 0 : index;
|
|
82
|
+
const currentIndex = tmp + 1;
|
|
83
|
+
if (currentIndex >= tickLength) {
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
return currentIndex;
|
|
87
|
+
});
|
|
88
|
+
}, interval * 1000)
|
|
89
|
+
: null;
|
|
90
|
+
return () => {
|
|
91
|
+
intervalHandler && clearInterval(intervalHandler);
|
|
92
|
+
};
|
|
93
|
+
}, [auto, tickLength, interval, isHover]);
|
|
94
|
+
const name = currentIndex === null ? null : axisX.allTicks[currentIndex];
|
|
95
|
+
return {
|
|
96
|
+
name,
|
|
97
|
+
x: axisX.scaler(name),
|
|
98
|
+
setIndex: manual ? setIndex : callback,
|
|
99
|
+
};
|
|
100
|
+
};
|
package/src/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from './components';
|
|
2
|
-
export * from './hooks';
|
|
3
|
-
export * from './context';
|
|
4
|
-
export * from './formatter';
|
|
5
|
-
export * as utils from './utils';
|
|
6
|
-
export * from '@easyv/utils';
|
|
1
|
+
export * from './components';
|
|
2
|
+
export * from './hooks';
|
|
3
|
+
export * from './context';
|
|
4
|
+
export * from './formatter';
|
|
5
|
+
export * as utils from './utils';
|
|
6
|
+
export * from '@easyv/utils';
|
package/src/types/index.d.ts
CHANGED
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
declare module 'd3v7' {
|
|
2
|
-
export * from 'd3-timer';
|
|
3
|
-
export * from 'd3-array';
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
type DataAnimation = {
|
|
7
|
-
show: boolean;
|
|
8
|
-
duration: number;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
type DataType = {
|
|
12
|
-
x: string;
|
|
13
|
-
y: number;
|
|
14
|
-
s: string;
|
|
15
|
-
};
|
|
16
|
-
type DataWithBoundType = {
|
|
17
|
-
index: number;
|
|
18
|
-
data: DataType;
|
|
19
|
-
bound: Array<number>;
|
|
20
|
-
flag: boolean;
|
|
21
|
-
};
|
|
22
|
-
type Context = {
|
|
23
|
-
width: number;
|
|
24
|
-
height: number;
|
|
25
|
-
id: string;
|
|
26
|
-
triggerOnRelative: Function;
|
|
27
|
-
svg: Object;
|
|
28
|
-
onEmit: Function;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
type ChartLine = {
|
|
32
|
-
show: boolean;
|
|
33
|
-
color: string;
|
|
34
|
-
lineWidth: number;
|
|
35
|
-
strokeDasharray?: string;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
type Orientation = 'top' | 'bottom' | 'left' | 'right';
|
|
39
|
-
|
|
40
|
-
type Translate = {
|
|
41
|
-
x: number;
|
|
42
|
-
y: number;
|
|
43
|
-
};
|
|
44
|
-
type Size = {
|
|
45
|
-
width: number;
|
|
46
|
-
height: number;
|
|
47
|
-
};
|
|
48
|
-
type Font = {
|
|
49
|
-
bold: boolean;
|
|
50
|
-
color: string;
|
|
51
|
-
fontFamily: string;
|
|
52
|
-
fontSize: number;
|
|
53
|
-
italic: boolean;
|
|
54
|
-
letterSpacing: number;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
type Align = { textAnchor: string; dominantBaseline: string };
|
|
58
|
-
|
|
59
|
-
type Tick = { show: boolean; tick: string };
|
|
60
|
-
|
|
61
|
-
type AxisX = {
|
|
62
|
-
carousel: boolean;
|
|
63
|
-
allTicks: Array<string>;
|
|
64
|
-
ticks: Array<string>;
|
|
65
|
-
scaler: Function;
|
|
66
|
-
direction: 'vertical' | 'horizontal';
|
|
67
|
-
};
|
|
1
|
+
declare module 'd3v7' {
|
|
2
|
+
export * from 'd3-timer';
|
|
3
|
+
export * from 'd3-array';
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
type DataAnimation = {
|
|
7
|
+
show: boolean;
|
|
8
|
+
duration: number;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
type DataType = {
|
|
12
|
+
x: string;
|
|
13
|
+
y: number;
|
|
14
|
+
s: string;
|
|
15
|
+
};
|
|
16
|
+
type DataWithBoundType = {
|
|
17
|
+
index: number;
|
|
18
|
+
data: DataType;
|
|
19
|
+
bound: Array<number>;
|
|
20
|
+
flag: boolean;
|
|
21
|
+
};
|
|
22
|
+
type Context = {
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
id: string;
|
|
26
|
+
triggerOnRelative: Function;
|
|
27
|
+
svg: Object;
|
|
28
|
+
onEmit: Function;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
type ChartLine = {
|
|
32
|
+
show: boolean;
|
|
33
|
+
color: string;
|
|
34
|
+
lineWidth: number;
|
|
35
|
+
strokeDasharray?: string;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
type Orientation = 'top' | 'bottom' | 'left' | 'right';
|
|
39
|
+
|
|
40
|
+
type Translate = {
|
|
41
|
+
x: number;
|
|
42
|
+
y: number;
|
|
43
|
+
};
|
|
44
|
+
type Size = {
|
|
45
|
+
width: number;
|
|
46
|
+
height: number;
|
|
47
|
+
};
|
|
48
|
+
type Font = {
|
|
49
|
+
bold: boolean;
|
|
50
|
+
color: string;
|
|
51
|
+
fontFamily: string;
|
|
52
|
+
fontSize: number;
|
|
53
|
+
italic: boolean;
|
|
54
|
+
letterSpacing: number;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
type Align = { textAnchor: string; dominantBaseline: string };
|
|
58
|
+
|
|
59
|
+
type Tick = { show: boolean; tick: string };
|
|
60
|
+
|
|
61
|
+
type AxisX = {
|
|
62
|
+
carousel: boolean;
|
|
63
|
+
allTicks: Array<string>;
|
|
64
|
+
ticks: Array<string>;
|
|
65
|
+
scaler: Function;
|
|
66
|
+
direction: 'vertical' | 'horizontal';
|
|
67
|
+
};
|