@@ -98,29 +98,43 @@ fn MermaidBlock(chart: &'static str) -> Element {
9898 rsx ! {
9999 div {
100100 document:: Link { rel: "stylesheet" , href: asset!( "assets/mermaid_block.css" ) }
101- div { class: "diagram-container" , style: "height: 600px;" ,
102- div { class: "diagram-wrapper" , id: "diagram-wrapper" ,
103- pre { class: "mermaid" , dangerous_inner_html: "{chart}" }
104- script { r#type: "module" ,
105- r#"
101+ pre {
102+ class: "mermaid" ,
103+ style: "background-color: #fff" ,
104+ dangerous_inner_html: "{chart}" ,
105+ }
106+ script { r#type: "module" ,
107+ r#"
106108import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/+esm';
107- mermaid.initialize({{ startOnLoad: false }});
109+ import Panzoom from 'https://cdn.jsdelivr.net/npm/@panzoom/[email protected] /+esm'; 110+
111+ mermaid.initialize({{
112+ startOnLoad: false,
113+ }});
114+
108115const mermaidElements = document.querySelectorAll('.mermaid');
116+ let elements = [];
109117mermaidElements.forEach((element, index) => {{
118+ if (element.getAttribute('data-processed') === 'true') {{
119+ return;
120+ }}
110121 element.textContent = element.textContent.trim();
122+ elements.push(element);
111123}});
112- mermaid.run().catch(error => {{
113- console.error('Mermaid rendering error:', error);
124+
125+ mermaid.run().then(() => {{
126+ elements.forEach((element, index) => {{
127+ let svg = element.firstElementChild;
128+ const panzoom = Panzoom(svg, {{
129+ step: 1,
130+ maxScale: 10,
131+ minScale: 0.5,
132+ }});
133+ element.addEventListener('wheel', panzoom.zoomWithWheel);
134+ }})
114135}});
136+
115137 "#
116- }
117- }
118- div { class: "zoom-controls" ,
119- button { class: "zoom-in" , "+" }
120- button { class: "zoom-reset" , "Reset" }
121- button { class: "zoom-out" , "-" }
122- div { class: "zoom-level" , "100%" }
123- }
124138 }
125139 }
126140 }
0 commit comments