import { useEffect, useRef, useState } from "react" import { useTranslation } from "react-i18next" import { useExtensionState } from "@src/context/ExtensionStateContext" import MarkdownBlock from "../common/MarkdownBlock" import { Lightbulb, ChevronUp } from "lucide-react" import { cn } from "@/lib/utils" interface ReasoningBlockProps { content: string ts: number isStreaming: boolean isLast: boolean metadata?: any } export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockProps) => { const { t } = useTranslation() const { reasoningBlockCollapsed } = useExtensionState() const [isCollapsed, setIsCollapsed] = useState(reasoningBlockCollapsed) const startTimeRef = useRef(Date.now()) const [elapsed, setElapsed] = useState(0) const contentRef = useRef(null) useEffect(() => { setIsCollapsed(reasoningBlockCollapsed) }, [reasoningBlockCollapsed]) useEffect(() => { if (isLast && isStreaming) { const tick = () => setElapsed(Date.now() - startTimeRef.current) tick() const id = setInterval(tick, 1000) return () => clearInterval(id) } }, [isLast, isStreaming]) const seconds = Math.floor(elapsed / 1000) const secondsLabel = t("chat:reasoning.seconds", { count: seconds }) const handleToggle = () => { setIsCollapsed(!isCollapsed) } return (
{t("chat:reasoning.thinking")} {elapsed > 0 && ( {secondsLabel} )}
{(content?.trim()?.length ?? 0) > 0 && !isCollapsed && (
)}
) }