Add svelte markdown rendering
parent
20edd1b562
commit
1c9d6bed24
@ -0,0 +1,27 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import type { Snippet } from "svelte";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
children: Snippet;
|
||||||
|
depth: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
const { children, depth }: Props = $props();
|
||||||
|
if (depth < 0 || depth > 6) {
|
||||||
|
throw new Error("depth must be 0-6");
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svelte:element this={`h${depth}`} class="heading">
|
||||||
|
{@render children()}
|
||||||
|
</svelte:element>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@layer component {
|
||||||
|
.heading {
|
||||||
|
font-family: var(--font-primary);
|
||||||
|
margin: 0.2em 0;
|
||||||
|
text-decoration: underline 0.2em var(--color-context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,31 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import hljs from "highlight.js";
|
||||||
|
import "highlight.js/styles/night-owl.css";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
language?: string;
|
||||||
|
code: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const { language, code }: Props = $props();
|
||||||
|
|
||||||
|
const html: string = $derived.by(() => {
|
||||||
|
if (language) {
|
||||||
|
return hljs.highlight(code, { language }).value;
|
||||||
|
}
|
||||||
|
return hljs.highlightAuto(code).value;
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<pre class="code">
|
||||||
|
{@html html}
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@layer component {
|
||||||
|
.code {
|
||||||
|
margin: 0;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,30 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import type { Snippet } from "svelte";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
children: Snippet;
|
||||||
|
ordered: boolean;
|
||||||
|
start: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const { children, ordered, start }: Props = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if ordered}
|
||||||
|
<ol start={Number(start)} class="list ordered">
|
||||||
|
{@render children()}
|
||||||
|
</ol>
|
||||||
|
{:else}
|
||||||
|
<ul class="list unordered">
|
||||||
|
{@render children()}
|
||||||
|
</ul>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@layer component {
|
||||||
|
.list {
|
||||||
|
margin: 0;
|
||||||
|
font-family: var(--font-readable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,13 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import type { Snippet } from "svelte";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
children: Snippet;
|
||||||
|
};
|
||||||
|
|
||||||
|
const { children }: Props = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
{@render children()}
|
||||||
|
</li>
|
@ -0,0 +1,22 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import type { Snippet } from "svelte";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
children: Snippet;
|
||||||
|
};
|
||||||
|
|
||||||
|
const { children }: Props = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<p class="paragraph">
|
||||||
|
{@render children()}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@layer component {
|
||||||
|
.paragraph {
|
||||||
|
margin: 0;
|
||||||
|
font-family: var(--font-readable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,10 @@
|
|||||||
|
<div class="space"></div>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@layer component {
|
||||||
|
.space {
|
||||||
|
display: block;
|
||||||
|
height: 1.2em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue