Switch to `svelte-markdown`

This commit is contained in:
Niek van der Maas 2023-03-06 14:15:52 +01:00
parent 54c199c8bf
commit 3b35868a06
4 changed files with 83 additions and 8 deletions

34
package-lock.json generated
View File

@ -14,12 +14,13 @@
"@tsconfig/svelte": "^3.0.0", "@tsconfig/svelte": "^3.0.0",
"@types/marked": "^4.0.8", "@types/marked": "^4.0.8",
"bulma": "^0.9.4", "bulma": "^0.9.4",
"marked": "^4.2.12",
"postcss": "^8.4.21", "postcss": "^8.4.21",
"sass": "^1.58.3", "sass": "^1.58.3",
"svelte": "^3.55.1", "svelte": "^3.55.1",
"svelte-check": "^3.0.4", "svelte-check": "^3.0.4",
"svelte-highlight": "^7.2.0",
"svelte-local-storage-store": "^0.4.0", "svelte-local-storage-store": "^0.4.0",
"svelte-markdown": "^0.2.3",
"tslib": "^2.5.0", "tslib": "^2.5.0",
"typescript": "^4.9.3", "typescript": "^4.9.3",
"vite": "^4.1.0" "vite": "^4.1.0"
@ -828,6 +829,15 @@
"node": ">= 0.4.0" "node": ">= 0.4.0"
} }
}, },
"node_modules/highlight.js": {
"version": "11.7.0",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.7.0.tgz",
"integrity": "sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==",
"dev": true,
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/immutable": { "node_modules/immutable": {
"version": "4.2.4", "version": "4.2.4",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz",
@ -1438,6 +1448,15 @@
"svelte": "^3.55.0" "svelte": "^3.55.0"
} }
}, },
"node_modules/svelte-highlight": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/svelte-highlight/-/svelte-highlight-7.2.0.tgz",
"integrity": "sha512-mOJltSmozHNuaIE4tglrOBQ9X/8sKoQMJfqm+YZUuHvzfAcefWtZVDFml2oUrEv8iehM79mdA9+0orhUWIrxWw==",
"dev": true,
"dependencies": {
"highlight.js": "11.7.0"
}
},
"node_modules/svelte-hmr": { "node_modules/svelte-hmr": {
"version": "0.15.1", "version": "0.15.1",
"resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz", "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz",
@ -1462,6 +1481,19 @@
"svelte": "^3.48.0" "svelte": "^3.48.0"
} }
}, },
"node_modules/svelte-markdown": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/svelte-markdown/-/svelte-markdown-0.2.3.tgz",
"integrity": "sha512-2h680NzTXnAD0CXhxe3GeHl6W+ayG4iKQRl+BIDRw+R0mUE0OiNxP1Vt8Rn+aWevB/LBiBIPCAwvL+0BkG057A==",
"dev": true,
"dependencies": {
"@types/marked": "^4.0.1",
"marked": "^4.0.10"
},
"peerDependencies": {
"svelte": "^3.0.0"
}
},
"node_modules/svelte-preprocess": { "node_modules/svelte-preprocess": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.1.tgz", "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.1.tgz",

View File

@ -17,12 +17,13 @@
"@tsconfig/svelte": "^3.0.0", "@tsconfig/svelte": "^3.0.0",
"@types/marked": "^4.0.8", "@types/marked": "^4.0.8",
"bulma": "^0.9.4", "bulma": "^0.9.4",
"marked": "^4.2.12",
"postcss": "^8.4.21", "postcss": "^8.4.21",
"sass": "^1.58.3", "sass": "^1.58.3",
"svelte": "^3.55.1", "svelte": "^3.55.1",
"svelte-check": "^3.0.4", "svelte-check": "^3.0.4",
"svelte-highlight": "^7.2.0",
"svelte-local-storage-store": "^0.4.0", "svelte-local-storage-store": "^0.4.0",
"svelte-markdown": "^0.2.3",
"tslib": "^2.5.0", "tslib": "^2.5.0",
"typescript": "^4.9.3", "typescript": "^4.9.3",
"vite": "^4.1.0" "vite": "^4.1.0"

View File

@ -4,8 +4,8 @@
import { apiKeyStorage, chatsStorage, addMessage, clearMessages } from "./Storage.svelte"; import { apiKeyStorage, chatsStorage, addMessage, clearMessages } from "./Storage.svelte";
import type { Response, Message } from "./Types.svelte"; import type { Response, Message } from "./Types.svelte";
import { marked } from "marked";
import { afterUpdate, onMount } from "svelte"; import { afterUpdate, onMount } from "svelte";
import SvelteMarkdown from "svelte-markdown";
export let chatId: number; export let chatId: number;
let updating: boolean = false; let updating: boolean = false;
@ -24,10 +24,11 @@
input.focus(); input.focus();
}); });
marked.setOptions({ // Marked options
const markedownOptions = {
gfm: true, gfm: true,
breaks: true, breaks: true,
}); };
const send = async () => { const send = async () => {
// Compose the input message // Compose the input message
@ -159,17 +160,35 @@
> >
✏️ ✏️
</a> </a>
{@html marked(message.content)} <SvelteMarkdown
source={message.content}
options={markedownOptions}
renderers={{
/*code: Code*/
}}
/>
</div> </div>
</article> </article>
{:else if message.role === "system"} {:else if message.role === "system"}
<article class="message is-danger"> <article class="message is-danger">
<div class="message-body">{@html marked(message.content)}</div> <SvelteMarkdown
source={message.content}
options={markedownOptions}
renderers={{
/*code: Code*/
}}
/>
</article> </article>
{:else} {:else}
<article class="message is-success"> <article class="message is-success">
<div class="message-body"> <div class="message-body">
{@html marked(message.content)} <SvelteMarkdown
source={message.content}
options={markedownOptions}
renderers={{
/*code: Code*/
}}
/>
{#if message.usage} {#if message.usage}
<p class="is-size-7"> <p class="is-size-7">
This message was generated using <span class="has-text-weight-bold">{message.usage.total_tokens}</span> This message was generated using <span class="has-text-weight-bold">{message.usage.total_tokens}</span>

23
src/lib/Code.svelte Normal file
View File

@ -0,0 +1,23 @@
<script lang="ts">
// Disabled for now - it blows up the size too much
import { HighlightAuto } from "svelte-highlight";
import style from "svelte-highlight/styles/edge-light";
export let type: "code";
export let raw: string;
export let codeBlockStyle: "indented" | undefined = undefined;
export let lang: string | undefined = undefined;
export let text: string;
// Disable warnings
type = "code";
raw;
codeBlockStyle;
lang;
</script>
<svelte:head>
{@html style}
</svelte:head>
<HighlightAuto code={text} />