fluent ui + mermaid

This commit is contained in:
FrigaT
2025-12-25 17:32:55 +03:00
parent 0dae811dd0
commit 0711d06884
6 changed files with 2759 additions and 242 deletions

View File

@@ -1,51 +0,0 @@
using System.Text;
using Microsoft.SqlServer.TransactSql.ScriptDom;
using System;
using System.Linq;
using System.Collections.Generic;
namespace SQLLinter.Infrastructure.Diagram;
public static class FragmentDiagramBuilder
{
public static string RenderMermaid(TSqlFragment fragment)
{
if (fragment == null) return string.Empty;
var diagram = BpmnBuilder.Build(fragment);
return MermaidRenderer.RenderMarkdown(diagram);
}
public static string RenderHtmlSvg(TSqlFragment fragment)
{
if (fragment == null) return string.Empty;
var diagram = BpmnBuilder.Build(fragment);
// Use mermaid HTML instead of SVG fallback
return MermaidRenderer.RenderHtml(diagram);
}
// keep helpers used by earlier code if needed
private static string Escape(string s)
{
if (s == null) return string.Empty;
return System.Net.WebUtility.HtmlEncode(s).Replace("\n", " ").Replace("\r", " ");
}
private static string Truncate(string s, int len)
{
if (s == null) return string.Empty;
if (s.Length <= len) return s;
return s.Substring(0, len - 3) + "...";
}
private static string SanitizeId(string s)
{
if (string.IsNullOrEmpty(s)) return "id";
var sb = new StringBuilder();
foreach (var ch in s)
{
if (char.IsLetterOrDigit(ch)) sb.Append(ch);
else sb.Append('_');
}
return sb.ToString();
}
}

View File

@@ -43,6 +43,7 @@ public static class MermaidRenderer
{
var procId = SanitizeId(proc.Id);
sb.AppendLine($" subgraph {procId} [\"{Escape(proc.Name)}\"]");
sb.AppendLine($" direction TB");
var startNodes = proc.Nodes.Where(n => n.Type == BpmnNodeType.Start).ToList();
var taskNodes = proc.Nodes.Where(n => n.Type == BpmnNodeType.Task || n.Type == BpmnNodeType.Gateway).ToList();
@@ -116,17 +117,6 @@ public static class MermaidRenderer
return sb.ToString();
}
public static string RenderHtml(BpmnDiagram diagram)
{
var content = ToMermaidContent(diagram);
var sb = new StringBuilder();
// Put raw mermaid text inside .mermaid container so mermaid.js can render it
sb.AppendLine("<div class=\"mermaid\">\n" + content + "\n</div>");
return sb.ToString();
}
private static string Escape(string s)
{
if (s == null) return string.Empty;