@easyv/charts 1.10.36 → 1.10.37

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.
@@ -56,8 +56,9 @@ var Chart = /*#__PURE__*/(0, _react.memo)(function (_ref2) {
56
56
  height = props.height;
57
57
  var isIOS = (0, _react.useRef)(/iPad|iPhone|iPod|iOS/i.test(navigator.userAgent) || /Mac OS X/i.test(navigator.userAgent) && !/Chrome/i.test(navigator.userAgent));
58
58
  var svg = /*#__PURE__*/(0, _react.createRef)();
59
- var chartWidth = width - marginLeft - marginRight;
60
- var chartHeight = height - marginTop - marginBottom;
59
+ // 组件尺寸小于边距之和时,绘图区可能为负;钳制为 >= 0,避免饼/环图半径为负导致崩溃
60
+ var chartWidth = Math.max(0, width - marginLeft - marginRight);
61
+ var chartHeight = Math.max(0, height - marginTop - marginBottom);
61
62
  var _useState = (0, _react.useState)(true),
62
63
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
63
64
  active = _useState2[0],
@@ -30,20 +30,22 @@ var _default = exports["default"] = function _default(_ref) {
30
30
  speed = _ref$config.speed,
31
31
  direction = _ref$config.direction,
32
32
  arcs = _ref.arcs;
33
- if (!show) return null;
33
+ if (!show || !(radius > 0)) return null;
34
34
  var _useState = (0, _react.useState)(null),
35
35
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
36
36
  canvas = _useState2[0],
37
37
  setCanvas = _useState2[1];
38
38
  (0, _react.useEffect)(function () {
39
+ if (!(radius > 0)) return;
39
40
  if (arcs && arcs.length > 0 && canvas && canvas.getContext('2d')) {
40
41
  var _radius = radius * devicePixelRatio;
42
+ if (!(_radius > 0)) return;
41
43
  var context = canvas.getContext('2d');
42
44
  context.clearRect(0, 0, width * devicePixelRatio, height * devicePixelRatio);
43
45
  context.save();
44
46
  context.translate(centerX * devicePixelRatio, centerY * devicePixelRatio);
45
47
  context.beginPath();
46
- var _arc = (0, _d3v.arc)().innerRadius(innerRadius * _radius).outerRadius(outerRadius * _radius)
48
+ var _arc = (0, _d3v.arc)().innerRadius(Math.max(0, innerRadius * _radius)).outerRadius(Math.max(0, outerRadius * _radius))
47
49
  // .padAngle(axis.pole.padAngle)
48
50
  // .cornerRadius(axis.pole.cornerRadius)
49
51
  .context(context);
@@ -145,6 +147,8 @@ ConicalGradient.prototype = {
145
147
  * @param {Boolean} anticlockwise
146
148
  */
147
149
  fill: function fill(context, x, y, radius, startAngle, endAngle, anticlockwise) {
150
+ // CanvasRenderingContext2D.arc 不允许负半径
151
+ if (!(radius > 0)) return this;
148
152
  var offsets = this._offsets;
149
153
  var colors = this._colors;
150
154
  var PI = Math.PI;
@@ -27,8 +27,8 @@ var _excluded = ["startAngle", "endAngle", "antiClockwise"],
27
27
  _excluded2 = ["padAngle", "innerRadius", "outerRadius", "cornerRadius", "startAngle", "endAngle"],
28
28
  _excluded3 = ["formatter"],
29
29
  _excluded4 = ["startAngle", "endAngle"];
30
- /**
31
- * 饼环图
30
+ /**
31
+ * 饼环图
32
32
  */
33
33
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
34
34
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
@@ -518,7 +518,7 @@ var Component = /*#__PURE__*/(0, _react.memo)(function (_ref14) {
518
518
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
519
519
  y = _useState2[0],
520
520
  setY = _useState2[1];
521
- var radius = Math.min(chartWidth, chartHeight) / 2 * outerRadius;
521
+ var radius = Math.max(0, Math.min(chartWidth, chartHeight) / 2 * outerRadius);
522
522
  var arcsFunc = (0, _react.useMemo)(function () {
523
523
  var _getAngle = getAngle(angle),
524
524
  _getAngle$startAngle = _getAngle.startAngle,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easyv/charts",
3
- "version": "1.10.36",
3
+ "version": "1.10.37",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -55,4 +55,4 @@
55
55
  "commit": true
56
56
  }
57
57
  }
58
- }
58
+ }
@@ -50,8 +50,9 @@ const Chart = memo(
50
50
  !/Chrome/i.test(navigator.userAgent)),
51
51
  );
52
52
  const svg = createRef();
53
- const chartWidth = width - marginLeft - marginRight;
54
- const chartHeight = height - marginTop - marginBottom;
53
+ // 组件尺寸小于边距之和时,绘图区可能为负;钳制为 >= 0,避免饼/环图半径为负导致崩溃
54
+ const chartWidth = Math.max(0, width - marginLeft - marginRight);
55
+ const chartHeight = Math.max(0, height - marginTop - marginBottom);
55
56
  const [active, setActive] = useState(true);
56
57
  const scaleRef = useRef([1, 1]);
57
58
  const screenPosRef = useRef({ left: 0, top: 0 });
@@ -15,12 +15,14 @@ export default ({
15
15
  config: { show, innerRadius, outerRadius, opacity, speed, direction },
16
16
  arcs,
17
17
  }) => {
18
- if (!show) return null;
18
+ if (!show || !(radius > 0)) return null;
19
19
  const [canvas, setCanvas] = useState(null);
20
20
 
21
21
  useEffect(() => {
22
+ if (!(radius > 0)) return;
22
23
  if (arcs && arcs.length > 0 && canvas && canvas.getContext('2d')) {
23
24
  const _radius = radius * devicePixelRatio;
25
+ if (!(_radius > 0)) return;
24
26
  const context = canvas.getContext('2d');
25
27
  context.clearRect(
26
28
  0,
@@ -34,8 +36,8 @@ export default ({
34
36
  context.beginPath();
35
37
 
36
38
  const _arc = arc()
37
- .innerRadius(innerRadius * _radius)
38
- .outerRadius(outerRadius * _radius)
39
+ .innerRadius(Math.max(0, innerRadius * _radius))
40
+ .outerRadius(Math.max(0, outerRadius * _radius))
39
41
  // .padAngle(axis.pole.padAngle)
40
42
  // .cornerRadius(axis.pole.cornerRadius)
41
43
  .context(context);
@@ -147,6 +149,9 @@ ConicalGradient.prototype = {
147
149
  * @param {Boolean} anticlockwise
148
150
  */
149
151
  fill: function (context, x, y, radius, startAngle, endAngle, anticlockwise) {
152
+ // CanvasRenderingContext2D.arc 不允许负半径
153
+ if (!(radius > 0)) return this;
154
+
150
155
  var offsets = this._offsets;
151
156
  var colors = this._colors;
152
157