UNPKG

@chakra-ui/core

Version:

Responsive and accessible React UI components built with React and Emotion

210 lines (181 loc) 7.7 kB
"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;