'use client'; import { Shield, BookOpen, Heart, Brain, Sparkles } from 'lucide-react'; interface ThinkingIndicatorProps { activeAgent?: string; stage?: 'routing' | 'thinking' | 'responding'; } const agentConfig: Record = { Gatekeeper: { icon: Shield, color: 'purple', label: 'Gatekeeper', description: 'Analyzing your intent...', }, Theologian: { icon: BookOpen, color: 'blue', label: 'Theologian', description: 'Consulting Scripture...', }, Healer: { icon: Heart, color: 'rose', label: 'Healer', description: 'Preparing pastoral care...', }, Orchestrator: { icon: Brain, color: 'amber', label: 'Orchestrator', description: 'Coordinating response...', }, System: { icon: Sparkles, color: 'neutral', label: 'System', description: 'Processing...', }, }; const colorClasses: Record = { purple: { bg: 'bg-purple-500/20', border: 'border-purple-500/40', text: 'text-purple-400', glow: 'shadow-[0_0_20px_rgba(168,85,247,0.4)]', pulse: 'bg-purple-400', }, blue: { bg: 'bg-blue-500/20', border: 'border-blue-500/40', text: 'text-blue-400', glow: 'shadow-[0_0_20px_rgba(59,130,246,0.4)]', pulse: 'bg-blue-400', }, rose: { bg: 'bg-rose-500/20', border: 'border-rose-500/40', text: 'text-rose-400', glow: 'shadow-[0_0_20px_rgba(244,63,94,0.4)]', pulse: 'bg-rose-400', }, amber: { bg: 'bg-amber-500/20', border: 'border-amber-500/40', text: 'text-amber-400', glow: 'shadow-[0_0_20px_rgba(245,158,11,0.4)]', pulse: 'bg-amber-400', }, neutral: { bg: 'bg-neutral-500/20', border: 'border-neutral-500/40', text: 'text-neutral-400', glow: 'shadow-[0_0_20px_rgba(163,163,163,0.4)]', pulse: 'bg-neutral-400', }, }; export default function ThinkingIndicator({ activeAgent = 'Gatekeeper', stage = 'thinking' }: ThinkingIndicatorProps) { const agent = agentConfig[activeAgent] || agentConfig.System; const colors = colorClasses[agent.color] || colorClasses.neutral; const Icon = agent.icon; return (
{/* Agent Icon with Pulsing Rings */}
{/* Sonar rings */}
{/* Thinking Content */}
{/* Agent Badge */}
{agent.label}
{stage === 'routing' ? 'Routing' : stage === 'responding' ? 'Generating' : 'Thinking'}
{/* Animated Thinking Dots */}
{agent.description}
{/* Swarm Activity Indicator */}
Swarm Activity
{Object.entries(agentConfig).slice(0, 4).map(([name, config]) => { const isActive = name === activeAgent; const agentColors = colorClasses[config.color]; return (
{name.slice(0, 4)}
); })}
); }