Files
socweb/frontend/components/gemini/GeminiTypingIndicator.tsx
T
gongzhiyongandClaude Sonnet 4.6 04d8fbb740 refactor: 重组项目结构,前端收拢至 frontend/,新增 backend/ 目录
- 前端文件移入 frontend/ 子目录
- 新建 backend/ 目录(待开发)
- 新增 CLAUDE.md、claudehd.md、EXTERNAL_SERVICES.md

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 18:01:04 +08:00

36 lines
1.5 KiB
TypeScript

export function GeminiTypingIndicator() {
return (
<div className="flex gap-3 mb-6" aria-live="polite" aria-label="Gemini is thinking">
{/* Gem icon placeholder */}
<div className="w-[18px] h-[18px] flex-shrink-0 mt-0.5">
<svg width="18" height="18" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<defs>
<linearGradient id="gemGradientTyping" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stopColor="#4285f4" />
<stop offset="100%" stopColor="#a855f7" />
</linearGradient>
</defs>
<path
d="M14 2C14 2 16.5 9.5 20 13C23.5 16.5 26 14 26 14C26 14 23.5 16.5 20 20C16.5 23.5 14 26 14 26C14 26 11.5 23.5 8 20C4.5 16.5 2 14 2 14C2 14 4.5 11.5 8 8C11.5 4.5 14 2 14 2Z"
fill="url(#gemGradientTyping)"
/>
</svg>
</div>
<div className="flex items-center gap-1 pt-1">
<span
className="w-2 h-2 rounded-full bg-[#4285f4] animate-bounce"
style={{ animationDelay: "0ms", animationDuration: "900ms" }}
/>
<span
className="w-2 h-2 rounded-full bg-[#7c55f0] animate-bounce"
style={{ animationDelay: "150ms", animationDuration: "900ms" }}
/>
<span
className="w-2 h-2 rounded-full bg-[#a855f7] animate-bounce"
style={{ animationDelay: "300ms", animationDuration: "900ms" }}
/>
</div>
</div>
);
}