chakra-ui
Version:
Responsive and accessible React UI components built with React and Emotion
86 lines (74 loc) • 2.63 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
function _templateObject2() {
var data = _taggedTemplateLiteral(["\n animation: ", " ", " linear infinite;\n"]);
_templateObject2 = function _templateObject2() {
return data;
};
return data;
}
function _templateObject() {
var data = _taggedTemplateLiteral(["\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
/** @jsx jsx */
import { css, jsx, keyframes } from "@emotion/core";
import Box from "../Box";
import Icon from "../Icon";
import { forwardRef } from "react";
import VisuallyHidden from "../VisuallyHidden";
var spin = keyframes(_templateObject());
var sizes = {
xs: "0.75rem",
sm: "1rem",
md: "1.5rem",
lg: "2rem",
xl: "3rem"
};
var Spinner = forwardRef(function (_ref, ref) {
var _ref$size = _ref.size,
size = _ref$size === void 0 ? "md" : _ref$size,
_ref$loadingText = _ref.loadingText,
loadingText = _ref$loadingText === void 0 ? "Loading..." : _ref$loadingText,
_ref$thickness = _ref.thickness,
thickness = _ref$thickness === void 0 ? "2px" : _ref$thickness,
_ref$speed = _ref.speed,
speed = _ref$speed === void 0 ? "0.45s" : _ref$speed,
props = _objectWithoutProperties(_ref, ["size", "loadingText", "thickness", "speed"]);
var _size = sizes[size] || size;
return jsx(Box, _extends({
ref: ref,
display: "inline-block",
border: "".concat(thickness, " solid"),
borderColor: "currentColor",
borderBottomColor: "transparent",
borderLeftColor: "transparent",
rounded: "full",
animation: "".concat(spin, " ").concat(speed, " linear infinite"),
size: _size
}, props), loadingText && jsx(VisuallyHidden, null, loadingText));
});
var spinCSS = function spinCSS(speed) {
return css(_templateObject2(), spin, speed || "1s");
};
export default Spinner;
/* Alt Spinner, just a lil more fancy :) */
export var Spinner2 = function Spinner2(_ref2) {
var _ref2$color = _ref2.color,
color = _ref2$color === void 0 ? "rgba(164, 164, 164, 1)" : _ref2$color,
_ref2$size = _ref2.size,
size = _ref2$size === void 0 ? "24px" : _ref2$size,
speed = _ref2.speed;
return jsx(Box, {
display: "inline-block"
}, jsx(Icon, {
color: color,
name: "spinner",
size: size,
css: spinCSS(speed)
}));
};