2025-01-05 11:56:02 +00:00
|
|
|
export const LoadingOverlay = ({
|
|
|
|
message = 'Loading...',
|
|
|
|
progress,
|
|
|
|
progressText,
|
|
|
|
}: {
|
|
|
|
message?: string;
|
|
|
|
progress?: number;
|
|
|
|
progressText?: string;
|
|
|
|
}) => {
|
2024-12-08 17:23:20 +00:00
|
|
|
return (
|
|
|
|
<div className="fixed inset-0 flex items-center justify-center bg-black/80 z-50 backdrop-blur-sm">
|
|
|
|
<div className="relative flex flex-col items-center gap-4 p-8 rounded-lg bg-bolt-elements-background-depth-2 shadow-lg">
|
|
|
|
<div
|
|
|
|
className={'i-svg-spinners:90-ring-with-bg text-bolt-elements-loader-progress'}
|
|
|
|
style={{ fontSize: '2rem' }}
|
|
|
|
></div>
|
|
|
|
<p className="text-lg text-bolt-elements-textTertiary">{message}</p>
|
2025-01-05 11:56:02 +00:00
|
|
|
{progress !== undefined && (
|
|
|
|
<div className="w-64 flex flex-col gap-2">
|
|
|
|
<div className="w-full h-2 bg-bolt-elements-background-depth-1 rounded-full overflow-hidden">
|
|
|
|
<div
|
|
|
|
className="h-full bg-bolt-elements-loader-progress transition-all duration-300 ease-out rounded-full"
|
|
|
|
style={{ width: `${Math.min(100, Math.max(0, progress))}%` }}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
{progressText && <p className="text-sm text-bolt-elements-textTertiary text-center">{progressText}</p>}
|
|
|
|
</div>
|
|
|
|
)}
|
2024-12-08 17:23:20 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
};
|