"use client"
import React from "react"
import { cn } from "@/lib/utils"
import { Spinner } from "@/components/ui/spinner"
interface LoadingSpinnerProps {
size?: "sm" | "md" | "lg"
className?: string
}
/**
* 统一的加载动画组件
*
* 特性:
* - 三种尺寸:sm(16px), md(24px), lg(32px)
* - 支持自定义样式
* - 使用 Tailwind CSS 动画
*/
export function LoadingSpinner({ size = "sm", className }: LoadingSpinnerProps) {
const sizeMap = {
sm: "size-4",
md: "size-6",
lg: "size-8"
}
return
}
interface LoadingStateProps {
message?: string
size?: "sm" | "md" | "lg"
className?: string
}
/**
* 带文字的加载状态组件
*
* 用于页面级别的加载状态显示
*/
export function LoadingState({
message = "加载中...",
size = "md",
className
}: LoadingStateProps) {
const sizeMap = {
sm: "size-4",
md: "size-6",
lg: "size-8"
}
return (
)
}
interface LoadingOverlayProps {
isLoading: boolean
message?: string
children: React.ReactNode
}
/**
* 加载遮罩组件
*
* 在现有内容上显示加载遮罩
*/
export function LoadingOverlay({
isLoading,
message = "加载中...",
children
}: LoadingOverlayProps) {
return (
{children}
{isLoading && (
)}
)
}