@primer/react
Version:
An implementation of GitHub's Primer Design System using React
90 lines (84 loc) • 3.08 kB
JavaScript
'use strict';
var React = require('react');
var styled = require('styled-components');
var sx = require('../sx.js');
var VisuallyHidden = require('../VisuallyHidden/VisuallyHidden.js');
require('@primer/behaviors/utils');
require('@primer/behaviors');
var useId = require('../hooks/useId.js');
var Spinner_module = require('./Spinner.module.css.js');
var clsx = require('clsx');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var React__default = /*#__PURE__*/_interopDefault(React);
var styled__default = /*#__PURE__*/_interopDefault(styled);
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
const sizeMap = {
small: '16px',
medium: '32px',
large: '64px'
};
function Spinner({
size: sizeKey = 'medium',
srText = 'Loading',
'aria-label': ariaLabel,
className,
style,
...props
}) {
const size = sizeMap[sizeKey];
const hasHiddenLabel = srText !== null && ariaLabel === undefined;
const labelId = useId.useId();
return /*#__PURE__*/ /* inline-flex removes the extra line height */React__default.default.createElement("span", {
className: Spinner_module.Box
}, /*#__PURE__*/React__default.default.createElement("svg", _extends({
height: size,
width: size,
viewBox: "0 0 16 16",
fill: "none",
"aria-hidden": true,
"aria-label": ariaLabel !== null && ariaLabel !== undefined ? ariaLabel : undefined,
"aria-labelledby": hasHiddenLabel ? labelId : undefined,
className: className,
style: style
}, props), /*#__PURE__*/React__default.default.createElement("circle", {
cx: "8",
cy: "8",
r: "7",
stroke: "currentColor",
strokeOpacity: "0.25",
strokeWidth: "2",
vectorEffect: "non-scaling-stroke"
}), /*#__PURE__*/React__default.default.createElement("path", {
d: "M15 8a7.002 7.002 0 00-7-7",
stroke: "currentColor",
strokeWidth: "2",
strokeLinecap: "round",
vectorEffect: "non-scaling-stroke"
})), hasHiddenLabel ? /*#__PURE__*/React__default.default.createElement(VisuallyHidden.VisuallyHidden, {
id: labelId
}, srText) : null);
}
Spinner.displayName = "Spinner";
const StyledBaseSpinner = styled__default.default.div.withConfig({
displayName: "Spinner__StyledBaseSpinner",
componentId: "sc-1knt686-0"
})(["", ""], sx.default);
function StyledSpinner({
sx,
className,
...props
}) {
if (sx) {
return /*#__PURE__*/React__default.default.createElement(StyledBaseSpinner, _extends({
sx: sx,
as: Spinner,
className: clsx.clsx(className, Spinner_module.SpinnerAnimation)
}, props));
}
return /*#__PURE__*/React__default.default.createElement(Spinner, _extends({
className: clsx.clsx(className, Spinner_module.SpinnerAnimation)
}, props));
}
StyledSpinner.displayName = "StyledSpinner";
StyledSpinner.displayName = 'Spinner';
module.exports = StyledSpinner;