diff --git a/src/lib/components/chat/Messages/HTMLRenderer.svelte b/src/lib/components/chat/Messages/HTMLRenderer.svelte
new file mode 100644
index 000000000..53fad8084
--- /dev/null
+++ b/src/lib/components/chat/Messages/HTMLRenderer.svelte
@@ -0,0 +1,30 @@
+
+
+{#each parsedHTML as part}
+ {@const match = rules.find((rule) => rule.regex.test(part))}
+ {#if match}
+ ${code.replaceAll('&', '&')}
`;
};
- // renderer.code = (code, lang) => {
- // const element = document.createElement('div');
- // new CodeBlock({
- // target: element,
- // props: {
- // id: `${id}-${tokenIdx}`,
- // lang: lang ?? '',
- // code: revertSanitizedResponseContent(code ?? '')
- // }
- // });
- // return element.innerHTML;
- // };
+ let codes = [];
+ renderer.code = (code, lang) => {
+ codes.push({ code, lang, id: codes.length });
+ codes = codes;
+ return `{{@CODE ${codes.length - 1}}}`;
+ };
- // renderer.image = (href, title, text) => {
- // const element = document.createElement('pre');
- // new Image({
- // target: element,
- // props: {
- // src: href,
- // alt: text
- // }
- // });
- // return element.innerHTML;
- // };
+ let images = [];
+ renderer.image = (href, title, text) => {
+ images.push({ href, title, text });
+ images = images;
+ return `{{@IMAGE ${images.length - 1}}}`;
+ };
// Open all links in a new tab/window (from https://github.com/markedjs/marked/issues/655#issuecomment-383226346)
const origLinkRenderer = renderer.link;
@@ -53,23 +45,50 @@
// eslint-disable-next-line @typescript-eslint/no-explicit-any
extensions: any;
};
+
+ $: if (token) {
+ images = [];
+ codes = [];
+ content = marked
+ .parse(token.raw, {
+ ...defaults,
+ gfm: true,
+ breaks: true,
+ renderer
+ })
+ .split(/({{@IMAGE [^}]+}}|{{@CODE [^}]+}})/g);
+ }
-{#if token.type === 'code'}
- {#if token.lang === 'mermaid'}
-
{revertSanitizedResponseContent(token.text)}+
{revertSanitizedResponseContent(token.text)}+ {:else} +