@chakra-ui/core
Version:
Responsive and accessible React UI components built with React and Emotion
210 lines (181 loc) • 7.7 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports["default"] = exports.CircularProgressLabel = void 0;
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _taggedTemplateLiteralLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));
var _core = require("@emotion/core");
var _ColorModeProvider = require("../ColorModeProvider");
var _Box = _interopRequireDefault(require("../Box"));
var _react = require("react");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _templateObject2() {
var data = (0, _taggedTemplateLiteralLoose2["default"])(["\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n"]);
_templateObject2 = function _templateObject2() {
return data;
};
return data;
}
function _templateObject() {
var data = (0, _taggedTemplateLiteralLoose2["default"])(["\n 0% {\n stroke-dasharray: 1, 400;\n stroke-dashoffset: 0;\n }\n\n 50% {\n stroke-dasharray: 400, 400;\n stroke-dashoffset: -100;\n }\n\n 100% {\n stroke-dasharray: 400, 400;\n stroke-dashoffset: -300;\n }\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var circularProgressCircle = (0, _core.keyframes)(_templateObject());
var spin = (0, _core.keyframes)(_templateObject2());
var CircularProgressLabel = function CircularProgressLabel(props) {
return (0, _core.jsx)(_Box["default"], (0, _extends2["default"])({
position: "absolute",
left: "50%",
top: "50%",
lineHeight: "1",
transform: "translate(-50%, -50%)",
fontSize: "0.25em",
css: {
fontVariantNumeric: "tabular-nums"
}
}, props));
};
exports.CircularProgressLabel = CircularProgressLabel;
function getComputedProps(_ref) {
var min = _ref.min,
max = _ref.max,
size = _ref.size,
value = _ref.value,
angle = _ref.angle,
thickness = _ref.thickness,
trackColor = _ref.trackColor,
color = _ref.color,
capIsRound = _ref.capIsRound,
isIndeterminate = _ref.isIndeterminate;
var radius = 50;
var diameter = radius * 2;
var circumference = diameter * Math.PI;
var strokeDasharray = Math.round(circumference * 1000) / 1000;
var viewBox = diameter / (1 - thickness / 2);
var viewBoxAttr = viewBox / 2 + " " + viewBox / 2 + " " + viewBox + " " + viewBox;
var strokeWidth = thickness / 2 * viewBox;
var progress = 1 - (value - min) / (max - min);
var strokeDashoffset = progress * circumference;
function getCircleProps(_ref2) {
var thickness = _ref2.thickness,
offset = _ref2.offset,
color = _ref2.color;
return {
as: "circle",
color: color,
fill: "transparent",
stroke: "currentColor",
strokeWidth: thickness,
strokeDasharray: strokeDasharray,
strokeDashoffset: offset,
cx: viewBox,
cy: viewBox,
r: radius
};
}
return {
rootProps: {
size: "1em",
fontSize: size,
display: "inline-block",
position: "relative",
veriticalAlign: "middle",
role: "progressbar",
"aria-valuemin": min,
"aria-valuemax": max,
"aria-valuenow": isIndeterminate ? null : value
},
svgProps: _objectSpread({
as: "svg",
viewBox: viewBoxAttr,
verticalAlign: "top",
transform: "rotate3d(0, 0, 1, " + (angle - 90) + "deg)",
size: "100%"
}, isIndeterminate && {
transformOrigin: "50% 50%",
animation: spin + " 2s linear infinite"
}),
trackCircleProps: getCircleProps({
thickness: strokeWidth,
offset: 0,
color: trackColor
}),
indicatorCircleProps: _objectSpread({}, getCircleProps({
thickness: strokeWidth,
offset: strokeDashoffset,
color: color
}), {}, capIsRound && {
strokeLinecap: "round"
}, {}, isIndeterminate && {
transition: "stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease",
animation: circularProgressCircle + " 1.5s ease-in-out infinite",
strokeDasharray: "1 400",
strokeDashoffset: "0"
}, {
stroke: "currentColor"
})
};
}
var CircularProgress = (0, _react.forwardRef)(function (props, ref) {
var _props$size = props.size,
size = _props$size === void 0 ? "48px" : _props$size,
_props$max = props.max,
max = _props$max === void 0 ? 100 : _props$max,
_props$min = props.min,
min = _props$min === void 0 ? 0 : _props$min,
isIndeterminate = props.isIndeterminate,
_props$thickness = props.thickness,
thickness = _props$thickness === void 0 ? 0.2 : _props$thickness,
value = props.value,
_props$angle = props.angle,
angle = _props$angle === void 0 ? 0 : _props$angle,
capIsRound = props.capIsRound,
children = props.children,
_props$trackColor = props.trackColor,
trackColor = _props$trackColor === void 0 ? "gray" : _props$trackColor,
_props$color = props.color,
color = _props$color === void 0 ? "blue" : _props$color,
rest = (0, _objectWithoutPropertiesLoose2["default"])(props, ["size", "max", "min", "isIndeterminate", "thickness", "value", "angle", "capIsRound", "children", "trackColor", "color"]);
var _useColorMode = (0, _ColorModeProvider.useColorMode)(),
colorMode = _useColorMode.colorMode;
var _trackColor = {
light: trackColor + ".100",
dark: "whiteAlpha.300"
};
var _color = {
light: color + ".500",
dark: color + ".200"
};
var _getComputedProps = getComputedProps({
min: min,
max: max,
value: value,
size: size,
angle: angle,
thickness: thickness,
capIsRound: capIsRound,
isIndeterminate: isIndeterminate,
color: _color[colorMode],
trackColor: _trackColor[colorMode]
}),
rootProps = _getComputedProps.rootProps,
indicatorCircleProps = _getComputedProps.indicatorCircleProps,
svgProps = _getComputedProps.svgProps,
trackCircleProps = _getComputedProps.trackCircleProps;
return (0, _core.jsx)(_Box["default"], (0, _extends2["default"])({
ref: ref
}, rootProps, rest), (0, _core.jsx)(_Box["default"], svgProps, (0, _core.jsx)(_Box["default"], (0, _extends2["default"])({}, trackCircleProps, {
"data-progress-track": true
})), (0, _core.jsx)(_Box["default"], (0, _extends2["default"])({}, indicatorCircleProps, {
"data-progress-indicator": true
}))), children);
});
CircularProgress.displayName = "CircularProgress";
var _default = CircularProgress;
exports["default"] = _default;