@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.
@@ -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
- * dominantBaseline,
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
- dominantBaseline: 'text-after-edge',
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
- dominantBaseline: 'text-before-edge',
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
- dominantBaseline: 'middle',
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
- dominantBaseline: 'middle',
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
- _ref5$config$font = _ref5$config.font,
179
- fontFamily = _ref5$config$font.fontFamily,
180
- fontSize = _ref5$config$font.fontSize,
181
- color = _ref5$config$font.color,
182
- bold = _ref5$config$font.bold,
183
- italic = _ref5$config$font.italic,
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
- dominantBaseline = _getLayout.dominantBaseline,
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("text", {
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
- dominantBaseline: dominantBaseline,
212
- textAnchor: textAnchor,
213
- fontFamily: fontFamily,
214
- fontSize: fontSize,
215
- fill: color,
216
- fontWeight: bold ? 'bold' : 'normal',
217
- fontStyle: italic ? 'italic' : 'normal',
218
- letterSpacing: letterSpacing,
219
- dx: "0",
220
- dy: "0",
221
- transform: Array.isArray(_label) ? rotate !== 0 ? isVertical ? translateText + ' rotate(' + rotate + ')' : 'rotate(' + rotate + ', ' + x + ', ' + y + ')' : isVertical ? translateText : 'translate(' + translateX + ', ' + translateY + ')' : translateText + ' rotate(' + rotate + ')'
222
- }, !!Array.isArray(_label) ? _label.map(function (item, index) {
223
- return /*#__PURE__*/_react["default"].createElement("tspan", {
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__*/React.createElement("div", {
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__*/React.createElement("span", {
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__*/React.createElement("span", null, "\xA0"));
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__*/React.createElement(_Marquee["default"], {
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__*/React.createElement("div", {
65
+ }) : /*#__PURE__*/_react["default"].createElement("div", {
61
66
  style: styles,
62
67
  ref: ref,
63
- title: value || null
68
+ title: value || undefined
64
69
  }, " ", value);
65
70
  }));
66
71
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easyv/charts",
3
- "version": "1.3.25",
3
+ "version": "1.3.26",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -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
- * dominantBaseline,
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
- dominantBaseline: string;
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
- dominantBaseline: 'text-after-edge',
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
- dominantBaseline: 'text-before-edge',
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
- dominantBaseline: 'middle',
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
- dominantBaseline: 'middle',
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: { fontFamily, fontSize, color, bold, italic, letterSpacing },
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 { dominantBaseline, textAnchor, directionX, directionY } = getLayout(
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
- <text
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
- dominantBaseline={dominantBaseline}
207
- textAnchor={textAnchor}
208
- fontFamily={fontFamily}
209
- fontSize={fontSize}
210
- fill={color}
211
- fontWeight={bold ? 'bold' : 'normal'}
212
- fontStyle={italic ? 'italic' : 'normal'}
213
- letterSpacing={letterSpacing}
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.style.transform = "translate(0px,0px)"; //重置偏移
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
- export default memo(forwardRef((props, ref) => {
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 || null}> {value}</div>
57
+ <div style={styles} ref={ref} title={value || undefined}> {value}</div>
49
58
  );
50
59
  }));