import type { ReactNode } from "react";
import { cn } from "./utils/cn.js";
/**
* Loading - 骨架屏 / 加载占位
*
* 用途:数据加载期间展示骨架屏,避免内容跳动。
*
* @example
* // 默认 3 行骨架
* // 5 行骨架
* // 旋转图标
*/
export interface LoadingProps {
/** 骨架行数(variant="skeleton" 时生效) */
lines?: number;
/** 展示形态 */
variant?: "skeleton" | "spinner";
/** 自定义类名 */
className?: string;
/** aria-label(无障碍) */
ariaLabel?: string;
}
export function Loading({
lines = 3,
variant = "skeleton",
className,
ariaLabel = "加载中",
}: LoadingProps): ReactNode {
if (variant === "spinner") {
return (
{ariaLabel}
);
}
return (
{Array.from({ length: lines }, (_, i) => (
))}
{ariaLabel}
);
}