@easyv/charts 1.3.26 → 1.3.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.
Files changed (51) 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 +3 -4
  5. package/lib/components/Background.js +2 -2
  6. package/lib/components/ConicalGradient.js +21 -21
  7. package/lib/components/Indicator.js +2 -2
  8. package/lib/components/Lighter.js +179 -179
  9. package/lib/components/LinearGradient.js +2 -2
  10. package/lib/components/PieChart.js +3 -40
  11. package/lib/css/index.module.css +41 -41
  12. package/lib/css/piechart.module.css +26 -26
  13. package/lib/element/ConicGradient.js +72 -72
  14. package/lib/hooks/useAnimateData.js +5 -5
  15. package/lib/hooks/useFilterData.js +5 -5
  16. package/lib/hooks/useStackData.js +5 -5
  17. package/lib/hooks/useTooltip.js +10 -10
  18. package/package.json +1 -1
  19. package/src/components/Axis.tsx +2 -3
  20. package/src/components/Background.tsx +62 -62
  21. package/src/components/Band.tsx +192 -192
  22. package/src/components/Brush.js +159 -159
  23. package/src/components/Chart.js +99 -99
  24. package/src/components/ChartContainer.tsx +63 -63
  25. package/src/components/ConicalGradient.js +258 -258
  26. package/src/components/ExtentData.js +17 -17
  27. package/src/components/Indicator.js +13 -13
  28. package/src/components/Label.js +225 -225
  29. package/src/components/Lighter.jsx +173 -173
  30. package/src/components/Line.js +150 -150
  31. package/src/components/LinearGradient.js +29 -29
  32. package/src/components/PieChart.js +6 -51
  33. package/src/components/StereoBar.tsx +307 -307
  34. package/src/components/index.js +55 -55
  35. package/src/context/index.js +2 -2
  36. package/src/css/index.module.css +41 -41
  37. package/src/css/piechart.module.css +26 -26
  38. package/src/element/ConicGradient.jsx +55 -55
  39. package/src/element/Line.tsx +33 -33
  40. package/src/element/index.ts +3 -3
  41. package/src/formatter/index.js +1 -1
  42. package/src/formatter/legend.js +90 -90
  43. package/src/hooks/index.js +17 -17
  44. package/src/hooks/useAnimateData.ts +67 -67
  45. package/src/hooks/useFilterData.js +72 -72
  46. package/src/hooks/useStackData.js +101 -101
  47. package/src/hooks/useTooltip.ts +96 -96
  48. package/src/index.js +6 -6
  49. package/src/types/index.d.ts +67 -67
  50. package/src/utils/index.js +757 -757
  51. package/tsconfig.json +23 -23
@@ -1,192 +1,192 @@
1
- /**
2
- * (柱状/条形)图柱子
3
- */
4
- import React, { memo } from 'react';
5
- import { min, max } from 'd3v7';
6
- import { getBandBackground, getSeriesInfo } from '../utils';
7
-
8
- const getHighlightData = (data: Array<DataWithBoundType>, extent: string) => {
9
- switch (extent) {
10
- case 'min':
11
- const minData = min(data, (d: DataWithBoundType) => d.data.y);
12
- return data.map((item) => ({
13
- ...item,
14
- flag: minData == item.data.y ? 'min' : '',
15
- }));
16
- case 'max':
17
- const maxData = max(data, (d: DataWithBoundType) => d.data.y);
18
- return data.map((item) => ({
19
- ...item,
20
- flag: maxData == item.data.y ? 'max' : '',
21
- }));
22
- default:
23
- return data;
24
- }
25
- };
26
-
27
- const getAttr = ({
28
- isVertical,
29
- seriesWidth,
30
- length,
31
- x,
32
- y,
33
- }: {
34
- isVertical: boolean;
35
- seriesWidth: number;
36
- length: number;
37
- x: number;
38
- y: number;
39
- }) => {
40
- if (isVertical) return { width: length, height: seriesWidth, x: y, y: x };
41
- return {
42
- x,
43
- y,
44
- width: seriesWidth,
45
- height: length,
46
- };
47
- };
48
-
49
- const getBorderRadius = ({
50
- isVertical,
51
- positive,
52
- seriesWidth,
53
- }: {
54
- isVertical: boolean;
55
- positive: boolean;
56
- seriesWidth: number;
57
- }) => {
58
- return isVertical
59
- ? positive
60
- ? '0px ' + seriesWidth + 'px ' + seriesWidth + 'px 0'
61
- : seriesWidth + 'px 0 0 ' + seriesWidth + 'px'
62
- : positive
63
- ? seriesWidth / 2 + 'px ' + seriesWidth / 2 + 'px 0 0'
64
- : '0 0 ' + seriesWidth / 2 + 'px ' + seriesWidth / 2 + 'px';
65
- };
66
-
67
- export default memo(
68
- ({
69
- triggerClick,
70
- config: {
71
- pattern = {},
72
- seriesIntervalWidth: paddingInner = 0,
73
- paddingInner: paddingOuter = 0,
74
- style,
75
- fillType,
76
- url,
77
- size,
78
- fill,
79
- opacity,
80
- highlight: { show: showHighlight, extent, fill: highlightFill },
81
- headDecorate
82
- },
83
- bandLength = 0,
84
- data,
85
- xAxis: { scaler: xScaler, step, direction },
86
- yAxis: { scaler: yScaler },
87
- }: any) => {
88
- if (!data.length) return null;
89
-
90
- const { seriesWidth, seriesStep, seriesStart } = getSeriesInfo({
91
- step,
92
- bandLength,
93
- paddingInner,
94
- paddingOuter,
95
- });
96
-
97
- const _data = showHighlight ? getHighlightData(data, extent) : data;
98
-
99
- const isVertical = direction === 'vertical';
100
- return (
101
- <g className='__easyv-band'>
102
- {_data.map(
103
- (
104
- {
105
- flag,
106
- index,
107
- bound: [start, end],
108
- data,
109
- data: { x, y, s },
110
- }: DataWithBoundType,
111
- i: number
112
- ) => {
113
- const y1 = yScaler(isVertical ? end : start);
114
- const y2 = yScaler(isVertical ? start : end);
115
-
116
- const positionX =
117
- xScaler(x) - step / 2 + seriesStart + index * seriesStep;
118
-
119
- let showHead , headUrl, headWidth, headHeight, headTranslate;
120
- if(headDecorate){
121
- showHead = headDecorate.show,
122
- headUrl = headDecorate.url,
123
- headWidth = headDecorate.size.width,
124
- headHeight = headDecorate.size.height,
125
- headTranslate = headDecorate.translate;
126
- }
127
-
128
- if (isNaN(positionX)) return null;
129
- const positionY = y < 0 ? y1 : y2;
130
- const attr = getAttr({
131
- isVertical,
132
- x: positionX,
133
- y: positionY,
134
- length: Math.abs(y1 - y2),
135
- seriesWidth,
136
- });
137
- return (
138
- <foreignObject
139
- key={i}
140
- style={{
141
- overflow:"visible",
142
- position:"relative"
143
- }}
144
- {...attr}
145
- onClick={triggerClick}
146
- data-data={JSON.stringify(data)}
147
- >
148
- {headUrl && showHead && <div style={{
149
- position:"absolute",
150
- background:`url(${window.appConfig.ASSETS_URL+headUrl}) 0 0/100% 100%`,
151
- width:headWidth,
152
- height:headHeight,
153
- left:isVertical?"100%":"50%",
154
- top:isVertical?"50%":"0",
155
- zIndex:1,
156
- transform:`translate(calc(-50% + ${headTranslate.x}px), calc(-50% + ${headTranslate.y}px))`
157
- }}></div>}
158
- <div
159
- style={{
160
- width: '100%',
161
- height: '100%',
162
- /** Safari Bug **/
163
- position: 'fixed',
164
- opacity: fillType == 'pattern' ? opacity : 1,
165
- background:
166
- fillType == 'pattern'
167
- ? `50% 50% / ${size.width}px ${size.height}px repeat ` +
168
- 'url(' +
169
- url +
170
- ')'
171
- : getBandBackground(
172
- pattern,
173
- extent === flag ? highlightFill : fill
174
- ),
175
- borderRadius:
176
- style == 'square'
177
- ? '0 0 0 0'
178
- : getBorderRadius({
179
- isVertical,
180
- positive: y > 0,
181
- seriesWidth,
182
- }),
183
- }}
184
- />
185
- </foreignObject>
186
- );
187
- }
188
- )}
189
- </g>
190
- );
191
- }
192
- );
1
+ /**
2
+ * (柱状/条形)图柱子
3
+ */
4
+ import React, { memo } from 'react';
5
+ import { min, max } from 'd3v7';
6
+ import { getBandBackground, getSeriesInfo } from '../utils';
7
+
8
+ const getHighlightData = (data: Array<DataWithBoundType>, extent: string) => {
9
+ switch (extent) {
10
+ case 'min':
11
+ const minData = min(data, (d: DataWithBoundType) => d.data.y);
12
+ return data.map((item) => ({
13
+ ...item,
14
+ flag: minData == item.data.y ? 'min' : '',
15
+ }));
16
+ case 'max':
17
+ const maxData = max(data, (d: DataWithBoundType) => d.data.y);
18
+ return data.map((item) => ({
19
+ ...item,
20
+ flag: maxData == item.data.y ? 'max' : '',
21
+ }));
22
+ default:
23
+ return data;
24
+ }
25
+ };
26
+
27
+ const getAttr = ({
28
+ isVertical,
29
+ seriesWidth,
30
+ length,
31
+ x,
32
+ y,
33
+ }: {
34
+ isVertical: boolean;
35
+ seriesWidth: number;
36
+ length: number;
37
+ x: number;
38
+ y: number;
39
+ }) => {
40
+ if (isVertical) return { width: length, height: seriesWidth, x: y, y: x };
41
+ return {
42
+ x,
43
+ y,
44
+ width: seriesWidth,
45
+ height: length,
46
+ };
47
+ };
48
+
49
+ const getBorderRadius = ({
50
+ isVertical,
51
+ positive,
52
+ seriesWidth,
53
+ }: {
54
+ isVertical: boolean;
55
+ positive: boolean;
56
+ seriesWidth: number;
57
+ }) => {
58
+ return isVertical
59
+ ? positive
60
+ ? '0px ' + seriesWidth + 'px ' + seriesWidth + 'px 0'
61
+ : seriesWidth + 'px 0 0 ' + seriesWidth + 'px'
62
+ : positive
63
+ ? seriesWidth / 2 + 'px ' + seriesWidth / 2 + 'px 0 0'
64
+ : '0 0 ' + seriesWidth / 2 + 'px ' + seriesWidth / 2 + 'px';
65
+ };
66
+
67
+ export default memo(
68
+ ({
69
+ triggerClick,
70
+ config: {
71
+ pattern = {},
72
+ seriesIntervalWidth: paddingInner = 0,
73
+ paddingInner: paddingOuter = 0,
74
+ style,
75
+ fillType,
76
+ url,
77
+ size,
78
+ fill,
79
+ opacity,
80
+ highlight: { show: showHighlight, extent, fill: highlightFill },
81
+ headDecorate
82
+ },
83
+ bandLength = 0,
84
+ data,
85
+ xAxis: { scaler: xScaler, step, direction },
86
+ yAxis: { scaler: yScaler },
87
+ }: any) => {
88
+ if (!data.length) return null;
89
+
90
+ const { seriesWidth, seriesStep, seriesStart } = getSeriesInfo({
91
+ step,
92
+ bandLength,
93
+ paddingInner,
94
+ paddingOuter,
95
+ });
96
+
97
+ const _data = showHighlight ? getHighlightData(data, extent) : data;
98
+
99
+ const isVertical = direction === 'vertical';
100
+ return (
101
+ <g className='__easyv-band'>
102
+ {_data.map(
103
+ (
104
+ {
105
+ flag,
106
+ index,
107
+ bound: [start, end],
108
+ data,
109
+ data: { x, y, s },
110
+ }: DataWithBoundType,
111
+ i: number
112
+ ) => {
113
+ const y1 = yScaler(isVertical ? end : start);
114
+ const y2 = yScaler(isVertical ? start : end);
115
+
116
+ const positionX =
117
+ xScaler(x) - step / 2 + seriesStart + index * seriesStep;
118
+
119
+ let showHead , headUrl, headWidth, headHeight, headTranslate;
120
+ if(headDecorate){
121
+ showHead = headDecorate.show,
122
+ headUrl = headDecorate.url,
123
+ headWidth = headDecorate.size.width,
124
+ headHeight = headDecorate.size.height,
125
+ headTranslate = headDecorate.translate;
126
+ }
127
+
128
+ if (isNaN(positionX)) return null;
129
+ const positionY = y < 0 ? y1 : y2;
130
+ const attr = getAttr({
131
+ isVertical,
132
+ x: positionX,
133
+ y: positionY,
134
+ length: Math.abs(y1 - y2),
135
+ seriesWidth,
136
+ });
137
+ return (
138
+ <foreignObject
139
+ key={i}
140
+ style={{
141
+ overflow:"visible",
142
+ position:"relative"
143
+ }}
144
+ {...attr}
145
+ onClick={triggerClick}
146
+ data-data={JSON.stringify(data)}
147
+ >
148
+ {headUrl && showHead && <div style={{
149
+ position:"absolute",
150
+ background:`url(${window.appConfig.ASSETS_URL+headUrl}) 0 0/100% 100%`,
151
+ width:headWidth,
152
+ height:headHeight,
153
+ left:isVertical?"100%":"50%",
154
+ top:isVertical?"50%":"0",
155
+ zIndex:1,
156
+ transform:`translate(calc(-50% + ${headTranslate.x}px), calc(-50% + ${headTranslate.y}px))`
157
+ }}></div>}
158
+ <div
159
+ style={{
160
+ width: '100%',
161
+ height: '100%',
162
+ /** Safari Bug **/
163
+ position: 'fixed',
164
+ opacity: fillType == 'pattern' ? opacity : 1,
165
+ background:
166
+ fillType == 'pattern'
167
+ ? `50% 50% / ${size.width}px ${size.height}px repeat ` +
168
+ 'url(' +
169
+ url +
170
+ ')'
171
+ : getBandBackground(
172
+ pattern,
173
+ extent === flag ? highlightFill : fill
174
+ ),
175
+ borderRadius:
176
+ style == 'square'
177
+ ? '0 0 0 0'
178
+ : getBorderRadius({
179
+ isVertical,
180
+ positive: y > 0,
181
+ seriesWidth,
182
+ }),
183
+ }}
184
+ />
185
+ </foreignObject>
186
+ );
187
+ }
188
+ )}
189
+ </g>
190
+ );
191
+ }
192
+ );