({
part,
isThinkingComplete,
textPartRenderer,
thinkingPartRenderer,
toolsRenderer,
defaultToolRenderer,
toolResultRenderer,
}: {
part: UIMessage['parts'][number]
isThinkingComplete?: boolean
textPartRenderer?: ChatMessageProps['textPartRenderer']
thinkingPartRenderer?: ChatMessageProps['thinkingPartRenderer']
toolsRenderer?: ChatMessageProps['toolsRenderer']
defaultToolRenderer?: ChatMessageProps['defaultToolRenderer']
toolResultRenderer?: ChatMessageProps['toolResultRenderer']
})
| 137 | } |
| 138 | |
| 139 | function MessagePart({ |
| 140 | part, |
| 141 | isThinkingComplete, |
| 142 | textPartRenderer, |
| 143 | thinkingPartRenderer, |
| 144 | toolsRenderer, |
| 145 | defaultToolRenderer, |
| 146 | toolResultRenderer, |
| 147 | }: { |
| 148 | part: UIMessage['parts'][number] |
| 149 | isThinkingComplete?: boolean |
| 150 | textPartRenderer?: ChatMessageProps['textPartRenderer'] |
| 151 | thinkingPartRenderer?: ChatMessageProps['thinkingPartRenderer'] |
| 152 | toolsRenderer?: ChatMessageProps['toolsRenderer'] |
| 153 | defaultToolRenderer?: ChatMessageProps['defaultToolRenderer'] |
| 154 | toolResultRenderer?: ChatMessageProps['toolResultRenderer'] |
| 155 | }) { |
| 156 | // Text part |
| 157 | if (part.type === 'text') { |
| 158 | if (textPartRenderer) { |
| 159 | return <>{textPartRenderer({ content: part.content })}</> |
| 160 | } |
| 161 | return ( |
| 162 | <div data-part-type="text" data-part-content> |
| 163 | {part.content} |
| 164 | </div> |
| 165 | ) |
| 166 | } |
| 167 | |
| 168 | // Thinking part |
| 169 | if (part.type === 'thinking') { |
| 170 | if (thinkingPartRenderer) { |
| 171 | return ( |
| 172 | <> |
| 173 | {thinkingPartRenderer({ |
| 174 | content: part.content, |
| 175 | isComplete: isThinkingComplete, |
| 176 | })} |
| 177 | </> |
| 178 | ) |
| 179 | } |
| 180 | return ( |
| 181 | <ThinkingPart content={part.content} isComplete={isThinkingComplete} /> |
| 182 | ) |
| 183 | } |
| 184 | |
| 185 | // Tool call part |
| 186 | if (part.type === 'tool-call') { |
| 187 | const toolProps: ToolCallRenderProps = { |
| 188 | id: part.id, |
| 189 | name: part.name, |
| 190 | arguments: part.arguments, |
| 191 | state: part.state, |
| 192 | approval: part.approval, |
| 193 | output: part.output, |
| 194 | } |
| 195 | |
| 196 | // Check if there's a specific renderer for this tool |
nothing calls this directly
no test coverage detected