@easyv/charts 1.3.25 → 1.3.26
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/lib/components/Axis.js +43 -42
- package/lib/components/Marquee.js +13 -11
- package/lib/components/TextOverflow.js +13 -8
- package/package.json +1 -1
- package/src/components/Axis.tsx +40 -58
- package/src/components/{Marquee.js → Marquee.tsx} +19 -14
- package/src/components/{TextOverflow.js → TextOverflow.tsx} +13 -4
package/lib/components/Axis.js
CHANGED
|
@@ -23,6 +23,8 @@ var _context = require("../context");
|
|
|
23
23
|
|
|
24
24
|
var _element = require("../element");
|
|
25
25
|
|
|
26
|
+
var _TextOverflow = _interopRequireDefault(require("./TextOverflow"));
|
|
27
|
+
|
|
26
28
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
29
|
|
|
28
30
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -33,6 +35,13 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
33
35
|
|
|
34
36
|
var defaultEvent = function defaultEvent() {};
|
|
35
37
|
|
|
38
|
+
var defaultAppearance = {
|
|
39
|
+
angle: 0,
|
|
40
|
+
count: 6,
|
|
41
|
+
speed: 5,
|
|
42
|
+
width: "fit-content",
|
|
43
|
+
textOverflow: "ellipsis"
|
|
44
|
+
};
|
|
36
45
|
var defaultAlign = {
|
|
37
46
|
textAnchor: 'middle',
|
|
38
47
|
dominantBaseline: 'middle'
|
|
@@ -64,8 +73,7 @@ var getAxesPath = function getAxesPath(orientation, _ref2) {
|
|
|
64
73
|
* @param orientation 坐标轴位置
|
|
65
74
|
* @param rotate 旋转角度
|
|
66
75
|
* @returns {
|
|
67
|
-
*
|
|
68
|
-
* textAnchor,
|
|
76
|
+
* transform
|
|
69
77
|
* directionX,
|
|
70
78
|
* directionY
|
|
71
79
|
* }
|
|
@@ -76,32 +84,28 @@ var getLayout = function getLayout(orientation, rotate) {
|
|
|
76
84
|
switch (orientation) {
|
|
77
85
|
case 'top':
|
|
78
86
|
return {
|
|
79
|
-
|
|
80
|
-
textAnchor: rotate ? 'end' : 'middle',
|
|
87
|
+
transform: "translate(-50%,-100%) rotate(".concat(rotate, "deg)"),
|
|
81
88
|
directionX: 1,
|
|
82
89
|
directionY: -1
|
|
83
90
|
};
|
|
84
91
|
|
|
85
92
|
case 'bottom':
|
|
86
93
|
return {
|
|
87
|
-
|
|
88
|
-
textAnchor: rotate ? 'start' : 'middle',
|
|
94
|
+
transform: "translate(-50%,0) rotate(".concat(rotate, "deg)"),
|
|
89
95
|
directionX: 1,
|
|
90
96
|
directionY: 1
|
|
91
97
|
};
|
|
92
98
|
|
|
93
99
|
case 'left':
|
|
94
100
|
return {
|
|
95
|
-
|
|
96
|
-
textAnchor: 'end',
|
|
101
|
+
transform: "translate(-100%,-50%) rotate(".concat(rotate, "deg)"),
|
|
97
102
|
directionX: -1,
|
|
98
103
|
directionY: 1
|
|
99
104
|
};
|
|
100
105
|
|
|
101
106
|
case 'right':
|
|
102
107
|
return {
|
|
103
|
-
|
|
104
|
-
textAnchor: 'start',
|
|
108
|
+
transform: "translate(0,-50%) rotate(".concat(rotate, "deg)"),
|
|
105
109
|
directionX: 1,
|
|
106
110
|
directionY: 1
|
|
107
111
|
};
|
|
@@ -175,57 +179,54 @@ var Label = function Label(_ref5) {
|
|
|
175
179
|
_ref5$config$translat = _ref5$config.translate,
|
|
176
180
|
translateX = _ref5$config$translat.x,
|
|
177
181
|
translateY = _ref5$config$translat.y,
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
letterSpacing = _ref5$config$font.letterSpacing;
|
|
182
|
+
font = _ref5$config.font,
|
|
183
|
+
_ref5$config$appearan = _ref5$config.appearance;
|
|
184
|
+
_ref5$config$appearan = _ref5$config$appearan === void 0 ? defaultAppearance : _ref5$config$appearan;
|
|
185
|
+
var width = _ref5$config$appearan.width,
|
|
186
|
+
speed = _ref5$config$appearan.speed,
|
|
187
|
+
textOverflow = _ref5$config$appearan.textOverflow;
|
|
185
188
|
if (!show) return null;
|
|
186
189
|
|
|
187
190
|
var _label = formatter(label, config);
|
|
188
191
|
|
|
189
192
|
var _getLayout = getLayout(orientation, rotate),
|
|
190
|
-
|
|
191
|
-
textAnchor = _getLayout.textAnchor,
|
|
193
|
+
transform = _getLayout.transform,
|
|
192
194
|
directionX = _getLayout.directionX,
|
|
193
195
|
directionY = _getLayout.directionY;
|
|
194
196
|
|
|
195
197
|
var isVertical = orientation == 'left' || orientation == 'right';
|
|
196
198
|
var x = (isVertical ? tickSize * directionX : coordinate) + translateX * directionX;
|
|
197
199
|
var y = (isVertical ? coordinate : tickSize * directionY) + translateY * directionY;
|
|
198
|
-
var translateText = 'translate(' + x + ', ' + y + ')';
|
|
199
200
|
|
|
200
201
|
var _style = style && ((0, _typeof2["default"])(style) == 'object' ? style : style(_label));
|
|
201
202
|
|
|
202
|
-
return /*#__PURE__*/_react["default"].createElement("
|
|
203
|
+
return /*#__PURE__*/_react["default"].createElement("foreignObject", {
|
|
204
|
+
width: "1",
|
|
205
|
+
height: "1",
|
|
206
|
+
x: x,
|
|
207
|
+
y: y,
|
|
208
|
+
style: {
|
|
209
|
+
overflow: "visible"
|
|
210
|
+
}
|
|
211
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
203
212
|
className: className,
|
|
204
|
-
style: _objectSpread(_objectSpread({}, _style), {}, {
|
|
205
|
-
whiteSpace: 'pre'
|
|
206
|
-
}),
|
|
207
213
|
onClick: onClick,
|
|
208
214
|
"data-data": JSON.stringify({
|
|
209
215
|
x: label
|
|
210
216
|
}),
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
key: index,
|
|
225
|
-
x: x,
|
|
226
|
-
dy: index != 0 ? '1em' : '0'
|
|
227
|
-
}, item);
|
|
228
|
-
}) : _label);
|
|
217
|
+
style: _objectSpread(_objectSpread(_objectSpread({}, _style), (0, _utils.getFontStyle)(font)), {}, {
|
|
218
|
+
whiteSpace: "pre"
|
|
219
|
+
})
|
|
220
|
+
}, /*#__PURE__*/_react["default"].createElement(_TextOverflow["default"], {
|
|
221
|
+
type: textOverflow,
|
|
222
|
+
speed: speed,
|
|
223
|
+
value: _label,
|
|
224
|
+
style: {
|
|
225
|
+
width: width,
|
|
226
|
+
transform: transform,
|
|
227
|
+
textAlign: "center"
|
|
228
|
+
}
|
|
229
|
+
})));
|
|
229
230
|
};
|
|
230
231
|
|
|
231
232
|
var _default = /*#__PURE__*/(0, _react.memo)(function (_ref6) {
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
@@ -11,16 +13,16 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
11
13
|
|
|
12
14
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
15
|
|
|
14
|
-
var _react = require("react");
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
|
+
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
|
+
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
15
21
|
|
|
16
22
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
17
23
|
|
|
18
24
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
19
25
|
|
|
20
|
-
/**
|
|
21
|
-
* 文字跑马灯组件
|
|
22
|
-
* eg: <Marquee value={文本内容} speed={跑马灯速度} style={额外样式}></Marquee>
|
|
23
|
-
*/
|
|
24
26
|
var _default = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
25
27
|
var value = props.value,
|
|
26
28
|
style = props.style,
|
|
@@ -58,7 +60,7 @@ var _default = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _react.forwardRef
|
|
|
58
60
|
|
|
59
61
|
if (entrie.boundingClientRect.width < entrie.rootBounds.width) {
|
|
60
62
|
//表示文字全部可视
|
|
61
|
-
cancelAnimationFrame(timer.current);
|
|
63
|
+
cancelAnimationFrame(timer.current || 0);
|
|
62
64
|
target.current.style.transform = "translate(0px,0px)"; //重置偏移
|
|
63
65
|
|
|
64
66
|
setOverflow(false);
|
|
@@ -66,7 +68,7 @@ var _default = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _react.forwardRef
|
|
|
66
68
|
} else {
|
|
67
69
|
//否则文本溢出
|
|
68
70
|
if (!overflow) {
|
|
69
|
-
cancelAnimationFrame(timer.current);
|
|
71
|
+
cancelAnimationFrame(timer.current || 0);
|
|
70
72
|
startAnimation(entrie.target.offsetWidth); //startAnimation(entrie.boundingClientRect.width);
|
|
71
73
|
|
|
72
74
|
setOverflow(true);
|
|
@@ -83,13 +85,13 @@ var _default = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _react.forwardRef
|
|
|
83
85
|
|
|
84
86
|
observe.current.observe(target.current);
|
|
85
87
|
return function () {
|
|
86
|
-
cancelAnimationFrame(timer.current);
|
|
88
|
+
cancelAnimationFrame(timer.current || 0);
|
|
87
89
|
observe.current.unobserve(target.current);
|
|
88
90
|
observe.current.disconnect();
|
|
89
91
|
};
|
|
90
92
|
}, []);
|
|
91
93
|
var textList = [value, value];
|
|
92
|
-
return /*#__PURE__*/
|
|
94
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
93
95
|
style: _objectSpread(_objectSpread({
|
|
94
96
|
width: "100%"
|
|
95
97
|
}, style), {}, {
|
|
@@ -100,13 +102,13 @@ var _default = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _react.forwardRef
|
|
|
100
102
|
}),
|
|
101
103
|
ref: rootRef
|
|
102
104
|
}, textList.map(function (item, i) {
|
|
103
|
-
return /*#__PURE__*/
|
|
105
|
+
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
104
106
|
key: i,
|
|
105
107
|
ref: i == 0 ? target : null,
|
|
106
108
|
style: {
|
|
107
109
|
display: i == 1 && !overflow ? "none" : "inline"
|
|
108
110
|
}
|
|
109
|
-
}, item, overflow && /*#__PURE__*/
|
|
111
|
+
}, item, overflow && /*#__PURE__*/_react["default"].createElement("span", null, "\xA0"));
|
|
110
112
|
}));
|
|
111
113
|
}));
|
|
112
114
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
@@ -9,18 +11,18 @@ exports["default"] = void 0;
|
|
|
9
11
|
|
|
10
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
13
|
|
|
12
|
-
var _react = require("react");
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
15
|
|
|
14
16
|
var _Marquee = _interopRequireDefault(require("./Marquee"));
|
|
15
17
|
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
|
+
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
+
|
|
16
22
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
17
23
|
|
|
18
24
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
19
25
|
|
|
20
|
-
/**
|
|
21
|
-
* 文本溢出组件
|
|
22
|
-
* eg: <TextOverflow type={溢出形式} value={文本内容} speed={跑马灯速度} style={额外样式}></Marquee>
|
|
23
|
-
*/
|
|
24
26
|
var _default = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
25
27
|
var type = props.type,
|
|
26
28
|
value = props.value,
|
|
@@ -47,20 +49,23 @@ var _default = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _react.forwardRef
|
|
|
47
49
|
return {
|
|
48
50
|
whiteSpace: 'nowrap'
|
|
49
51
|
};
|
|
52
|
+
|
|
53
|
+
default:
|
|
54
|
+
return {};
|
|
50
55
|
}
|
|
51
56
|
};
|
|
52
57
|
|
|
53
58
|
var styles = _objectSpread(_objectSpread({}, getTextOverflow(type)), style);
|
|
54
59
|
|
|
55
|
-
return type == 'marquee' ? /*#__PURE__*/
|
|
60
|
+
return type == 'marquee' ? /*#__PURE__*/_react["default"].createElement(_Marquee["default"], {
|
|
56
61
|
value: value,
|
|
57
62
|
speed: speed,
|
|
58
63
|
style: styles,
|
|
59
64
|
ref: ref
|
|
60
|
-
}) : /*#__PURE__*/
|
|
65
|
+
}) : /*#__PURE__*/_react["default"].createElement("div", {
|
|
61
66
|
style: styles,
|
|
62
67
|
ref: ref,
|
|
63
|
-
title: value ||
|
|
68
|
+
title: value || undefined
|
|
64
69
|
}, " ", value);
|
|
65
70
|
}));
|
|
66
71
|
|
package/package.json
CHANGED
package/src/components/Axis.tsx
CHANGED
|
@@ -9,10 +9,18 @@ import React, {
|
|
|
9
9
|
CSSProperties,
|
|
10
10
|
MouseEventHandler,
|
|
11
11
|
} from 'react';
|
|
12
|
-
import { getTickCoord, getGridCoord } from '../utils';
|
|
12
|
+
import { getTickCoord, getGridCoord, getFontStyle } from '../utils';
|
|
13
13
|
import { chartContext } from '../context';
|
|
14
14
|
import { Line } from '../element';
|
|
15
|
+
import TextOverflow from './TextOverflow';
|
|
15
16
|
const defaultEvent = () => {};
|
|
17
|
+
const defaultAppearance = {
|
|
18
|
+
angle:0,
|
|
19
|
+
count:6,
|
|
20
|
+
speed:5,
|
|
21
|
+
width:"fit-content",
|
|
22
|
+
textOverflow:"ellipsis"
|
|
23
|
+
};
|
|
16
24
|
const defaultAlign: Align = {
|
|
17
25
|
textAnchor: 'middle',
|
|
18
26
|
dominantBaseline: 'middle',
|
|
@@ -42,8 +50,7 @@ const getAxesPath: (
|
|
|
42
50
|
* @param orientation 坐标轴位置
|
|
43
51
|
* @param rotate 旋转角度
|
|
44
52
|
* @returns {
|
|
45
|
-
*
|
|
46
|
-
* textAnchor,
|
|
53
|
+
* transform
|
|
47
54
|
* directionX,
|
|
48
55
|
* directionY
|
|
49
56
|
* }
|
|
@@ -52,37 +59,32 @@ const getLayout: (
|
|
|
52
59
|
orientation: Orientation,
|
|
53
60
|
rotate: number
|
|
54
61
|
) => {
|
|
55
|
-
|
|
56
|
-
textAnchor: string;
|
|
62
|
+
transform:string,
|
|
57
63
|
directionX: number;
|
|
58
64
|
directionY: number;
|
|
59
65
|
} = (orientation, rotate) => {
|
|
60
66
|
switch (orientation) {
|
|
61
67
|
case 'top':
|
|
62
68
|
return {
|
|
63
|
-
|
|
64
|
-
textAnchor: rotate ? 'end' : 'middle',
|
|
69
|
+
transform:`translate(-50%,-100%) rotate(${rotate}deg)`,
|
|
65
70
|
directionX: 1,
|
|
66
71
|
directionY: -1,
|
|
67
72
|
};
|
|
68
73
|
case 'bottom':
|
|
69
74
|
return {
|
|
70
|
-
|
|
71
|
-
textAnchor: rotate ? 'start' : 'middle',
|
|
75
|
+
transform:`translate(-50%,0) rotate(${rotate}deg)`,
|
|
72
76
|
directionX: 1,
|
|
73
77
|
directionY: 1,
|
|
74
78
|
};
|
|
75
79
|
case 'left':
|
|
76
80
|
return {
|
|
77
|
-
|
|
78
|
-
textAnchor: 'end',
|
|
81
|
+
transform:`translate(-100%,-50%) rotate(${rotate}deg)`,
|
|
79
82
|
directionX: -1,
|
|
80
83
|
directionY: 1,
|
|
81
84
|
};
|
|
82
85
|
case 'right':
|
|
83
86
|
return {
|
|
84
|
-
|
|
85
|
-
textAnchor: 'start',
|
|
87
|
+
transform:`translate(0,-50%) rotate(${rotate}deg)`,
|
|
86
88
|
directionX: 1,
|
|
87
89
|
directionY: 1,
|
|
88
90
|
};
|
|
@@ -141,6 +143,13 @@ const Unit: ({
|
|
|
141
143
|
);
|
|
142
144
|
};
|
|
143
145
|
|
|
146
|
+
type appearance = {
|
|
147
|
+
angle:number,
|
|
148
|
+
count:number,
|
|
149
|
+
speed:number,
|
|
150
|
+
width:number | string,
|
|
151
|
+
textOverflow:string
|
|
152
|
+
}
|
|
144
153
|
type LabelType = {
|
|
145
154
|
className: string;
|
|
146
155
|
orientation: Orientation;
|
|
@@ -155,6 +164,7 @@ type LabelType = {
|
|
|
155
164
|
translate: Translate;
|
|
156
165
|
font: Font;
|
|
157
166
|
style: CSSProperties | Function;
|
|
167
|
+
appearance?:appearance
|
|
158
168
|
};
|
|
159
169
|
};
|
|
160
170
|
|
|
@@ -174,15 +184,17 @@ const Label: (
|
|
|
174
184
|
show,
|
|
175
185
|
style,
|
|
176
186
|
translate: { x: translateX, y: translateY },
|
|
177
|
-
font
|
|
187
|
+
font,
|
|
188
|
+
appearance :{
|
|
189
|
+
width,
|
|
190
|
+
speed,
|
|
191
|
+
textOverflow
|
|
192
|
+
} = defaultAppearance
|
|
178
193
|
},
|
|
179
194
|
}) => {
|
|
180
195
|
if (!show) return null;
|
|
181
196
|
const _label = formatter(label, config);
|
|
182
|
-
const {
|
|
183
|
-
orientation,
|
|
184
|
-
rotate
|
|
185
|
-
);
|
|
197
|
+
const { transform, directionX, directionY } = getLayout(orientation, rotate);
|
|
186
198
|
const isVertical = orientation == 'left' || orientation == 'right';
|
|
187
199
|
|
|
188
200
|
const x =
|
|
@@ -190,50 +202,21 @@ const Label: (
|
|
|
190
202
|
const y =
|
|
191
203
|
(isVertical ? coordinate : tickSize * directionY) + translateY * directionY;
|
|
192
204
|
|
|
193
|
-
const translateText = 'translate(' + x + ', ' + y + ')';
|
|
194
|
-
|
|
195
205
|
const _style = style && (typeof style == 'object' ? style : style(_label));
|
|
196
206
|
|
|
197
|
-
return
|
|
198
|
-
<
|
|
207
|
+
return <foreignObject width="1" height="1" x={x} y={y} style={{overflow:"visible"}}>
|
|
208
|
+
<div
|
|
199
209
|
className={className}
|
|
200
|
-
style={{
|
|
201
|
-
..._style,
|
|
202
|
-
whiteSpace: 'pre',
|
|
203
|
-
}}
|
|
204
210
|
onClick={onClick}
|
|
205
211
|
data-data={JSON.stringify({ x: label })}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
dx='0'
|
|
215
|
-
dy='0'
|
|
216
|
-
transform={
|
|
217
|
-
Array.isArray(_label)
|
|
218
|
-
? rotate !== 0
|
|
219
|
-
? isVertical
|
|
220
|
-
? translateText + ' rotate(' + rotate + ')'
|
|
221
|
-
: 'rotate(' + rotate + ', ' + x + ', ' + y + ')'
|
|
222
|
-
: isVertical
|
|
223
|
-
? translateText
|
|
224
|
-
: 'translate(' + translateX + ', ' + translateY + ')'
|
|
225
|
-
: translateText + ' rotate(' + rotate + ')'
|
|
226
|
-
}
|
|
227
|
-
>
|
|
228
|
-
{!!Array.isArray(_label)
|
|
229
|
-
? _label.map((item, index) => (
|
|
230
|
-
<tspan key={index} x={x} dy={index!=0?'1em':'0'}>
|
|
231
|
-
{item}
|
|
232
|
-
</tspan>
|
|
233
|
-
))
|
|
234
|
-
: _label}
|
|
235
|
-
</text>
|
|
236
|
-
);
|
|
212
|
+
style={{
|
|
213
|
+
..._style,
|
|
214
|
+
...getFontStyle(font),
|
|
215
|
+
whiteSpace:"pre"
|
|
216
|
+
}}>
|
|
217
|
+
<TextOverflow type={textOverflow} speed={speed} value={_label} style={{width,transform,textAlign:"center"}}></TextOverflow>
|
|
218
|
+
</div>
|
|
219
|
+
</foreignObject>
|
|
237
220
|
};
|
|
238
221
|
|
|
239
222
|
export default memo(
|
|
@@ -252,7 +235,6 @@ export default memo(
|
|
|
252
235
|
const { width, height } = useContext(chartContext);
|
|
253
236
|
const x = orientation == 'right' ? width : 0;
|
|
254
237
|
const y = orientation == 'bottom' ? height : 0;
|
|
255
|
-
|
|
256
238
|
return (
|
|
257
239
|
<>
|
|
258
240
|
{axisLine && tickLine && (
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import { useEffect, memo, useRef, useState, forwardRef } from "react";
|
|
1
|
+
import React, { useEffect, memo, useRef, useState, forwardRef, CSSProperties } from "react";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* 文字跑马灯组件
|
|
5
5
|
* eg: <Marquee value={文本内容} speed={跑马灯速度} style={额外样式}></Marquee>
|
|
6
6
|
*/
|
|
7
|
+
interface marquee{
|
|
8
|
+
value:string,
|
|
9
|
+
style:CSSProperties,
|
|
10
|
+
speed:number
|
|
11
|
+
}
|
|
7
12
|
|
|
8
|
-
export default memo(forwardRef((props, ref) => {
|
|
13
|
+
export default memo(forwardRef((props:marquee, ref:any) => {
|
|
9
14
|
const {
|
|
10
15
|
value, // 文本
|
|
11
16
|
style, // 样式
|
|
@@ -13,15 +18,15 @@ export default memo(forwardRef((props, ref) => {
|
|
|
13
18
|
} = props;
|
|
14
19
|
|
|
15
20
|
const rootRef = ref || useRef();
|
|
16
|
-
const target = useRef(null);
|
|
17
|
-
const observe = useRef(null);
|
|
18
|
-
const speed_ = useRef(0); //这里必须用一个ref绑定speed,否则animation中获取不到最新的speed
|
|
19
|
-
const timer = useRef();
|
|
20
|
-
const [overflow, setOverflow] = useState(false);
|
|
21
|
+
const target = useRef<any>(null);
|
|
22
|
+
const observe = useRef<any>(null);
|
|
23
|
+
const speed_ = useRef<number>(0); //这里必须用一个ref绑定speed,否则animation中获取不到最新的speed
|
|
24
|
+
const timer = useRef<number>();
|
|
25
|
+
const [overflow, setOverflow] = useState<boolean>(false);
|
|
21
26
|
speed_.current = speed;
|
|
22
27
|
|
|
23
|
-
const startAnimation = (lineWidth)=>{
|
|
24
|
-
const animation = (timestamp) => {
|
|
28
|
+
const startAnimation = (lineWidth:number)=>{
|
|
29
|
+
const animation = (timestamp:number) => {
|
|
25
30
|
let frame = Math.round(((timestamp*speed_.current)%(lineWidth*100))/100);
|
|
26
31
|
target.current.style.transform = `translate(-${frame}px,0px)`;
|
|
27
32
|
target.current.nextSibling.style.transform = `translate(-${frame}px,0px)`;
|
|
@@ -33,18 +38,18 @@ export default memo(forwardRef((props, ref) => {
|
|
|
33
38
|
useEffect(() => {
|
|
34
39
|
//初始化观察器,利用观察器来监视组件可视区域变化
|
|
35
40
|
observe.current = new IntersectionObserver(
|
|
36
|
-
function (entries) {
|
|
41
|
+
function (entries:any) {
|
|
37
42
|
let entrie = entries[0];
|
|
38
43
|
if (entrie.boundingClientRect.width < entrie.rootBounds.width) {
|
|
39
44
|
//表示文字全部可视
|
|
40
|
-
cancelAnimationFrame(timer.current);
|
|
41
|
-
target.current
|
|
45
|
+
cancelAnimationFrame(timer.current||0);
|
|
46
|
+
target.current!.style.transform = "translate(0px,0px)"; //重置偏移
|
|
42
47
|
setOverflow(false);
|
|
43
48
|
return;
|
|
44
49
|
} else {
|
|
45
50
|
//否则文本溢出
|
|
46
51
|
if (!overflow) {
|
|
47
|
-
cancelAnimationFrame(timer.current);
|
|
52
|
+
cancelAnimationFrame(timer.current || 0);
|
|
48
53
|
startAnimation(entrie.target.offsetWidth);
|
|
49
54
|
//startAnimation(entrie.boundingClientRect.width);
|
|
50
55
|
setOverflow(true);
|
|
@@ -60,7 +65,7 @@ export default memo(forwardRef((props, ref) => {
|
|
|
60
65
|
// start observing
|
|
61
66
|
observe.current.observe(target.current);
|
|
62
67
|
return () => {
|
|
63
|
-
cancelAnimationFrame(timer.current);
|
|
68
|
+
cancelAnimationFrame(timer.current || 0);
|
|
64
69
|
observe.current.unobserve(target.current);
|
|
65
70
|
observe.current.disconnect();
|
|
66
71
|
};
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import { memo, forwardRef } from 'react';
|
|
1
|
+
import React, { memo, forwardRef, CSSProperties } from 'react';
|
|
2
2
|
import Marquee from './Marquee'
|
|
3
3
|
/**
|
|
4
4
|
* 文本溢出组件
|
|
5
5
|
* eg: <TextOverflow type={溢出形式} value={文本内容} speed={跑马灯速度} style={额外样式}></Marquee>
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
interface flowText{
|
|
9
|
+
type:string,
|
|
10
|
+
value:string,
|
|
11
|
+
speed:number,
|
|
12
|
+
style:CSSProperties
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export default memo(forwardRef((props:flowText, ref:any) => {
|
|
9
16
|
const {
|
|
10
17
|
type, //形式:跑马灯marquee /省略号 ellipsis/换行 break-word
|
|
11
18
|
value, // 文本
|
|
@@ -13,7 +20,7 @@ export default memo(forwardRef((props, ref) => {
|
|
|
13
20
|
speed = 5, // 动画速度
|
|
14
21
|
} = props;
|
|
15
22
|
|
|
16
|
-
const getTextOverflow = (type) => {
|
|
23
|
+
const getTextOverflow = (type:string):CSSProperties => {
|
|
17
24
|
switch (type) {
|
|
18
25
|
case 'ellipsis':
|
|
19
26
|
return {
|
|
@@ -30,6 +37,8 @@ export default memo(forwardRef((props, ref) => {
|
|
|
30
37
|
return {
|
|
31
38
|
whiteSpace: 'nowrap',
|
|
32
39
|
};
|
|
40
|
+
default:
|
|
41
|
+
return {}
|
|
33
42
|
}
|
|
34
43
|
};
|
|
35
44
|
|
|
@@ -45,6 +54,6 @@ export default memo(forwardRef((props, ref) => {
|
|
|
45
54
|
style={styles}
|
|
46
55
|
ref={ref} />
|
|
47
56
|
) : (
|
|
48
|
-
<div style={styles} ref={ref} title={value ||
|
|
57
|
+
<div style={styles} ref={ref} title={value || undefined}> {value}</div>
|
|
49
58
|
);
|
|
50
59
|
}));
|