tdesign-react
Version:
TDesign Component for React
330 lines (320 loc) • 12.8 kB
JavaScript
/**
* tdesign v1.15.1
* (c) 2025 tdesign
* @license MIT
*/
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var slicedToArray = require('../_chunks/dep-8e4d656d.js');
var React = require('react');
var classNames = require('classnames');
var tdesignIconsReact = require('tdesign-icons-react');
var createClass = require('../_chunks/dep-69792df2.js');
var defineProperty = require('../_chunks/dep-0006fcfa.js');
var helper = require('../_chunks/dep-002fcc1e.js');
var statistic_defaultProps = require('./defaultProps.js');
var hooks_useConfig = require('../hooks/useConfig.js');
var hooks_useGlobalIcon = require('../hooks/useGlobalIcon.js');
var hooks_useDefaultProps = require('../hooks/useDefaultProps.js');
var hooks_useIsFirstRender = require('../hooks/useIsFirstRender.js');
var skeleton_index = require('../skeleton/index.js');
var isNumber = require('../_chunks/dep-2ffa3ff1.js');
var isFunction = require('../_chunks/dep-ec8d2dca.js');
require('../_chunks/dep-00b49251.js');
require('../_chunks/dep-667ac7af.js');
require('../_chunks/dep-e4e1901e.js');
require('../config-provider/ConfigContext.js');
require('../_chunks/dep-1df1dad8.js');
require('../_chunks/dep-5b5ab11b.js');
require('dayjs');
require('../_chunks/dep-f32c03f1.js');
require('../_chunks/dep-31c4bc3d.js');
require('../_chunks/dep-eea2872a.js');
require('../_chunks/dep-25585736.js');
require('../_chunks/dep-62e73936.js');
require('../_chunks/dep-64577888.js');
require('../_chunks/dep-71455db7.js');
require('../_chunks/dep-9e5a468d.js');
require('../_chunks/dep-f26edb7b.js');
require('../_chunks/dep-f33c1939.js');
require('../_chunks/dep-21ece627.js');
require('../_chunks/dep-25e4aa84.js');
require('../_chunks/dep-fc596d16.js');
require('../_chunks/dep-e1fbe1c3.js');
require('../_chunks/dep-df2b541f.js');
require('../_chunks/dep-edd366db.js');
require('../_chunks/dep-a56c4939.js');
require('../_chunks/dep-6c297e20.js');
require('../_chunks/dep-b7ad4d54.js');
require('../_chunks/dep-a2cb9299.js');
require('../_chunks/dep-f981815b.js');
require('../skeleton/Skeleton.js');
require('../_util/helper.js');
require('../_chunks/dep-8fa3a4c2.js');
require('../_chunks/dep-840b1644.js');
require('../_chunks/dep-255ceed8.js');
require('../_chunks/dep-79629634.js');
require('../_chunks/dep-66114ce9.js');
require('../_chunks/dep-62d1dd66.js');
require('../_chunks/dep-7a148045.js');
require('../_util/parseTNode.js');
require('../_chunks/dep-59671c87.js');
require('../skeleton/defaultProps.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
var quartOut = function quartOut(t) {
return 1 - Math.abs(Math.pow(t - 1, 4));
};
var Tween = /*#__PURE__*/function () {
function Tween(_ref) {
var _this = this;
var from = _ref.from,
to = _ref.to,
_ref$duration = _ref.duration,
duration = _ref$duration === void 0 ? 200 : _ref$duration,
onStart = _ref.onStart,
_ref$onUpdate = _ref.onUpdate,
onUpdate = _ref$onUpdate === void 0 ? function () {} : _ref$onUpdate,
onFinish = _ref.onFinish;
createClass._classCallCheck(this, Tween);
defineProperty._defineProperty(this, "time", 0);
defineProperty._defineProperty(this, "elapsed", 0);
this.from = from;
this.to = to;
this.duration = duration;
this.onStart = onStart;
this.onUpdate = onUpdate;
this.onFinish = onFinish;
this.startTime = Date.now();
this.started = false;
this.finished = false;
this.timer = null;
this.keys = {};
Object.entries(from).forEach(function (_ref2) {
var _ref3 = slicedToArray._slicedToArray(_ref2, 2),
key = _ref3[0],
value = _ref3[1];
if (_this.to[key] === void 0) {
_this.to[key] = value;
}
});
Object.entries(to).forEach(function (_ref4) {
var _ref5 = slicedToArray._slicedToArray(_ref4, 2),
key = _ref5[0],
value = _ref5[1];
if (_this.from[key] === void 0) {
_this.from[key] = value;
}
});
}
return createClass._createClass(Tween, [{
key: "update",
value: function update() {
var _this2 = this;
this.time = Date.now();
if (this.time < this.startTime || this.finished) return;
if (this.elapsed >= this.duration) {
var _this$onFinish;
this.finished = true;
(_this$onFinish = this.onFinish) === null || _this$onFinish === void 0 || _this$onFinish.call(this, this.keys);
return;
}
var elapsed = Math.min(this.time - this.startTime, this.duration);
this.elapsed = elapsed;
var progress = quartOut(elapsed / this.duration);
Object.keys(this.to).forEach(function (key) {
var delta = _this2.to[key] - _this2.from[key];
_this2.keys[key] = _this2.from[key] + delta * progress;
});
if (!this.started) {
var _this$onStart;
(_this$onStart = this.onStart) === null || _this$onStart === void 0 || _this$onStart.call(this, this.keys);
this.started = true;
}
this.onUpdate(this.keys);
}
}, {
key: "polyfillStart",
value: function polyfillStart() {
var _this3 = this;
var elapsed = Date.now() - this.startTime;
var interval = quartOut(elapsed / this.duration);
this.timer = setInterval(function () {
_this3.update();
if (_this3.finished) {
clearInterval(_this3.timer);
}
}, interval);
}
}, {
key: "normalStart",
value: function normalStart() {
var _this4 = this;
var _tick = function tick() {
_this4.update();
_this4.timer = requestAnimationFrame(_tick);
if (_this4.finished) {
cancelAnimationFrame(_this4.timer);
_this4.timer = null;
}
};
_tick();
}
}, {
key: "start",
value: function start() {
this.startTime = Date.now();
if (helper.getIEVersion() < 10) this.polyfillStart();else this.normalStart();
}
}, {
key: "stop",
value: function stop() {
if (helper.getIEVersion() < 10) clearInterval(this.timer);else cancelAnimationFrame(this.timer);
this.timer = null;
}
}]);
}();
var COLOR_MAP = {
black: "var(--td-text-color-primary)",
blue: "var(--td-brand-color)",
red: "var(--td-error-color)",
orange: "var(--td-warning-color)",
green: "var(--td-success-color)"
};
function getFormatValue(value, decimalPlaces, separator) {
var options = {
minimumFractionDigits: decimalPlaces !== null && decimalPlaces !== void 0 ? decimalPlaces : 0,
maximumFractionDigits: decimalPlaces !== null && decimalPlaces !== void 0 ? decimalPlaces : 20,
useGrouping: !!separator
};
return value.toLocaleString(void 0, options).replace(/,|,/g, separator);
}
var Statistic = /*#__PURE__*/React.forwardRef(function (props, ref) {
var _animation$valueFrom;
var _useDefaultProps = hooks_useDefaultProps["default"](props, statistic_defaultProps.statisticDefaultProps),
className = _useDefaultProps.className,
style = _useDefaultProps.style,
animation = _useDefaultProps.animation,
animationStart = _useDefaultProps.animationStart,
color = _useDefaultProps.color,
decimalPlaces = _useDefaultProps.decimalPlaces,
extra = _useDefaultProps.extra,
format = _useDefaultProps.format,
loading = _useDefaultProps.loading,
prefix = _useDefaultProps.prefix,
separator = _useDefaultProps.separator,
suffix = _useDefaultProps.suffix,
title = _useDefaultProps.title,
trend = _useDefaultProps.trend,
trendPlacement = _useDefaultProps.trendPlacement,
unit = _useDefaultProps.unit,
value = _useDefaultProps.value;
var _useConfig = hooks_useConfig["default"](),
classPrefix = _useConfig.classPrefix;
var _useGlobalIcon = hooks_useGlobalIcon["default"]({
ArrowTriangleUpFilledIcon: tdesignIconsReact.ArrowTriangleUpFilledIcon
}),
ArrowTriangleUpFilledIcon = _useGlobalIcon.ArrowTriangleUpFilledIcon;
var _useGlobalIcon2 = hooks_useGlobalIcon["default"]({
ArrowTriangleDownFilledIcon: tdesignIconsReact.ArrowTriangleDownFilledIcon
}),
ArrowTriangleDownFilledIcon = _useGlobalIcon2.ArrowTriangleDownFilledIcon;
var _useState = React.useState((_animation$valueFrom = animation === null || animation === void 0 ? void 0 : animation.valueFrom) !== null && _animation$valueFrom !== void 0 ? _animation$valueFrom : value),
_useState2 = slicedToArray._slicedToArray(_useState, 2),
innerValue = _useState2[0],
setInnerValue = _useState2[1];
var numberValue = React.useMemo(function () {
return isNumber.isNumber(value) ? value : 0;
}, [value]);
var tween = React.useRef(null);
var isFirstRender = hooks_useIsFirstRender["default"]();
var start = function start() {
var _animation$valueFrom2;
var from = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (_animation$valueFrom2 = animation === null || animation === void 0 ? void 0 : animation.valueFrom) !== null && _animation$valueFrom2 !== void 0 ? _animation$valueFrom2 : 0;
var to = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : numberValue;
if (from !== to) {
var _tween$current;
tween.current = new Tween({
from: {
value: from
},
to: {
value: to
},
duration: animation === null || animation === void 0 ? void 0 : animation.duration,
onUpdate: function onUpdate(keys) {
setInnerValue(keys.value);
},
onFinish: function onFinish() {
setInnerValue(to);
}
});
(_tween$current = tween.current) === null || _tween$current === void 0 || _tween$current.start();
}
};
var formatValue = React.useMemo(function () {
var formatInnerValue = innerValue;
if (isFunction.isFunction(format)) {
return format(formatInnerValue);
}
formatInnerValue = getFormatValue(formatInnerValue, decimalPlaces, separator);
return formatInnerValue;
}, [innerValue, decimalPlaces, separator, format]);
var valueStyle = React.useMemo(function () {
return {
color: COLOR_MAP[color] || color
};
}, [color]);
React.useEffect(function () {
if (isFirstRender) return;
setInnerValue(value);
animationStart && animation && start();
return function () {
if (tween.current) {
tween.current.stop();
}
};
}, [value]);
React.useEffect(function () {
animationStart && animation && !tween.current && start();
}, [animationStart]);
React.useImperativeHandle(ref, function () {
return {
start: start
};
});
var trendIcons = {
increase: /* @__PURE__ */React__default["default"].createElement(ArrowTriangleUpFilledIcon, null),
decrease: /* @__PURE__ */React__default["default"].createElement(ArrowTriangleDownFilledIcon, null)
};
var trendIcon = trend ? trendIcons[trend] : null;
var prefixRender = prefix || (trendIcon && trendPlacement !== "right" ? trendIcon : null);
var suffixRender = suffix || (trendIcon && trendPlacement === "right" ? trendIcon : null);
return /* @__PURE__ */React__default["default"].createElement("div", {
className: classNames__default["default"]("".concat(classPrefix, "-statistic"), className),
style: style
}, title && /* @__PURE__ */React__default["default"].createElement("div", {
className: "".concat(classPrefix, "-statistic-title")
}, title), /* @__PURE__ */React__default["default"].createElement(skeleton_index.Skeleton, {
animation: "gradient",
theme: "text",
loading: !!loading
}, /* @__PURE__ */React__default["default"].createElement("div", {
className: "".concat(classPrefix, "-statistic-content"),
style: valueStyle
}, prefixRender && /* @__PURE__ */React__default["default"].createElement("span", {
className: "".concat(classPrefix, "-statistic-content-prefix")
}, prefixRender), /* @__PURE__ */React__default["default"].createElement("span", {
className: "".concat(classPrefix, "-statistic-content-value")
}, formatValue), unit && /* @__PURE__ */React__default["default"].createElement("span", {
className: "".concat(classPrefix, "-statistic-content-unit")
}, unit), suffixRender && /* @__PURE__ */React__default["default"].createElement("span", {
className: "".concat(classPrefix, "-statistic-content-suffix")
}, suffixRender))), extra && /* @__PURE__ */React__default["default"].createElement("div", {
className: "".concat(classPrefix, "-statistic-extra")
}, extra));
});
Statistic.displayName = "Statistic";
exports["default"] = Statistic;
//# sourceMappingURL=Statistic.js.map