@@ -93,46 +93,43 @@ export default function MermaidDiagram({ code }: { code: string }) {
93
93
mermaidRenderContainerRef . current . innerHTML = "" ;
94
94
}
95
95
const diagramId = `mermaid-id-${ Math . random ( ) . toString ( 36 ) . substring ( 2 ) } ` ;
96
- mermaid
97
- . parse ( code )
98
- . then ( ( ) => mermaid . render ( diagramId , code ) )
99
- . then ( ( { svg } ) => {
100
- if ( mermaidRenderContainerRef . current ) {
101
- mermaidRenderContainerRef . current . innerHTML = svg ;
102
- setError ( "" ) ;
103
- const panzoom = Panzoom ( mermaidRenderContainerRef . current , {
104
- step : MINIMUM_ZOOM_STEP ,
105
- } ) ;
106
- zoomInButtonRef . current ?. addEventListener ( "click" , ( ) =>
107
- panzoom . zoomIn ( { step : MINIMUM_ZOOM_STEP * 4 } ) ,
108
- ) ;
109
- zoomOutButtonRef . current ?. addEventListener ( "click" , ( ) =>
110
- panzoom . zoomOut ( { step : MINIMUM_ZOOM_STEP * 4 } ) ,
111
- ) ;
112
- resetZoomButtonRef . current ?. addEventListener ( "click" , ( ) =>
113
- panzoom . reset ( ) ,
114
- ) ;
115
- mermaidRenderContainerRef . current . parentElement ?. addEventListener (
116
- "wheel" ,
117
- ( event ) => {
118
- if ( ! event . shiftKey ) return ;
119
- panzoom . zoomWithWheel ( event ) ;
120
- } ,
121
- ) ;
122
- }
123
- } )
124
- . catch ( ( err ) => {
96
+ void ( async ( ) => {
97
+ if ( ! mermaidRenderContainerRef . current ) return ;
98
+ try {
99
+ await mermaid . parse ( code ) ;
100
+ const renderedSVG = await mermaid . render ( diagramId , code ) ;
101
+ mermaidRenderContainerRef . current . innerHTML = renderedSVG . svg ;
102
+ setError ( "" ) ;
103
+ const panzoom = Panzoom ( mermaidRenderContainerRef . current , {
104
+ step : MINIMUM_ZOOM_STEP ,
105
+ } ) ;
106
+ zoomInButtonRef . current ?. addEventListener ( "click" , ( ) =>
107
+ panzoom . zoomIn ( { step : MINIMUM_ZOOM_STEP * 4 } ) ,
108
+ ) ;
109
+ zoomOutButtonRef . current ?. addEventListener ( "click" , ( ) =>
110
+ panzoom . zoomOut ( { step : MINIMUM_ZOOM_STEP * 4 } ) ,
111
+ ) ;
112
+ resetZoomButtonRef . current ?. addEventListener ( "click" , ( ) =>
113
+ panzoom . reset ( ) ,
114
+ ) ;
115
+ mermaidRenderContainerRef . current . parentElement ?. addEventListener (
116
+ "wheel" ,
117
+ ( event ) => {
118
+ if ( ! event . shiftKey ) return ;
119
+ panzoom . zoomWithWheel ( event ) ;
120
+ } ,
121
+ ) ;
122
+ } catch ( err : any ) {
125
123
if ( err . message ) {
126
124
setError ( err . message ) ;
127
125
} else {
128
126
setError (
129
127
"Unknown error when parsing or rendering the Mermaid diagram." ,
130
128
) ;
131
129
}
132
- } )
133
- . finally ( ( ) => {
134
- setIsLoading ( false ) ;
135
- } ) ;
130
+ }
131
+ setIsLoading ( false ) ;
132
+ } ) ( ) ;
136
133
} ,
137
134
500 ,
138
135
[ code ] ,
@@ -141,7 +138,7 @@ export default function MermaidDiagram({ code }: { code: string }) {
141
138
return (
142
139
< >
143
140
{ isLoading && (
144
- < div className = "text-vsc-foreground text-sm " > Generating diagram...</ div >
141
+ < div className = "text-vsc-foreground text-xs " > Generating diagram...</ div >
145
142
) }
146
143
{ ! ! error ? (
147
144
< div className = "text-error whitespace-pre text-sm" > { error } </ div >
0 commit comments