EverydayTech Platform - Developer Reference
Complete Source Code Documentation - All Applications
Loading...
Searching...
No Matches
LoadingSpinner.tsx
Go to the documentation of this file.
1interface LoadingSpinnerProps {
2 size?: 'sm' | 'md' | 'lg';
3 text?: string;
4 fullPage?: boolean;
5}
6
7export default function LoadingSpinner({
8 size = 'md',
9 text = 'Loading...',
10 fullPage = false
11}: LoadingSpinnerProps) {
12 const sizeClasses = {
13 sm: 'h-6 w-6 border-2',
14 md: 'h-10 w-10 border-3',
15 lg: 'h-16 w-16 border-4'
16 };
17
18 const textSizeClasses = {
19 sm: 'text-sm',
20 md: 'text-base',
21 lg: 'text-lg'
22 };
23
24 const spinner = (
25 <div className="flex flex-col items-center justify-center gap-3">
26 <div className={`${sizeClasses[size]} border-brand border-t-transparent rounded-full animate-spin`}></div>
27 {text && (
28 <p className={`${textSizeClasses[size]} text-muted animate-pulse`}>{text}</p>
29 )}
30 </div>
31 );
32
33 if (fullPage) {
34 return (
35 <div className="fixed inset-0 bg-white/80 backdrop-blur-sm flex items-center justify-center z-50">
36 {spinner}
37 </div>
38 );
39 }
40
41 return spinner;
42}
43
44// Skeleton loader for cards/lists
45export function SkeletonCard() {
46 return (
47 <div className="bg-white rounded-lg border border-border p-6 animate-pulse">
48 <div className="h-4 bg-gray-200 rounded w-3/4 mb-4"></div>
49 <div className="h-3 bg-gray-200 rounded w-1/2 mb-2"></div>
50 <div className="h-3 bg-gray-200 rounded w-2/3"></div>
51 </div>
52 );
53}
54
55// Skeleton loader for table rows
56export function SkeletonRow() {
57 return (
58 <tr className="animate-pulse">
59 <td className="px-6 py-4">
60 <div className="h-4 bg-gray-200 rounded w-32"></div>
61 </td>
62 <td className="px-6 py-4">
63 <div className="h-4 bg-gray-200 rounded w-24"></div>
64 </td>
65 <td className="px-6 py-4">
66 <div className="h-4 bg-gray-200 rounded w-40"></div>
67 </td>
68 <td className="px-6 py-4">
69 <div className="h-4 bg-gray-200 rounded w-20"></div>
70 </td>
71 </tr>
72 );
73}
74
75// Skeleton loader for KPI cards
76export function SkeletonKPI() {
77 return (
78 <div className="bg-white p-4 rounded-lg border border-border animate-pulse">
79 <div className="h-8 bg-gray-200 rounded w-20 mb-2"></div>
80 <div className="h-3 bg-gray-200 rounded w-24"></div>
81 </div>
82 );
83}