35 lines
782 B
TypeScript
35 lines
782 B
TypeScript
|
|
import { Loader2 } from 'lucide-react'
|
||
|
|
import { cn } from '@/lib/utils'
|
||
|
|
|
||
|
|
interface LoadingSpinnerProps {
|
||
|
|
size?: 'sm' | 'md' | 'lg'
|
||
|
|
className?: string
|
||
|
|
}
|
||
|
|
|
||
|
|
export function LoadingSpinner({ size = 'md', className }: LoadingSpinnerProps) {
|
||
|
|
const sizeClasses = {
|
||
|
|
sm: 'h-4 w-4',
|
||
|
|
md: 'h-6 w-6',
|
||
|
|
lg: 'h-8 w-8',
|
||
|
|
}
|
||
|
|
|
||
|
|
return (
|
||
|
|
<Loader2
|
||
|
|
className={cn('animate-spin text-primary', sizeClasses[size], className)}
|
||
|
|
/>
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
interface FullPageLoaderProps {
|
||
|
|
text?: string
|
||
|
|
}
|
||
|
|
|
||
|
|
export function FullPageLoader({ text = 'Loading...' }: FullPageLoaderProps) {
|
||
|
|
return (
|
||
|
|
<div className="flex min-h-[400px] flex-col items-center justify-center gap-4">
|
||
|
|
<LoadingSpinner size="lg" />
|
||
|
|
<p className="text-sm text-muted-foreground">{text}</p>
|
||
|
|
</div>
|
||
|
|
)
|
||
|
|
}
|