@coin-voyage/paykit
Version:
Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.
80 lines (71 loc) • 1.92 kB
JavaScript
import { motion } from "framer-motion";
import { ErrorIcon as ErrorIconSVG, LoadingCircleIcon, TickIcon } from "../../../assets/icons";
import styled from "../../../styles/styled/index";
const AnimationContainer = styled(motion.div) `
position: relative;
width: 100px;
height: 100px;
transition: transform 0.5s ease-in-out;
margin-bottom: 16px;
`;
const InsetContainer = styled(motion.div) `
position: absolute;
overflow: hidden;
inset: 6px;
border-radius: 50px;
background: var(--ck-body-background);
display: flex;
align-items: center;
justify-content: center;
svg {
position: absolute;
width: 100%;
height: 100%;
}
`;
const Link = styled.a `
display: flex;
gap: 0.5rem;
align-items: center;
color: var(--ck-body-color);
text-decoration: none;
&:hover {
color: var(--ck-body-color-muted);
}
`;
const SuccessIcon = styled(TickIcon) `
color: var(--ck-body-color-valid);
transition: all 0.2s ease-in-out;
position: absolute;
opacity: ${(props) => (props.$status ? 1 : 0)};
transform: scale(${(p) => (p.$status ? 1 : 0.5)});
`;
const ErrorIcon = styled(ErrorIconSVG) `
color: var(--ck-body-color-danger);
transition: all 0.2s ease-in-out;
position: absolute;
opacity: ${(props) => (props.$status ? 1 : 0)};
transform: scale(${(p) => (p.$status ? 1 : 0.5)});
`;
const Spinner = styled(LoadingCircleIcon) `
position: absolute;
opacity: ${(p) => (p.$status ? 1 : 0)};
pointer-events: none;
transition:
opacity 0.2s ease-in-out,
transform 0.2s ease-in-out;
transform: scale(${(p) => (p.$status ? 1 : 0.5)});
${(p) => p.$status &&
`
animation: rotateSpinner 400ms linear infinite;
`}
@keyframes rotateSpinner {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
`;
export { AnimationContainer, ErrorIcon, InsetContainer, Link, Spinner, SuccessIcon };