diff --git a/src/frontend/src/lib/components/ChatInterface.svelte b/src/frontend/src/lib/components/ChatInterface.svelte index b930a09..c97ce88 100644 --- a/src/frontend/src/lib/components/ChatInterface.svelte +++ b/src/frontend/src/lib/components/ChatInterface.svelte @@ -1,7 +1,7 @@
@@ -121,7 +133,7 @@ {:else if segment.type === 'list' && segment.items} {:else if segment.type === 'table' && segment.headers && segment.rows} diff --git a/src/frontend/src/lib/utils/markdown.ts b/src/frontend/src/lib/utils/markdown.ts index 193490d..783bdee 100644 --- a/src/frontend/src/lib/utils/markdown.ts +++ b/src/frontend/src/lib/utils/markdown.ts @@ -134,6 +134,19 @@ function parseInlineElements(text: string): InlineSegment[] { return segments; } +// Render inline segments to HTML string +function renderInlineSegments(segments: InlineSegment[]): string { + return segments.map(seg => { + switch (seg.type) { + case 'bold': return `${seg.content}`; + case 'italic': return `${seg.content}`; + case 'code': return `${seg.content}`; + case 'link': return `${seg.content}`; + default: return seg.content; + } + }).join(''); +} + function parseLines(text: string): ParsedSegment[] { const segments: ParsedSegment[] = []; @@ -160,12 +173,16 @@ function parseLines(text: string): ParsedSegment[] { if (line.match(/^[\-\*]\s/)) { const listMatch = line.match(/^([\-\*])\s(.*)/); if (listMatch) { + // Parse inline formatting for list item + const itemContent = listMatch[2]; + const inlineSegments = parseInlineElements(itemContent); + // Check if previous segment is a list const lastSeg = segments[segments.length - 1]; if (lastSeg && lastSeg.type === 'list') { - lastSeg.items?.push(listMatch[2]); + lastSeg.items?.push(itemContent); } else { - segments.push({ type: 'list', content: '', items: [listMatch[2]] }); + segments.push({ type: 'list', content: '', items: [itemContent] }); } } continue; @@ -175,11 +192,13 @@ function parseLines(text: string): ParsedSegment[] { if (line.match(/^\d+\.\s/)) { const listMatch = line.match(/^\d+\.\s(.*)/); if (listMatch) { + const itemContent = listMatch[1]; + const lastSeg = segments[segments.length - 1]; if (lastSeg && lastSeg.type === 'list') { - lastSeg.items?.push(listMatch[1]); + lastSeg.items?.push(itemContent); } else { - segments.push({ type: 'list', content: '', items: [listMatch[1]] }); + segments.push({ type: 'list', content: '', items: [itemContent] }); } } continue;