1359 lines
43 KiB
JavaScript
1359 lines
43 KiB
JavaScript
import {
|
|
package_default
|
|
} from "./chunks/mermaid.core/chunk-57QY23SG.mjs";
|
|
import {
|
|
selectSvgElement
|
|
} from "./chunks/mermaid.core/chunk-EXTU4WIE.mjs";
|
|
import {
|
|
JSON_SCHEMA,
|
|
load
|
|
} from "./chunks/mermaid.core/chunk-ZPAFE4SF.mjs";
|
|
import {
|
|
registerLayoutLoaders
|
|
} from "./chunks/mermaid.core/chunk-6OXUPJBA.mjs";
|
|
import "./chunks/mermaid.core/chunk-3AY6CYHV.mjs";
|
|
import "./chunks/mermaid.core/chunk-7GE3RBXV.mjs";
|
|
import "./chunks/mermaid.core/chunk-CXMOBAN2.mjs";
|
|
import "./chunks/mermaid.core/chunk-CVBHYZKI.mjs";
|
|
import "./chunks/mermaid.core/chunk-QYVHNE3D.mjs";
|
|
import {
|
|
registerIconPacks
|
|
} from "./chunks/mermaid.core/chunk-JA3XYJ7Z.mjs";
|
|
import {
|
|
cleanAndMerge,
|
|
decodeEntities,
|
|
encodeEntities,
|
|
isDetailedError,
|
|
removeDirectives,
|
|
utils_default
|
|
} from "./chunks/mermaid.core/chunk-S3R3BYOJ.mjs";
|
|
import {
|
|
UnknownDiagramError,
|
|
addDirective,
|
|
assignWithDepth_default,
|
|
configureSvgSize,
|
|
defaultConfig,
|
|
detectType,
|
|
detectors,
|
|
evaluate,
|
|
frontMatterRegex,
|
|
getConfig,
|
|
getDiagram,
|
|
getDiagramLoader,
|
|
getSiteConfig,
|
|
registerDiagram,
|
|
registerLazyLoadedDiagrams,
|
|
reset,
|
|
saveConfigFromInitialize,
|
|
setConfig,
|
|
setSiteConfig,
|
|
styles_default,
|
|
themes_default,
|
|
updateSiteConfig
|
|
} from "./chunks/mermaid.core/chunk-ABZYJK2D.mjs";
|
|
import {
|
|
__name,
|
|
log,
|
|
setLogLevel
|
|
} from "./chunks/mermaid.core/chunk-AGHRB4JF.mjs";
|
|
|
|
// src/mermaid.ts
|
|
import { dedent } from "ts-dedent";
|
|
|
|
// src/diagrams/c4/c4Detector.ts
|
|
var id = "c4";
|
|
var detector = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
|
|
}, "detector");
|
|
var loader = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/c4Diagram-FPNF74CW.mjs");
|
|
return { id, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin = {
|
|
id,
|
|
detector,
|
|
loader
|
|
};
|
|
var c4Detector_default = plugin;
|
|
|
|
// src/diagrams/flowchart/flowDetector.ts
|
|
var id2 = "flowchart";
|
|
var detector2 = /* @__PURE__ */ __name((txt, config) => {
|
|
if (config?.flowchart?.defaultRenderer === "dagre-wrapper" || config?.flowchart?.defaultRenderer === "elk") {
|
|
return false;
|
|
}
|
|
return /^\s*graph/.test(txt);
|
|
}, "detector");
|
|
var loader2 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/flowDiagram-PVAE7QVJ.mjs");
|
|
return { id: id2, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin2 = {
|
|
id: id2,
|
|
detector: detector2,
|
|
loader: loader2
|
|
};
|
|
var flowDetector_default = plugin2;
|
|
|
|
// src/diagrams/flowchart/flowDetector-v2.ts
|
|
var id3 = "flowchart-v2";
|
|
var detector3 = /* @__PURE__ */ __name((txt, config) => {
|
|
if (config?.flowchart?.defaultRenderer === "dagre-d3") {
|
|
return false;
|
|
}
|
|
if (config?.flowchart?.defaultRenderer === "elk") {
|
|
config.layout = "elk";
|
|
}
|
|
if (/^\s*graph/.test(txt) && config?.flowchart?.defaultRenderer === "dagre-wrapper") {
|
|
return true;
|
|
}
|
|
return /^\s*flowchart/.test(txt);
|
|
}, "detector");
|
|
var loader3 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/flowDiagram-PVAE7QVJ.mjs");
|
|
return { id: id3, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin3 = {
|
|
id: id3,
|
|
detector: detector3,
|
|
loader: loader3
|
|
};
|
|
var flowDetector_v2_default = plugin3;
|
|
|
|
// src/diagrams/er/erDetector.ts
|
|
var id4 = "er";
|
|
var detector4 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*erDiagram/.test(txt);
|
|
}, "detector");
|
|
var loader4 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/erDiagram-AWTI2OKA.mjs");
|
|
return { id: id4, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin4 = {
|
|
id: id4,
|
|
detector: detector4,
|
|
loader: loader4
|
|
};
|
|
var erDetector_default = plugin4;
|
|
|
|
// src/diagrams/git/gitGraphDetector.ts
|
|
var id5 = "gitGraph";
|
|
var detector5 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*gitGraph/.test(txt);
|
|
}, "detector");
|
|
var loader5 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/gitGraphDiagram-NY62KEGX.mjs");
|
|
return { id: id5, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin5 = {
|
|
id: id5,
|
|
detector: detector5,
|
|
loader: loader5
|
|
};
|
|
var gitGraphDetector_default = plugin5;
|
|
|
|
// src/diagrams/gantt/ganttDetector.ts
|
|
var id6 = "gantt";
|
|
var detector6 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*gantt/.test(txt);
|
|
}, "detector");
|
|
var loader6 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/ganttDiagram-OWAHRB6G.mjs");
|
|
return { id: id6, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin6 = {
|
|
id: id6,
|
|
detector: detector6,
|
|
loader: loader6
|
|
};
|
|
var ganttDetector_default = plugin6;
|
|
|
|
// src/diagrams/info/infoDetector.ts
|
|
var id7 = "info";
|
|
var detector7 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*info/.test(txt);
|
|
}, "detector");
|
|
var loader7 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/infoDiagram-STP46IZ2.mjs");
|
|
return { id: id7, diagram: diagram2 };
|
|
}, "loader");
|
|
var info = {
|
|
id: id7,
|
|
detector: detector7,
|
|
loader: loader7
|
|
};
|
|
|
|
// src/diagrams/pie/pieDetector.ts
|
|
var id8 = "pie";
|
|
var detector8 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*pie/.test(txt);
|
|
}, "detector");
|
|
var loader8 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/pieDiagram-ADFJNKIX.mjs");
|
|
return { id: id8, diagram: diagram2 };
|
|
}, "loader");
|
|
var pie = {
|
|
id: id8,
|
|
detector: detector8,
|
|
loader: loader8
|
|
};
|
|
|
|
// src/diagrams/quadrant-chart/quadrantDetector.ts
|
|
var id9 = "quadrantChart";
|
|
var detector9 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*quadrantChart/.test(txt);
|
|
}, "detector");
|
|
var loader9 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/quadrantDiagram-LMRXKWRM.mjs");
|
|
return { id: id9, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin7 = {
|
|
id: id9,
|
|
detector: detector9,
|
|
loader: loader9
|
|
};
|
|
var quadrantDetector_default = plugin7;
|
|
|
|
// src/diagrams/xychart/xychartDetector.ts
|
|
var id10 = "xychart";
|
|
var detector10 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*xychart(-beta)?/.test(txt);
|
|
}, "detector");
|
|
var loader10 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/xychartDiagram-6GGTOJPD.mjs");
|
|
return { id: id10, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin8 = {
|
|
id: id10,
|
|
detector: detector10,
|
|
loader: loader10
|
|
};
|
|
var xychartDetector_default = plugin8;
|
|
|
|
// src/diagrams/requirement/requirementDetector.ts
|
|
var id11 = "requirement";
|
|
var detector11 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*requirement(Diagram)?/.test(txt);
|
|
}, "detector");
|
|
var loader11 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/requirementDiagram-4UW4RH46.mjs");
|
|
return { id: id11, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin9 = {
|
|
id: id11,
|
|
detector: detector11,
|
|
loader: loader11
|
|
};
|
|
var requirementDetector_default = plugin9;
|
|
|
|
// src/diagrams/sequence/sequenceDetector.ts
|
|
var id12 = "sequence";
|
|
var detector12 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*sequenceDiagram/.test(txt);
|
|
}, "detector");
|
|
var loader12 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/sequenceDiagram-C3RYC4MD.mjs");
|
|
return { id: id12, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin10 = {
|
|
id: id12,
|
|
detector: detector12,
|
|
loader: loader12
|
|
};
|
|
var sequenceDetector_default = plugin10;
|
|
|
|
// src/diagrams/class/classDetector.ts
|
|
var id13 = "class";
|
|
var detector13 = /* @__PURE__ */ __name((txt, config) => {
|
|
if (config?.class?.defaultRenderer === "dagre-wrapper") {
|
|
return false;
|
|
}
|
|
return /^\s*classDiagram/.test(txt);
|
|
}, "detector");
|
|
var loader13 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/classDiagram-KNZD7YFC.mjs");
|
|
return { id: id13, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin11 = {
|
|
id: id13,
|
|
detector: detector13,
|
|
loader: loader13
|
|
};
|
|
var classDetector_default = plugin11;
|
|
|
|
// src/diagrams/class/classDetector-V2.ts
|
|
var id14 = "classDiagram";
|
|
var detector14 = /* @__PURE__ */ __name((txt, config) => {
|
|
if (/^\s*classDiagram/.test(txt) && config?.class?.defaultRenderer === "dagre-wrapper") {
|
|
return true;
|
|
}
|
|
return /^\s*classDiagram-v2/.test(txt);
|
|
}, "detector");
|
|
var loader14 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/classDiagram-v2-RKCZMP56.mjs");
|
|
return { id: id14, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin12 = {
|
|
id: id14,
|
|
detector: detector14,
|
|
loader: loader14
|
|
};
|
|
var classDetector_V2_default = plugin12;
|
|
|
|
// src/diagrams/state/stateDetector.ts
|
|
var id15 = "state";
|
|
var detector15 = /* @__PURE__ */ __name((txt, config) => {
|
|
if (config?.state?.defaultRenderer === "dagre-wrapper") {
|
|
return false;
|
|
}
|
|
return /^\s*stateDiagram/.test(txt);
|
|
}, "detector");
|
|
var loader15 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/stateDiagram-KXAO66HF.mjs");
|
|
return { id: id15, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin13 = {
|
|
id: id15,
|
|
detector: detector15,
|
|
loader: loader15
|
|
};
|
|
var stateDetector_default = plugin13;
|
|
|
|
// src/diagrams/state/stateDetector-V2.ts
|
|
var id16 = "stateDiagram";
|
|
var detector16 = /* @__PURE__ */ __name((txt, config) => {
|
|
if (/^\s*stateDiagram-v2/.test(txt)) {
|
|
return true;
|
|
}
|
|
if (/^\s*stateDiagram/.test(txt) && config?.state?.defaultRenderer === "dagre-wrapper") {
|
|
return true;
|
|
}
|
|
return false;
|
|
}, "detector");
|
|
var loader16 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/stateDiagram-v2-UMBNRL4Z.mjs");
|
|
return { id: id16, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin14 = {
|
|
id: id16,
|
|
detector: detector16,
|
|
loader: loader16
|
|
};
|
|
var stateDetector_V2_default = plugin14;
|
|
|
|
// src/diagrams/user-journey/journeyDetector.ts
|
|
var id17 = "journey";
|
|
var detector17 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*journey/.test(txt);
|
|
}, "detector");
|
|
var loader17 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/journeyDiagram-BIP6EPQ6.mjs");
|
|
return { id: id17, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin15 = {
|
|
id: id17,
|
|
detector: detector17,
|
|
loader: loader17
|
|
};
|
|
var journeyDetector_default = plugin15;
|
|
|
|
// src/diagrams/error/errorRenderer.ts
|
|
var draw = /* @__PURE__ */ __name((_text, id28, version) => {
|
|
log.debug("rendering svg for syntax error\n");
|
|
const svg = selectSvgElement(id28);
|
|
const g = svg.append("g");
|
|
svg.attr("viewBox", "0 0 2412 512");
|
|
configureSvgSize(svg, 100, 512, true);
|
|
g.append("path").attr("class", "error-icon").attr(
|
|
"d",
|
|
"m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"
|
|
);
|
|
g.append("path").attr("class", "error-icon").attr(
|
|
"d",
|
|
"m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"
|
|
);
|
|
g.append("path").attr("class", "error-icon").attr(
|
|
"d",
|
|
"m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"
|
|
);
|
|
g.append("path").attr("class", "error-icon").attr(
|
|
"d",
|
|
"m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"
|
|
);
|
|
g.append("path").attr("class", "error-icon").attr(
|
|
"d",
|
|
"m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"
|
|
);
|
|
g.append("path").attr("class", "error-icon").attr(
|
|
"d",
|
|
"m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"
|
|
);
|
|
g.append("text").attr("class", "error-text").attr("x", 1440).attr("y", 250).attr("font-size", "150px").style("text-anchor", "middle").text("Syntax error in text");
|
|
g.append("text").attr("class", "error-text").attr("x", 1250).attr("y", 400).attr("font-size", "100px").style("text-anchor", "middle").text(`mermaid version ${version}`);
|
|
}, "draw");
|
|
var renderer = { draw };
|
|
var errorRenderer_default = renderer;
|
|
|
|
// src/diagrams/error/errorDiagram.ts
|
|
var diagram = {
|
|
db: {},
|
|
renderer,
|
|
parser: {
|
|
parse: /* @__PURE__ */ __name(() => {
|
|
return;
|
|
}, "parse")
|
|
}
|
|
};
|
|
var errorDiagram_default = diagram;
|
|
|
|
// src/diagrams/flowchart/elk/detector.ts
|
|
var id18 = "flowchart-elk";
|
|
var detector18 = /* @__PURE__ */ __name((txt, config = {}) => {
|
|
if (
|
|
// If diagram explicitly states flowchart-elk
|
|
/^\s*flowchart-elk/.test(txt) || // If a flowchart/graph diagram has their default renderer set to elk
|
|
/^\s*(flowchart|graph)/.test(txt) && config?.flowchart?.defaultRenderer === "elk"
|
|
) {
|
|
config.layout = "elk";
|
|
return true;
|
|
}
|
|
return false;
|
|
}, "detector");
|
|
var loader18 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/flowDiagram-PVAE7QVJ.mjs");
|
|
return { id: id18, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin16 = {
|
|
id: id18,
|
|
detector: detector18,
|
|
loader: loader18
|
|
};
|
|
var detector_default = plugin16;
|
|
|
|
// src/diagrams/timeline/detector.ts
|
|
var id19 = "timeline";
|
|
var detector19 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*timeline/.test(txt);
|
|
}, "detector");
|
|
var loader19 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/timeline-definition-XQNQX7LJ.mjs");
|
|
return { id: id19, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin17 = {
|
|
id: id19,
|
|
detector: detector19,
|
|
loader: loader19
|
|
};
|
|
var detector_default2 = plugin17;
|
|
|
|
// src/diagrams/mindmap/detector.ts
|
|
var id20 = "mindmap";
|
|
var detector20 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*mindmap/.test(txt);
|
|
}, "detector");
|
|
var loader20 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/mindmap-definition-Q6HEUPPD.mjs");
|
|
return { id: id20, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin18 = {
|
|
id: id20,
|
|
detector: detector20,
|
|
loader: loader20
|
|
};
|
|
var detector_default3 = plugin18;
|
|
|
|
// src/diagrams/kanban/detector.ts
|
|
var id21 = "kanban";
|
|
var detector21 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*kanban/.test(txt);
|
|
}, "detector");
|
|
var loader21 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/kanban-definition-6OIFK2YF.mjs");
|
|
return { id: id21, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin19 = {
|
|
id: id21,
|
|
detector: detector21,
|
|
loader: loader21
|
|
};
|
|
var detector_default4 = plugin19;
|
|
|
|
// src/diagrams/sankey/sankeyDetector.ts
|
|
var id22 = "sankey";
|
|
var detector22 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*sankey(-beta)?/.test(txt);
|
|
}, "detector");
|
|
var loader22 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/sankeyDiagram-GR3RE2ED.mjs");
|
|
return { id: id22, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin20 = {
|
|
id: id22,
|
|
detector: detector22,
|
|
loader: loader22
|
|
};
|
|
var sankeyDetector_default = plugin20;
|
|
|
|
// src/diagrams/packet/detector.ts
|
|
var id23 = "packet";
|
|
var detector23 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*packet(-beta)?/.test(txt);
|
|
}, "detector");
|
|
var loader23 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/diagram-S2PKOQOG.mjs");
|
|
return { id: id23, diagram: diagram2 };
|
|
}, "loader");
|
|
var packet = {
|
|
id: id23,
|
|
detector: detector23,
|
|
loader: loader23
|
|
};
|
|
|
|
// src/diagrams/radar/detector.ts
|
|
var id24 = "radar";
|
|
var detector24 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*radar-beta/.test(txt);
|
|
}, "detector");
|
|
var loader24 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/diagram-QEK2KX5R.mjs");
|
|
return { id: id24, diagram: diagram2 };
|
|
}, "loader");
|
|
var radar = {
|
|
id: id24,
|
|
detector: detector24,
|
|
loader: loader24
|
|
};
|
|
|
|
// src/diagrams/block/blockDetector.ts
|
|
var id25 = "block";
|
|
var detector25 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*block(-beta)?/.test(txt);
|
|
}, "detector");
|
|
var loader25 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/blockDiagram-QIGZ2CNN.mjs");
|
|
return { id: id25, diagram: diagram2 };
|
|
}, "loader");
|
|
var plugin21 = {
|
|
id: id25,
|
|
detector: detector25,
|
|
loader: loader25
|
|
};
|
|
var blockDetector_default = plugin21;
|
|
|
|
// src/diagrams/architecture/architectureDetector.ts
|
|
var id26 = "architecture";
|
|
var detector26 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*architecture/.test(txt);
|
|
}, "detector");
|
|
var loader26 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/architectureDiagram-W76B3OCA.mjs");
|
|
return { id: id26, diagram: diagram2 };
|
|
}, "loader");
|
|
var architecture = {
|
|
id: id26,
|
|
detector: detector26,
|
|
loader: loader26
|
|
};
|
|
var architectureDetector_default = architecture;
|
|
|
|
// src/diagrams/treemap/detector.ts
|
|
var id27 = "treemap";
|
|
var detector27 = /* @__PURE__ */ __name((txt) => {
|
|
return /^\s*treemap/.test(txt);
|
|
}, "detector");
|
|
var loader27 = /* @__PURE__ */ __name(async () => {
|
|
const { diagram: diagram2 } = await import("./chunks/mermaid.core/diagram-N5W7TBWH.mjs");
|
|
return { id: id27, diagram: diagram2 };
|
|
}, "loader");
|
|
var treemap = {
|
|
id: id27,
|
|
detector: detector27,
|
|
loader: loader27
|
|
};
|
|
|
|
// src/diagram-api/diagram-orchestration.ts
|
|
var hasLoadedDiagrams = false;
|
|
var addDiagrams = /* @__PURE__ */ __name(() => {
|
|
if (hasLoadedDiagrams) {
|
|
return;
|
|
}
|
|
hasLoadedDiagrams = true;
|
|
registerDiagram("error", errorDiagram_default, (text) => {
|
|
return text.toLowerCase().trim() === "error";
|
|
});
|
|
registerDiagram(
|
|
"---",
|
|
// --- diagram type may appear if YAML front-matter is not parsed correctly
|
|
{
|
|
db: {
|
|
clear: /* @__PURE__ */ __name(() => {
|
|
}, "clear")
|
|
},
|
|
styles: {},
|
|
// should never be used
|
|
renderer: {
|
|
draw: /* @__PURE__ */ __name(() => {
|
|
}, "draw")
|
|
},
|
|
parser: {
|
|
parse: /* @__PURE__ */ __name(() => {
|
|
throw new Error(
|
|
"Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks"
|
|
);
|
|
}, "parse")
|
|
},
|
|
init: /* @__PURE__ */ __name(() => null, "init")
|
|
// no op
|
|
},
|
|
(text) => {
|
|
return text.toLowerCase().trimStart().startsWith("---");
|
|
}
|
|
);
|
|
if (true) {
|
|
registerLazyLoadedDiagrams(detector_default, detector_default3, architectureDetector_default);
|
|
}
|
|
registerLazyLoadedDiagrams(
|
|
c4Detector_default,
|
|
detector_default4,
|
|
classDetector_V2_default,
|
|
classDetector_default,
|
|
erDetector_default,
|
|
ganttDetector_default,
|
|
info,
|
|
pie,
|
|
requirementDetector_default,
|
|
sequenceDetector_default,
|
|
flowDetector_v2_default,
|
|
flowDetector_default,
|
|
detector_default2,
|
|
gitGraphDetector_default,
|
|
stateDetector_V2_default,
|
|
stateDetector_default,
|
|
journeyDetector_default,
|
|
quadrantDetector_default,
|
|
sankeyDetector_default,
|
|
packet,
|
|
xychartDetector_default,
|
|
blockDetector_default,
|
|
radar,
|
|
treemap
|
|
);
|
|
}, "addDiagrams");
|
|
|
|
// src/diagram-api/loadDiagram.ts
|
|
var loadRegisteredDiagrams = /* @__PURE__ */ __name(async () => {
|
|
log.debug(`Loading registered diagrams`);
|
|
const results = await Promise.allSettled(
|
|
Object.entries(detectors).map(async ([key, { detector: detector28, loader: loader28 }]) => {
|
|
if (!loader28) {
|
|
return;
|
|
}
|
|
try {
|
|
getDiagram(key);
|
|
} catch {
|
|
try {
|
|
const { diagram: diagram2, id: id28 } = await loader28();
|
|
registerDiagram(id28, diagram2, detector28);
|
|
} catch (err) {
|
|
log.error(`Failed to load external diagram with key ${key}. Removing from detectors.`);
|
|
delete detectors[key];
|
|
throw err;
|
|
}
|
|
}
|
|
})
|
|
);
|
|
const failed = results.filter((result) => result.status === "rejected");
|
|
if (failed.length > 0) {
|
|
log.error(`Failed to load ${failed.length} external diagrams`);
|
|
for (const res of failed) {
|
|
log.error(res);
|
|
}
|
|
throw new Error(`Failed to load ${failed.length} external diagrams`);
|
|
}
|
|
}, "loadRegisteredDiagrams");
|
|
|
|
// src/mermaidAPI.ts
|
|
import { select } from "d3";
|
|
import { compile, serialize, stringify } from "stylis";
|
|
import DOMPurify from "dompurify";
|
|
import isEmpty from "lodash-es/isEmpty.js";
|
|
|
|
// src/accessibility.ts
|
|
var SVG_ROLE = "graphics-document document";
|
|
function setA11yDiagramInfo(svg, diagramType) {
|
|
svg.attr("role", SVG_ROLE);
|
|
if (diagramType !== "") {
|
|
svg.attr("aria-roledescription", diagramType);
|
|
}
|
|
}
|
|
__name(setA11yDiagramInfo, "setA11yDiagramInfo");
|
|
function addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, baseId) {
|
|
if (svg.insert === void 0) {
|
|
return;
|
|
}
|
|
if (a11yDesc) {
|
|
const descId = `chart-desc-${baseId}`;
|
|
svg.attr("aria-describedby", descId);
|
|
svg.insert("desc", ":first-child").attr("id", descId).text(a11yDesc);
|
|
}
|
|
if (a11yTitle) {
|
|
const titleId = `chart-title-${baseId}`;
|
|
svg.attr("aria-labelledby", titleId);
|
|
svg.insert("title", ":first-child").attr("id", titleId).text(a11yTitle);
|
|
}
|
|
}
|
|
__name(addSVGa11yTitleDescription, "addSVGa11yTitleDescription");
|
|
|
|
// src/Diagram.ts
|
|
var Diagram = class _Diagram {
|
|
constructor(type, text, db, parser, renderer2) {
|
|
this.type = type;
|
|
this.text = text;
|
|
this.db = db;
|
|
this.parser = parser;
|
|
this.renderer = renderer2;
|
|
}
|
|
static {
|
|
__name(this, "Diagram");
|
|
}
|
|
static async fromText(text, metadata = {}) {
|
|
const config = getConfig();
|
|
const type = detectType(text, config);
|
|
text = encodeEntities(text) + "\n";
|
|
try {
|
|
getDiagram(type);
|
|
} catch {
|
|
const loader28 = getDiagramLoader(type);
|
|
if (!loader28) {
|
|
throw new UnknownDiagramError(`Diagram ${type} not found.`);
|
|
}
|
|
const { id: id28, diagram: diagram2 } = await loader28();
|
|
registerDiagram(id28, diagram2);
|
|
}
|
|
const { db, parser, renderer: renderer2, init: init2 } = getDiagram(type);
|
|
if (parser.parser) {
|
|
parser.parser.yy = db;
|
|
}
|
|
db.clear?.();
|
|
init2?.(config);
|
|
if (metadata.title) {
|
|
db.setDiagramTitle?.(metadata.title);
|
|
}
|
|
await parser.parse(text);
|
|
return new _Diagram(type, text, db, parser, renderer2);
|
|
}
|
|
async render(id28, version) {
|
|
await this.renderer.draw(this.text, id28, version, this);
|
|
}
|
|
getParser() {
|
|
return this.parser;
|
|
}
|
|
getType() {
|
|
return this.type;
|
|
}
|
|
};
|
|
|
|
// src/interactionDb.ts
|
|
var interactionFunctions = [];
|
|
var attachFunctions = /* @__PURE__ */ __name(() => {
|
|
interactionFunctions.forEach((f) => {
|
|
f();
|
|
});
|
|
interactionFunctions = [];
|
|
}, "attachFunctions");
|
|
|
|
// src/diagram-api/comments.ts
|
|
var cleanupComments = /* @__PURE__ */ __name((text) => {
|
|
return text.replace(/^\s*%%(?!{)[^\n]+\n?/gm, "").trimStart();
|
|
}, "cleanupComments");
|
|
|
|
// src/diagram-api/frontmatter.ts
|
|
function extractFrontMatter(text) {
|
|
const matches = text.match(frontMatterRegex);
|
|
if (!matches) {
|
|
return {
|
|
text,
|
|
metadata: {}
|
|
};
|
|
}
|
|
let parsed = load(matches[1], {
|
|
// To support config, we need JSON schema.
|
|
// https://www.yaml.org/spec/1.2/spec.html#id2803231
|
|
schema: JSON_SCHEMA
|
|
}) ?? {};
|
|
parsed = typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
|
|
const metadata = {};
|
|
if (parsed.displayMode) {
|
|
metadata.displayMode = parsed.displayMode.toString();
|
|
}
|
|
if (parsed.title) {
|
|
metadata.title = parsed.title.toString();
|
|
}
|
|
if (parsed.config) {
|
|
metadata.config = parsed.config;
|
|
}
|
|
return {
|
|
text: text.slice(matches[0].length),
|
|
metadata
|
|
};
|
|
}
|
|
__name(extractFrontMatter, "extractFrontMatter");
|
|
|
|
// src/preprocess.ts
|
|
var cleanupText = /* @__PURE__ */ __name((code) => {
|
|
return code.replace(/\r\n?/g, "\n").replace(
|
|
/<(\w+)([^>]*)>/g,
|
|
(match, tag, attributes) => "<" + tag + attributes.replace(/="([^"]*)"/g, "='$1'") + ">"
|
|
);
|
|
}, "cleanupText");
|
|
var processFrontmatter = /* @__PURE__ */ __name((code) => {
|
|
const { text, metadata } = extractFrontMatter(code);
|
|
const { displayMode, title, config = {} } = metadata;
|
|
if (displayMode) {
|
|
if (!config.gantt) {
|
|
config.gantt = {};
|
|
}
|
|
config.gantt.displayMode = displayMode;
|
|
}
|
|
return { title, config, text };
|
|
}, "processFrontmatter");
|
|
var processDirectives = /* @__PURE__ */ __name((code) => {
|
|
const initDirective = utils_default.detectInit(code) ?? {};
|
|
const wrapDirectives = utils_default.detectDirective(code, "wrap");
|
|
if (Array.isArray(wrapDirectives)) {
|
|
initDirective.wrap = wrapDirectives.some(({ type }) => type === "wrap");
|
|
} else if (wrapDirectives?.type === "wrap") {
|
|
initDirective.wrap = true;
|
|
}
|
|
return {
|
|
text: removeDirectives(code),
|
|
directive: initDirective
|
|
};
|
|
}, "processDirectives");
|
|
function preprocessDiagram(code) {
|
|
const cleanedCode = cleanupText(code);
|
|
const frontMatterResult = processFrontmatter(cleanedCode);
|
|
const directiveResult = processDirectives(frontMatterResult.text);
|
|
const config = cleanAndMerge(frontMatterResult.config, directiveResult.directive);
|
|
code = cleanupComments(directiveResult.text);
|
|
return {
|
|
code,
|
|
title: frontMatterResult.title,
|
|
config
|
|
};
|
|
}
|
|
__name(preprocessDiagram, "preprocessDiagram");
|
|
|
|
// src/utils/base64.ts
|
|
function toBase64(str) {
|
|
const utf8Bytes = new TextEncoder().encode(str);
|
|
const utf8Str = Array.from(utf8Bytes, (byte) => String.fromCodePoint(byte)).join("");
|
|
return btoa(utf8Str);
|
|
}
|
|
__name(toBase64, "toBase64");
|
|
|
|
// src/mermaidAPI.ts
|
|
var MAX_TEXTLENGTH = 5e4;
|
|
var MAX_TEXTLENGTH_EXCEEDED_MSG = "graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa";
|
|
var SECURITY_LVL_SANDBOX = "sandbox";
|
|
var SECURITY_LVL_LOOSE = "loose";
|
|
var XMLNS_SVG_STD = "http://www.w3.org/2000/svg";
|
|
var XMLNS_XLINK_STD = "http://www.w3.org/1999/xlink";
|
|
var XMLNS_XHTML_STD = "http://www.w3.org/1999/xhtml";
|
|
var IFRAME_WIDTH = "100%";
|
|
var IFRAME_HEIGHT = "100%";
|
|
var IFRAME_STYLES = "border:0;margin:0;";
|
|
var IFRAME_BODY_STYLE = "margin:0";
|
|
var IFRAME_SANDBOX_OPTS = "allow-top-navigation-by-user-activation allow-popups";
|
|
var IFRAME_NOT_SUPPORTED_MSG = 'The "iframe" tag is not supported by your browser.';
|
|
var DOMPURIFY_TAGS = ["foreignobject"];
|
|
var DOMPURIFY_ATTR = ["dominant-baseline"];
|
|
function processAndSetConfigs(text) {
|
|
const processed = preprocessDiagram(text);
|
|
reset();
|
|
addDirective(processed.config ?? {});
|
|
return processed;
|
|
}
|
|
__name(processAndSetConfigs, "processAndSetConfigs");
|
|
async function parse(text, parseOptions) {
|
|
addDiagrams();
|
|
try {
|
|
const { code, config } = processAndSetConfigs(text);
|
|
const diagram2 = await getDiagramFromText(code);
|
|
return { diagramType: diagram2.type, config };
|
|
} catch (error) {
|
|
if (parseOptions?.suppressErrors) {
|
|
return false;
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
__name(parse, "parse");
|
|
var cssImportantStyles = /* @__PURE__ */ __name((cssClass, element, cssClasses = []) => {
|
|
return `
|
|
.${cssClass} ${element} { ${cssClasses.join(" !important; ")} !important; }`;
|
|
}, "cssImportantStyles");
|
|
var createCssStyles = /* @__PURE__ */ __name((config, classDefs = /* @__PURE__ */ new Map()) => {
|
|
let cssStyles = "";
|
|
if (config.themeCSS !== void 0) {
|
|
cssStyles += `
|
|
${config.themeCSS}`;
|
|
}
|
|
if (config.fontFamily !== void 0) {
|
|
cssStyles += `
|
|
:root { --mermaid-font-family: ${config.fontFamily}}`;
|
|
}
|
|
if (config.altFontFamily !== void 0) {
|
|
cssStyles += `
|
|
:root { --mermaid-alt-font-family: ${config.altFontFamily}}`;
|
|
}
|
|
if (classDefs instanceof Map) {
|
|
const htmlLabels = config.htmlLabels ?? config.flowchart?.htmlLabels;
|
|
const cssHtmlElements = ["> *", "span"];
|
|
const cssShapeElements = ["rect", "polygon", "ellipse", "circle", "path"];
|
|
const cssElements = htmlLabels ? cssHtmlElements : cssShapeElements;
|
|
classDefs.forEach((styleClassDef) => {
|
|
if (!isEmpty(styleClassDef.styles)) {
|
|
cssElements.forEach((cssElement) => {
|
|
cssStyles += cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles);
|
|
});
|
|
}
|
|
if (!isEmpty(styleClassDef.textStyles)) {
|
|
cssStyles += cssImportantStyles(
|
|
styleClassDef.id,
|
|
"tspan",
|
|
(styleClassDef?.textStyles || []).map((s) => s.replace("color", "fill"))
|
|
);
|
|
}
|
|
});
|
|
}
|
|
return cssStyles;
|
|
}, "createCssStyles");
|
|
var createUserStyles = /* @__PURE__ */ __name((config, graphType, classDefs, svgId) => {
|
|
const userCSSstyles = createCssStyles(config, classDefs);
|
|
const allStyles = styles_default(graphType, userCSSstyles, config.themeVariables);
|
|
return serialize(compile(`${svgId}{${allStyles}}`), stringify);
|
|
}, "createUserStyles");
|
|
var cleanUpSvgCode = /* @__PURE__ */ __name((svgCode = "", inSandboxMode, useArrowMarkerUrls) => {
|
|
let cleanedUpSvg = svgCode;
|
|
if (!useArrowMarkerUrls && !inSandboxMode) {
|
|
cleanedUpSvg = cleanedUpSvg.replace(
|
|
/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,
|
|
'marker-end="url(#'
|
|
);
|
|
}
|
|
cleanedUpSvg = decodeEntities(cleanedUpSvg);
|
|
cleanedUpSvg = cleanedUpSvg.replace(/<br>/g, "<br/>");
|
|
return cleanedUpSvg;
|
|
}, "cleanUpSvgCode");
|
|
var putIntoIFrame = /* @__PURE__ */ __name((svgCode = "", svgElement) => {
|
|
const height = svgElement?.viewBox?.baseVal?.height ? svgElement.viewBox.baseVal.height + "px" : IFRAME_HEIGHT;
|
|
const base64encodedSrc = toBase64(`<body style="${IFRAME_BODY_STYLE}">${svgCode}</body>`);
|
|
return `<iframe style="width:${IFRAME_WIDTH};height:${height};${IFRAME_STYLES}" src="data:text/html;charset=UTF-8;base64,${base64encodedSrc}" sandbox="${IFRAME_SANDBOX_OPTS}">
|
|
${IFRAME_NOT_SUPPORTED_MSG}
|
|
</iframe>`;
|
|
}, "putIntoIFrame");
|
|
var appendDivSvgG = /* @__PURE__ */ __name((parentRoot, id28, enclosingDivId, divStyle, svgXlink) => {
|
|
const enclosingDiv = parentRoot.append("div");
|
|
enclosingDiv.attr("id", enclosingDivId);
|
|
if (divStyle) {
|
|
enclosingDiv.attr("style", divStyle);
|
|
}
|
|
const svgNode = enclosingDiv.append("svg").attr("id", id28).attr("width", "100%").attr("xmlns", XMLNS_SVG_STD);
|
|
if (svgXlink) {
|
|
svgNode.attr("xmlns:xlink", svgXlink);
|
|
}
|
|
svgNode.append("g");
|
|
return parentRoot;
|
|
}, "appendDivSvgG");
|
|
function sandboxedIframe(parentNode, iFrameId) {
|
|
return parentNode.append("iframe").attr("id", iFrameId).attr("style", "width: 100%; height: 100%;").attr("sandbox", "");
|
|
}
|
|
__name(sandboxedIframe, "sandboxedIframe");
|
|
var removeExistingElements = /* @__PURE__ */ __name((doc, id28, divId, iFrameId) => {
|
|
doc.getElementById(id28)?.remove();
|
|
doc.getElementById(divId)?.remove();
|
|
doc.getElementById(iFrameId)?.remove();
|
|
}, "removeExistingElements");
|
|
var render = /* @__PURE__ */ __name(async function(id28, text, svgContainingElement) {
|
|
addDiagrams();
|
|
const processed = processAndSetConfigs(text);
|
|
text = processed.code;
|
|
const config = getConfig();
|
|
log.debug(config);
|
|
if (text.length > (config?.maxTextSize ?? MAX_TEXTLENGTH)) {
|
|
text = MAX_TEXTLENGTH_EXCEEDED_MSG;
|
|
}
|
|
const idSelector = "#" + id28;
|
|
const iFrameID = "i" + id28;
|
|
const iFrameID_selector = "#" + iFrameID;
|
|
const enclosingDivID = "d" + id28;
|
|
const enclosingDivID_selector = "#" + enclosingDivID;
|
|
const removeTempElements = /* @__PURE__ */ __name(() => {
|
|
const tmpElementSelector = isSandboxed ? iFrameID_selector : enclosingDivID_selector;
|
|
const node = select(tmpElementSelector).node();
|
|
if (node && "remove" in node) {
|
|
node.remove();
|
|
}
|
|
}, "removeTempElements");
|
|
let root = select("body");
|
|
const isSandboxed = config.securityLevel === SECURITY_LVL_SANDBOX;
|
|
const isLooseSecurityLevel = config.securityLevel === SECURITY_LVL_LOOSE;
|
|
const fontFamily = config.fontFamily;
|
|
if (svgContainingElement !== void 0) {
|
|
if (svgContainingElement) {
|
|
svgContainingElement.innerHTML = "";
|
|
}
|
|
if (isSandboxed) {
|
|
const iframe = sandboxedIframe(select(svgContainingElement), iFrameID);
|
|
root = select(iframe.nodes()[0].contentDocument.body);
|
|
root.node().style.margin = 0;
|
|
} else {
|
|
root = select(svgContainingElement);
|
|
}
|
|
appendDivSvgG(root, id28, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD);
|
|
} else {
|
|
removeExistingElements(document, id28, enclosingDivID, iFrameID);
|
|
if (isSandboxed) {
|
|
const iframe = sandboxedIframe(select("body"), iFrameID);
|
|
root = select(iframe.nodes()[0].contentDocument.body);
|
|
root.node().style.margin = 0;
|
|
} else {
|
|
root = select("body");
|
|
}
|
|
appendDivSvgG(root, id28, enclosingDivID);
|
|
}
|
|
let diag;
|
|
let parseEncounteredException;
|
|
try {
|
|
diag = await Diagram.fromText(text, { title: processed.title });
|
|
} catch (error) {
|
|
if (config.suppressErrorRendering) {
|
|
removeTempElements();
|
|
throw error;
|
|
}
|
|
diag = await Diagram.fromText("error");
|
|
parseEncounteredException = error;
|
|
}
|
|
const element = root.select(enclosingDivID_selector).node();
|
|
const diagramType = diag.type;
|
|
const svg = element.firstChild;
|
|
const firstChild = svg.firstChild;
|
|
const diagramClassDefs = diag.renderer.getClasses?.(text, diag);
|
|
const rules = createUserStyles(config, diagramType, diagramClassDefs, idSelector);
|
|
const style1 = document.createElement("style");
|
|
style1.innerHTML = rules;
|
|
svg.insertBefore(style1, firstChild);
|
|
try {
|
|
await diag.renderer.draw(text, id28, package_default.version, diag);
|
|
} catch (e) {
|
|
if (config.suppressErrorRendering) {
|
|
removeTempElements();
|
|
} else {
|
|
errorRenderer_default.draw(text, id28, package_default.version);
|
|
}
|
|
throw e;
|
|
}
|
|
const svgNode = root.select(`${enclosingDivID_selector} svg`);
|
|
const a11yTitle = diag.db.getAccTitle?.();
|
|
const a11yDescr = diag.db.getAccDescription?.();
|
|
addA11yInfo(diagramType, svgNode, a11yTitle, a11yDescr);
|
|
root.select(`[id="${id28}"]`).selectAll("foreignobject > *").attr("xmlns", XMLNS_XHTML_STD);
|
|
let svgCode = root.select(enclosingDivID_selector).node().innerHTML;
|
|
log.debug("config.arrowMarkerAbsolute", config.arrowMarkerAbsolute);
|
|
svgCode = cleanUpSvgCode(svgCode, isSandboxed, evaluate(config.arrowMarkerAbsolute));
|
|
if (isSandboxed) {
|
|
const svgEl = root.select(enclosingDivID_selector + " svg").node();
|
|
svgCode = putIntoIFrame(svgCode, svgEl);
|
|
} else if (!isLooseSecurityLevel) {
|
|
svgCode = DOMPurify.sanitize(svgCode, {
|
|
ADD_TAGS: DOMPURIFY_TAGS,
|
|
ADD_ATTR: DOMPURIFY_ATTR,
|
|
HTML_INTEGRATION_POINTS: { foreignobject: true }
|
|
});
|
|
}
|
|
attachFunctions();
|
|
if (parseEncounteredException) {
|
|
throw parseEncounteredException;
|
|
}
|
|
removeTempElements();
|
|
return {
|
|
diagramType,
|
|
svg: svgCode,
|
|
bindFunctions: diag.db.bindFunctions
|
|
};
|
|
}, "render");
|
|
function initialize(userOptions = {}) {
|
|
const options = assignWithDepth_default({}, userOptions);
|
|
if (options?.fontFamily && !options.themeVariables?.fontFamily) {
|
|
if (!options.themeVariables) {
|
|
options.themeVariables = {};
|
|
}
|
|
options.themeVariables.fontFamily = options.fontFamily;
|
|
}
|
|
saveConfigFromInitialize(options);
|
|
if (options?.theme && options.theme in themes_default) {
|
|
options.themeVariables = themes_default[options.theme].getThemeVariables(
|
|
options.themeVariables
|
|
);
|
|
} else if (options) {
|
|
options.themeVariables = themes_default.default.getThemeVariables(options.themeVariables);
|
|
}
|
|
const config = typeof options === "object" ? setSiteConfig(options) : getSiteConfig();
|
|
setLogLevel(config.logLevel);
|
|
addDiagrams();
|
|
}
|
|
__name(initialize, "initialize");
|
|
var getDiagramFromText = /* @__PURE__ */ __name((text, metadata = {}) => {
|
|
const { code } = preprocessDiagram(text);
|
|
return Diagram.fromText(code, metadata);
|
|
}, "getDiagramFromText");
|
|
function addA11yInfo(diagramType, svgNode, a11yTitle, a11yDescr) {
|
|
setA11yDiagramInfo(svgNode, diagramType);
|
|
addSVGa11yTitleDescription(svgNode, a11yTitle, a11yDescr, svgNode.attr("id"));
|
|
}
|
|
__name(addA11yInfo, "addA11yInfo");
|
|
var mermaidAPI = Object.freeze({
|
|
render,
|
|
parse,
|
|
getDiagramFromText,
|
|
initialize,
|
|
getConfig,
|
|
setConfig,
|
|
getSiteConfig,
|
|
updateSiteConfig,
|
|
reset: /* @__PURE__ */ __name(() => {
|
|
reset();
|
|
}, "reset"),
|
|
globalReset: /* @__PURE__ */ __name(() => {
|
|
reset(defaultConfig);
|
|
}, "globalReset"),
|
|
defaultConfig
|
|
});
|
|
setLogLevel(getConfig().logLevel);
|
|
reset(getConfig());
|
|
|
|
// src/mermaid.ts
|
|
var handleError = /* @__PURE__ */ __name((error, errors, parseError) => {
|
|
log.warn(error);
|
|
if (isDetailedError(error)) {
|
|
if (parseError) {
|
|
parseError(error.str, error.hash);
|
|
}
|
|
errors.push({ ...error, message: error.str, error });
|
|
} else {
|
|
if (parseError) {
|
|
parseError(error);
|
|
}
|
|
if (error instanceof Error) {
|
|
errors.push({
|
|
str: error.message,
|
|
message: error.message,
|
|
hash: error.name,
|
|
error
|
|
});
|
|
}
|
|
}
|
|
}, "handleError");
|
|
var run = /* @__PURE__ */ __name(async function(options = {
|
|
querySelector: ".mermaid"
|
|
}) {
|
|
try {
|
|
await runThrowsErrors(options);
|
|
} catch (e) {
|
|
if (isDetailedError(e)) {
|
|
log.error(e.str);
|
|
}
|
|
if (mermaid.parseError) {
|
|
mermaid.parseError(e);
|
|
}
|
|
if (!options.suppressErrors) {
|
|
log.error("Use the suppressErrors option to suppress these errors");
|
|
throw e;
|
|
}
|
|
}
|
|
}, "run");
|
|
var runThrowsErrors = /* @__PURE__ */ __name(async function({ postRenderCallback, querySelector, nodes } = {
|
|
querySelector: ".mermaid"
|
|
}) {
|
|
const conf = mermaidAPI.getConfig();
|
|
log.debug(`${!postRenderCallback ? "No " : ""}Callback function found`);
|
|
let nodesToProcess;
|
|
if (nodes) {
|
|
nodesToProcess = nodes;
|
|
} else if (querySelector) {
|
|
nodesToProcess = document.querySelectorAll(querySelector);
|
|
} else {
|
|
throw new Error("Nodes and querySelector are both undefined");
|
|
}
|
|
log.debug(`Found ${nodesToProcess.length} diagrams`);
|
|
if (conf?.startOnLoad !== void 0) {
|
|
log.debug("Start On Load: " + conf?.startOnLoad);
|
|
mermaidAPI.updateSiteConfig({ startOnLoad: conf?.startOnLoad });
|
|
}
|
|
const idGenerator = new utils_default.InitIDGenerator(conf.deterministicIds, conf.deterministicIDSeed);
|
|
let txt;
|
|
const errors = [];
|
|
for (const element of Array.from(nodesToProcess)) {
|
|
log.info("Rendering diagram: " + element.id);
|
|
if (element.getAttribute("data-processed")) {
|
|
continue;
|
|
}
|
|
element.setAttribute("data-processed", "true");
|
|
const id28 = `mermaid-${idGenerator.next()}`;
|
|
txt = element.innerHTML;
|
|
txt = dedent(utils_default.entityDecode(txt)).trim().replace(/<br\s*\/?>/gi, "<br/>");
|
|
const init2 = utils_default.detectInit(txt);
|
|
if (init2) {
|
|
log.debug("Detected early reinit: ", init2);
|
|
}
|
|
try {
|
|
const { svg, bindFunctions } = await render2(id28, txt, element);
|
|
element.innerHTML = svg;
|
|
if (postRenderCallback) {
|
|
await postRenderCallback(id28);
|
|
}
|
|
if (bindFunctions) {
|
|
bindFunctions(element);
|
|
}
|
|
} catch (error) {
|
|
handleError(error, errors, mermaid.parseError);
|
|
}
|
|
}
|
|
if (errors.length > 0) {
|
|
throw errors[0];
|
|
}
|
|
}, "runThrowsErrors");
|
|
var initialize2 = /* @__PURE__ */ __name(function(config) {
|
|
mermaidAPI.initialize(config);
|
|
}, "initialize");
|
|
var init = /* @__PURE__ */ __name(async function(config, nodes, callback) {
|
|
log.warn("mermaid.init is deprecated. Please use run instead.");
|
|
if (config) {
|
|
initialize2(config);
|
|
}
|
|
const runOptions = { postRenderCallback: callback, querySelector: ".mermaid" };
|
|
if (typeof nodes === "string") {
|
|
runOptions.querySelector = nodes;
|
|
} else if (nodes) {
|
|
if (nodes instanceof HTMLElement) {
|
|
runOptions.nodes = [nodes];
|
|
} else {
|
|
runOptions.nodes = nodes;
|
|
}
|
|
}
|
|
await run(runOptions);
|
|
}, "init");
|
|
var registerExternalDiagrams = /* @__PURE__ */ __name(async (diagrams, {
|
|
lazyLoad = true
|
|
} = {}) => {
|
|
addDiagrams();
|
|
registerLazyLoadedDiagrams(...diagrams);
|
|
if (lazyLoad === false) {
|
|
await loadRegisteredDiagrams();
|
|
}
|
|
}, "registerExternalDiagrams");
|
|
var contentLoaded = /* @__PURE__ */ __name(function() {
|
|
if (mermaid.startOnLoad) {
|
|
const { startOnLoad } = mermaidAPI.getConfig();
|
|
if (startOnLoad) {
|
|
mermaid.run().catch((err) => log.error("Mermaid failed to initialize", err));
|
|
}
|
|
}
|
|
}, "contentLoaded");
|
|
if (typeof document !== "undefined") {
|
|
window.addEventListener("load", contentLoaded, false);
|
|
}
|
|
var setParseErrorHandler = /* @__PURE__ */ __name(function(parseErrorHandler) {
|
|
mermaid.parseError = parseErrorHandler;
|
|
}, "setParseErrorHandler");
|
|
var executionQueue = [];
|
|
var executionQueueRunning = false;
|
|
var executeQueue = /* @__PURE__ */ __name(async () => {
|
|
if (executionQueueRunning) {
|
|
return;
|
|
}
|
|
executionQueueRunning = true;
|
|
while (executionQueue.length > 0) {
|
|
const f = executionQueue.shift();
|
|
if (f) {
|
|
try {
|
|
await f();
|
|
} catch (e) {
|
|
log.error("Error executing queue", e);
|
|
}
|
|
}
|
|
}
|
|
executionQueueRunning = false;
|
|
}, "executeQueue");
|
|
var parse2 = /* @__PURE__ */ __name(async (text, parseOptions) => {
|
|
return new Promise((resolve, reject) => {
|
|
const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => {
|
|
mermaidAPI.parse(text, parseOptions).then(
|
|
(r) => {
|
|
res(r);
|
|
resolve(r);
|
|
},
|
|
(e) => {
|
|
log.error("Error parsing", e);
|
|
mermaid.parseError?.(e);
|
|
rej(e);
|
|
reject(e);
|
|
}
|
|
);
|
|
}), "performCall");
|
|
executionQueue.push(performCall);
|
|
executeQueue().catch(reject);
|
|
});
|
|
}, "parse");
|
|
var render2 = /* @__PURE__ */ __name((id28, text, container) => {
|
|
return new Promise((resolve, reject) => {
|
|
const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => {
|
|
mermaidAPI.render(id28, text, container).then(
|
|
(r) => {
|
|
res(r);
|
|
resolve(r);
|
|
},
|
|
(e) => {
|
|
log.error("Error parsing", e);
|
|
mermaid.parseError?.(e);
|
|
rej(e);
|
|
reject(e);
|
|
}
|
|
);
|
|
}), "performCall");
|
|
executionQueue.push(performCall);
|
|
executeQueue().catch(reject);
|
|
});
|
|
}, "render");
|
|
var getRegisteredDiagramsMetadata = /* @__PURE__ */ __name(() => {
|
|
return Object.keys(detectors).map((id28) => ({
|
|
id: id28
|
|
}));
|
|
}, "getRegisteredDiagramsMetadata");
|
|
var mermaid = {
|
|
startOnLoad: true,
|
|
mermaidAPI,
|
|
parse: parse2,
|
|
render: render2,
|
|
init,
|
|
run,
|
|
registerExternalDiagrams,
|
|
registerLayoutLoaders,
|
|
initialize: initialize2,
|
|
parseError: void 0,
|
|
contentLoaded,
|
|
setParseErrorHandler,
|
|
detectType,
|
|
registerIconPacks,
|
|
getRegisteredDiagramsMetadata
|
|
};
|
|
var mermaid_default = mermaid;
|
|
export {
|
|
mermaid_default as default
|
|
};
|
|
/*! Check if previously processed */
|
|
/*!
|
|
* Wait for document loaded before starting the execution
|
|
*/
|