File size: 1,228 Bytes
4fb0ce9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import { useState, useEffect } from "react";
import { Brain, ChevronDown } from "lucide-react";
interface ReasoningBlockProps {
reasoning: string;
isThinking: boolean;
thinkingSeconds: number;
}
export function ReasoningBlock({
reasoning,
isThinking,
thinkingSeconds,
}: ReasoningBlockProps) {
const [open, setOpen] = useState(isThinking);
useEffect(() => {
setOpen(isThinking);
}, [isThinking]);
return (
<div className="mb-3">
<button
onClick={() => setOpen((v) => !v)}
className="flex items-center gap-2 text-xs text-[#6d6d6d] hover:text-black transition-colors cursor-pointer"
>
<Brain className="h-3.5 w-3.5" />
{isThinking ? (
<span className="thinking-shimmer font-medium">Thinking…</span>
) : (
<span>Thought for {thinkingSeconds}s</span>
)}
<ChevronDown
className={`h-3 w-3 transition-transform duration-200 ${open ? "" : "-rotate-90"}`}
/>
</button>
{open && (
<div className="mt-2 rounded-lg border border-[#0000001f] bg-[#f5f5f5] px-3 py-2 text-xs text-[#6d6d6d] whitespace-pre-wrap">
{reasoning.trim()}
</div>
)}
</div>
);
}
|