Markdown.svelte 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. export let onTaskClick = () => {};
  17. let tokens = [];
  18. const options = {
  19. throwOnError: false
  20. };
  21. marked.use(markedKatexExtension(options));
  22. marked.use(markedExtension(options));
  23. $: (async () => {
  24. if (content) {
  25. tokens = marked.lexer(
  26. replaceTokens(processResponseContent(content), sourceIds, model?.name, $user?.name)
  27. );
  28. }
  29. })();
  30. </script>
  31. {#key id}
  32. <MarkdownTokens
  33. {tokens}
  34. {id}
  35. {save}
  36. {onTaskClick}
  37. {onSourceClick}
  38. on:update={(e) => {
  39. dispatch('update', e.detail);
  40. }}
  41. on:code={(e) => {
  42. dispatch('code', e.detail);
  43. }}
  44. />
  45. {/key}