web / frontend /src /components /chat /ThinkingAnimation.tsx
Chandima Prabhath
update
978caa8
raw
history blame
1.63 kB
import { Brain } from "lucide-react";
import { useState, useEffect } from "react";
export const ThinkingAnimation = () => {
const [dots, setDots] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setDots((prev) => (prev + 1) % 4);
}, 400);
return () => clearInterval(interval);
}, []);
return (
<div className="flex items-center gap-2 px-4 py-1">
<div className="thinking-brain-svg relative flex items-center justify-center">
<Brain className="h-4 w-4 text-financial-accent" />
<div className="thinking-waves-enhanced flex items-center justify-center absolute inset-0">
<span className="block absolute border-4 border-financial-accent/20 bg-financial-accent/20 rounded-full animate-[ripple_1.5s_ease-out_infinite]"></span>
<span className="block absolute border-4 border-financial-accent/30 bg-financial-accent/20 rounded-full animate-[ripple_1.5s_ease-out_0.4s_infinite]"></span>
<span className="block absolute border-4 border-financial-accent/40 bg-financial-accent/20 rounded-full animate-[ripple_1.5s_ease-out_0.8s_infinite]"></span>
</div>
</div>
<span className="text-sm font-medium text-financial-accent flex items-center">
Thinking
<span className="thinking-dots-container ml-2">
{Array(3).fill(0).map((_, i) => (
<span
key={i}
className={`thinking-dot ${i <= dots ? 'thinking-dot-active bg-financial-accent' : 'bg-financial-accent/30'}`}
></span>
))}
</span>
</span>
</div>
);
};