import { Spin } from "antd";
import { ReactNode } from "react";
interface GlobalLoadProps {
/** 是否显示加载状态 */
show: boolean;
/** 子元素内容 */
children?: ReactNode;
/** 进度条数值 0-100,非必须 */
progress?: number;
/** 旋转圆环直径,非必须 */
spinnerDiameter?: number;
/** 进度条宽度,非必须 */
progressWidth?: number;
/** 是否显示旋转圆圈,默认显示 */
showSpinner?: boolean;
}
/**
* 全局加载组件,支持标签包裹形式渲染子元素
* @param props - 组件属性
* @returns 加载组件
*/
export default function GlobalLoad({
show,
children=<>>,
progress,
spinnerDiameter,
progressWidth,
showSpinner = true,
}: GlobalLoadProps) {
if (!show) {
return <>{children}>;
}
// 自定义加载图标:组合两个组件
const customIndicator = (
{showSpinner && }
{Boolean(progress) && }
);
return (
{children}
);
}
/**
* Tailwind CSS loading spinner component for global loading overlay.
* @param diameter - Diameter of the spinner in pixels
* @returns {JSX.Element} - Spinner visual.
*/
export const TailwindSpinner = ({ diameter = 50 }: { diameter?: number }) => {
const radius = diameter / 2;
return (
{/* 主旋转圆环 */}
{/* 背景模糊圆环 */}
{/* 自定义动画关键帧 */}
);
};
/**
* Tailwind CSS linear progress bar loader with animated light sweep.
* @param progress - Progress value from 0 to 100
* @param width - Width of the progress bar in pixels
* @returns {JSX.Element} - Linear loader visual.
*/
export const TailwindLinearLoader = ({
progress,
width = 160
}: {
progress: number;
width?: number;
}) => (
{/* Animated light sweep - position controlled by progress */}
{/* Keyframes for light sweep - no longer needed since position is controlled by progress */}
);