43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
import styled, { keyframes } from 'styled-components';
|
|
|
|
const LoadingSpinnerKeyframes = keyframes`
|
|
0% {
|
|
transform: rotate(0deg);
|
|
}
|
|
100% {
|
|
transform: rotate(360deg);
|
|
}
|
|
`;
|
|
|
|
export const LoadingSpinnerWrapper = styled.div<{ color: string; size: string; borderSize: string; thickness: string }>`
|
|
display: inline-block;
|
|
position: relative;
|
|
width: ${props => props.borderSize};
|
|
height: ${props => props.borderSize};
|
|
|
|
& > div {
|
|
box-sizing: border-box;
|
|
display: block;
|
|
position: absolute;
|
|
width: ${props => props.size};
|
|
height: ${props => props.size};
|
|
margin: ${props => props.thickness};
|
|
border: ${props => props.thickness} solid ${props => props.theme.colors[props.color]};
|
|
border-radius: 50%;
|
|
animation: 1.2s ${LoadingSpinnerKeyframes} cubic-bezier(0.5, 0, 0.5, 1) infinite;
|
|
border-color: ${props => props.theme.colors[props.color]} transparent transparent transparent;
|
|
}
|
|
|
|
& > div:nth-child(1) {
|
|
animation-delay: -0.45s;
|
|
}
|
|
& > div:nth-child(2) {
|
|
animation-delay: -0.3s;
|
|
}
|
|
& > div:nth-child(3) {
|
|
animation-delay: -0.15s;
|
|
}
|
|
`;
|
|
|
|
export default LoadingSpinnerWrapper;
|