Skip to content

Commit 7614446

Browse files
fix(details): fix broken Svelte special elements inside code blocks
Side-effect of 6313480
1 parent 2040726 commit 7614446

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

src/lib/components/MarkdownRenderer.svelte

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,13 @@
2525
} & MdSnippets;
2626
2727
let {
28-
markdown,
28+
markdown: md,
2929
inline = false,
3030
parseRawHtml = false,
3131
additionalPlugins = [],
3232
class: className = undefined,
3333
...snippets
3434
}: Props = $props();
35-
36-
// Markdown renders <thing:*> as a link (yeah I didn't know either).
37-
// We don't want that to break Svelte's special elements, so we escape this.
38-
//
39-
// Refs:
40-
// - https://www.markdownguide.org/basic-syntax/#urls-and-email-addresses
41-
// - https://svelte.dev/docs/svelte/svelte-boundary (and others)
42-
let md = $derived(markdown.replace(/<(svelte:\S+)>/g, "&lt;$1&gt;"));
4335
</script>
4436

4537
<svelte:element
@@ -99,7 +91,23 @@
9991
...additionalPlugins
10092
]}
10193
{...snippets}
102-
/>
94+
>
95+
{#snippet a({ children, ...rest })}
96+
<!-- Markdown renders <thing:*> as a link (yeah I didn't know either). -->
97+
<!-- We don't want that to break Svelte's special elements, so we escape them. -->
98+
<!---->
99+
<!-- Refs: -->
100+
<!-- - https://www.markdownguide.org/basic-syntax/#urls-and-email-addresses -->
101+
<!-- - https://svelte.dev/docs/svelte/svelte-boundary (and others) -->
102+
{#if /svelte:\S+/.test(rest.href ?? "")}
103+
&lt;{@render children?.()}&gt;
104+
{:else if snippets.a}
105+
{@render snippets.a({ children, ...rest })}
106+
{:else}
107+
<a {...rest}>{@render children?.()}</a>
108+
{/if}
109+
{/snippet}
110+
</Markdown>
103111
</svelte:boundary>
104112
</svelte:element>
105113

0 commit comments

Comments
 (0)