Initial commit: MOPC platform with Docker deployment setup
Full Next.js 15 platform with tRPC, Prisma, PostgreSQL, NextAuth. Includes production Dockerfile (multi-stage, port 7600), docker-compose with registry-based image pull, Gitea Actions CI workflow, nginx config for portal.monaco-opc.com, deployment scripts, and DEPLOYMENT.md guide. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
34
src/components/shared/loading-spinner.tsx
Normal file
34
src/components/shared/loading-spinner.tsx
Normal file
@@ -0,0 +1,34 @@
|
||||
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>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user