@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
20 lines (19 loc) • 1.23 kB
JavaScript
//#region src/Mermaid/SyntaxMermaid/prepareMermaidSvg.ts
const voidElementPattern = new RegExp(`<(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)((?:\\s[^>]*?)?)\\s*/?>`, "gi");
const ensureXmlSafeVoidElements = (svg) => svg.replaceAll(voidElementPattern, "<$1$2/>");
const applyFirefoxSizeFix = (svg) => {
if (typeof window === "undefined" || typeof navigator === "undefined" || !navigator.userAgent.includes("Firefox") || typeof DOMParser === "undefined") return svg;
const svgDoc = new DOMParser().parseFromString(svg, "image/svg+xml");
if (svgDoc.querySelector("parsererror")) return svg;
const svgElement = svgDoc.documentElement;
if (!svgElement || svgElement.localName !== "svg" || !svgElement.hasAttribute("viewBox")) return svg;
const viewBoxParts = svgElement.getAttribute("viewBox").split(" ");
if (viewBoxParts.length !== 4) return svg;
svgElement.setAttribute("width", viewBoxParts[2]);
svgElement.setAttribute("height", viewBoxParts[3]);
return new XMLSerializer().serializeToString(svgDoc);
};
const prepareMermaidSvgString = (svg) => applyFirefoxSizeFix(ensureXmlSafeVoidElements(svg));
//#endregion
export { prepareMermaidSvgString };
//# sourceMappingURL=prepareMermaidSvg.mjs.map