feat(markdown): render TikZ fenced blocks to SVG

Adds a markdown-it extractor for ```tikz blocks that emits a sanitized
placeholder, plus a runTikz() that lazy-loads the obsidian-tikzjax 0.5.2
bundle from jsdelivr on first encounter, sanitizes the produced SVG with
DOMPurify, and caches it in PouchDB keyed by sha256(source) so repeat
views are instant and offline-capable.
This commit is contained in:
Julien Calixte
2026-05-15 15:38:48 +02:00
parent bfd981de13
commit bf19e982fe
10 changed files with 265 additions and 178 deletions

View File

@@ -5,7 +5,7 @@ import { useRoute } from "vue-router"
import SkeletonLoader from "@/components/SkeletonLoader.vue"
import { useATProtoLinks } from "@/hooks/useATProtoLinks.hook"
import { markdownBuilder } from "@/hooks/useMarkdown.hook"
import { markdownBuilder, runTikz } from "@/hooks/useMarkdown.hook"
import { useNoteOverlay } from "@/hooks/useNoteOverlay.hook"
import { useRouteQueryStackedNotes } from "@/hooks/useRouteQueryStackedNotes.hook"
import { getAuthor } from "@/modules/atproto/getAuthor"
@@ -81,6 +81,7 @@ watch(
async () => {
await nextTick()
listenToClick()
void runTikz(`.note-${classNameId.value} .tikz`)
},
{ immediate: true }
)