@easyv/charts 1.10.8 → 1.10.10
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/CartesianChart.js +33 -16
- package/lib/components/Legend.js +51 -5
- package/lib/components/Line.js +5 -5
- package/lib/components/PieChart.js +5 -0
- package/lib/formatter/legend.js +111 -6
- package/lib/hooks/useAxes.js +10 -5
- package/lib/hooks/useCarouselAxisX.js +18 -16
- package/lib/utils/index.js +116 -105
- package/package.json +1 -1
- package/src/components/CartesianChart.js +38 -20
- package/src/components/Legend.js +63 -1
- package/src/components/Line.js +61 -38
- package/src/components/PieChart.js +37 -32
- package/src/formatter/legend.js +134 -24
- package/src/hooks/useAxes.js +18 -8
- package/src/hooks/useCarouselAxisX.js +320 -318
- package/src/utils/index.js +171 -155
|
@@ -261,15 +261,20 @@ var Chart = /*#__PURE__*/(0, _react.memo)(function (_ref) {
|
|
|
261
261
|
}, [tickName, JSON.stringify(originData)]);
|
|
262
262
|
var showTooltip = !!(tooltipData && tooltipData.length && (auto || manual));
|
|
263
263
|
var isVertical = axisX.direction === "vertical";
|
|
264
|
-
var
|
|
265
|
-
var
|
|
264
|
+
var axisStep = control ? axisX.controlStep : axisX.step;
|
|
265
|
+
var safeAxisStep = Number.isFinite(axisStep) ? axisStep : 0;
|
|
266
|
+
var indicatorWidth = indicator.width * safeAxisStep / 100;
|
|
267
|
+
var safeIndicatorWidth = Number.isFinite(indicatorWidth) ? indicatorWidth : 0;
|
|
268
|
+
var tickPos = axisX.scaler(tickName);
|
|
269
|
+
var safeTickPos = Number.isFinite(tickPos) ? tickPos : 0;
|
|
270
|
+
var position = safeTickPos - safeIndicatorWidth / 2;
|
|
266
271
|
var indicatorAttr = isVertical ? {
|
|
267
272
|
width: chartWidth,
|
|
268
|
-
height:
|
|
273
|
+
height: safeIndicatorWidth,
|
|
269
274
|
y: position
|
|
270
275
|
} : {
|
|
271
276
|
height: yLineRange,
|
|
272
|
-
width:
|
|
277
|
+
width: safeIndicatorWidth,
|
|
273
278
|
x: position
|
|
274
279
|
};
|
|
275
280
|
var onInteraction = (0, _react.useCallback)(function (e, type) {
|
|
@@ -353,15 +358,18 @@ var Chart = /*#__PURE__*/(0, _react.memo)(function (_ref) {
|
|
|
353
358
|
if (controlEl.current) {
|
|
354
359
|
controlEl.current.style.transform = "translate(".concat(cBarX, "px,0)");
|
|
355
360
|
//计算出当前位移的百分比
|
|
356
|
-
var
|
|
357
|
-
percent =
|
|
358
|
-
|
|
361
|
+
var slideRange = cWidth - cBarWidth;
|
|
362
|
+
var percent = slideRange > 0 ? cBarX / slideRange : 0;
|
|
363
|
+
if (!Number.isFinite(percent)) percent = 0;
|
|
364
|
+
var safeCPercent = cPercent > 0 && Number.isFinite(cPercent) ? cPercent : 1;
|
|
365
|
+
var span = controlEnd + start / safeCPercent - chartWidth;
|
|
366
|
+
var translateX = Number.isFinite(span) ? -span * percent : 0;
|
|
359
367
|
curControlPercent.current = percent;
|
|
360
|
-
setClipX(-translateX);
|
|
368
|
+
setClipX(Number.isFinite(-translateX) ? -translateX : 0);
|
|
361
369
|
var _isVertical = axisX.direction === "vertical";
|
|
362
370
|
var coreOffset = _isVertical ? marginRight : isIOS ? marginLeft : 0;
|
|
363
371
|
seriesEl.current.style.transform = "translate(".concat(translateX + coreOffset, "px,").concat(marginTop, "px)");
|
|
364
|
-
axisElList.current[2].style.transform = "translate(".concat(translateX, "px,", 0, "px)");
|
|
372
|
+
axisElList.current[2] && (axisElList.current[2].style.transform = "translate(".concat(translateX, "px,", 0, "px)"));
|
|
365
373
|
}
|
|
366
374
|
}, [controlInfo]);
|
|
367
375
|
//控制条轮播动画
|
|
@@ -457,6 +465,11 @@ var Chart = /*#__PURE__*/(0, _react.memo)(function (_ref) {
|
|
|
457
465
|
});
|
|
458
466
|
var bodyWidth = isVertical ? xLineRange + 100 + marginRight + marginLeft : xLineRange,
|
|
459
467
|
bodyHeight = isVertical ? yLineRange : yLineRange + marginTop + marginBottom;
|
|
468
|
+
var controlTooltipSpan = function () {
|
|
469
|
+
var p = cPercent > 0 && Number.isFinite(cPercent) ? cPercent : 1;
|
|
470
|
+
var s = axisX.controlEnd + axisX.start / p - chartWidth;
|
|
471
|
+
return Number.isFinite(s) ? s : 0;
|
|
472
|
+
}();
|
|
460
473
|
var hasDuplicateX = function hasDuplicateX(data) {
|
|
461
474
|
var xValues = new Set();
|
|
462
475
|
var _iterator = _createForOfIteratorHelper(data),
|
|
@@ -613,13 +626,15 @@ var Chart = /*#__PURE__*/(0, _react.memo)(function (_ref) {
|
|
|
613
626
|
}))), /*#__PURE__*/_react["default"].createElement("g", {
|
|
614
627
|
clipPath: "url(#chart-clip-".concat(id, ")")
|
|
615
628
|
}, /*#__PURE__*/_react["default"].createElement("g", null, control && zIndex == "bottom" && ctlIndicatorList.map(function (item, index) {
|
|
616
|
-
var
|
|
629
|
+
var xRaw = axisX.scaler(item.tick);
|
|
630
|
+
var x = Number.isFinite(xRaw) ? xRaw : 0;
|
|
631
|
+
var iw = safeIndicatorWidth;
|
|
617
632
|
return /*#__PURE__*/_react["default"].createElement(_.Indicator, (0, _extends2["default"])({
|
|
618
633
|
key: index
|
|
619
634
|
}, indicator, {
|
|
620
635
|
height: yLineRange,
|
|
621
|
-
width:
|
|
622
|
-
x: x -
|
|
636
|
+
width: iw,
|
|
637
|
+
x: x - iw / 2,
|
|
623
638
|
isControlChart: !!control,
|
|
624
639
|
xName: item.tick,
|
|
625
640
|
setCtlTip: setCtlTip,
|
|
@@ -669,13 +684,15 @@ var Chart = /*#__PURE__*/(0, _react.memo)(function (_ref) {
|
|
|
669
684
|
isControlChart: !!control
|
|
670
685
|
}));
|
|
671
686
|
}), /*#__PURE__*/_react["default"].createElement("g", null, control && zIndex != "bottom" && ctlIndicatorList.map(function (item, index) {
|
|
672
|
-
var
|
|
687
|
+
var xRaw = axisX.scaler(item.tick);
|
|
688
|
+
var x = Number.isFinite(xRaw) ? xRaw : 0;
|
|
689
|
+
var iw = safeIndicatorWidth;
|
|
673
690
|
return /*#__PURE__*/_react["default"].createElement(_.Indicator, (0, _extends2["default"])({
|
|
674
691
|
key: index
|
|
675
692
|
}, indicator, {
|
|
676
693
|
height: yLineRange,
|
|
677
|
-
width:
|
|
678
|
-
x: x -
|
|
694
|
+
width: iw,
|
|
695
|
+
x: x - iw / 2,
|
|
679
696
|
isControlChart: !!control,
|
|
680
697
|
xName: item.tick,
|
|
681
698
|
setCtlTip: setCtlTip,
|
|
@@ -686,7 +703,7 @@ var Chart = /*#__PURE__*/(0, _react.memo)(function (_ref) {
|
|
|
686
703
|
isVertical: isVertical
|
|
687
704
|
}, tooltip, {
|
|
688
705
|
data: controlChartTooltipData,
|
|
689
|
-
x: ctlX
|
|
706
|
+
x: (Number.isFinite(ctlX) ? ctlX : 0) - marginLeft - controlTooltipSpan * curControlPercent.current,
|
|
690
707
|
marginLeft: marginLeft,
|
|
691
708
|
marginTop: marginTop,
|
|
692
709
|
tickName: ctlXName,
|
package/lib/components/Legend.js
CHANGED
|
@@ -29,7 +29,9 @@ var _default = exports["default"] = /*#__PURE__*/(0, _react.memo)(function (_ref
|
|
|
29
29
|
var _config$value, _config$percent, _config$value2, _config$value3, _config$name;
|
|
30
30
|
var series = _ref.series,
|
|
31
31
|
height = _ref.height,
|
|
32
|
+
data = _ref.data,
|
|
32
33
|
config = _ref.config,
|
|
34
|
+
columnsSeries = _ref.columnsSeries,
|
|
33
35
|
_ref$config = _ref.config,
|
|
34
36
|
show = _ref$config.show,
|
|
35
37
|
_ref$config$order = _ref$config.order,
|
|
@@ -110,7 +112,7 @@ var _default = exports["default"] = /*#__PURE__*/(0, _react.memo)(function (_ref
|
|
|
110
112
|
behavior: "smooth"
|
|
111
113
|
});
|
|
112
114
|
};
|
|
113
|
-
var _series = (0, _utils.sortPie)(series, order);
|
|
115
|
+
var _series = (0, _utils.sortPie)(series, order, columnsSeries);
|
|
114
116
|
var _alignment$split = alignment.split(" "),
|
|
115
117
|
_alignment$split2 = (0, _slicedToArray2["default"])(_alignment$split, 2),
|
|
116
118
|
_alignment = _alignment$split2[0],
|
|
@@ -152,6 +154,40 @@ var _default = exports["default"] = /*#__PURE__*/(0, _react.memo)(function (_ref
|
|
|
152
154
|
return parseFloat(getCanvasTextWidth(percentStr, percentFont.letterSpacing || 0, "".concat(percentFont.fontSize || 12, "px ").concat(percentFont.fontFamily || "Arial")));
|
|
153
155
|
})));
|
|
154
156
|
var nameMaxWidth = ((_config$name = config.name) === null || _config$name === void 0 ? void 0 : _config$name.maxWidth) || 80;
|
|
157
|
+
var fieldColumnKeys = [];
|
|
158
|
+
if (columnsSeries !== null && columnsSeries !== void 0 && columnsSeries.columns) {
|
|
159
|
+
Object.values(columnsSeries.columns).forEach(function (col) {
|
|
160
|
+
if (col.field && !fieldColumnKeys.includes(col.field)) {
|
|
161
|
+
fieldColumnKeys.push(col.field);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
var fieldsColumnWidths = fieldColumnKeys.map(function (fieldName) {
|
|
166
|
+
var maxMeasured = 0;
|
|
167
|
+
var maxCfg = 0;
|
|
168
|
+
_series.forEach(function (s) {
|
|
169
|
+
var _s$fields, _s$data$fieldName, _cfg$translate, _suf$translate;
|
|
170
|
+
var cfg = (_s$fields = s.fields) === null || _s$fields === void 0 ? void 0 : _s$fields[fieldName];
|
|
171
|
+
if (!cfg || !s.data || !Object.prototype.hasOwnProperty.call(s.data, fieldName)) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
var f = cfg.font || {};
|
|
175
|
+
var fontStack = "".concat(f.fontSize || 12, "px ").concat(f.fontFamily || "Arial");
|
|
176
|
+
var letter = f.letterSpacing || 0;
|
|
177
|
+
var w = parseFloat(getCanvasTextWidth(String((_s$data$fieldName = s.data[fieldName]) !== null && _s$data$fieldName !== void 0 ? _s$data$fieldName : ""), letter, fontStack));
|
|
178
|
+
var suf = cfg.suffix;
|
|
179
|
+
if (suf !== null && suf !== void 0 && suf.show && suf.text != null && String(suf.text) !== "") {
|
|
180
|
+
var sufFont = "".concat(suf.fontSize || f.fontSize || 12, "px ").concat(f.fontFamily || "Arial");
|
|
181
|
+
w += parseFloat(getCanvasTextWidth(String(suf.text), letter, sufFont));
|
|
182
|
+
}
|
|
183
|
+
var tx = Number((_cfg$translate = cfg.translate) === null || _cfg$translate === void 0 ? void 0 : _cfg$translate.x) || 0;
|
|
184
|
+
var stx = suf !== null && suf !== void 0 && suf.show && suf.text != null && String(suf.text) !== "" ? Number((_suf$translate = suf.translate) === null || _suf$translate === void 0 ? void 0 : _suf$translate.x) || 0 : 0;
|
|
185
|
+
w += Math.max(0, tx) + Math.max(0, stx);
|
|
186
|
+
maxMeasured = Math.max(maxMeasured, w);
|
|
187
|
+
maxCfg = Math.max(maxCfg, Number(cfg.maxWidth) || 0);
|
|
188
|
+
});
|
|
189
|
+
return Math.max(maxMeasured, maxCfg);
|
|
190
|
+
});
|
|
155
191
|
var stylePieOrAxis = formatter ? _objectSpread(_objectSpread({
|
|
156
192
|
display: "flex",
|
|
157
193
|
alignContent: alignment.split(" ")[0] == "center" && (alignment.split(" ")[1] == "left" || alignment.split(" ")[1] == "right") ? alignment.split(" ")[1] == "left" ? "flex-start" : "flex-end" : alignment.split(" ")[0] == "left" ? "flex-start" : alignment.split(" ")[0] == "center" ? "center" : "flex-end",
|
|
@@ -207,12 +243,17 @@ var _default = exports["default"] = /*#__PURE__*/(0, _react.memo)(function (_ref
|
|
|
207
243
|
opacity: selected === false ? opacity / 100 : 1,
|
|
208
244
|
alignItems: "center",
|
|
209
245
|
cursor: "pointer",
|
|
210
|
-
gap: _icon.gap
|
|
246
|
+
gap: _icon.gap,
|
|
247
|
+
overflow: formatter ? "visible" : undefined
|
|
211
248
|
}
|
|
212
249
|
}, formatter ? formatter(series, _objectSpread(_objectSpread({}, config), {}, {
|
|
213
250
|
valueMaxWidth: valueMaxWidth,
|
|
214
251
|
percentMaxWidth: percentMaxWidth,
|
|
215
|
-
nameMaxWidth: nameMaxWidth
|
|
252
|
+
nameMaxWidth: nameMaxWidth,
|
|
253
|
+
otherData: data,
|
|
254
|
+
columnsSeries: columnsSeries,
|
|
255
|
+
fieldColumnKeys: fieldColumnKeys,
|
|
256
|
+
fieldsColumnWidths: fieldsColumnWidths
|
|
216
257
|
})) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
217
258
|
style: _icon
|
|
218
259
|
}), /*#__PURE__*/_react["default"].createElement(_TextOverflow["default"], {
|
|
@@ -260,12 +301,17 @@ var _default = exports["default"] = /*#__PURE__*/(0, _react.memo)(function (_ref
|
|
|
260
301
|
opacity: selected === false ? opacity / 100 : 1,
|
|
261
302
|
alignItems: "center",
|
|
262
303
|
cursor: "pointer",
|
|
263
|
-
gap: _icon.gap
|
|
304
|
+
gap: _icon.gap,
|
|
305
|
+
overflow: formatter ? "visible" : undefined
|
|
264
306
|
}
|
|
265
307
|
}, formatter ? formatter(series, _objectSpread(_objectSpread({}, config), {}, {
|
|
266
308
|
valueMaxWidth: valueMaxWidth,
|
|
267
309
|
percentMaxWidth: percentMaxWidth,
|
|
268
|
-
nameMaxWidth: nameMaxWidth
|
|
310
|
+
nameMaxWidth: nameMaxWidth,
|
|
311
|
+
otherData: data,
|
|
312
|
+
columnsSeries: columnsSeries,
|
|
313
|
+
fieldColumnKeys: fieldColumnKeys,
|
|
314
|
+
fieldsColumnWidths: fieldsColumnWidths
|
|
269
315
|
})) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
270
316
|
style: _icon
|
|
271
317
|
}), /*#__PURE__*/_react["default"].createElement(_TextOverflow["default"], {
|
package/lib/components/Line.js
CHANGED
|
@@ -77,8 +77,8 @@ var Area = function Area(_ref) {
|
|
|
77
77
|
opacity: Areaopacity
|
|
78
78
|
},
|
|
79
79
|
stroke: "none",
|
|
80
|
-
fill:
|
|
81
|
-
}), /*#__PURE__*/_react["default"].createElement("defs", null, type && type ==
|
|
80
|
+
fill: "url(#" + id + ")"
|
|
81
|
+
}), /*#__PURE__*/_react["default"].createElement("defs", null, type && type == "pattern" ? /*#__PURE__*/_react["default"].createElement("pattern", {
|
|
82
82
|
id: id,
|
|
83
83
|
patternUnits: "userSpaceOnUse",
|
|
84
84
|
width: patternW,
|
|
@@ -132,7 +132,7 @@ var _default = exports["default"] = /*#__PURE__*/(0, _react.memo)(function (_ref
|
|
|
132
132
|
return getLineData(sortData, connectNulls);
|
|
133
133
|
}, [sortData, connectNulls]);
|
|
134
134
|
var lineGen = (0, _react.useMemo)(function () {
|
|
135
|
-
var isVertical = direction ===
|
|
135
|
+
var isVertical = direction === "vertical";
|
|
136
136
|
var lineGen = (isVertical ? (0, _d3v.line)().y(function (_ref9) {
|
|
137
137
|
var x = _ref9.data.x;
|
|
138
138
|
return xScaler(x);
|
|
@@ -164,9 +164,9 @@ var _default = exports["default"] = /*#__PURE__*/(0, _react.memo)(function (_ref
|
|
|
164
164
|
pointerEvents: "none"
|
|
165
165
|
},
|
|
166
166
|
fill: "none",
|
|
167
|
-
strokeDasharray: lineType ===
|
|
167
|
+
strokeDasharray: lineType === "dash" ? "3 3" : null,
|
|
168
168
|
strokeWidth: lineWidth
|
|
169
|
-
}), type ==
|
|
169
|
+
}), type == "area" && /*#__PURE__*/_react["default"].createElement(Area, {
|
|
170
170
|
data: _data,
|
|
171
171
|
config: _objectSpread(_objectSpread({}, area), {}, {
|
|
172
172
|
curve: curve,
|
|
@@ -271,6 +271,7 @@ var Component = /*#__PURE__*/(0, _react.memo)(function (_ref5) {
|
|
|
271
271
|
outerDecorate = _ref5$config$fan2.outerDecorate,
|
|
272
272
|
current = _ref5$config$fan2.current,
|
|
273
273
|
order = _ref5$config.order,
|
|
274
|
+
columnsSeries = _ref5$config.columnsSeries,
|
|
274
275
|
series = _ref5$config.series,
|
|
275
276
|
_ref5$config$animatio = _ref5$config.animation,
|
|
276
277
|
on = _ref5$config$animatio.on,
|
|
@@ -622,6 +623,8 @@ var Component = /*#__PURE__*/(0, _react.memo)(function (_ref5) {
|
|
|
622
623
|
mousePos: mousePos
|
|
623
624
|
})), /*#__PURE__*/_react["default"].createElement(_.Legend, (0, _extends2["default"])({}, legend, {
|
|
624
625
|
height: chartHeight,
|
|
626
|
+
columnsSeries: columnsSeries,
|
|
627
|
+
data: data,
|
|
625
628
|
series: _arcs.map(function (arc) {
|
|
626
629
|
return _objectSpread(_objectSpread({}, arc), {}, {
|
|
627
630
|
percent: arc.percent.toFixed(legendPrecision)
|
|
@@ -791,6 +794,8 @@ var Component = /*#__PURE__*/(0, _react.memo)(function (_ref5) {
|
|
|
791
794
|
mousePos: mousePos
|
|
792
795
|
})), /*#__PURE__*/_react["default"].createElement(_.Legend, (0, _extends2["default"])({}, legend, {
|
|
793
796
|
height: chartHeight,
|
|
797
|
+
data: data,
|
|
798
|
+
columnsSeries: columnsSeries,
|
|
794
799
|
series: _arcs.map(function (arc) {
|
|
795
800
|
return _objectSpread(_objectSpread({}, arc), {}, {
|
|
796
801
|
percent: arc.percent.toFixed(legendPrecision)
|
package/lib/formatter/legend.js
CHANGED
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.pieLegendFormatter = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
8
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
10
|
var _indexModule = _interopRequireDefault(require("../css/index.module.css"));
|
|
10
11
|
var _utils = require("../utils");
|
|
@@ -12,6 +13,7 @@ var _components = require("../components");
|
|
|
12
13
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
14
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
15
|
var pieLegendFormatter = exports.pieLegendFormatter = function pieLegendFormatter(series, props) {
|
|
16
|
+
var _props$fieldColumnKey, _props$fieldsColumnWi, _series$fieldsData;
|
|
15
17
|
var displayName = series.displayName,
|
|
16
18
|
data = series.data,
|
|
17
19
|
percent = series.percent,
|
|
@@ -54,6 +56,48 @@ var pieLegendFormatter = exports.pieLegendFormatter = function pieLegendFormatte
|
|
|
54
56
|
_props$percent$transl = _props$percent.translate,
|
|
55
57
|
percentX = _props$percent$transl.x,
|
|
56
58
|
percentY = _props$percent$transl.y;
|
|
59
|
+
var fieldColumnKeys = (_props$fieldColumnKey = props.fieldColumnKeys) !== null && _props$fieldColumnKey !== void 0 ? _props$fieldColumnKey : [];
|
|
60
|
+
var fieldsColumnWidths = (_props$fieldsColumnWi = props.fieldsColumnWidths) !== null && _props$fieldsColumnWi !== void 0 ? _props$fieldsColumnWi : [];
|
|
61
|
+
//获取文本所占宽度
|
|
62
|
+
function getStringWidth(text) {
|
|
63
|
+
var fontStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "14px sans-serif";
|
|
64
|
+
var canvas = document.createElement("canvas");
|
|
65
|
+
var ctx = canvas.getContext("2d");
|
|
66
|
+
ctx.font = fontStyle;
|
|
67
|
+
return ctx.measureText(text).width;
|
|
68
|
+
}
|
|
69
|
+
var alignToJustify = function alignToJustify(align) {
|
|
70
|
+
return align == "left" ? "flex-start" : align == "right" ? "flex-end" : "center";
|
|
71
|
+
};
|
|
72
|
+
var alignToTextAlign = function alignToTextAlign(align) {
|
|
73
|
+
return align === "left" ? "left" : align === "right" ? "right" : "center";
|
|
74
|
+
};
|
|
75
|
+
if (fieldColumnKeys.length > 0) {
|
|
76
|
+
//处理除name、value、percent外的列
|
|
77
|
+
series.fieldsData = fieldColumnKeys.map(function (key, fieldsColumnIndex) {
|
|
78
|
+
var _series$fields, _series$data;
|
|
79
|
+
if (!((_series$fields = series.fields) !== null && _series$fields !== void 0 && _series$fields[key]) || !((_series$data = series.data) !== null && _series$data !== void 0 && _series$data.hasOwnProperty(key))) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
return _objectSpread(_objectSpread({}, series.fields[key]), {}, {
|
|
83
|
+
value: series.data[key],
|
|
84
|
+
fieldsColumnIndex: fieldsColumnIndex
|
|
85
|
+
});
|
|
86
|
+
}).filter(Boolean);
|
|
87
|
+
} else {
|
|
88
|
+
series.fieldsData = Object.entries(series.fields || {}).reduce(function (arr, _ref) {
|
|
89
|
+
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
90
|
+
key = _ref2[0],
|
|
91
|
+
config = _ref2[1];
|
|
92
|
+
if (series.data.hasOwnProperty(key)) {
|
|
93
|
+
arr.push(_objectSpread(_objectSpread({}, config), {}, {
|
|
94
|
+
value: series.data[key],
|
|
95
|
+
fieldsColumnIndex: arr.length
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
return arr;
|
|
99
|
+
}, []);
|
|
100
|
+
}
|
|
57
101
|
var seriesColorType = seriesColor.type,
|
|
58
102
|
pure = seriesColor.pure,
|
|
59
103
|
stops = seriesColor.linear.stops;
|
|
@@ -65,6 +109,27 @@ var pieLegendFormatter = exports.pieLegendFormatter = function pieLegendFormatte
|
|
|
65
109
|
if (showName) columns.push("".concat(props.nameMaxWidth, "px"));
|
|
66
110
|
if (showValue) columns.push("".concat(props.valueMaxWidth + valueGap, "px"));
|
|
67
111
|
if (showPercent) columns.push("".concat(props.percentMaxWidth + percentGap, "px"));
|
|
112
|
+
if (series.fieldsData.length > 0) {
|
|
113
|
+
//网格布局新增的各列宽度
|
|
114
|
+
series.fieldsData.forEach(function (item) {
|
|
115
|
+
var _item$fieldsColumnInd, _suf$fontSize, _item$font, _item$translate, _suf$translate;
|
|
116
|
+
var idx = (_item$fieldsColumnInd = item.fieldsColumnIndex) !== null && _item$fieldsColumnInd !== void 0 ? _item$fieldsColumnInd : 0;
|
|
117
|
+
var measured = getStringWidth(item.value, "".concat(item.font.fontSize, "px ").concat(item.font.fontFamily));
|
|
118
|
+
var suf = item.suffix;
|
|
119
|
+
var suffixWidth = suf !== null && suf !== void 0 && suf.show && (suf === null || suf === void 0 ? void 0 : suf.text) != null && String(suf.text) !== "" ? getStringWidth(String(suf.text), "".concat((_suf$fontSize = suf.fontSize) !== null && _suf$fontSize !== void 0 ? _suf$fontSize : (_item$font = item.font) === null || _item$font === void 0 ? void 0 : _item$font.fontSize, "px ").concat(item.font.fontFamily)) : 0;
|
|
120
|
+
var tx = Math.max(0, Number((_item$translate = item.translate) === null || _item$translate === void 0 ? void 0 : _item$translate.x) || 0);
|
|
121
|
+
var stx = suf !== null && suf !== void 0 && suf.show && (suf === null || suf === void 0 ? void 0 : suf.text) != null && String(suf.text) !== "" ? Math.max(0, Number((_suf$translate = suf.translate) === null || _suf$translate === void 0 ? void 0 : _suf$translate.x) || 0) : 0;
|
|
122
|
+
var flowW = measured + suffixWidth + tx + stx;
|
|
123
|
+
var colW;
|
|
124
|
+
if (fieldsColumnWidths.length > idx && fieldsColumnWidths[idx] > 0) {
|
|
125
|
+
colW = Math.max(Number(fieldsColumnWidths[idx]) || 0, Number(item.maxWidth) || 0, flowW);
|
|
126
|
+
} else {
|
|
127
|
+
var fromConfig = Number(item.maxWidth) || 0;
|
|
128
|
+
colW = Math.max(flowW, fromConfig);
|
|
129
|
+
}
|
|
130
|
+
columns.push("".concat(colW, "px"));
|
|
131
|
+
});
|
|
132
|
+
}
|
|
68
133
|
return /*#__PURE__*/React.createElement(React.Fragment, null, icon && /*#__PURE__*/React.createElement("span", {
|
|
69
134
|
style: _objectSpread(_objectSpread({}, icon), {}, {
|
|
70
135
|
marginRight: icon.marginRight,
|
|
@@ -74,7 +139,8 @@ var pieLegendFormatter = exports.pieLegendFormatter = function pieLegendFormatte
|
|
|
74
139
|
className: showName && showValue && showPercent ? _indexModule["default"].showAllStyle : _indexModule["default"].notShowAllStyle,
|
|
75
140
|
style: {
|
|
76
141
|
width: "calc( 100% + ".concat(textMarginLeft + valueGap + percentGap, "px )"),
|
|
77
|
-
gridTemplateColumns: columns.join(" ")
|
|
142
|
+
gridTemplateColumns: columns.join(" "),
|
|
143
|
+
overflowX: "visible"
|
|
78
144
|
}
|
|
79
145
|
}, showName && /*#__PURE__*/React.createElement(_components.TextOverflow, {
|
|
80
146
|
value: displayName,
|
|
@@ -95,8 +161,8 @@ var pieLegendFormatter = exports.pieLegendFormatter = function pieLegendFormatte
|
|
|
95
161
|
transform: "translate(".concat(valueX, "px,").concat(valueY, "px)"),
|
|
96
162
|
color: valueSameColor ? _color : valueFont.color,
|
|
97
163
|
alignItems: "center",
|
|
98
|
-
justifyContent: valueAlign
|
|
99
|
-
textAlign: valueAlign
|
|
164
|
+
justifyContent: alignToJustify(valueAlign !== null && valueAlign !== void 0 ? valueAlign : "center"),
|
|
165
|
+
textAlign: alignToTextAlign(valueAlign)
|
|
100
166
|
})
|
|
101
167
|
}, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(_components.SplitText, {
|
|
102
168
|
value: data.y,
|
|
@@ -109,14 +175,53 @@ var pieLegendFormatter = exports.pieLegendFormatter = function pieLegendFormatte
|
|
|
109
175
|
}
|
|
110
176
|
}, text)), showPercent && /*#__PURE__*/React.createElement("span", {
|
|
111
177
|
style: _objectSpread(_objectSpread({
|
|
178
|
+
display: "flex",
|
|
112
179
|
whiteSpace: "nowrap"
|
|
113
180
|
}, (0, _utils.getFontStyle)(percentFont)), {}, {
|
|
114
181
|
marginLeft: percentGap,
|
|
115
182
|
transform: "translate(".concat(percentX, "px,").concat(percentY, "px)"),
|
|
116
183
|
color: percentSameColor ? _color : percentFont.color,
|
|
117
184
|
alignItems: "center",
|
|
118
|
-
justifyContent: percentAlign
|
|
119
|
-
textAlign: percentAlign
|
|
185
|
+
justifyContent: alignToJustify(percentAlign),
|
|
186
|
+
textAlign: alignToTextAlign(percentAlign)
|
|
120
187
|
})
|
|
121
|
-
}, percent + "%"))
|
|
188
|
+
}, percent + "%"), (_series$fieldsData = series.fieldsData) === null || _series$fieldsData === void 0 ? void 0 : _series$fieldsData.map(function (item, index //渲染网格布局新增的各列
|
|
189
|
+
) {
|
|
190
|
+
var _fieldColumnKeys, _item$fieldsColumnInd2, _item$align, _item$align2, _item$translate$x, _item$translate2, _item$translate$y, _item$translate3, _item$suffix, _item$suffix2, _item$suffix$translat, _item$suffix$translat2, _item$suffix$translat3, _item$suffix$translat4;
|
|
191
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
192
|
+
key: (_fieldColumnKeys = fieldColumnKeys[(_item$fieldsColumnInd2 = item.fieldsColumnIndex) !== null && _item$fieldsColumnInd2 !== void 0 ? _item$fieldsColumnInd2 : index]) !== null && _fieldColumnKeys !== void 0 ? _fieldColumnKeys : index,
|
|
193
|
+
style: _objectSpread(_objectSpread({
|
|
194
|
+
display: "flex",
|
|
195
|
+
boxSizing: "border-box",
|
|
196
|
+
width: "100%",
|
|
197
|
+
minWidth: 0,
|
|
198
|
+
alignItems: "center",
|
|
199
|
+
justifyContent: alignToJustify((_item$align = item.align) !== null && _item$align !== void 0 ? _item$align : "center"),
|
|
200
|
+
textAlign: alignToTextAlign((_item$align2 = item.align) !== null && _item$align2 !== void 0 ? _item$align2 : "center"),
|
|
201
|
+
overflow: "visible"
|
|
202
|
+
}, (0, _utils.getFontStyle)(item.font)), {}, {
|
|
203
|
+
color: item.sameColor ? _color : item.font.color
|
|
204
|
+
})
|
|
205
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
206
|
+
style: {
|
|
207
|
+
display: "inline-flex",
|
|
208
|
+
alignItems: "center",
|
|
209
|
+
flexWrap: "nowrap",
|
|
210
|
+
whiteSpace: "nowrap",
|
|
211
|
+
marginLeft: (_item$translate$x = (_item$translate2 = item.translate) === null || _item$translate2 === void 0 ? void 0 : _item$translate2.x) !== null && _item$translate$x !== void 0 ? _item$translate$x : 0,
|
|
212
|
+
marginTop: (_item$translate$y = (_item$translate3 = item.translate) === null || _item$translate3 === void 0 ? void 0 : _item$translate3.y) !== null && _item$translate$y !== void 0 ? _item$translate$y : 0
|
|
213
|
+
}
|
|
214
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
215
|
+
style: {
|
|
216
|
+
whiteSpace: "nowrap"
|
|
217
|
+
}
|
|
218
|
+
}, item.value), ((_item$suffix = item.suffix) === null || _item$suffix === void 0 ? void 0 : _item$suffix.show) && ((_item$suffix2 = item.suffix) === null || _item$suffix2 === void 0 ? void 0 : _item$suffix2.text) != null && String(item.suffix.text) !== "" && /*#__PURE__*/React.createElement("span", {
|
|
219
|
+
style: {
|
|
220
|
+
whiteSpace: "nowrap",
|
|
221
|
+
fontSize: item.suffix.fontSize,
|
|
222
|
+
marginLeft: (_item$suffix$translat = (_item$suffix$translat2 = item.suffix.translate) === null || _item$suffix$translat2 === void 0 ? void 0 : _item$suffix$translat2.x) !== null && _item$suffix$translat !== void 0 ? _item$suffix$translat : 0,
|
|
223
|
+
marginTop: (_item$suffix$translat3 = (_item$suffix$translat4 = item.suffix.translate) === null || _item$suffix$translat4 === void 0 ? void 0 : _item$suffix$translat4.y) !== null && _item$suffix$translat3 !== void 0 ? _item$suffix$translat3 : 0
|
|
224
|
+
}
|
|
225
|
+
}, item.suffix.text)));
|
|
226
|
+
})));
|
|
122
227
|
};
|
package/lib/hooks/useAxes.js
CHANGED
|
@@ -310,7 +310,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
310
310
|
end: end,
|
|
311
311
|
clipAxisRange: clipAxisRange,
|
|
312
312
|
lengthWithoutPaddingOuter: lengthWithoutPaddingOuter,
|
|
313
|
-
step: [lengthWithoutPaddingOuter / clipAxisAllTicks[0].length, lengthWithoutPaddingOuter / clipAxisAllTicks[1].length],
|
|
313
|
+
step: [clipAxisAllTicks[0].length > 0 ? lengthWithoutPaddingOuter / clipAxisAllTicks[0].length : 0, clipAxisAllTicks[1].length > 0 ? lengthWithoutPaddingOuter / clipAxisAllTicks[1].length : 0],
|
|
314
314
|
allTicks: clipAxisAllTicks,
|
|
315
315
|
ticks: clipAxisTicks,
|
|
316
316
|
clipValue: clipValue
|
|
@@ -372,14 +372,19 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
372
372
|
// }
|
|
373
373
|
// }
|
|
374
374
|
// }
|
|
375
|
-
var
|
|
375
|
+
var tickLen = allTicks.length;
|
|
376
|
+
var _step2 = tickLen > 0 ? _lengthWithoutPaddingOuter / tickLen : 0;
|
|
376
377
|
var controlCfg = {
|
|
377
378
|
controlStep: 0,
|
|
378
379
|
controlDragScaler: null
|
|
379
380
|
};
|
|
380
381
|
if (isC) {
|
|
381
|
-
|
|
382
|
-
|
|
382
|
+
if (tickLen > 0 && cPercent > 0) {
|
|
383
|
+
controlCfg.controlStep = _step2 / cPercent;
|
|
384
|
+
controlCfg.controlDragScaler = scaler.copy().range([_start / cPercent, _end / cPercent]);
|
|
385
|
+
} else {
|
|
386
|
+
controlCfg.controlDragScaler = scaler.copy();
|
|
387
|
+
}
|
|
383
388
|
var _getChartsConfig3 = getChartsConfig(orientation, cWidth, height, paddingOuter),
|
|
384
389
|
start_ = _getChartsConfig3.start,
|
|
385
390
|
end_ = _getChartsConfig3.end,
|
|
@@ -390,7 +395,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
390
395
|
scaler = scales[type]().domain(newDomain).range(_range);
|
|
391
396
|
scaler.type = type;
|
|
392
397
|
var controlOuter = len - outer;
|
|
393
|
-
_step2 = controlOuter /
|
|
398
|
+
_step2 = tickLen > 0 ? controlOuter / tickLen : 0;
|
|
394
399
|
}
|
|
395
400
|
tmp.set(axisType, _objectSpread(_objectSpread(_objectSpread({}, item), {}, {
|
|
396
401
|
count: _count,
|
|
@@ -17,11 +17,11 @@ var initialState = {
|
|
|
17
17
|
flag: false // 首次加载标识:true-首次加载不执行动画,false-可执行轮播
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
/**
|
|
21
|
-
* x轴滚动逻辑
|
|
22
|
-
* @param {Object} axis x轴配置项
|
|
23
|
-
* @param {Object} config x轴轮播动画的配置项
|
|
24
|
-
* @returns {Map} 返回更新后的x轴配置(ticks/scaler/range 变更)
|
|
20
|
+
/**
|
|
21
|
+
* x轴滚动逻辑
|
|
22
|
+
* @param {Object} axis x轴配置项
|
|
23
|
+
* @param {Object} config x轴轮播动画的配置项
|
|
24
|
+
* @returns {Map} 返回更新后的x轴配置(ticks/scaler/range 变更)
|
|
25
25
|
*/
|
|
26
26
|
var _default = exports["default"] = function _default(axis, config, isHover, controlInfo, active) {
|
|
27
27
|
var show = config.show,
|
|
@@ -40,11 +40,11 @@ var _default = exports["default"] = function _default(axis, config, isHover, con
|
|
|
40
40
|
lengthWithoutPaddingOuter = axis.lengthWithoutPaddingOuter;
|
|
41
41
|
var tickLength = ticks.length;
|
|
42
42
|
var tickCount = isC ? allTicks.length : count;
|
|
43
|
-
var scale = isC ? cPercent : 1;
|
|
43
|
+
var scale = isC && cPercent > 0 ? cPercent : 1;
|
|
44
44
|
var _start = start / scale;
|
|
45
45
|
var _end = end / scale;
|
|
46
46
|
var canCarousel = (0, _react.useMemo)(function () {
|
|
47
|
-
return show && active && tickLength > tickCount;
|
|
47
|
+
return show && active && tickCount > 0 && tickLength > tickCount;
|
|
48
48
|
}, [show, active, tickLength, tickCount]);
|
|
49
49
|
var _useState = (0, _react.useState)({
|
|
50
50
|
scaler: scaler,
|
|
@@ -120,7 +120,7 @@ var _default = exports["default"] = function _default(axis, config, isHover, con
|
|
|
120
120
|
|
|
121
121
|
// 初始化:仅在基础条件变化时设置初始索引
|
|
122
122
|
(0, _react.useEffect)(function () {
|
|
123
|
-
if (show && tickLength > tickCount) {
|
|
123
|
+
if (show && tickCount > 0 && tickLength > tickCount) {
|
|
124
124
|
setStatus({
|
|
125
125
|
currentIndex: 0,
|
|
126
126
|
flag: true
|
|
@@ -137,10 +137,11 @@ var _default = exports["default"] = function _default(axis, config, isHover, con
|
|
|
137
137
|
|
|
138
138
|
// 执行条件:显示、非hover暂停、激活、有足够的轮播项
|
|
139
139
|
var canRun = canCarousel && !(latest.hover && hoverRef.current);
|
|
140
|
-
if (currentIndex !== null && canRun) {
|
|
140
|
+
if (currentIndex !== null && canRun && latest.tickCount > 0) {
|
|
141
141
|
if (flag) {
|
|
142
142
|
// 首次加载:仅初始化视图,不执行动画
|
|
143
143
|
var _step = latest.lengthWithoutPaddingOuter / latest.tickCount;
|
|
144
|
+
if (!Number.isFinite(_step)) return;
|
|
144
145
|
var _ticks = latest.allTicks.slice(currentIndex, latest.tickCount);
|
|
145
146
|
setState({
|
|
146
147
|
step: _step,
|
|
@@ -168,6 +169,7 @@ var _default = exports["default"] = function _default(axis, config, isHover, con
|
|
|
168
169
|
// 非首次加载:执行动画 + 后续逻辑
|
|
169
170
|
if (!ready) return;
|
|
170
171
|
var _step2 = latest.lengthWithoutPaddingOuter / latest.tickCount;
|
|
172
|
+
if (!Number.isFinite(_step2)) return;
|
|
171
173
|
animation = (0, _popmotion.animate)({
|
|
172
174
|
from: 0,
|
|
173
175
|
to: -1,
|
|
@@ -278,7 +280,7 @@ var _default = exports["default"] = function _default(axis, config, isHover, con
|
|
|
278
280
|
setReady(true);
|
|
279
281
|
setStatus(function () {
|
|
280
282
|
// 与初始化 effect 保持一致:只要满足条件就从 0 开始重新初始化
|
|
281
|
-
if (show && active && tickLength > tickCount) {
|
|
283
|
+
if (show && active && tickCount > 0 && tickLength > tickCount) {
|
|
282
284
|
return {
|
|
283
285
|
currentIndex: 0,
|
|
284
286
|
flag: true
|
|
@@ -294,12 +296,12 @@ var _default = exports["default"] = function _default(axis, config, isHover, con
|
|
|
294
296
|
controlEnd: _end
|
|
295
297
|
});
|
|
296
298
|
};
|
|
297
|
-
/**
|
|
298
|
-
* 获取指定索引范围的ticks(支持循环)
|
|
299
|
-
* @param {Array} ticks 所有ticks
|
|
300
|
-
* @param {number} currentIndex 当前起始索引
|
|
301
|
-
* @param {number} length 需要的长度
|
|
302
|
-
* @returns {Array} 目标ticks数组
|
|
299
|
+
/**
|
|
300
|
+
* 获取指定索引范围的ticks(支持循环)
|
|
301
|
+
* @param {Array} ticks 所有ticks
|
|
302
|
+
* @param {number} currentIndex 当前起始索引
|
|
303
|
+
* @param {number} length 需要的长度
|
|
304
|
+
* @returns {Array} 目标ticks数组
|
|
303
305
|
*/
|
|
304
306
|
var getTicks = function getTicks(ticks, currentIndex, length) {
|
|
305
307
|
var _currentIndex = +currentIndex;
|