Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

Spinner.tsx 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import React from 'react';
  2. import { keyframes } from 'tss-react';
  3. import { makeStyles } from 'tss-react/mui';
  4. interface IProps {
  5. size?: 'small' | 'medium' | 'large';
  6. }
  7. const SIZE = {
  8. small: 16,
  9. medium: 24,
  10. large: 48
  11. };
  12. const useStyles = makeStyles()(() => {
  13. return {
  14. container: {
  15. verticalAlign: 'middle',
  16. opacity: 0,
  17. animation: `${keyframes`
  18. 0% {
  19. transform: rotate(50deg);
  20. opacity: 0;
  21. stroke-dashoffset: 60;
  22. }
  23. 100% {
  24. transform: rotate(230deg);
  25. opacity: 1;
  26. stroke-dashoffset: 50;
  27. }
  28. `} 1s forwards ease-in-out`
  29. },
  30. circle: {
  31. fill: 'none',
  32. stroke: '#E6EDFA',
  33. strokeWidth: 1.5,
  34. strokeLinecap: 'round',
  35. strokeDasharray: 60,
  36. strokeDashoffset: 'inherit',
  37. transformOrigin: 'center',
  38. animation: `${keyframes`
  39. 0% {
  40. transform: rotate(0);
  41. }
  42. 100% {
  43. transform: rotate(360deg);
  44. }
  45. `} 0.86s forwards infinite`,
  46. animationDelay: '0ms',
  47. animationTimingFunction: 'cubic-bezier(0.4, 0.15, 0.6, 0.85)'
  48. }
  49. };
  50. });
  51. const Spinner = ({ size = 'medium' }: IProps) => {
  52. const { classes } = useStyles();
  53. return (
  54. <svg
  55. className = { classes.container }
  56. focusable = 'false'
  57. height = { SIZE[size] }
  58. viewBox = '0 0 16 16'
  59. width = { SIZE[size] }
  60. xmlns = 'http://www.w3.org/2000/svg'>
  61. <circle
  62. className = { classes.circle }
  63. cx = '8'
  64. cy = '8'
  65. r = '7' />
  66. </svg>
  67. );
  68. };
  69. export default Spinner;