Markdown.svelte 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <script>
  2. import { marked } from 'marked';
  3. import { replaceTokens, processResponseContent } from '$lib/utils';
  4. import { user } from '$lib/stores';
  5. import markedExtension from '$lib/utils/marked/extension';
  6. import markedKatexExtension from '$lib/utils/marked/katex-extension';
  7. import MarkdownTokens from './Markdown/MarkdownTokens.svelte';
  8. import { createEventDispatcher } from 'svelte';
  9. const dispatch = createEventDispatcher();
  10. export let id;
  11. export let content;
  12. export let model = null;
  13. export let save = false;
  14. export let sourceIds = [];
  15. export let onSourceClick = () => {};
  16. let tokens = [];
  17. const options = {
  18. throwOnError: false
  19. };
  20. marked.use(markedKatexExtension(options));
  21. marked.use(markedExtension(options));
  22. $: (async () => {
  23. if (content) {
  24. tokens = marked.lexer(
  25. replaceTokens(processResponseContent(content), sourceIds, model?.name, $user?.name)
  26. );
  27. }
  28. })();
  29. </script>
  30. {#key id}
  31. <MarkdownTokens
  32. {tokens}
  33. {id}
  34. {save}
  35. {onSourceClick}
  36. on:update={(e) => {
  37. dispatch('update', e.detail);
  38. }}
  39. on:code={(e) => {
  40. dispatch('code', e.detail);
  41. }}
  42. />
  43. {/key}