UNPKG

@particle-network/connectkit

Version:
8 lines (7 loc) 8.19 kB
{ "version": 3, "sources": ["../../src/components/circleSpinner/styles.ts", "../../src/components/circleSpinner/index.tsx"], "sourcesContent": ["import { motion } from 'framer-motion';\nimport { css, styled } from 'styled-components';\n\ninterface LogoContainerProps {\n width?: number;\n height?: number;\n}\nexport const LogoContainer = styled(motion.div)<LogoContainerProps>`\n z-index: 4;\n position: relative;\n width: ${(props) => props.width ?? 60}px;\n height: ${(props) => props.height ?? 60}px;\n svg {\n z-index: 3;\n position: relative;\n display: block;\n }\n`;\n\nexport const Logo = styled(motion.div)<{ $small?: boolean; inset?: number }>`\n z-index: 2;\n position: absolute;\n overflow: hidden;\n inset: ${(props) => props.inset ?? 6}px;\n border-radius: 50px;\n background: var(--pcm-body-background);\n display: flex;\n align-items: center;\n justify-content: center;\n svg,\n img {\n pointer-events: none;\n display: block;\n margin: 0 auto;\n width: 100%;\n height: 100%;\n ${(props) =>\n props.$small &&\n css`\n width: 85%;\n height: 85%;\n `}\n }\n`;\n\nexport const SpinnerContainer = styled(motion.div)`\n position: absolute;\n inset: -5px;\n`;\nexport const ExpiringSpinner = styled(motion.div)`\n pointer-events: none;\n user-select: none;\n z-index: 1;\n position: absolute;\n inset: -25%;\n background: var(--pcm-body-background);\n div:first-child {\n position: absolute;\n left: 50%;\n right: 0;\n top: 0;\n bottom: 0;\n overflow: hidden;\n &:before {\n position: absolute;\n content: '';\n inset: 0;\n background: var(--pcm-accent-color);\n transform-origin: 0% 50%;\n animation: rotateExpiringSpinner 5000ms ease-in both;\n }\n }\n div:last-child {\n position: absolute;\n left: 0;\n right: 50%;\n top: 0;\n bottom: 0;\n overflow: hidden;\n &:before {\n position: absolute;\n content: '';\n inset: 0;\n background: var(--pcm-accent-color);\n transform-origin: 100% 50%;\n animation: rotateExpiringSpinner 5000ms ease-out 5000ms both;\n }\n }\n @keyframes rotateExpiringSpinner {\n 0% {\n transform: rotate(-180deg);\n }\n 100% {\n transform: rotate(0deg);\n }\n }\n`;\nexport const Spinner = styled(motion.div)`\n pointer-events: none;\n user-select: none;\n z-index: 1;\n position: absolute;\n inset: 0;\n svg {\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n animation: rotateSpinner 1200ms linear infinite;\n }\n @keyframes rotateSpinner {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n", "import { AnimatePresence } from 'framer-motion';\nimport React from 'react';\nimport { ExpiringSpinner, Logo, LogoContainer, Spinner, SpinnerContainer } from './styles';\n\nconst CircleSpinner = ({\n logo,\n smallLogo,\n connecting = true,\n unavailable = false,\n countdown = false,\n width = 60,\n height = 60,\n inset = 4,\n}: {\n logo?: React.ReactNode;\n smallLogo?: boolean;\n connecting?: boolean;\n unavailable?: boolean;\n countdown?: boolean;\n width?: number;\n height?: number;\n inset?: number;\n}) => {\n return (\n <LogoContainer transition={{ duration: 0.5, ease: [0.175, 0.885, 0.32, 0.98] }} width={width} height={height}>\n <Logo\n $small={!unavailable && smallLogo}\n style={{\n background: 'none',\n ...(unavailable ? { borderRadius: 0 } : {}),\n }}\n inset={inset}\n >\n {logo}\n </Logo>\n <SpinnerContainer>\n <AnimatePresence>\n {connecting && (\n <Spinner\n key='Spinner'\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{\n opacity: 0,\n transition: {\n duration: countdown ? 1 : 0,\n },\n }}\n >\n <svg\n aria-hidden='true'\n width={width + 2}\n height={height + 2}\n viewBox='0 0 102 102'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M52 100C24.3858 100 2 77.6142 2 50'\n stroke='url(#paint0_linear_1943_4139)'\n strokeWidth='3.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <defs>\n <linearGradient\n id='paint0_linear_1943_4139'\n x1='2'\n y1='48.5'\n x2='53'\n y2='100'\n gradientUnits='userSpaceOnUse'\n >\n <stop stopColor='var(--pcm-accent-color)' />\n <stop offset='1' stopColor='var(--pcm-accent-color)' stopOpacity='0' />\n </linearGradient>\n </defs>\n </svg>\n </Spinner>\n )}\n {countdown && (\n <ExpiringSpinner\n key='ExpiringSpinner'\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.25 }}\n >\n <div />\n <div />\n </ExpiringSpinner>\n )}\n </AnimatePresence>\n </SpinnerContainer>\n </LogoContainer>\n );\n};\n\nexport default CircleSpinner;\n"], "mappings": "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", "names": [] }