@easyv/charts 1.6.13 → 1.6.14

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 (66) 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/Axis.js +1 -1
  6. package/lib/components/Background.js +2 -2
  7. package/lib/components/Band.js +3 -3
  8. package/lib/components/Brush.js +2 -2
  9. package/lib/components/Chart.js +2 -2
  10. package/lib/components/ChartContainer.js +3 -3
  11. package/lib/components/ConicalGradient.js +21 -21
  12. package/lib/components/Control.js +1 -1
  13. package/lib/components/ExtentData.js +2 -2
  14. package/lib/components/Indicator.js +2 -2
  15. package/lib/components/Label.js +7 -5
  16. package/lib/components/Legend.js +2 -2
  17. package/lib/components/Lighter.js +2 -2
  18. package/lib/components/Line.js +2 -2
  19. package/lib/components/LinearGradient.js +2 -2
  20. package/lib/components/Marquee.js +1 -1
  21. package/lib/components/StereoBar.js +2 -2
  22. package/lib/components/TextOverflow.js +1 -1
  23. package/lib/css/index.module.css +42 -42
  24. package/lib/css/piechart.module.css +26 -26
  25. package/lib/hooks/useAnimateData.js +6 -6
  26. package/lib/hooks/useAxes.js +1 -2
  27. package/lib/hooks/useFilterData.js +5 -5
  28. package/lib/hooks/useStackData.js +5 -5
  29. package/lib/hooks/useTooltip.js +11 -11
  30. package/lib/utils/index.js +3 -3
  31. package/package.json +55 -55
  32. package/src/components/Background.tsx +61 -61
  33. package/src/components/Band.tsx +271 -271
  34. package/src/components/Brush.js +159 -159
  35. package/src/components/Chart.js +154 -154
  36. package/src/components/ChartContainer.tsx +71 -71
  37. package/src/components/ConicalGradient.js +258 -258
  38. package/src/components/Control.jsx +241 -241
  39. package/src/components/ExtentData.js +18 -18
  40. package/src/components/Indicator.js +58 -58
  41. package/src/components/Label.js +247 -246
  42. package/src/components/Legend.js +166 -166
  43. package/src/components/Lighter.jsx +173 -173
  44. package/src/components/Line.js +153 -153
  45. package/src/components/LinearGradient.js +29 -29
  46. package/src/components/PieTooltip.jsx +160 -160
  47. package/src/components/StereoBar.tsx +307 -307
  48. package/src/components/index.js +59 -59
  49. package/src/context/index.js +2 -2
  50. package/src/css/index.module.css +42 -42
  51. package/src/css/piechart.module.css +26 -26
  52. package/src/element/ConicGradient.jsx +55 -55
  53. package/src/element/Line.tsx +33 -33
  54. package/src/element/index.ts +3 -3
  55. package/src/formatter/index.js +1 -1
  56. package/src/formatter/legend.js +112 -112
  57. package/src/hooks/index.js +20 -20
  58. package/src/hooks/useAnimateData.ts +68 -68
  59. package/src/hooks/useAxes.js +1 -2
  60. package/src/hooks/useFilterData.js +78 -78
  61. package/src/hooks/useStackData.js +102 -102
  62. package/src/hooks/useTooltip.ts +104 -104
  63. package/src/index.js +6 -6
  64. package/src/types/index.d.ts +68 -68
  65. package/src/utils/index.js +782 -782
  66. package/tsconfig.json +23 -23
@@ -1,153 +1,153 @@
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
- return data.flatMap(d=>{
12
- const y = d.data.y;
13
- return isNaN(y)?
14
- connectNulls?
15
- []:
16
- {...d,data:{...d.data,y:null}}:
17
- d
18
- });
19
- }
20
-
21
-
22
- const Area = ({
23
- data,
24
- config,
25
- config: {
26
- id,
27
- fill,
28
- type,
29
- url,
30
- opacity,
31
- size: { width: patternW, height: patternH },
32
- curve,
33
- tension
34
- },
35
- xScaler,
36
- yScaler,
37
- }) => {
38
- const [height] = yScaler.range();
39
- const area = useMemo(() => getColorList(fill), [fill]);
40
-
41
- const areaGen = useMemo(() => {
42
- const areaGen = d3Area()
43
- .x(({ data: { x } }) => xScaler(x))
44
- .y1(({ data: { y } }) => yScaler(y))
45
- .y0(({})=>yScaler(0))
46
- .defined(defined);
47
- curve && areaGen.curve(curveCatmullRom.alpha(tension));
48
- curve && areaGen.curve(curveMonotoneX);
49
- return areaGen;
50
- }, [xScaler, yScaler, curve, tension]);
51
-
52
- return (
53
- <>
54
- <path d={areaGen(data)} style={{pointerEvents:"none"}} stroke='none' fill={'url(#' + id + ')'} />
55
- <defs>
56
- {type && type == 'pattern' ? (
57
- <pattern id={id} patternUnits="userSpaceOnUse" width={patternW} height={patternH}>
58
- {url && <image opacity={opacity} width={patternW} height={patternH} xlinkHref={window.appConfig.ASSETS_URL + url} />}
59
- </pattern>
60
- ) : (
61
- <LinearGradient id={id} colors={area} rotate={0} />
62
- )}
63
- </defs>
64
- </>
65
- );
66
- };
67
-
68
- export default memo(
69
- ({
70
- type,
71
- config: {
72
- line: {
73
- type: lineType,
74
- lineWidth,
75
- curve,
76
- tension,
77
- connectNulls,
78
- lineShadow,
79
- lighter,
80
- },
81
- // icon,
82
- // label,
83
- },
84
- line: { id: lineId, stroke },
85
- area,
86
- data,
87
- xAxis: { scaler: xScaler, direction },
88
- yAxis: { scaler: yScaler },
89
- }) => {
90
- if (!data.length) return null;
91
- const ticks = xScaler.domain();
92
-
93
- const sortData = useMemo(() => {
94
- const usefulData = data.filter(
95
- ({ data: { x } }) => ticks.indexOf(x) > -1
96
- );
97
- return usefulData.sort(
98
- ({ data: { x: a } }, { data: { x: b } }) =>
99
- ticks.indexOf(a) - ticks.indexOf(b)
100
- );
101
- }, [data, ticks]);
102
-
103
- const _data = useMemo(
104
- () => getLineData(sortData, connectNulls),
105
- [sortData, connectNulls]
106
- );
107
- const lineGen = useMemo(() => {
108
- const isVertical = direction === 'vertical';
109
-
110
- let lineGen = (
111
- isVertical
112
- ? d3Line()
113
- .y(({ data: { x } }) => xScaler(x))
114
- .x(({ data: { y } }) => yScaler(y))
115
- : d3Line()
116
- .x(({ data: { x } }) => xScaler(x))
117
- .y(({ data: { y } }) => yScaler(y))
118
- ).defined(defined);
119
- curve && lineGen.curve(curveCatmullRom.alpha(tension));
120
- curve && lineGen.curve(curveMonotoneX);
121
- return lineGen;
122
- }, [direction, xScaler, yScaler, tension, curve]);
123
-
124
- const path = lineGen(_data);
125
- const showLighter = lighter && lighter.show;
126
- const show = lineShadow && lineShadow.show;
127
- const shadow = lineShadow && lineShadow.shadow;
128
- return (
129
- <g className='__easyv-line'>
130
- <path
131
- d={path}
132
- stroke={stroke}
133
- style={{
134
- filter:show?`drop-shadow(${shadow.hShadow}px ${shadow.vShadow}px ${shadow.blur}px ${shadow.color})`:"none",
135
- pointerEvents:"none"
136
- }}
137
- fill='none'
138
- strokeDasharray={lineType === 'dash' ? '3 3' : null}
139
- strokeWidth={lineWidth}
140
- />
141
- {type == 'area' && (
142
- <Area
143
- data={_data}
144
- config={{ ...area, curve, tension }}
145
- xScaler={xScaler}
146
- yScaler={yScaler}
147
- />
148
- )}
149
- {showLighter && <Lighter path={path} config={lighter} />}
150
- </g>
151
- );
152
- }
153
- );
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
+ return data.flatMap(d=>{
12
+ const y = d.data.y;
13
+ return isNaN(y)?
14
+ connectNulls?
15
+ []:
16
+ {...d,data:{...d.data,y:null}}:
17
+ d
18
+ });
19
+ }
20
+
21
+
22
+ const Area = ({
23
+ data,
24
+ config,
25
+ config: {
26
+ id,
27
+ fill,
28
+ type,
29
+ url,
30
+ opacity,
31
+ size: { width: patternW, height: patternH },
32
+ curve,
33
+ tension
34
+ },
35
+ xScaler,
36
+ yScaler,
37
+ }) => {
38
+ const [height] = yScaler.range();
39
+ const area = useMemo(() => getColorList(fill), [fill]);
40
+
41
+ const areaGen = useMemo(() => {
42
+ const areaGen = d3Area()
43
+ .x(({ data: { x } }) => xScaler(x))
44
+ .y1(({ data: { y } }) => yScaler(y))
45
+ .y0(({})=>yScaler(0))
46
+ .defined(defined);
47
+ curve && areaGen.curve(curveCatmullRom.alpha(tension));
48
+ curve && areaGen.curve(curveMonotoneX);
49
+ return areaGen;
50
+ }, [xScaler, yScaler, curve, tension]);
51
+
52
+ return (
53
+ <>
54
+ <path d={areaGen(data)} style={{pointerEvents:"none"}} stroke='none' fill={'url(#' + id + ')'} />
55
+ <defs>
56
+ {type && type == 'pattern' ? (
57
+ <pattern id={id} patternUnits="userSpaceOnUse" width={patternW} height={patternH}>
58
+ {url && <image opacity={opacity} width={patternW} height={patternH} xlinkHref={window.appConfig.ASSETS_URL + url} />}
59
+ </pattern>
60
+ ) : (
61
+ <LinearGradient id={id} colors={area} rotate={0} />
62
+ )}
63
+ </defs>
64
+ </>
65
+ );
66
+ };
67
+
68
+ export default memo(
69
+ ({
70
+ type,
71
+ config: {
72
+ line: {
73
+ type: lineType,
74
+ lineWidth,
75
+ curve,
76
+ tension,
77
+ connectNulls,
78
+ lineShadow,
79
+ lighter,
80
+ },
81
+ // icon,
82
+ // label,
83
+ },
84
+ line: { id: lineId, stroke },
85
+ area,
86
+ data,
87
+ xAxis: { scaler: xScaler, direction },
88
+ yAxis: { scaler: yScaler },
89
+ }) => {
90
+ if (!data.length) return null;
91
+ const ticks = xScaler.domain();
92
+
93
+ const sortData = useMemo(() => {
94
+ const usefulData = data.filter(
95
+ ({ data: { x } }) => ticks.indexOf(x) > -1
96
+ );
97
+ return usefulData.sort(
98
+ ({ data: { x: a } }, { data: { x: b } }) =>
99
+ ticks.indexOf(a) - ticks.indexOf(b)
100
+ );
101
+ }, [data, ticks]);
102
+
103
+ const _data = useMemo(
104
+ () => getLineData(sortData, connectNulls),
105
+ [sortData, connectNulls]
106
+ );
107
+ const lineGen = useMemo(() => {
108
+ const isVertical = direction === 'vertical';
109
+
110
+ let lineGen = (
111
+ isVertical
112
+ ? d3Line()
113
+ .y(({ data: { x } }) => xScaler(x))
114
+ .x(({ data: { y } }) => yScaler(y))
115
+ : d3Line()
116
+ .x(({ data: { x } }) => xScaler(x))
117
+ .y(({ data: { y } }) => yScaler(y))
118
+ ).defined(defined);
119
+ curve && lineGen.curve(curveCatmullRom.alpha(tension));
120
+ curve && lineGen.curve(curveMonotoneX);
121
+ return lineGen;
122
+ }, [direction, xScaler, yScaler, tension, curve]);
123
+
124
+ const path = lineGen(_data);
125
+ const showLighter = lighter && lighter.show;
126
+ const show = lineShadow && lineShadow.show;
127
+ const shadow = lineShadow && lineShadow.shadow;
128
+ return (
129
+ <g className='__easyv-line'>
130
+ <path
131
+ d={path}
132
+ stroke={stroke}
133
+ style={{
134
+ filter:show?`drop-shadow(${shadow.hShadow}px ${shadow.vShadow}px ${shadow.blur}px ${shadow.color})`:"none",
135
+ pointerEvents:"none"
136
+ }}
137
+ fill='none'
138
+ strokeDasharray={lineType === 'dash' ? '3 3' : null}
139
+ strokeWidth={lineWidth}
140
+ />
141
+ {type == 'area' && (
142
+ <Area
143
+ data={_data}
144
+ config={{ ...area, curve, tension }}
145
+ xScaler={xScaler}
146
+ yScaler={yScaler}
147
+ />
148
+ )}
149
+ {showLighter && <Lighter path={path} config={lighter} />}
150
+ </g>
151
+ );
152
+ }
153
+ );
@@ -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
+ );
@@ -1,161 +1,161 @@
1
- import React, { memo } from 'react'
2
- import { getFontStyle, getMargin, getTranslate3d, getTranslate2d, getIcon } from '../utils';
3
-
4
-
5
- export const PieTooltip = memo((props) => {
6
- const { mousePos,
7
- pieCenter,
8
- config: {
9
- tip: {
10
- data: { lineHeight, iconSize, name,
11
- value: { show: valueIsShow, fontStyle: valueFont, suffix: valueSuffix, suffix: { show: valueSuffixIsShow } },
12
- percentage: { show: percentageIsShow, fontStyle: percentageFont, suffix: percentageSuffix, suffix: { show: percentageSuffixIsShow }, precision },
13
- },
14
- image,
15
- margin,
16
- size: { width: tipWidth, height: tipHeight },
17
- translate: translateTip,
18
- },
19
- },
20
- data,
21
- series } = props
22
-
23
- const Item = () => {
24
- const { data: { s, y }, percent } = data
25
- const { type, icon, displayName } = [...series.values()].find(
26
- (series) => series.name == s
27
- );
28
-
29
- const renderSuffix = (suffix) => {
30
- const {
31
- content,
32
- font: suffiixFont,
33
- translate: suffixTranslate,
34
- } = suffix;
35
- return (
36
- <span
37
- style={{
38
- ...getFontStyle(suffiixFont),
39
- display: "inline-block",
40
- transform: getTranslate3d(suffixTranslate),
41
- }}
42
- >
43
- {content}
44
- </span>
45
- )
46
- }
47
-
48
- const _icon = getIcon(type, icon);
49
- return (
50
- <dd
51
- style={{
52
- display: 'flex',
53
- justifyContent: 'space-between',
54
- lineHeight: lineHeight + 'px',
55
- }}
56
-
57
- >
58
- <span
59
- style={{
60
- // border: '1px solid red',
61
- display: 'flex',
62
- alignItems: 'center',
63
- gap: icon.iconGap,
64
- }}
65
- >
66
- <span
67
- style={{
68
- ..._icon,
69
- width: iconSize + 'px',
70
- height: iconSize + 'px',
71
- }}
72
- />
73
- <span style={getFontStyle(name)}>{displayName || s}</span>
74
- </span>
75
- {valueIsShow && <span style={getFontStyle(valueFont)}>
76
- {y}
77
- {valueSuffixIsShow && renderSuffix(valueSuffix)}
78
- </span>}
79
- {percentageIsShow && <span style={getFontStyle(percentageFont)}>
80
- {Number(percent).toFixed(precision)}
81
- {percentageSuffixIsShow && renderSuffix(percentageSuffix)}
82
- </span>}
83
- </dd>
84
- );
85
- }
86
- const { x: mouseX, y: mouseY } = mousePos
87
- const { x: centerX, y: centerY } = pieCenter
88
- const getTipPos = () => {
89
-
90
- const getBigscreenScale = () => {
91
- if (window.getScreenScale) {
92
- return window.getScreenScale()
93
- } else {
94
- const bigscreenDom = document.getElementById('bigscreen-container')
95
- if (!bigscreenDom) return [1, 1]
96
- const transform = bigscreenDom.style.transform
97
- if (!transform) return [1, 1]
98
- let match = transform.match(/scale\(([^)]+)\)/)
99
- if (match) {
100
- const scaleMatch = match[1].split(',')
101
- let scaleX = scaleMatch[0];
102
- let scaleY = scaleMatch[1];
103
- if (scaleY) {
104
- return [Number(scaleX), Number(scaleY)]
105
- } else {
106
- return [Number(scaleX), Number(scaleX)]
107
- }
108
- } else {
109
- return [1, 1]
110
- }
111
- }
112
- }
113
- const [scaleX, scaleY] = getBigscreenScale()
114
- const _mouseX = mouseX / scaleX
115
- const _mouseY = mouseY / scaleY
116
- const tipPosMap = {
117
- rightTop: `translate(${_mouseX + translateTip.x}px,${_mouseY - tipHeight - translateTip.y}px)`,
118
- leftTop: `translate(${_mouseX - tipWidth - translateTip.x}px,${_mouseY - tipHeight - translateTip.y}px)`,
119
- leftBottom: `translate(${_mouseX - tipWidth - translateTip.x}px,${_mouseY + translateTip.y}px)`,
120
- rightBottom: `translate(${_mouseX + translateTip.x}px,${(_mouseY + translateTip.y)}px)`,
121
- }
122
- if (_mouseX < centerX && _mouseY < centerY) {
123
- return tipPosMap.leftTop
124
- } else if (_mouseX > centerX && _mouseY < centerY) {
125
- return tipPosMap.rightTop
126
- } else if (_mouseX >= centerX && _mouseY >= centerY) {
127
- return tipPosMap.rightBottom
128
- } else {
129
- return tipPosMap.leftBottom
130
- }
131
- }
132
-
133
- return <div
134
- className='__easyv-tooltip'
135
- style={{
136
- pointerEvents: 'none',
137
- transform: getTipPos(mousePos, pieCenter),
138
- width: tipWidth,
139
- height: tipHeight,
140
- padding: getMargin(margin),
141
- background: image
142
- ? '50% 50% / 100% 100% no-repeat url(' +
143
- window.appConfig.ASSETS_URL +
144
- image +
145
- ')'
146
- : 'rgba(48, 55, 66, 0.85)',
147
- }}
148
- >
149
- <dl
150
- style={{
151
- display: 'flex',
152
- flexDirection: 'column',
153
- justifyContent: 'space-between',
154
- height: '100%',
155
- }}
156
- >
157
- {Item()}
158
- </dl>
159
-
160
- </div>
1
+ import React, { memo } from 'react'
2
+ import { getFontStyle, getMargin, getTranslate3d, getTranslate2d, getIcon } from '../utils';
3
+
4
+
5
+ export const PieTooltip = memo((props) => {
6
+ const { mousePos,
7
+ pieCenter,
8
+ config: {
9
+ tip: {
10
+ data: { lineHeight, iconSize, name,
11
+ value: { show: valueIsShow, fontStyle: valueFont, suffix: valueSuffix, suffix: { show: valueSuffixIsShow } },
12
+ percentage: { show: percentageIsShow, fontStyle: percentageFont, suffix: percentageSuffix, suffix: { show: percentageSuffixIsShow }, precision },
13
+ },
14
+ image,
15
+ margin,
16
+ size: { width: tipWidth, height: tipHeight },
17
+ translate: translateTip,
18
+ },
19
+ },
20
+ data,
21
+ series } = props
22
+
23
+ const Item = () => {
24
+ const { data: { s, y }, percent } = data
25
+ const { type, icon, displayName } = [...series.values()].find(
26
+ (series) => series.name == s
27
+ );
28
+
29
+ const renderSuffix = (suffix) => {
30
+ const {
31
+ content,
32
+ font: suffiixFont,
33
+ translate: suffixTranslate,
34
+ } = suffix;
35
+ return (
36
+ <span
37
+ style={{
38
+ ...getFontStyle(suffiixFont),
39
+ display: "inline-block",
40
+ transform: getTranslate3d(suffixTranslate),
41
+ }}
42
+ >
43
+ {content}
44
+ </span>
45
+ )
46
+ }
47
+
48
+ const _icon = getIcon(type, icon);
49
+ return (
50
+ <dd
51
+ style={{
52
+ display: 'flex',
53
+ justifyContent: 'space-between',
54
+ lineHeight: lineHeight + 'px',
55
+ }}
56
+
57
+ >
58
+ <span
59
+ style={{
60
+ // border: '1px solid red',
61
+ display: 'flex',
62
+ alignItems: 'center',
63
+ gap: icon.iconGap,
64
+ }}
65
+ >
66
+ <span
67
+ style={{
68
+ ..._icon,
69
+ width: iconSize + 'px',
70
+ height: iconSize + 'px',
71
+ }}
72
+ />
73
+ <span style={getFontStyle(name)}>{displayName || s}</span>
74
+ </span>
75
+ {valueIsShow && <span style={getFontStyle(valueFont)}>
76
+ {y}
77
+ {valueSuffixIsShow && renderSuffix(valueSuffix)}
78
+ </span>}
79
+ {percentageIsShow && <span style={getFontStyle(percentageFont)}>
80
+ {Number(percent).toFixed(precision)}
81
+ {percentageSuffixIsShow && renderSuffix(percentageSuffix)}
82
+ </span>}
83
+ </dd>
84
+ );
85
+ }
86
+ const { x: mouseX, y: mouseY } = mousePos
87
+ const { x: centerX, y: centerY } = pieCenter
88
+ const getTipPos = () => {
89
+
90
+ const getBigscreenScale = () => {
91
+ if (window.getScreenScale) {
92
+ return window.getScreenScale()
93
+ } else {
94
+ const bigscreenDom = document.getElementById('bigscreen-container')
95
+ if (!bigscreenDom) return [1, 1]
96
+ const transform = bigscreenDom.style.transform
97
+ if (!transform) return [1, 1]
98
+ let match = transform.match(/scale\(([^)]+)\)/)
99
+ if (match) {
100
+ const scaleMatch = match[1].split(',')
101
+ let scaleX = scaleMatch[0];
102
+ let scaleY = scaleMatch[1];
103
+ if (scaleY) {
104
+ return [Number(scaleX), Number(scaleY)]
105
+ } else {
106
+ return [Number(scaleX), Number(scaleX)]
107
+ }
108
+ } else {
109
+ return [1, 1]
110
+ }
111
+ }
112
+ }
113
+ const [scaleX, scaleY] = getBigscreenScale()
114
+ const _mouseX = mouseX / scaleX
115
+ const _mouseY = mouseY / scaleY
116
+ const tipPosMap = {
117
+ rightTop: `translate(${_mouseX + translateTip.x}px,${_mouseY - tipHeight - translateTip.y}px)`,
118
+ leftTop: `translate(${_mouseX - tipWidth - translateTip.x}px,${_mouseY - tipHeight - translateTip.y}px)`,
119
+ leftBottom: `translate(${_mouseX - tipWidth - translateTip.x}px,${_mouseY + translateTip.y}px)`,
120
+ rightBottom: `translate(${_mouseX + translateTip.x}px,${(_mouseY + translateTip.y)}px)`,
121
+ }
122
+ if (_mouseX < centerX && _mouseY < centerY) {
123
+ return tipPosMap.leftTop
124
+ } else if (_mouseX > centerX && _mouseY < centerY) {
125
+ return tipPosMap.rightTop
126
+ } else if (_mouseX >= centerX && _mouseY >= centerY) {
127
+ return tipPosMap.rightBottom
128
+ } else {
129
+ return tipPosMap.leftBottom
130
+ }
131
+ }
132
+
133
+ return <div
134
+ className='__easyv-tooltip'
135
+ style={{
136
+ pointerEvents: 'none',
137
+ transform: getTipPos(mousePos, pieCenter),
138
+ width: tipWidth,
139
+ height: tipHeight,
140
+ padding: getMargin(margin),
141
+ background: image
142
+ ? '50% 50% / 100% 100% no-repeat url(' +
143
+ window.appConfig.ASSETS_URL +
144
+ image +
145
+ ')'
146
+ : 'rgba(48, 55, 66, 0.85)',
147
+ }}
148
+ >
149
+ <dl
150
+ style={{
151
+ display: 'flex',
152
+ flexDirection: 'column',
153
+ justifyContent: 'space-between',
154
+ height: '100%',
155
+ }}
156
+ >
157
+ {Item()}
158
+ </dl>
159
+
160
+ </div>
161
161
  })