39 lines
748 B
TypeScript
39 lines
748 B
TypeScript
"use client";
|
|
|
|
import { Loader2 } from "lucide-react";
|
|
import { cn } from "@/lib/utils";
|
|
|
|
interface LoadingSpinnerProps {
|
|
fullPage?: boolean;
|
|
size?: "sm" | "md" | "lg";
|
|
className?: string;
|
|
}
|
|
|
|
const sizeClasses = {
|
|
sm: "h-4 w-4",
|
|
md: "h-8 w-8",
|
|
lg: "h-12 w-12",
|
|
};
|
|
|
|
export function LoadingSpinner({
|
|
fullPage = false,
|
|
size = "md",
|
|
className,
|
|
}: LoadingSpinnerProps) {
|
|
const spinner = (
|
|
<Loader2
|
|
className={cn("animate-spin text-primary", sizeClasses[size], className)}
|
|
/>
|
|
);
|
|
|
|
if (fullPage) {
|
|
return (
|
|
<div className="min-h-screen flex items-center justify-center bg-muted/50">
|
|
{spinner}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return <div className="flex items-center justify-center p-8">{spinner}</div>;
|
|
}
|