ppanel-web/packages/shadcn/src/components/ui/orbiting-circles.tsx
2024-11-14 01:22:43 +07:00

59 lines
1.3 KiB
TypeScript

import { cn } from '../../lib/utils';
export interface OrbitingCirclesProps {
className?: string;
children?: React.ReactNode;
reverse?: boolean;
duration?: number;
delay?: number;
radius?: number;
path?: boolean;
}
export default function OrbitingCircles({
className,
children,
reverse,
duration = 20,
delay = 10,
radius = 50,
path = true,
}: OrbitingCirclesProps) {
return (
<>
{path && (
<svg
xmlns='http://www.w3.org/2000/svg'
version='1.1'
className='pointer-events-none absolute inset-0 size-full'
>
<circle
className='stroke-black/10 stroke-1 dark:stroke-white/10'
cx='50%'
cy='50%'
r={radius}
fill='none'
/>
</svg>
)}
<div
style={
{
'--duration': duration,
'--radius': radius,
'--delay': -delay,
} as React.CSSProperties
}
className={cn(
'animate-orbit absolute flex size-full transform-gpu items-center justify-center rounded-full border bg-black/10 [animation-delay:calc(var(--delay)*1000ms)] dark:bg-white/10',
{ '[animation-direction:reverse]': reverse },
className,
)}
>
{children}
</div>
</>
);
}