| import { cn } from '@/lib/utils'; | |
| import type { HTMLAttributes } from 'react'; | |
| type LoaderIconProps = { | |
| size?: number; | |
| }; | |
| const LoaderIcon = ({ size = 16 }: LoaderIconProps) => ( | |
| <svg | |
| height={size} | |
| strokeLinejoin="round" | |
| style={{ color: 'currentcolor' }} | |
| viewBox="0 0 16 16" | |
| width={size} | |
| > | |
| <title>Loader</title> | |
| <g clipPath="url(#clip0_2393_1490)"> | |
| <path d="M8 0V4" stroke="currentColor" strokeWidth="1.5" /> | |
| <path | |
| d="M8 16V12" | |
| opacity="0.5" | |
| stroke="currentColor" | |
| strokeWidth="1.5" | |
| /> | |
| <path | |
| d="M3.29773 1.52783L5.64887 4.7639" | |
| opacity="0.9" | |
| stroke="currentColor" | |
| strokeWidth="1.5" | |
| /> | |
| <path | |
| d="M12.7023 1.52783L10.3511 4.7639" | |
| opacity="0.1" | |
| stroke="currentColor" | |
| strokeWidth="1.5" | |
| /> | |
| <path | |
| d="M12.7023 14.472L10.3511 11.236" | |
| opacity="0.4" | |
| stroke="currentColor" | |
| strokeWidth="1.5" | |
| /> | |
| <path | |
| d="M3.29773 14.472L5.64887 11.236" | |
| opacity="0.6" | |
| stroke="currentColor" | |
| strokeWidth="1.5" | |
| /> | |
| <path | |
| d="M15.6085 5.52783L11.8043 6.7639" | |
| opacity="0.2" | |
| stroke="currentColor" | |
| strokeWidth="1.5" | |
| /> | |
| <path | |
| d="M0.391602 10.472L4.19583 9.23598" | |
| opacity="0.7" | |
| stroke="currentColor" | |
| strokeWidth="1.5" | |
| /> | |
| <path | |
| d="M15.6085 10.4722L11.8043 9.2361" | |
| opacity="0.3" | |
| stroke="currentColor" | |
| strokeWidth="1.5" | |
| /> | |
| <path | |
| d="M0.391602 5.52783L4.19583 6.7639" | |
| opacity="0.8" | |
| stroke="currentColor" | |
| strokeWidth="1.5" | |
| /> | |
| </g> | |
| <defs> | |
| <clipPath id="clip0_2393_1490"> | |
| <rect fill="white" height="16" width="16" /> | |
| </clipPath> | |
| </defs> | |
| </svg> | |
| ); | |
| export type LoaderProps = HTMLAttributes<HTMLDivElement> & { | |
| size?: number; | |
| }; | |
| export const Loader = ({ className, size = 16, ...props }: LoaderProps) => ( | |
| <div | |
| className={cn( | |
| 'inline-flex animate-spin items-center justify-center', | |
| className, | |
| )} | |
| {...props} | |
| > | |
| <LoaderIcon size={size} /> | |
| </div> | |
| ); | |