@easyv/charts 1.4.24 → 1.4.25

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.
Files changed (89) hide show
  1. package/.babelrc +8 -8
  2. package/.husky/commit-msg +3 -3
  3. package/CHANGELOG.md +18 -18
  4. package/commitlint.config.js +1 -1
  5. package/lib/components/AnimateData.js +16 -8
  6. package/lib/components/Axis.js +133 -86
  7. package/lib/components/Background.js +26 -18
  8. package/lib/components/Band.js +98 -72
  9. package/lib/components/BaseLine.js +46 -33
  10. package/lib/components/Brush.js +46 -29
  11. package/lib/components/Carousel.js +40 -13
  12. package/lib/components/CartesianChart.js +146 -98
  13. package/lib/components/Chart.js +36 -23
  14. package/lib/components/ChartContainer.js +27 -18
  15. package/lib/components/ConicalGradient.js +89 -56
  16. package/lib/components/Control.js +28 -12
  17. package/lib/components/ExtentData.js +17 -9
  18. package/lib/components/FilterData.js +27 -16
  19. package/lib/components/Indicator.js +30 -23
  20. package/lib/components/Label.js +126 -96
  21. package/lib/components/Legend.js +66 -41
  22. package/lib/components/Lighter.js +50 -21
  23. package/lib/components/Line.js +59 -39
  24. package/lib/components/LinearGradient.js +22 -16
  25. package/lib/components/Mapping.js +34 -9
  26. package/lib/components/Marquee.js +31 -15
  27. package/lib/components/PieChart.js +405 -311
  28. package/lib/components/StackData.js +18 -8
  29. package/lib/components/StereoBar.js +105 -65
  30. package/lib/components/TextOverflow.js +21 -8
  31. package/lib/components/Tooltip.js +55 -41
  32. package/lib/components/index.js +28 -0
  33. package/lib/context/index.js +2 -0
  34. package/lib/css/index.module.css +42 -42
  35. package/lib/css/piechart.module.css +26 -26
  36. package/lib/element/ConicGradient.js +35 -29
  37. package/lib/element/Line.js +13 -9
  38. package/lib/element/index.js +2 -0
  39. package/lib/formatter/index.js +2 -0
  40. package/lib/formatter/legend.js +41 -30
  41. package/lib/hooks/index.js +9 -0
  42. package/lib/hooks/useAiData.js +20 -12
  43. package/lib/hooks/useAnimateData.js +21 -8
  44. package/lib/hooks/useAxes.js +117 -67
  45. package/lib/hooks/useCarouselAxisX.js +60 -27
  46. package/lib/hooks/useExtentData.js +46 -14
  47. package/lib/hooks/useFilterData.js +34 -13
  48. package/lib/hooks/useStackData.js +35 -12
  49. package/lib/hooks/useTooltip.js +53 -36
  50. package/lib/index.js +15 -0
  51. package/lib/utils/index.js +247 -95
  52. package/package.json +55 -55
  53. package/src/components/Background.tsx +61 -61
  54. package/src/components/Band.tsx +274 -274
  55. package/src/components/Brush.js +159 -159
  56. package/src/components/CartesianChart.js +1 -1
  57. package/src/components/Chart.js +99 -99
  58. package/src/components/ChartContainer.tsx +71 -71
  59. package/src/components/ConicalGradient.js +258 -258
  60. package/src/components/Control.jsx +51 -51
  61. package/src/components/ExtentData.js +17 -17
  62. package/src/components/Indicator.js +61 -61
  63. package/src/components/Label.js +275 -275
  64. package/src/components/Legend.js +165 -165
  65. package/src/components/Lighter.jsx +173 -173
  66. package/src/components/Line.js +150 -150
  67. package/src/components/LinearGradient.js +29 -29
  68. package/src/components/Marquee.tsx +1 -1
  69. package/src/components/PieChart.js +3 -7
  70. package/src/components/StereoBar.tsx +307 -307
  71. package/src/components/index.js +57 -57
  72. package/src/context/index.js +2 -2
  73. package/src/css/index.module.css +42 -42
  74. package/src/css/piechart.module.css +26 -26
  75. package/src/element/ConicGradient.jsx +55 -55
  76. package/src/element/Line.tsx +33 -33
  77. package/src/element/index.ts +3 -3
  78. package/src/formatter/index.js +1 -1
  79. package/src/formatter/legend.js +92 -92
  80. package/src/hooks/index.js +20 -20
  81. package/src/hooks/useAnimateData.ts +67 -67
  82. package/src/hooks/useCarouselAxisX.js +1 -1
  83. package/src/hooks/useFilterData.js +72 -72
  84. package/src/hooks/useStackData.js +101 -101
  85. package/src/hooks/useTooltip.ts +100 -100
  86. package/src/index.js +6 -6
  87. package/src/types/index.d.ts +67 -67
  88. package/src/utils/index.js +757 -757
  89. package/tsconfig.json +23 -23
@@ -1,150 +1,150 @@
1
- /**
2
- * 折线图
3
- */
4
- import React, { memo, useMemo } from 'react';
5
- import { line as d3Line, area as d3Area, curveCatmullRom, curveMonotoneX } from 'd3v7';
6
- import { getColorList } from '../utils';
7
- import { Lighter, LinearGradient } from '.';
8
-
9
- const defined = (d) => d.data.y != null;
10
- const getLineData = (data, connectNulls) =>
11
- connectNulls
12
- ? data.map(({ data, ...item }) => ({
13
- ...item,
14
- data: { ...data, y: +data.y },
15
- }))
16
- : data;
17
-
18
- const Area = ({
19
- data,
20
- config,
21
- config: {
22
- id,
23
- fill,
24
- type,
25
- url,
26
- opacity,
27
- size: { width: patternW, height: patternH },
28
- curve,
29
- tension
30
- },
31
- xScaler,
32
- yScaler,
33
- }) => {
34
- const [height] = yScaler.range();
35
- const area = useMemo(() => getColorList(fill), [fill]);
36
-
37
- const areaGen = useMemo(() => {
38
- const areaGen = d3Area()
39
- .x(({ data: { x } }) => xScaler(x))
40
- .y1(({ data: { y } }) => yScaler(y))
41
- // .y0(height)
42
- .y0(({})=>yScaler(0))
43
- .defined(defined);
44
- curve && areaGen.curve(curveCatmullRom.alpha(tension));
45
- curve && areaGen.curve(curveMonotoneX);
46
- return areaGen;
47
- }, [xScaler, yScaler, curve, tension]);
48
-
49
- return (
50
- <>
51
- <path d={areaGen(data)} stroke='none' fill={'url(#' + id + ')'} />
52
- <defs>
53
- {type && type == 'pattern' ? (
54
- <pattern id={id} patternUnits="userSpaceOnUse" width={patternW} height={patternH}>
55
- {url && <image opacity={opacity} width={patternW} height={patternH} xlinkHref={window.appConfig.ASSETS_URL + url} />}
56
- </pattern>
57
- ) : (
58
- <LinearGradient id={id} colors={area} rotate={0} />
59
- )}
60
- </defs>
61
- </>
62
- );
63
- };
64
-
65
- export default memo(
66
- ({
67
- type,
68
- config: {
69
- line: {
70
- type: lineType,
71
- lineWidth,
72
- curve,
73
- tension,
74
- connectNulls,
75
- lineShadow,
76
- lighter,
77
- },
78
- // icon,
79
- // label,
80
- },
81
- line: { id: lineId, stroke },
82
- area,
83
- data,
84
- xAxis: { scaler: xScaler, direction },
85
- yAxis: { scaler: yScaler },
86
- }) => {
87
- if (!data.length) return null;
88
- const ticks = xScaler.domain();
89
-
90
- const sortData = useMemo(() => {
91
- const usefulData = data.filter(
92
- ({ data: { x } }) => ticks.indexOf(x) > -1
93
- );
94
- return usefulData.sort(
95
- ({ data: { x: a } }, { data: { x: b } }) =>
96
- ticks.indexOf(a) - ticks.indexOf(b)
97
- );
98
- }, [data, ticks]);
99
-
100
- const _data = useMemo(
101
- () => getLineData(sortData, connectNulls),
102
- [sortData, connectNulls]
103
- );
104
-
105
- const lineGen = useMemo(() => {
106
- const isVertical = direction === 'vertical';
107
-
108
- let lineGen = (
109
- isVertical
110
- ? d3Line()
111
- .y(({ data: { x } }) => xScaler(x))
112
- .x(({ data: { y } }) => yScaler(y))
113
- : d3Line()
114
- .x(({ data: { x } }) => xScaler(x))
115
- .y(({ data: { y } }) => yScaler(y))
116
- ).defined(defined);
117
- curve && lineGen.curve(curveCatmullRom.alpha(tension));
118
- curve && lineGen.curve(curveMonotoneX);
119
- return lineGen;
120
- }, [direction, xScaler, yScaler, tension, curve]);
121
-
122
- const path = lineGen(_data);
123
- const showLighter = lighter && lighter.show;
124
- const show = lineShadow && lineShadow.show;
125
- const shadow = lineShadow && lineShadow.shadow;
126
- return (
127
- <g className='__easyv-line'>
128
- <path
129
- d={path}
130
- stroke={stroke}
131
- style={{
132
- filter:show?`drop-shadow(${shadow.hShadow}px ${shadow.vShadow}px ${shadow.blur}px ${shadow.color})`:"none"
133
- }}
134
- fill='none'
135
- strokeDasharray={lineType === 'dash' ? '3 3' : null}
136
- strokeWidth={lineWidth}
137
- />
138
- {type == 'area' && (
139
- <Area
140
- data={_data}
141
- config={{ ...area, curve, tension }}
142
- xScaler={xScaler}
143
- yScaler={yScaler}
144
- />
145
- )}
146
- {showLighter && <Lighter path={path} config={lighter} />}
147
- </g>
148
- );
149
- }
150
- );
1
+ /**
2
+ * 折线图
3
+ */
4
+ import React, { memo, useMemo } from 'react';
5
+ import { line as d3Line, area as d3Area, curveCatmullRom, curveMonotoneX } from 'd3v7';
6
+ import { getColorList } from '../utils';
7
+ import { Lighter, LinearGradient } from '.';
8
+
9
+ const defined = (d) => d.data.y != null;
10
+ const getLineData = (data, connectNulls) =>
11
+ connectNulls
12
+ ? data.map(({ data, ...item }) => ({
13
+ ...item,
14
+ data: { ...data, y: +data.y },
15
+ }))
16
+ : data;
17
+
18
+ const Area = ({
19
+ data,
20
+ config,
21
+ config: {
22
+ id,
23
+ fill,
24
+ type,
25
+ url,
26
+ opacity,
27
+ size: { width: patternW, height: patternH },
28
+ curve,
29
+ tension
30
+ },
31
+ xScaler,
32
+ yScaler,
33
+ }) => {
34
+ const [height] = yScaler.range();
35
+ const area = useMemo(() => getColorList(fill), [fill]);
36
+
37
+ const areaGen = useMemo(() => {
38
+ const areaGen = d3Area()
39
+ .x(({ data: { x } }) => xScaler(x))
40
+ .y1(({ data: { y } }) => yScaler(y))
41
+ // .y0(height)
42
+ .y0(({})=>yScaler(0))
43
+ .defined(defined);
44
+ curve && areaGen.curve(curveCatmullRom.alpha(tension));
45
+ curve && areaGen.curve(curveMonotoneX);
46
+ return areaGen;
47
+ }, [xScaler, yScaler, curve, tension]);
48
+
49
+ return (
50
+ <>
51
+ <path d={areaGen(data)} stroke='none' fill={'url(#' + id + ')'} />
52
+ <defs>
53
+ {type && type == 'pattern' ? (
54
+ <pattern id={id} patternUnits="userSpaceOnUse" width={patternW} height={patternH}>
55
+ {url && <image opacity={opacity} width={patternW} height={patternH} xlinkHref={window.appConfig.ASSETS_URL + url} />}
56
+ </pattern>
57
+ ) : (
58
+ <LinearGradient id={id} colors={area} rotate={0} />
59
+ )}
60
+ </defs>
61
+ </>
62
+ );
63
+ };
64
+
65
+ export default memo(
66
+ ({
67
+ type,
68
+ config: {
69
+ line: {
70
+ type: lineType,
71
+ lineWidth,
72
+ curve,
73
+ tension,
74
+ connectNulls,
75
+ lineShadow,
76
+ lighter,
77
+ },
78
+ // icon,
79
+ // label,
80
+ },
81
+ line: { id: lineId, stroke },
82
+ area,
83
+ data,
84
+ xAxis: { scaler: xScaler, direction },
85
+ yAxis: { scaler: yScaler },
86
+ }) => {
87
+ if (!data.length) return null;
88
+ const ticks = xScaler.domain();
89
+
90
+ const sortData = useMemo(() => {
91
+ const usefulData = data.filter(
92
+ ({ data: { x } }) => ticks.indexOf(x) > -1
93
+ );
94
+ return usefulData.sort(
95
+ ({ data: { x: a } }, { data: { x: b } }) =>
96
+ ticks.indexOf(a) - ticks.indexOf(b)
97
+ );
98
+ }, [data, ticks]);
99
+
100
+ const _data = useMemo(
101
+ () => getLineData(sortData, connectNulls),
102
+ [sortData, connectNulls]
103
+ );
104
+
105
+ const lineGen = useMemo(() => {
106
+ const isVertical = direction === 'vertical';
107
+
108
+ let lineGen = (
109
+ isVertical
110
+ ? d3Line()
111
+ .y(({ data: { x } }) => xScaler(x))
112
+ .x(({ data: { y } }) => yScaler(y))
113
+ : d3Line()
114
+ .x(({ data: { x } }) => xScaler(x))
115
+ .y(({ data: { y } }) => yScaler(y))
116
+ ).defined(defined);
117
+ curve && lineGen.curve(curveCatmullRom.alpha(tension));
118
+ curve && lineGen.curve(curveMonotoneX);
119
+ return lineGen;
120
+ }, [direction, xScaler, yScaler, tension, curve]);
121
+
122
+ const path = lineGen(_data);
123
+ const showLighter = lighter && lighter.show;
124
+ const show = lineShadow && lineShadow.show;
125
+ const shadow = lineShadow && lineShadow.shadow;
126
+ return (
127
+ <g className='__easyv-line'>
128
+ <path
129
+ d={path}
130
+ stroke={stroke}
131
+ style={{
132
+ filter:show?`drop-shadow(${shadow.hShadow}px ${shadow.vShadow}px ${shadow.blur}px ${shadow.color})`:"none"
133
+ }}
134
+ fill='none'
135
+ strokeDasharray={lineType === 'dash' ? '3 3' : null}
136
+ strokeWidth={lineWidth}
137
+ />
138
+ {type == 'area' && (
139
+ <Area
140
+ data={_data}
141
+ config={{ ...area, curve, tension }}
142
+ xScaler={xScaler}
143
+ yScaler={yScaler}
144
+ />
145
+ )}
146
+ {showLighter && <Lighter path={path} config={lighter} />}
147
+ </g>
148
+ );
149
+ }
150
+ );
@@ -1,29 +1,29 @@
1
- /**
2
- * svg渐变滤镜
3
- */
4
- export default ({
5
- id,
6
- colors,
7
- rotate = 0,
8
- gradientUnits,
9
- position: [x1, y1, x2, y2] = [0, 0, 0, 1],
10
- }) => (
11
- <linearGradient
12
- x1={x1}
13
- y1={y1}
14
- x2={x2}
15
- y2={y2}
16
- id={id}
17
- gradientUnits={gradientUnits}
18
- gradientTransform={'rotate(' + rotate + ', .5, .5)'}
19
- >
20
- {colors.map(({ offset, color, stopOpacity = 1 }, index) => (
21
- <stop
22
- key={index}
23
- offset={offset}
24
- stopColor={color}
25
- stopOpacity={stopOpacity}
26
- />
27
- ))}
28
- </linearGradient>
29
- );
1
+ /**
2
+ * svg渐变滤镜
3
+ */
4
+ export default ({
5
+ id,
6
+ colors,
7
+ rotate = 0,
8
+ gradientUnits,
9
+ position: [x1, y1, x2, y2] = [0, 0, 0, 1],
10
+ }) => (
11
+ <linearGradient
12
+ x1={x1}
13
+ y1={y1}
14
+ x2={x2}
15
+ y2={y2}
16
+ id={id}
17
+ gradientUnits={gradientUnits}
18
+ gradientTransform={'rotate(' + rotate + ', .5, .5)'}
19
+ >
20
+ {colors.map(({ offset, color, stopOpacity = 1 }, index) => (
21
+ <stop
22
+ key={index}
23
+ offset={offset}
24
+ stopColor={color}
25
+ stopOpacity={stopOpacity}
26
+ />
27
+ ))}
28
+ </linearGradient>
29
+ );
@@ -40,7 +40,7 @@ export default memo(forwardRef((props:marquee, ref:any) => {
40
40
  observe.current = new IntersectionObserver(
41
41
  function (entries:any) {
42
42
  let entrie = entries[0];
43
- if (entrie.boundingClientRect.width < entrie.rootBounds.width) {
43
+ if (entrie.boundingClientRect.width <= entrie.rootBounds.width) {
44
44
  //表示文字全部可视
45
45
  cancelAnimationFrame(timer.current||0);
46
46
  target.current!.style.transform = "translate(0px,0px)"; //重置偏移
@@ -394,16 +394,12 @@ const Component = memo(
394
394
  );
395
395
 
396
396
  const onMouseEnter = useCallback(
397
- (e) =>{
398
- const _data = arcs[+currentIndex].data;
399
- triggerOnRelative(_data);
400
- onEmit('onMouseEnter', _data);
397
+ (e) =>
401
398
  onEvent({
402
399
  currentIndex: +e.currentTarget.dataset.index,
403
400
  type: 'onMouseEnter',
404
- })
405
- },
406
- [onEvent,triggerOnRelative,onEmit]
401
+ }),
402
+ [onEvent]
407
403
  );
408
404
 
409
405
  const onMouseLeave = useCallback(