From 2ff86d8c5dc0e2f72647f351257bcd9f20add0a2 Mon Sep 17 00:00:00 2001 From: DrMelone <27028174+Classic298@users.noreply.github.com> Date: Tue, 17 Mar 2026 19:19:40 +0100 Subject: [PATCH] feat: use rich text editor for knowledge file editing Replace the plain textarea in the knowledge base file editor drawer with the same RichTextInput (TipTap) component used by the Add Text Content modal. This resolves an inconsistency where creating new text content offered a full WYSIWYG experience while editing existing files was limited to an unstyled textarea. Also fixes a bug in RichTextInput where onValueChange bypassed markdown parsing when preserveBreaks was enabled, causing setContent to receive raw markdown instead of parsed HTML. This collapsed all content into a single paragraph on reactive updates. --- src/lib/components/common/RichTextInput.svelte | 8 +++----- .../workspace/Knowledge/KnowledgeBase.svelte | 18 +++++++++++------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/lib/components/common/RichTextInput.svelte b/src/lib/components/common/RichTextInput.svelte index b9dd058553..0724b3279b 100644 --- a/src/lib/components/common/RichTextInput.svelte +++ b/src/lib/components/common/RichTextInput.svelte @@ -1217,11 +1217,9 @@ } else { if (value !== mdValue) { editor.commands.setContent( - preserveBreaks - ? value - : marked.parse(value.replaceAll(`\n
`, `
`), { - breaks: false - }) + marked.parse(value.replaceAll(`\n
`, `
`), { + breaks: false + }) ); selectTemplate(); diff --git a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte index 999808690d..e7c3c40070 100644 --- a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte +++ b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte @@ -171,14 +171,18 @@ const fileSelectHandler = async (file) => { try { - selectedFile = file; - const rawContent = selectedFile?.data?.content || ''; + const rawContent = file?.data?.content || ''; - // Normalize single newlines to paragraph breaks (double newlines) so the - // rich text editor's markdown parser preserves them. Without this, single - // newlines get collapsed into spaces during markdown parsing (breaks: false). - // Existing double+ newlines (paragraph breaks) are left unchanged. - selectedFileContent = rawContent.replace(/(?