ppt-tool/frontend/app/(presentation-generator)/presentation/components/LoadingState.tsx
Vadym Samoilenko 69a8829750 Phase 3: Bug fixes, feature enhancements, and polish
P0 Critical: presentation isolation (client scoping), storage super_admin fix,
template selection in worker, IMAGE_PROVIDERS list fix.

P1 High: template layout management UI (delete/filter/bulk), slide-based parsing
mode, LLM model listing & connection test, settings persistence to DB (Fernet
encryption), logout button.

P2 Polish: storage improvements (master deck files, per-client breakdown, bulk
delete, hard purge, client selector), image generation error visibility
(__image_error__ badge), hamster wheel loading animation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 12:58:52 +00:00

50 lines
No EOL
2.1 KiB
TypeScript

import React, { useState, useEffect } from 'react';
import { HamsterLoader } from '@/components/ui/hamster-loader';
const LoadingState = () => {
const [currentTipIndex, setCurrentTipIndex] = useState(0);
const tips = [
"We're crafting your presentation with AI magic ✨",
"Analyzing your content for perfect slides 📊",
"Organizing information for maximum impact 🎯",
"Adding visual elements to engage your audience 🎨",
"Almost there! Putting final touches ⚡️"
];
useEffect(() => {
const interval = setInterval(() => {
setCurrentTipIndex((prev) => (prev + 1) % tips.length);
}, 30000);
return () => clearInterval(interval);
}, []);
return (
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 mx-auto w-[500px] flex flex-col items-center justify-center p-8">
<div className="w-full bg-white rounded-xl p-[2px] ">
<div className="bg-white rounded-xl p-6 w-full">
<div className="flex flex-col items-center justify-center space-y-4 mb-4">
<HamsterLoader size="lg" />
<h2 className="text-2xl font-semibold text-gray-800">Creating Your Presentation</h2>
</div>
<div className="w-full max-w-md bg-white/80 backdrop-blur-sm rounded-xl shadow-sm p-6 mb-4">
<div className="min-h-[120px] flex items-center justify-center">
<p className="text-gray-700 text-lg text-center">
{tips[currentTipIndex]}
</p>
</div>
</div>
<div className="w-full max-w-md">
<div className="h-2 bg-gray-200 rounded-full overflow-hidden">
<div className="h-full bg-[#5141e5] rounded-full animate-progress" />
</div>
</div>
</div>
</div>
</div>
);
};
export default LoadingState;