@easyv/charts 1.2.11 → 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.
Files changed (77) hide show
  1. package/.babelrc +8 -8
  2. package/.husky/commit-msg +3 -3
  3. package/CHANGELOG.md +18 -18
  4. package/lib/components/Axis.js +10 -10
  5. package/lib/components/Background.js +13 -3
  6. package/lib/components/Band.js +8 -8
  7. package/lib/components/BaseLine.js +0 -1
  8. package/lib/components/Carousel.js +2 -2
  9. package/lib/components/CartesianChart.js +11 -6
  10. package/lib/components/ConicalGradient.js +21 -21
  11. package/lib/components/Indicator.js +2 -2
  12. package/lib/components/Label.js +11 -12
  13. package/lib/components/Lighter.js +179 -179
  14. package/lib/components/LinearGradient.js +2 -2
  15. package/lib/components/Marquee.js +23 -28
  16. package/lib/components/StackData.js +2 -4
  17. package/lib/components/StereoBar.js +14 -14
  18. package/lib/components/TextOverflow.js +3 -3
  19. package/lib/css/index.module.css +41 -41
  20. package/lib/css/piechart.module.css +26 -26
  21. package/lib/element/ConicGradient.js +72 -72
  22. package/lib/hooks/useAnimateData.js +5 -5
  23. package/lib/hooks/useAxes.js +5 -5
  24. package/lib/hooks/useCarouselAxisX.js +5 -5
  25. package/lib/hooks/useExtentData.js +10 -8
  26. package/lib/hooks/useFilterData.js +5 -5
  27. package/lib/hooks/useStackData.js +11 -10
  28. package/lib/hooks/useTooltip.js +10 -10
  29. package/lib/utils/index.js +62 -41
  30. package/package.json +54 -53
  31. package/src/components/AnimateData.tsx +24 -24
  32. package/src/components/Axis.tsx +354 -354
  33. package/src/components/Background.tsx +62 -45
  34. package/src/components/Band.tsx +169 -173
  35. package/src/components/BaseLine.js +82 -83
  36. package/src/components/Brush.js +159 -159
  37. package/src/components/Carousel.tsx +144 -144
  38. package/src/components/CartesianChart.js +33 -22
  39. package/src/components/Chart.js +99 -99
  40. package/src/components/ChartContainer.tsx +63 -63
  41. package/src/components/ConicalGradient.js +258 -258
  42. package/src/components/ExtentData.js +17 -17
  43. package/src/components/FilterData.js +23 -23
  44. package/src/components/Indicator.js +13 -13
  45. package/src/components/Label.js +225 -206
  46. package/src/components/Legend.js +158 -158
  47. package/src/components/Lighter.jsx +173 -173
  48. package/src/components/Line.js +145 -145
  49. package/src/components/LinearGradient.js +29 -29
  50. package/src/components/Mapping.js +71 -71
  51. package/src/components/Marquee.js +88 -93
  52. package/src/components/PieChart.js +1278 -1278
  53. package/src/components/StackData.js +16 -20
  54. package/src/components/StereoBar.tsx +307 -311
  55. package/src/components/TextOverflow.js +51 -51
  56. package/src/components/Tooltip.js +169 -169
  57. package/src/components/index.js +55 -55
  58. package/src/context/index.js +2 -2
  59. package/src/css/index.module.css +41 -41
  60. package/src/css/piechart.module.css +26 -26
  61. package/src/element/ConicGradient.jsx +55 -55
  62. package/src/element/Line.tsx +33 -33
  63. package/src/element/index.ts +3 -3
  64. package/src/formatter/index.js +1 -1
  65. package/src/formatter/legend.js +90 -90
  66. package/src/hooks/index.js +17 -17
  67. package/src/hooks/useAnimateData.ts +67 -67
  68. package/src/hooks/useAxes.js +144 -144
  69. package/src/hooks/useCarouselAxisX.js +163 -163
  70. package/src/hooks/useExtentData.js +89 -88
  71. package/src/hooks/useFilterData.js +72 -72
  72. package/src/hooks/useStackData.js +101 -100
  73. package/src/hooks/useTooltip.ts +96 -96
  74. package/src/index.js +6 -6
  75. package/src/types/index.d.ts +67 -67
  76. package/src/utils/index.js +731 -714
  77. package/tsconfig.json +23 -23
@@ -24,7 +24,7 @@ import {
24
24
  Brush,
25
25
  Label,
26
26
  Mapping,
27
- BaseLine
27
+ BaseLine,
28
28
  } from '.';
29
29
 
30
30
  const Chart = memo(
@@ -41,11 +41,12 @@ const Chart = memo(
41
41
  legend,
42
42
  },
43
43
  series,
44
+ bandLength,
44
45
  tooltip,
45
46
  baseLine: {
46
- orientation:baseLineOri,
47
+ orientation: baseLineOri = '',
47
48
  config: baseLineConfig = {},
48
- data: baseLineData = []
49
+ data: baseLineData = [],
49
50
  },
50
51
  tooltip: {
51
52
  config: tooltipConfig = {},
@@ -55,7 +56,7 @@ const Chart = memo(
55
56
  },
56
57
  style,
57
58
  data,
58
- filterData
59
+ filterData,
59
60
  }) => {
60
61
  const context = useContext(chartContext);
61
62
  const {
@@ -101,10 +102,10 @@ const Chart = memo(
101
102
  const indicatorAttr = isVertical
102
103
  ? { width: chartWidth, height: indicatorWidth, y: position }
103
104
  : {
104
- height: chartHeight,
105
- width: indicatorWidth,
106
- x: position,
107
- };
105
+ height: chartHeight,
106
+ width: indicatorWidth,
107
+ x: position,
108
+ };
108
109
 
109
110
  const onInteraction = useCallback(
110
111
  (e) => {
@@ -134,6 +135,7 @@ const Chart = memo(
134
135
  length={isVertical ? chartWidth : chartHeight}
135
136
  axis={axisX}
136
137
  config={background}
138
+ bandLength={bandLength}
137
139
  />
138
140
  )}
139
141
  {[...axes.values()].map((item, index) => {
@@ -152,6 +154,7 @@ const Chart = memo(
152
154
  <Component
153
155
  key={index}
154
156
  {...config}
157
+ bandLength={bandLength}
155
158
  xAxis={axisX}
156
159
  yAxis={yAxis}
157
160
  triggerClick={onInteraction}
@@ -166,6 +169,7 @@ const Chart = memo(
166
169
  <Label
167
170
  key={index}
168
171
  {...config}
172
+ bandLength={bandLength}
169
173
  xAxis={axisX}
170
174
  yAxis={yAxis}
171
175
  triggerClick={onInteraction}
@@ -173,20 +177,27 @@ const Chart = memo(
173
177
  )
174
178
  );
175
179
  })}
176
- {baseLineData && baseLineData.length > 0 && baseLineData.map((item, index) => {
177
- const { line: { yOrZ } } = baseLineConfig[index];
178
- const yAxis = axes.get(yOrZ);
179
- return (
180
- yAxis && (<BaseLine
181
- height={height}
182
- width={width}
183
- key={index}
184
- config={baseLineConfig[index]}
185
- baseLineOri={baseLineOri}
186
- yAxis={yAxis}
187
- data={item} />)
188
- )
189
- })}
180
+ {baseLineData &&
181
+ baseLineData.length > 0 &&
182
+ baseLineData.map((item, index) => {
183
+ const {
184
+ line: { yOrZ },
185
+ } = baseLineConfig[index];
186
+ const yAxis = axes.get(yOrZ);
187
+ return (
188
+ yAxis && (
189
+ <BaseLine
190
+ height={height}
191
+ width={width}
192
+ key={index}
193
+ config={baseLineConfig[index]}
194
+ baseLineOri={baseLineOri}
195
+ yAxis={yAxis}
196
+ data={item}
197
+ />
198
+ )
199
+ );
200
+ })}
190
201
  </ChartContainer>
191
202
  <Legend {...legend} filterData={filterData} series={series} />
192
203
  {showTooltip && (
@@ -1,99 +1,99 @@
1
- /**
2
- * 总入口,通过外面传进来的type来确定渲染哪种图表,饼环图表为“pie”,否则为轴类图表
3
- */
4
- import React, { memo, useMemo, createRef, useCallback } from 'react';
5
- import { chartContext } from '../context';
6
- import { PieChart, CartesianChart } from '.';
7
-
8
- const getCallbackData = (callbacks, data) => {
9
- let callbackData;
10
- if (callbacks && Array.isArray(callbacks) && callbacks.length && data) {
11
- callbackData = {};
12
- callbacks.forEach(({ origin, target }) => {
13
- callbackData[target] = data[origin];
14
- });
15
- }
16
- return callbackData;
17
- };
18
-
19
- const Chart = memo(
20
- ({
21
- id,
22
- type,
23
- config,
24
- config: {
25
- chart: {
26
- dimension: {
27
- chartDimension: { height, width },
28
- },
29
- margin: { marginRight, marginLeft, marginBottom, marginTop },
30
- },
31
- interaction,
32
- },
33
- data,
34
- onRelative,
35
- emit,
36
- emitEvent,
37
- ...props
38
- }) => {
39
- const svg = createRef();
40
- const chartWidth = width - marginLeft - marginRight;
41
- const chartHeight = height - marginTop - marginBottom;
42
-
43
- const triggerOnRelative = useCallback(
44
- (data) => {
45
- if (!interaction) return;
46
- const { callbacks, remoteControls } = interaction;
47
- const callbackData = getCallbackData(callbacks, data);
48
- if (callbackData) {
49
- onRelative && onRelative(id, callbackData);
50
- remoteControls &&
51
- emitEvent &&
52
- remoteControls.forEach((o) => {
53
- const control = JSON.parse(o.control);
54
- if (
55
- control.screen &&
56
- control.type &&
57
- control.type === 'callback'
58
- ) {
59
- emitEvent({
60
- screen: control.screen,
61
- type: 'callback',
62
- callbackData,
63
- });
64
- }
65
- });
66
- }
67
- },
68
- [onRelative, emitEvent, JSON.stringify(interaction)]
69
- );
70
-
71
- const onEmit = useCallback(
72
- (type = 'click', data) => emit && emit(type, data),
73
- [emit]
74
- );
75
-
76
- const context = useMemo(
77
- () => ({
78
- id,
79
- width: chartWidth,
80
- height: chartHeight,
81
- triggerOnRelative,
82
- svg,
83
- onEmit,
84
- }),
85
- [id, chartWidth, chartHeight, triggerOnRelative, svg, onEmit]
86
- );
87
- return (
88
- <chartContext.Provider value={context}>
89
- {type == 'pie' ? (
90
- <PieChart id={id} config={config} data={data} {...props} />
91
- ) : (
92
- <CartesianChart id={id} config={config} data={data} {...props} />
93
- )}
94
- </chartContext.Provider>
95
- );
96
- }
97
- );
98
-
99
- export default Chart;
1
+ /**
2
+ * 总入口,通过外面传进来的type来确定渲染哪种图表,饼环图表为“pie”,否则为轴类图表
3
+ */
4
+ import React, { memo, useMemo, createRef, useCallback } from 'react';
5
+ import { chartContext } from '../context';
6
+ import { PieChart, CartesianChart } from '.';
7
+
8
+ const getCallbackData = (callbacks, data) => {
9
+ let callbackData;
10
+ if (callbacks && Array.isArray(callbacks) && callbacks.length && data) {
11
+ callbackData = {};
12
+ callbacks.forEach(({ origin, target }) => {
13
+ callbackData[target] = data[origin];
14
+ });
15
+ }
16
+ return callbackData;
17
+ };
18
+
19
+ const Chart = memo(
20
+ ({
21
+ id,
22
+ type,
23
+ config,
24
+ config: {
25
+ chart: {
26
+ dimension: {
27
+ chartDimension: { height, width },
28
+ },
29
+ margin: { marginRight, marginLeft, marginBottom, marginTop },
30
+ },
31
+ interaction,
32
+ },
33
+ data,
34
+ onRelative,
35
+ emit,
36
+ emitEvent,
37
+ ...props
38
+ }) => {
39
+ const svg = createRef();
40
+ const chartWidth = width - marginLeft - marginRight;
41
+ const chartHeight = height - marginTop - marginBottom;
42
+
43
+ const triggerOnRelative = useCallback(
44
+ (data) => {
45
+ if (!interaction) return;
46
+ const { callbacks, remoteControls } = interaction;
47
+ const callbackData = getCallbackData(callbacks, data);
48
+ if (callbackData) {
49
+ onRelative && onRelative(id, callbackData);
50
+ remoteControls &&
51
+ emitEvent &&
52
+ remoteControls.forEach((o) => {
53
+ const control = JSON.parse(o.control);
54
+ if (
55
+ control.screen &&
56
+ control.type &&
57
+ control.type === 'callback'
58
+ ) {
59
+ emitEvent({
60
+ screen: control.screen,
61
+ type: 'callback',
62
+ callbackData,
63
+ });
64
+ }
65
+ });
66
+ }
67
+ },
68
+ [onRelative, emitEvent, JSON.stringify(interaction)]
69
+ );
70
+
71
+ const onEmit = useCallback(
72
+ (type = 'click', data) => emit && emit(type, data),
73
+ [emit]
74
+ );
75
+
76
+ const context = useMemo(
77
+ () => ({
78
+ id,
79
+ width: chartWidth,
80
+ height: chartHeight,
81
+ triggerOnRelative,
82
+ svg,
83
+ onEmit,
84
+ }),
85
+ [id, chartWidth, chartHeight, triggerOnRelative, svg, onEmit]
86
+ );
87
+ return (
88
+ <chartContext.Provider value={context}>
89
+ {type == 'pie' ? (
90
+ <PieChart id={id} config={config} data={data} {...props} />
91
+ ) : (
92
+ <CartesianChart id={id} config={config} data={data} {...props} />
93
+ )}
94
+ </chartContext.Provider>
95
+ );
96
+ }
97
+ );
98
+
99
+ export default Chart;
@@ -1,63 +1,63 @@
1
- /**
2
- * svg外框
3
- */
4
- import React, {
5
- memo,
6
- forwardRef,
7
- ReactChild,
8
- ReactEventHandler,
9
- LegacyRef,
10
- } from 'react';
11
- const event = () => {};
12
-
13
- type Props = {
14
- width: number;
15
- height: number;
16
- marginLeft: number;
17
- marginTop: number;
18
- style: Object;
19
- children: ReactChild;
20
- onMouseEnter: ReactEventHandler;
21
- onMouseLeave: ReactEventHandler;
22
- onClick: ReactEventHandler;
23
- onMouseMove: ReactEventHandler;
24
- onMouseOut: ReactEventHandler;
25
- };
26
-
27
- export default memo(
28
- forwardRef(
29
- (
30
- {
31
- width,
32
- height,
33
- marginLeft,
34
- marginTop,
35
- style,
36
- children,
37
- onMouseEnter = event,
38
- onMouseLeave = event,
39
- onClick = event,
40
- onMouseMove = event,
41
- onMouseOut = event,
42
- }: Props,
43
- ref: LegacyRef<SVGSVGElement>
44
- ) => (
45
- <svg
46
- className='__easyv-svg'
47
- width={width}
48
- height={height}
49
- onMouseEnter={onMouseEnter}
50
- onMouseLeave={onMouseLeave}
51
- onMouseOut={onMouseOut}
52
- onClick={onClick}
53
- onMouseMove={onMouseMove}
54
- ref={ref}
55
- style={{ position: 'absolute', width, height, ...style }}
56
- >
57
- <g transform={'translate(' + marginLeft + ', ' + marginTop + ')'}>
58
- {children}
59
- </g>
60
- </svg>
61
- )
62
- )
63
- );
1
+ /**
2
+ * svg外框
3
+ */
4
+ import React, {
5
+ memo,
6
+ forwardRef,
7
+ ReactChild,
8
+ ReactEventHandler,
9
+ LegacyRef,
10
+ } from 'react';
11
+ const event = () => {};
12
+
13
+ type Props = {
14
+ width: number;
15
+ height: number;
16
+ marginLeft: number;
17
+ marginTop: number;
18
+ style: Object;
19
+ children: ReactChild;
20
+ onMouseEnter: ReactEventHandler;
21
+ onMouseLeave: ReactEventHandler;
22
+ onClick: ReactEventHandler;
23
+ onMouseMove: ReactEventHandler;
24
+ onMouseOut: ReactEventHandler;
25
+ };
26
+
27
+ export default memo(
28
+ forwardRef(
29
+ (
30
+ {
31
+ width,
32
+ height,
33
+ marginLeft,
34
+ marginTop,
35
+ style,
36
+ children,
37
+ onMouseEnter = event,
38
+ onMouseLeave = event,
39
+ onClick = event,
40
+ onMouseMove = event,
41
+ onMouseOut = event,
42
+ }: Props,
43
+ ref: LegacyRef<SVGSVGElement>
44
+ ) => (
45
+ <svg
46
+ className='__easyv-svg'
47
+ width={width}
48
+ height={height}
49
+ onMouseEnter={onMouseEnter}
50
+ onMouseLeave={onMouseLeave}
51
+ onMouseOut={onMouseOut}
52
+ onClick={onClick}
53
+ onMouseMove={onMouseMove}
54
+ ref={ref}
55
+ style={{ position: 'absolute', width, height, ...style }}
56
+ >
57
+ <g transform={'translate(' + marginLeft + ', ' + marginTop + ')'}>
58
+ {children}
59
+ </g>
60
+ </svg>
61
+ )
62
+ )
63
+ );