mermaid
Version:
Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.
1,555 lines (1,511 loc) • 54.7 kB
JavaScript
import {
package_default
} from "./chunks/mermaid.esm/chunk-5EMSI65K.mjs";
import {
selectSvgElement
} from "./chunks/mermaid.esm/chunk-YIX7P6T4.mjs";
import {
JSON_SCHEMA,
load
} from "./chunks/mermaid.esm/chunk-W3YOBQ4T.mjs";
import {
registerLayoutLoaders
} from "./chunks/mermaid.esm/chunk-H62MP5RN.mjs";
import "./chunks/mermaid.esm/chunk-AGEMWPJR.mjs";
import "./chunks/mermaid.esm/chunk-ZVRJXRH7.mjs";
import {
registerIconPacks
} from "./chunks/mermaid.esm/chunk-Q7X626QO.mjs";
import "./chunks/mermaid.esm/chunk-VKJI5BFR.mjs";
import "./chunks/mermaid.esm/chunk-SVWLYT5M.mjs";
import {
dedent
} from "./chunks/mermaid.esm/chunk-STFVS7YW.mjs";
import {
cleanAndMerge,
decodeEntities,
encodeEntities,
isDetailedError,
removeDirectives,
utils_default
} from "./chunks/mermaid.esm/chunk-YFKFDTKC.mjs";
import "./chunks/mermaid.esm/chunk-GKOISANM.mjs";
import {
UnknownDiagramError,
addDirective,
assignWithDepth_default,
configureSvgSize,
defaultConfig,
detectType,
detectors,
evaluate,
frontMatterRegex,
getConfig,
getDiagram,
getDiagramLoader,
getSiteConfig,
log,
purify,
registerDiagram,
registerLazyLoadedDiagrams,
reset,
saveConfigFromInitialize,
select_default,
setConfig,
setLogLevel,
setSiteConfig,
styles_default,
themes_default,
updateSiteConfig
} from "./chunks/mermaid.esm/chunk-3L32CQKD.mjs";
import {
isEmpty_default
} from "./chunks/mermaid.esm/chunk-GRZAG2UZ.mjs";
import "./chunks/mermaid.esm/chunk-HD3LK5B5.mjs";
import {
__name
} from "./chunks/mermaid.esm/chunk-DLQEHMXD.mjs";
// 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.esm/c4Diagram-6R2MQUNL.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.esm/flowDiagram-XARHJDSH.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.esm/flowDiagram-XARHJDSH.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.esm/erDiagram-AK44R45H.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.esm/gitGraphDiagram-XHLTLO3W.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.esm/ganttDiagram-H5QQZTZ5.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.esm/infoDiagram-TP2HPDHO.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.esm/pieDiagram-FPR3CNQC.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.esm/quadrantDiagram-RLP5YTJ2.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.esm/xychartDiagram-674MFTBU.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.esm/requirementDiagram-P5NVWGNK.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.esm/sequenceDiagram-6SLVIXKN.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.esm/classDiagram-LB37KKQG.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.esm/classDiagram-v2-KFQJBC22.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.esm/stateDiagram-WI5ZVJ5I.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.esm/stateDiagram-v2-KVDSFUFK.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.esm/journeyDiagram-VHRN44N3.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, id27, version) => {
log.debug("rendering svg for syntax error\n");
const svg = selectSvgElement(id27);
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.esm/flowDiagram-XARHJDSH.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.esm/timeline-definition-65575674.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.esm/mindmap-definition-TI5ONXTW.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.esm/kanban-definition-K5J3OUUV.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.esm/sankeyDiagram-C6NZRJHT.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.esm/diagram-BIPOGRU5.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.esm/diagram-YF4VECWA.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.esm/blockDiagram-XZSR5OGQ.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.esm/architectureDiagram-RWNHDUBN.mjs");
return { id: id26, diagram: diagram2 };
}, "loader");
var architecture = {
id: id26,
detector: detector26,
loader: loader26
};
var architectureDetector_default = architecture;
// 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("---");
}
);
registerLazyLoadedDiagrams(
c4Detector_default,
detector_default4,
classDetector_V2_default,
classDetector_default,
erDetector_default,
ganttDetector_default,
info,
pie,
requirementDetector_default,
sequenceDetector_default,
detector_default,
flowDetector_v2_default,
flowDetector_default,
detector_default3,
detector_default2,
gitGraphDetector_default,
stateDetector_V2_default,
stateDetector_default,
journeyDetector_default,
quadrantDetector_default,
sankeyDetector_default,
packet,
xychartDetector_default,
blockDetector_default,
architectureDetector_default,
radar
);
}, "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: detector27, loader: loader27 }]) => {
if (loader27) {
try {
getDiagram(key);
} catch {
try {
const { diagram: diagram2, id: id27 } = await loader27();
registerDiagram(id27, diagram2, detector27);
} 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");
// ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Enum.js
var COMMENT = "comm";
var RULESET = "rule";
var DECLARATION = "decl";
var IMPORT = "@import";
var NAMESPACE = "@namespace";
var KEYFRAMES = "@keyframes";
var LAYER = "@layer";
// ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Utility.js
var abs = Math.abs;
var from = String.fromCharCode;
function trim(value) {
return value.trim();
}
__name(trim, "trim");
function replace(value, pattern, replacement) {
return value.replace(pattern, replacement);
}
__name(replace, "replace");
function indexof(value, search, position2) {
return value.indexOf(search, position2);
}
__name(indexof, "indexof");
function charat(value, index) {
return value.charCodeAt(index) | 0;
}
__name(charat, "charat");
function substr(value, begin, end) {
return value.slice(begin, end);
}
__name(substr, "substr");
function strlen(value) {
return value.length;
}
__name(strlen, "strlen");
function sizeof(value) {
return value.length;
}
__name(sizeof, "sizeof");
function append(value, array) {
return array.push(value), value;
}
__name(append, "append");
// ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Tokenizer.js
var line = 1;
var column = 1;
var length = 0;
var position = 0;
var character = 0;
var characters = "";
function node(value, root, parent, type, props, children, length2, siblings) {
return { value, root, parent, type, props, children, line, column, length: length2, return: "", siblings };
}
__name(node, "node");
function char() {
return character;
}
__name(char, "char");
function prev() {
character = position > 0 ? charat(characters, --position) : 0;
if (column--, character === 10)
column = 1, line--;
return character;
}
__name(prev, "prev");
function next() {
character = position < length ? charat(characters, position++) : 0;
if (column++, character === 10)
column = 1, line++;
return character;
}
__name(next, "next");
function peek() {
return charat(characters, position);
}
__name(peek, "peek");
function caret() {
return position;
}
__name(caret, "caret");
function slice(begin, end) {
return substr(characters, begin, end);
}
__name(slice, "slice");
function token(type) {
switch (type) {
// \0 \t \n \r \s whitespace token
case 0:
case 9:
case 10:
case 13:
case 32:
return 5;
// ! + , / > @ ~ isolate token
case 33:
case 43:
case 44:
case 47:
case 62:
case 64:
case 126:
// ; { } breakpoint token
case 59:
case 123:
case 125:
return 4;
// : accompanied token
case 58:
return 3;
// " ' ( [ opening delimit token
case 34:
case 39:
case 40:
case 91:
return 2;
// ) ] closing delimit token
case 41:
case 93:
return 1;
}
return 0;
}
__name(token, "token");
function alloc(value) {
return line = column = 1, length = strlen(characters = value), position = 0, [];
}
__name(alloc, "alloc");
function dealloc(value) {
return characters = "", value;
}
__name(dealloc, "dealloc");
function delimit(type) {
return trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)));
}
__name(delimit, "delimit");
function whitespace(type) {
while (character = peek())
if (character < 33)
next();
else
break;
return token(type) > 2 || token(character) > 3 ? "" : " ";
}
__name(whitespace, "whitespace");
function escaping(index, count) {
while (--count && next())
if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97)
break;
return slice(index, caret() + (count < 6 && peek() == 32 && next() == 32));
}
__name(escaping, "escaping");
function delimiter(type) {
while (next())
switch (character) {
// ] ) " '
case type:
return position;
// " '
case 34:
case 39:
if (type !== 34 && type !== 39)
delimiter(character);
break;
// (
case 40:
if (type === 41)
delimiter(type);
break;
// \
case 92:
next();
break;
}
return position;
}
__name(delimiter, "delimiter");
function commenter(type, index) {
while (next())
if (type + character === 47 + 10)
break;
else if (type + character === 42 + 42 && peek() === 47)
break;
return "/*" + slice(index, position - 1) + "*" + from(type === 47 ? type : next());
}
__name(commenter, "commenter");
function identifier(index) {
while (!token(peek()))
next();
return slice(index, position);
}
__name(identifier, "identifier");
// ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Parser.js
function compile(value) {
return dealloc(parse("", null, null, null, [""], value = alloc(value), 0, [0], value));
}
__name(compile, "compile");
function parse(value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {
var index = 0;
var offset = 0;
var length2 = pseudo;
var atrule = 0;
var property = 0;
var previous = 0;
var variable = 1;
var scanning = 1;
var ampersand = 1;
var character2 = 0;
var type = "";
var props = rules;
var children = rulesets;
var reference = rule;
var characters2 = type;
while (scanning)
switch (previous = character2, character2 = next()) {
// (
case 40:
if (previous != 108 && charat(characters2, length2 - 1) == 58) {
if (indexof(characters2 += replace(delimit(character2), "&", "&\f"), "&\f", abs(index ? points[index - 1] : 0)) != -1)
ampersand = -1;
break;
}
// " ' [
case 34:
case 39:
case 91:
characters2 += delimit(character2);
break;
// \t \n \r \s
case 9:
case 10:
case 13:
case 32:
characters2 += whitespace(previous);
break;
// \
case 92:
characters2 += escaping(caret() - 1, 7);
continue;
// /
case 47:
switch (peek()) {
case 42:
case 47:
append(comment(commenter(next(), caret()), root, parent, declarations), declarations);
if ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters2) && substr(characters2, -1, void 0) !== " ") characters2 += " ";
break;
default:
characters2 += "/";
}
break;
// {
case 123 * variable:
points[index++] = strlen(characters2) * ampersand;
// } ; \0
case 125 * variable:
case 59:
case 0:
switch (character2) {
// \0 }
case 0:
case 125:
scanning = 0;
// ;
case 59 + offset:
if (ampersand == -1) characters2 = replace(characters2, /\f/g, "");
if (property > 0 && (strlen(characters2) - length2 || variable === 0 && previous === 47))
append(property > 32 ? declaration(characters2 + ";", rule, parent, length2 - 1, declarations) : declaration(replace(characters2, " ", "") + ";", rule, parent, length2 - 2, declarations), declarations);
break;
// @ ;
case 59:
characters2 += ";";
// { rule/at-rule
default:
append(reference = ruleset(characters2, root, parent, index, offset, rules, points, type, props = [], children = [], length2, rulesets), rulesets);
if (character2 === 123)
if (offset === 0)
parse(characters2, root, reference, reference, props, rulesets, length2, points, children);
else {
switch (atrule) {
// c(ontainer)
case 99:
if (charat(characters2, 3) === 110) break;
// l(ayer)
case 108:
if (charat(characters2, 2) === 97) break;
default:
offset = 0;
// d(ocument) m(edia) s(upports)
case 100:
case 109:
case 115:
}
if (offset) parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length2, children), children), rules, children, length2, points, rule ? props : children);
else parse(characters2, reference, reference, reference, [""], children, 0, points, children);
}
}
index = offset = property = 0, variable = ampersand = 1, type = characters2 = "", length2 = pseudo;
break;
// :
case 58:
length2 = 1 + strlen(characters2), property = previous;
default:
if (variable < 1) {
if (character2 == 123)
--variable;
else if (character2 == 125 && variable++ == 0 && prev() == 125)
continue;
}
switch (characters2 += from(character2), character2 * variable) {
// &
case 38:
ampersand = offset > 0 ? 1 : (characters2 += "\f", -1);
break;
// ,
case 44:
points[index++] = (strlen(characters2) - 1) * ampersand, ampersand = 1;
break;
// @
case 64:
if (peek() === 45)
characters2 += delimit(next());
atrule = peek(), offset = length2 = strlen(type = characters2 += identifier(caret())), character2++;
break;
// -
case 45:
if (previous === 45 && strlen(characters2) == 2)
variable = 0;
}
}
return rulesets;
}
__name(parse, "parse");
function ruleset(value, root, parent, index, offset, rules, points, type, props, children, length2, siblings) {
var post = offset - 1;
var rule = offset === 0 ? rules : [""];
var size = sizeof(rule);
for (var i = 0, j = 0, k = 0; i < index; ++i)
for (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)
if (z = trim(j > 0 ? rule[x] + " " + y : replace(y, /&\f/g, rule[x])))
props[k++] = z;
return node(value, root, parent, offset === 0 ? RULESET : type, props, children, length2, siblings);
}
__name(ruleset, "ruleset");
function comment(value, root, parent, siblings) {
return node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings);
}
__name(comment, "comment");
function declaration(value, root, parent, length2, siblings) {
return node(value, root, parent, DECLARATION, substr(value, 0, length2), substr(value, length2 + 1, -1), length2, siblings);
}
__name(declaration, "declaration");
// ../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Serializer.js
function serialize(children, callback) {
var output = "";
for (var i = 0; i < children.length; i++)
output += callback(children[i], i, children, callback) || "";
return output;
}
__name(serialize, "serialize");
function stringify(element, index, children, callback) {
switch (element.type) {
case LAYER:
if (element.children.length) break;
case IMPORT:
case NAMESPACE:
case DECLARATION:
return element.return = element.return || element.value;
case COMMENT:
return "";
case KEYFRAMES:
return element.return = element.value + "{" + serialize(element.children, callback) + "}";
case RULESET:
if (!strlen(element.value = element.props.join(","))) return "";
}
return strlen(children = serialize(element.children, callback)) ? element.return = element.value + "{" + children + "}" : "";
}
__name(stringify, "stringify");
// 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 loader27 = getDiagramLoader(type);
if (!loader27) {
throw new UnknownDiagramError(`Diagram ${type} not found.`);
}
const { id: id27, diagram: diagram2 } = await loader27();
registerDiagram(id27, 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(id27, version) {
await this.renderer.draw(this.text, id27, 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 parse2(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(parse2, "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_default(styleClassDef.styles)) {
cssElements.forEach((cssElement) => {
cssStyles += cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles);
});
}
if (!isEmpty_default(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, id27, 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", id27).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, id27, divId, iFrameId) => {
doc.getElementById(id27)?.remove();
doc.getElementById(divId)?.remove();
doc.getElementById(iFrameId)?.remove();
}, "removeExistingElements");
var render = /* @__PURE__ */ __name(async function(id27, 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 = "#" + id27;
const iFrameID = "i" + id27;
const iFrameID_selector = "#" + iFrameID;
const enclosingDivID = "d" + id27;
const enclosingDivID_selector = "#" + enclosingDivID;
const removeTempElements = /* @__PURE__ */ __name(() => {
const tmpElementSelector = isSandboxed ? iFrameID_selector : enclosingDivID_selector;
const node2 = select_default(tmpElementSelector).node();
if (node2 && "remove" in node2) {
node2.remove();
}
}, "removeTempElements");
let root = select_default("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_default(svgContainingElement), iFrameID);
root = select_default(iframe.nodes()[0].contentDocument.body);
root.node().style.margin = 0;
} else {
root = select_default(svgContainingElement);
}
appendDivSvgG(root, id27, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD);
} else {
removeExistingElements(document, id27, enclosingDivID, iFrameID);
if (isSandboxed) {
const iframe = sandboxedIframe(select_default("body"), iFrameID);
root = select_default(iframe.nodes()[0].contentDocument.body);
root.node().style.margin = 0;
} else {
root = select_default("body");
}
appendDivSvgG(root, id27, 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, id27, package_default.version, diag);
} catch (e) {
if (config.suppressErrorRendering) {
removeTempElements();
} else {
errorRenderer_default.draw(text, id27, 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="${id27}"]`).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 = purify.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: parse2,
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?.s