UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

118 lines (117 loc) 4.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "CircleProgress", { enumerable: true, get: function() { return CircleProgress; } }); var _interop_require_default = require("@swc/helpers/_/_interop_require_default"); var _object_spread = require("@swc/helpers/_/_object_spread"); var _object_spread_props = require("@swc/helpers/_/_object_spread_props"); var _object_without_properties = require("@swc/helpers/_/_object_without_properties"); var _react = /*#__PURE__*/ _interop_require_default._(require("react")); var _classnames = /*#__PURE__*/ _interop_require_default._(require("classnames")); var _utils = require("../../utils"); var _typings = require("../../utils/typings"); var defaultProps = (0, _object_spread_props._)((0, _object_spread._)({}, _typings.ComponentDefaults), { strokeWidth: 5, radius: 50, strokeLinecap: 'round', color: '#FF0F23', background: '#e5e9f2', clockwise: true }); var classPrefix = "nut-circleprogress"; var CircleProgress = function CircleProgress(props) { var _stop; var _ref = (0, _object_spread._)({}, defaultProps, props), children = _ref.children, percent = _ref.percent, className = _ref.className, radius = _ref.radius, clockwise = _ref.clockwise, strokeWidth = _ref.strokeWidth, color = _ref.color, background = _ref.background, style = _ref.style, strokeLinecap = _ref.strokeLinecap, restProps = (0, _object_without_properties._)(_ref, [ "children", "percent", "className", "radius", "clockwise", "strokeWidth", "color", "background", "style", "strokeLinecap" ]); var classes = (0, _classnames.default)(classPrefix, className); var refRandomId = Math.random().toString(36).slice(-8); var styles = (0, _object_spread._)({ height: "".concat(Number(radius) * 2, "px"), width: "".concat(Number(radius) * 2, "px") }, style); var pathStyle = { stroke: background }; var hoverStyle = function hoverStyle() { var perimeter = 283; var offset = perimeter * Number(percent) / 100; return { stroke: (0, _utils.isObject)(color) ? "url(#".concat(refRandomId, ")") : color, strokeDasharray: "".concat(offset, "px ").concat(perimeter, "px") }; }; var path = function path() { var isWise = clockwise ? 1 : 0; return "M 50 50 m -45 0 a 45 45 0 1 ".concat(isWise, " 90 0 a 45 45 0 1 ").concat(isWise, " -90 0"); }; var stop = function stop() { if (!(0, _utils.isObject)(color)) { return; } var colorArr = Object.keys(color).sort(function(a, b) { return parseFloat(a) - parseFloat(b); }); var stopArr = []; colorArr.forEach(function(item) { var obj = { key: '', value: '' }; obj.key = item; obj.value = color[item]; stopArr.push(obj); }); return stopArr; }; return /*#__PURE__*/ _react.default.createElement("div", (0, _object_spread._)({ className: classes, style: styles }, restProps), /*#__PURE__*/ _react.default.createElement("svg", { viewBox: "0 0 100 100" }, /*#__PURE__*/ _react.default.createElement("defs", null, /*#__PURE__*/ _react.default.createElement("linearGradient", { id: refRandomId, x1: "100%", y1: "0%", x2: "0%", y2: "0%" }, (_stop = stop()) === null || _stop === void 0 ? void 0 : _stop.map(function(item, index) { return /*#__PURE__*/ _react.default.createElement("stop", { key: index, offset: item.key, stopColor: item.value }); }))), /*#__PURE__*/ _react.default.createElement("path", { className: "nut-circleprogress-path", d: path(), style: pathStyle, fill: "none", strokeWidth: strokeWidth }), /*#__PURE__*/ _react.default.createElement("path", { className: "nut-circleprogress-hover", style: hoverStyle(), d: path(), fill: "none", strokeLinecap: strokeLinecap, transform: "rotate(90,50,50)", strokeWidth: strokeWidth })), /*#__PURE__*/ _react.default.createElement("div", { className: "nut-circleprogress-text" }, children)); }; CircleProgress.displayName = 'NutCircleProgress';