import React, { useMemo } from 'react'
import { ApplyStatus, ToolArgs } from '../../types/apply'
import {
ParsedMsgBlock,
parseMsgBlocks,
} from '../../utils/parse-infio-block'
import MarkdownApplyDiffBlock from './Markdown/MarkdownApplyDiffBlock'
import MarkdownDataviewQueryBlock from './Markdown/MarkdownDataviewQueryBlock'
import MarkdownEditFileBlock from './Markdown/MarkdownEditFileBlock'
import MarkdownFetchUrlsContentBlock from './Markdown/MarkdownFetchUrlsContentBlock'
import MarkdownListFilesBlock from './Markdown/MarkdownListFilesBlock'
import MarkdownManageFilesBlock from './Markdown/MarkdownManageFilesBlock'
import MarkdownMatchSearchFilesBlock from './Markdown/MarkdownMatchSearchFilesBlock'
import MarkdownReadFileBlock from './Markdown/MarkdownReadFileBlock'
import MarkdownReasoningBlock from './Markdown/MarkdownReasoningBlock'
import MarkdownRegexSearchFilesBlock from './Markdown/MarkdownRegexSearchFilesBlock'
import MarkdownSearchAndReplace from './Markdown/MarkdownSearchAndReplace'
import MarkdownSearchWebBlock from './Markdown/MarkdownSearchWebBlock'
import MarkdownSemanticSearchFilesBlock from './Markdown/MarkdownSemanticSearchFilesBlock'
import MarkdownSwitchModeBlock from './Markdown/MarkdownSwitchModeBlock'
import MarkdownToolResult from './Markdown/MarkdownToolResult'
import MarkdownTransformationToolBlock from './Markdown/MarkdownTransformationToolBlock'
import MarkdownWithIcons from './Markdown/MarkdownWithIcon'
import RawMarkdownBlock from './Markdown/RawMarkdownBlock'
import UseMcpToolBlock from './Markdown/UseMcpToolBlock'
function ReactMarkdown({
applyStatus,
onApply,
children,
}: {
applyStatus: ApplyStatus
onApply: (toolArgs: ToolArgs) => void
children: string
}) {
const blocks: ParsedMsgBlock[] = useMemo(
() => parseMsgBlocks(children),
[children],
)
return (
<>
{blocks.map((block, index) =>
block.type === 'think' ? (
) : block.type === 'thinking' ? (
) : block.type === 'write_to_file' ? (
{block.content}
) : block.type === 'insert_content' ? (
{block.content}
) : block.type === 'search_and_replace' ? (
({
search: op.search,
replace: op.replace,
startLine: op.start_line,
endLine: op.end_line,
useRegex: op.use_regex,
ignoreCase: op.ignore_case,
regexFlags: op.regex_flags,
}))}
finish={block.finish}
/>
) : block.type === 'apply_diff' ? (
) : block.type === 'read_file' ? (
) : block.type === 'list_files' ? (
) : block.type === 'match_search_files' ? (
) : block.type === 'regex_search_files' ? (
) : block.type === 'semantic_search_files' ? (
) : block.type === 'attempt_completion' ? (
) : block.type === 'ask_followup_question' ? (
) : block.type === 'switch_mode' ? (
) : block.type === 'search_web' ? (
) : block.type === 'fetch_urls_content' ? (
) : block.type === 'use_mcp_tool' ? (
) : block.type === 'dataview_query' ? (
) : block.type === 'call_transformations' ? (
) : block.type === 'manage_files' ? (
) : block.type === 'tool_result' ? (
) : (
),
)}
>
)
}
export default React.memo(ReactMarkdown)