UNPKG

@age/quantum

Version:
119 lines (101 loc) 4.92 kB
"use strict"; function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _styledComponents = _interopRequireWildcard(require("styled-components")); var _theme = require("../shared/theme"); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var getSizePixels = function getSizePixels(size, gutter) { var sizes = { medium: gutter * 2, // 16 large: gutter * 3, // 24 xlarge: gutter * 4, // 32 xxlarge: gutter * 5, // 40 xxxlarge: gutter * 6 // 48 }; return sizes[size]; }; var Content = _styledComponents.default.svg.withConfig({ displayName: "CircularLoader__Content", componentId: "sc-6tzjmf-0" })(["left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%;height:100%;", ""], function (_ref) { var color = _ref.color; return "\n color: ".concat(color, ";\n "); }); var circularRotate = (0, _styledComponents.keyframes)(["100%{transform:rotate(360deg);}"]); var circularDash = (0, _styledComponents.keyframes)(["0%{stroke-dasharray:1px,200px;stroke-dashoffset:0px;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:100px,200px;stroke-dashoffset:-125px;}"]); var circleProps = { cx: 44, cy: 44, r: 20.2, strokeWidth: 3.6 }; var Circle = _styledComponents.default.circle.withConfig({ displayName: "CircularLoader__Circle", componentId: "sc-6tzjmf-1" })(["animation:", " 1.4s ease-in-out infinite;cx:", "px;cy:", "px;fill:none;line-height:1;r:", "px;stroke-dasharray:80px,200px;stroke-dashoffset:0px;stroke-width:", "px;stroke:currentColor;", ""], circularDash, circleProps.cx, circleProps.cy, circleProps.r, circleProps.strokeWidth, function (_ref2) { var color = _ref2.color; return "\n color: ".concat(color, ";\n "); }); var Wrapper = _styledComponents.default.div.withConfig({ displayName: "CircularLoader__Wrapper", componentId: "sc-6tzjmf-2" })(["animation:", " 1.4s linear infinite;position:relative;", ""], circularRotate, function (_ref3) { var size = _ref3.size, gutter = _ref3.gutter; return "\n height: ".concat(getSizePixels(size, gutter), "px;\n width: ").concat(getSizePixels(size, gutter), "px; \n "); }); var CircularLoader = function CircularLoader(props) { var size = props.size, skin = props.skin, _props$theme = props.theme, color = _props$theme.colors[skin][700], gutter = _props$theme.gutter; var cx = circleProps.cx, cy = circleProps.cy, r = circleProps.r, strokeWidth = circleProps.strokeWidth; return _react.default.createElement(Wrapper, { size: size, gutter: gutter, role: "progressbar" }, _react.default.createElement(Content, { color: color, viewBox: "22 22 44 44" }, _react.default.createElement(Circle, { strokeWidth: strokeWidth, cx: cx, cy: cy, r: r, color: color }))); }; CircularLoader.defaultProps = { size: 'medium', skin: 'primary', theme: { colors: _theme.colors, gutter: _theme.gutter } }; CircularLoader.propTypes = { size: _propTypes.default.oneOf(['medium', 'large', 'xlarge', 'xxlarge', 'xxxlarge']), skin: _propTypes.default.oneOf(['primary', 'secondary']), /** Edit only for themification */ theme: _propTypes.default.shape({ colors: _propTypes.default.object, gutter: _propTypes.default.number }) }; var _default = CircularLoader; exports.default = _default;