@@ -4,6 +4,9 @@ import { getCorrectView } from "./renderers/correct";
44import { getLoadingView } from "./renderers/loading" ;
55import { getErrorsView } from "./renderers/diagnostics/errors" ;
66import { getWarningsView } from "./renderers/diagnostics/warnings" ;
7+ import { getDiagramView } from "./renderers/diagram" ;
8+ import { StateMachine } from "../types/fsm" ;
9+ import { createMermaidDiagram } from "./fsm" ;
710
811/**
912 * Initializes the webview script
@@ -18,6 +21,7 @@ export function getScript(vscode: any, document: any, window: any) {
1821 let showAllDiagnostics = false ;
1922 let currentFile : string | undefined ;
2023 let expandedErrors = new Set < number > ( ) ;
24+ let stateMachine = '' ;
2125
2226 // initial state
2327 root . innerHTML = getLoadingView ( ) ;
@@ -103,13 +107,37 @@ export function getScript(vscode: any, document: any, window: any) {
103107 } else if ( msg . type === 'file' ) {
104108 currentFile = msg . file ;
105109 if ( ! showAllDiagnostics ) updateView ( ) ;
110+ } else if ( msg . type === 'fsm' ) {
111+ const sm = msg . sm as StateMachine ;
112+ const diagram = createMermaidDiagram ( sm ) ;
113+ stateMachine = diagram ? getDiagramView ( diagram , sm ) : '' ;
114+ updateView ( ) ;
106115 }
107- } ) ;
116+ } ) ;
117+
118+ async function renderMermaidDiagram ( ) {
119+ const mermaid = ( window as any ) . mermaid ;
120+ if ( ! mermaid ) return ;
121+
122+ const mermaidElements = document . querySelectorAll ( '.mermaid' ) ;
123+ if ( mermaidElements . length === 0 ) return ;
124+
125+ try {
126+ await mermaid . run ( { nodes : mermaidElements } ) ;
127+ } catch ( e ) {
128+ console . error ( 'Failed to render Mermaid diagram:' , e ) ;
129+ }
130+ }
108131
109132 function updateView ( ) {
110133 let mainView = fileErrors . length > 0 ? getErrorsView ( fileErrors , showAllDiagnostics , currentFile , expandedErrors ) : getCorrectView ( showAllDiagnostics ) ;
111134 let warningsView = fileWarnings . length > 0 ? getWarningsView ( fileWarnings , showAllDiagnostics , currentFile ) : '' ;
112- root . innerHTML = mainView + warningsView ;
135+ root . innerHTML = mainView + warningsView + stateMachine ;
136+
137+ // re-render mermaid diagram after DOM update
138+ if ( stateMachine ) {
139+ renderMermaidDiagram ( ) ;
140+ }
113141 }
114142}
115143
0 commit comments