mirror of
https://github.com/revoltchat/revite.git
synced 2024-11-26 17:10:57 -05:00
8a104855a1
Move more border radiuses to variables.
103 lines
2 KiB
TypeScript
103 lines
2 KiB
TypeScript
import styled, { keyframes } from "styled-components";
|
|
|
|
const skSpinner = keyframes`
|
|
0%, 80%, 100% {
|
|
-webkit-transform: scale(0);
|
|
transform: scale(0);
|
|
}
|
|
40% {
|
|
-webkit-transform: scale(1.0);
|
|
transform: scale(1.0);
|
|
}
|
|
`;
|
|
|
|
const prRing = keyframes`
|
|
0% {
|
|
transform: rotate(0deg);
|
|
}
|
|
100% {
|
|
transform: rotate(360deg);
|
|
}
|
|
`;
|
|
|
|
const PreloaderBase = styled.div`
|
|
width: 100%;
|
|
height: 100%;
|
|
|
|
display: grid;
|
|
place-items: center;
|
|
|
|
.spinner {
|
|
width: 58px;
|
|
display: flex;
|
|
text-align: center;
|
|
margin: 100px auto 0;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.spinner > div {
|
|
width: 14px;
|
|
height: 14px;
|
|
background-color: var(--tertiary-foreground);
|
|
|
|
border-radius: 100%;
|
|
display: inline-block;
|
|
animation: ${skSpinner} 1.4s infinite ease-in-out both;
|
|
}
|
|
|
|
.spinner div:nth-child(1) {
|
|
animation-delay: -0.32s;
|
|
}
|
|
|
|
.spinner div:nth-child(2) {
|
|
animation-delay: -0.16s;
|
|
}
|
|
|
|
.ring {
|
|
display: inline-block;
|
|
position: relative;
|
|
width: 48px;
|
|
height: 52px;
|
|
}
|
|
|
|
.ring div {
|
|
width: 32px;
|
|
margin: 8px;
|
|
height: 32px;
|
|
display: block;
|
|
position: absolute;
|
|
box-sizing: border-box;
|
|
border: 2px solid #fff;
|
|
border-radius: var(--border-radius-half);
|
|
animation: ${prRing} 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
|
|
border-color: #fff transparent transparent transparent;
|
|
}
|
|
|
|
.ring div:nth-child(1) {
|
|
animation-delay: -0.45s;
|
|
}
|
|
|
|
.ring div:nth-child(2) {
|
|
animation-delay: -0.3s;
|
|
}
|
|
|
|
.ring div:nth-child(3) {
|
|
animation-delay: -0.15s;
|
|
}
|
|
`;
|
|
|
|
interface Props {
|
|
type: "spinner" | "ring";
|
|
}
|
|
|
|
export default function Preloader({ type }: Props) {
|
|
return (
|
|
<PreloaderBase>
|
|
<div class={type}>
|
|
<div />
|
|
<div />
|
|
<div />
|
|
</div>
|
|
</PreloaderBase>
|
|
);
|
|
}
|