Spaces:
Sleeping
Sleeping
| export const LoadingOverlay = ({ | |
| message = 'Loading...', | |
| progress, | |
| progressText, | |
| }: { | |
| message?: string; | |
| progress?: number; | |
| progressText?: string; | |
| }) => { | |
| 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> | |
| {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> | |
| )} | |
| </div> | |
| </div> | |
| ); | |
| }; | |