|
513 | 513 | display: flex; |
514 | 514 | justify-content: center; |
515 | 515 | } |
516 | | - .mermaid-wrap svg { |
517 | | - max-width: 100%; |
| 516 | + .mermaid { |
| 517 | + display: flex; |
| 518 | + justify-content: center; |
| 519 | + width: 100%; |
| 520 | + } |
| 521 | + .mermaid svg { |
| 522 | + display: block; |
| 523 | + margin: 0 auto; |
| 524 | + max-width: 100% !important; |
| 525 | + height: auto !important; |
| 526 | + overflow: visible !important; |
| 527 | + } |
| 528 | + .mermaid foreignObject { |
| 529 | + overflow: visible !important; |
| 530 | + } |
| 531 | + .mermaid foreignObject > div, |
| 532 | + .mermaid .nodeLabel, |
| 533 | + .mermaid .edgeLabel { |
| 534 | + overflow: visible !important; |
518 | 535 | } |
519 | 536 | .mermaid-wrap .loading { |
520 | 537 | font-family: var(--font-mono); |
@@ -2515,6 +2532,7 @@ <h2 id="8">8. 次のステップ</h2> |
2515 | 2532 |
|
2516 | 2533 | mermaid.initialize({ |
2517 | 2534 | startOnLoad: false, |
| 2535 | + securityLevel: 'loose', |
2518 | 2536 | theme: 'dark', |
2519 | 2537 | themeVariables: { |
2520 | 2538 | background: '#0c1a2c', |
@@ -2562,9 +2580,36 @@ <h2 id="8">8. 次のステップ</h2> |
2562 | 2580 | for (let i = 0; i < mermaidSources.length; i++) { |
2563 | 2581 | const el = document.getElementById('mermaid-' + i); |
2564 | 2582 | if (!el) continue; |
2565 | | - el.textContent = mermaidSources[i]; |
| 2583 | + const src = mermaidSources[i]; |
| 2584 | + try { |
| 2585 | + const { svg } = await mermaid.render('svg-mermaid-' + i, src); |
| 2586 | + el.innerHTML = svg; |
| 2587 | + |
| 2588 | + const svgEl = el.querySelector('svg'); |
| 2589 | + if (svgEl) { |
| 2590 | + svgEl.removeAttribute('width'); |
| 2591 | + svgEl.removeAttribute('height'); |
| 2592 | + svgEl.style.height = 'auto'; |
| 2593 | + svgEl.style.overflow = 'visible'; |
| 2594 | + |
| 2595 | + const viewBoxStr = svgEl.getAttribute('viewBox'); |
| 2596 | + if (viewBoxStr) { |
| 2597 | + const parts = viewBoxStr.split(' ').map(Number); |
| 2598 | + if (parts.length === 4) { |
| 2599 | + const [vx, vy, vw, vh] = parts; |
| 2600 | + const isSequenceOrState = src.trim().startsWith('sequenceDiagram') || src.trim().startsWith('stateDiagram'); |
| 2601 | + const extraHeight = isSequenceOrState ? 110 : 15; |
| 2602 | + svgEl.style.width = `${vw}px`; |
| 2603 | + svgEl.style.maxWidth = '100%'; |
| 2604 | + svgEl.setAttribute('viewBox', `${vx} ${vy} ${vw} ${vh + extraHeight}`); |
| 2605 | + } |
| 2606 | + } |
| 2607 | + } |
| 2608 | + } catch (err) { |
| 2609 | + console.error(`Mermaid render error for mermaid-${i}:`, err); |
| 2610 | + el.innerHTML = `<p style="color: var(--red);">図表の描画に失敗しました: ${err.message}</p>`; |
| 2611 | + } |
2566 | 2612 | } |
2567 | | - await mermaid.run({ querySelector: '.mermaid' }); |
2568 | 2613 | } |
2569 | 2614 | renderDiagrams(); |
2570 | 2615 |
|
|
0 commit comments