File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ <script setup>
2+ const props = defineProps ({
3+ code: { type: String , default: ' ' },
4+ language: { type: String , default: null },
5+ filename: { type: String , default: null },
6+ highlights: { type: Array , default : () => [] },
7+ meta: { type: String , default: null },
8+ class: { type: String , default: null },
9+ })
10+
11+ const mermaidRef = ref (null )
12+ let renderCount = 0
13+
14+ onMounted (async () => {
15+ if (props .language !== ' mermaid' || ! props .code || ! mermaidRef .value ) return
16+
17+ const { default: mermaid } = await import (' mermaid' )
18+ mermaid .initialize ({ startOnLoad: false , theme: ' neutral' })
19+
20+ renderCount++
21+ const uniqueId = ` mermaid-${ renderCount} -${ Math .random ().toString (36 ).slice (2 , 7 )} `
22+ try {
23+ const { svg } = await mermaid .render (uniqueId, props .code )
24+ if (mermaidRef .value ) mermaidRef .value .innerHTML = svg
25+ } catch {
26+ if (mermaidRef .value ) mermaidRef .value .textContent = props .code
27+ }
28+ })
29+ </script >
30+
31+ <template >
32+ <div v-if =" language === 'mermaid'" ref =" mermaidRef" class =" mermaid-diagram overflow-x-auto py-4" />
33+ <pre v-else :class =" $props.class" ><slot /></pre >
34+ </template >
35+
36+ <style >
37+ pre code .line { display : block }
38+ </style >
Original file line number Diff line number Diff line change 88 "generate" : " nuxt generate" ,
99 "preview" : " nuxt preview"
1010 },
11+ "dependencies" : {
12+ "mermaid" : " ^11"
13+ },
1114 "devDependencies" : {
1215 "@nuxt/content" : " ^3.13.0" ,
1316 "@nuxt/image" : " ^2.0.0" ,
You can’t perform that action at this time.
0 commit comments