import { useState } from 'react' import type { SessionEvent } from '../../../api/types/session' function truncate(s: string, n: number): string { return s.length > n ? s.slice(0, n) + '…' : s } interface Props { event: SessionEvent defaultCollapsed: boolean } export function EventBlock({ event, defaultCollapsed }: Props) { const [collapsed, setCollapsed] = useState(defaultCollapsed) const base = 'rounded border px-3 py-2 my-1 text-sm' switch (event.type) { case 'user': if (event.tool_result !== null && event.tool_result !== undefined) { return (
{!collapsed && (
                {typeof event.tool_result === 'string' ? event.tool_result : JSON.stringify(event.tool_result, null, 2)}
              
)}
) } return (
user
{event.text ?? '—'}
) case 'assistant': if (event.tool_name) { return (
{!collapsed && event.tool_input && (
                {JSON.stringify(event.tool_input, null, 2)}
              
)}
) } return (
assistant
{truncate(event.text ?? '—', collapsed ? 300 : Number.MAX_SAFE_INTEGER)}
{(event.text?.length ?? 0) > 300 && ( )}
) case 'system': return (
{!collapsed &&
{event.text ?? JSON.stringify(event.raw)}
}
) case 'attachment': return (
📎 attachment
) default: return (
{event.type}
) } }