import { decodeEntities } from "./chunk-GUBXVVWZ.js"; import { common_default, getConfig, hasKatex, renderKatexSanitized, sanitizeText } from "./chunk-6YWVU24R.js"; import { __name, log, select_default } from "./chunk-XOKMXDAB.js"; import { __publicField } from "./chunk-DBU5TJLK.js"; // node_modules/ts-dedent/esm/index.js function dedent(templ) { var values = []; for (var _i = 1; _i < arguments.length; _i++) { values[_i - 1] = arguments[_i]; } var strings = Array.from(typeof templ === "string" ? [templ] : templ); strings[strings.length - 1] = strings[strings.length - 1].replace(/\r?\n([\t ]*)$/, ""); var indentLengths = strings.reduce(function(arr, str) { var matches = str.match(/\n([\t ]+|(?!\s).)/g); if (matches) { return arr.concat(matches.map(function(match) { var _a2, _b; return (_b = (_a2 = match.match(/[\t ]/g)) === null || _a2 === void 0 ? void 0 : _a2.length) !== null && _b !== void 0 ? _b : 0; })); } return arr; }, []); if (indentLengths.length) { var pattern_1 = new RegExp("\n[ ]{" + Math.min.apply(Math, indentLengths) + "}", "g"); strings = strings.map(function(str) { return str.replace(pattern_1, "\n"); }); } strings[0] = strings[0].replace(/^\r?\n/, ""); var string = strings[0]; values.forEach(function(value, i) { var endentations = string.match(/(?:^|\n)( *)$/); var endentation = endentations ? endentations[1] : ""; var indentedValue = value; if (typeof value === "string" && value.includes("\n")) { indentedValue = String(value).split("\n").map(function(str, i2) { return i2 === 0 ? str : "" + endentation + str; }).join("\n"); } string += indentedValue + strings[i + 1]; }); return string; } // node_modules/@iconify/utils/lib/icon/defaults.js var defaultIconDimensions = Object.freeze({ left: 0, top: 0, width: 16, height: 16 }); var defaultIconTransformations = Object.freeze({ rotate: 0, vFlip: false, hFlip: false }); var defaultIconProps = Object.freeze({ ...defaultIconDimensions, ...defaultIconTransformations }); var defaultExtendedIconProps = Object.freeze({ ...defaultIconProps, body: "", hidden: false }); // node_modules/@iconify/utils/lib/customisations/defaults.js var defaultIconSizeCustomisations = Object.freeze({ width: null, height: null }); var defaultIconCustomisations = Object.freeze({ ...defaultIconSizeCustomisations, ...defaultIconTransformations }); // node_modules/@iconify/utils/lib/icon/name.js var stringToIcon = (value, validate, allowSimpleName, provider = "") => { const colonSeparated = value.split(":"); if (value.slice(0, 1) === "@") { if (colonSeparated.length < 2 || colonSeparated.length > 3) return null; provider = colonSeparated.shift().slice(1); } if (colonSeparated.length > 3 || !colonSeparated.length) return null; if (colonSeparated.length > 1) { const name2 = colonSeparated.pop(); const prefix = colonSeparated.pop(); const result = { provider: colonSeparated.length > 0 ? colonSeparated[0] : provider, prefix, name: name2 }; return validate && !validateIconName(result) ? null : result; } const name = colonSeparated[0]; const dashSeparated = name.split("-"); if (dashSeparated.length > 1) { const result = { provider, prefix: dashSeparated.shift(), name: dashSeparated.join("-") }; return validate && !validateIconName(result) ? null : result; } if (allowSimpleName && provider === "") { const result = { provider, prefix: "", name }; return validate && !validateIconName(result, allowSimpleName) ? null : result; } return null; }; var validateIconName = (icon, allowSimpleName) => { if (!icon) return false; return !!((allowSimpleName && icon.prefix === "" || !!icon.prefix) && !!icon.name); }; // node_modules/@iconify/utils/lib/icon/transformations.js function mergeIconTransformations(obj1, obj2) { const result = {}; if (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true; if (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true; const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4; if (rotate) result.rotate = rotate; return result; } // node_modules/@iconify/utils/lib/icon/merge.js function mergeIconData(parent, child) { const result = mergeIconTransformations(parent, child); for (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) { if (key in parent && !(key in result)) result[key] = defaultIconTransformations[key]; } else if (key in child) result[key] = child[key]; else if (key in parent) result[key] = parent[key]; return result; } // node_modules/@iconify/utils/lib/icon-set/tree.js function getIconsTree(data, names) { const icons = data.icons; const aliases = data.aliases || /* @__PURE__ */ Object.create(null); const resolved = /* @__PURE__ */ Object.create(null); function resolve(name) { if (icons[name]) return resolved[name] = []; if (!(name in resolved)) { resolved[name] = null; const parent = aliases[name] && aliases[name].parent; const value = parent && resolve(parent); if (value) resolved[name] = [parent].concat(value); } return resolved[name]; } (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve); return resolved; } // node_modules/@iconify/utils/lib/icon-set/get-icon.js function internalGetIconData(data, name, tree) { const icons = data.icons; const aliases = data.aliases || /* @__PURE__ */ Object.create(null); let currentProps = {}; function parse(name2) { currentProps = mergeIconData(icons[name2] || aliases[name2], currentProps); } parse(name); tree.forEach(parse); return mergeIconData(data, currentProps); } function getIconData(data, name) { if (data.icons[name]) return internalGetIconData(data, name, []); const tree = getIconsTree(data, [name])[name]; return tree ? internalGetIconData(data, name, tree) : null; } // node_modules/@iconify/utils/lib/icon-set/validate-basic.js var optionalPropertyDefaults = { provider: "", aliases: {}, not_found: {}, ...defaultIconDimensions }; // node_modules/@iconify/utils/lib/icon-set/get-icons.js var propsToCopy = Object.keys(defaultIconDimensions).concat(["provider"]); // node_modules/@iconify/utils/lib/svg/size.js var unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g; var unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g; function calculateSize(size, ratio, precision) { if (ratio === 1) return size; precision = precision || 100; if (typeof size === "number") return Math.ceil(size * ratio * precision) / precision; if (typeof size !== "string") return size; const oldParts = size.split(unitsSplit); if (oldParts === null || !oldParts.length) return size; const newParts = []; let code = oldParts.shift(); let isNumber = unitsTest.test(code); while (true) { if (isNumber) { const num = parseFloat(code); if (isNaN(num)) newParts.push(code); else newParts.push(Math.ceil(num * ratio * precision) / precision); } else newParts.push(code); code = oldParts.shift(); if (code === void 0) return newParts.join(""); isNumber = !isNumber; } } // node_modules/@iconify/utils/lib/svg/defs.js function splitSVGDefs(content, tag = "defs") { let defs = ""; const index = content.indexOf("<" + tag); while (index >= 0) { const start = content.indexOf(">", index); const end = content.indexOf("", end); if (endEnd === -1) break; defs += content.slice(start + 1, end).trim(); content = content.slice(0, index).trim() + content.slice(endEnd + 1); } return { defs, content }; } function mergeDefsAndContent(defs, content) { return defs ? "" + defs + "" + content : content; } function wrapSVGContent(body, start, end) { const split = splitSVGDefs(body); return mergeDefsAndContent(split.defs, start + split.content + end); } // node_modules/@iconify/utils/lib/svg/build.js var isUnsetKeyword = (value) => value === "unset" || value === "undefined" || value === "none"; function iconToSVG(icon, customisations) { const fullIcon = { ...defaultIconProps, ...icon }; const fullCustomisations = { ...defaultIconCustomisations, ...customisations }; const box = { left: fullIcon.left, top: fullIcon.top, width: fullIcon.width, height: fullIcon.height }; let body = fullIcon.body; [fullIcon, fullCustomisations].forEach((props) => { const transformations = []; const hFlip = props.hFlip; const vFlip = props.vFlip; let rotation = props.rotate; if (hFlip) if (vFlip) rotation += 2; else { transformations.push("translate(" + (box.width + box.left).toString() + " " + (0 - box.top).toString() + ")"); transformations.push("scale(-1 1)"); box.top = box.left = 0; } else if (vFlip) { transformations.push("translate(" + (0 - box.left).toString() + " " + (box.height + box.top).toString() + ")"); transformations.push("scale(1 -1)"); box.top = box.left = 0; } let tempValue; if (rotation < 0) rotation -= Math.floor(rotation / 4) * 4; rotation = rotation % 4; switch (rotation) { case 1: tempValue = box.height / 2 + box.top; transformations.unshift("rotate(90 " + tempValue.toString() + " " + tempValue.toString() + ")"); break; case 2: transformations.unshift("rotate(180 " + (box.width / 2 + box.left).toString() + " " + (box.height / 2 + box.top).toString() + ")"); break; case 3: tempValue = box.width / 2 + box.left; transformations.unshift("rotate(-90 " + tempValue.toString() + " " + tempValue.toString() + ")"); break; } if (rotation % 2 === 1) { if (box.left !== box.top) { tempValue = box.left; box.left = box.top; box.top = tempValue; } if (box.width !== box.height) { tempValue = box.width; box.width = box.height; box.height = tempValue; } } if (transformations.length) body = wrapSVGContent(body, '', ""); }); const customisationsWidth = fullCustomisations.width; const customisationsHeight = fullCustomisations.height; const boxWidth = box.width; const boxHeight = box.height; let width; let height; if (customisationsWidth === null) { height = customisationsHeight === null ? "1em" : customisationsHeight === "auto" ? boxHeight : customisationsHeight; width = calculateSize(height, boxWidth / boxHeight); } else { width = customisationsWidth === "auto" ? boxWidth : customisationsWidth; height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === "auto" ? boxHeight : customisationsHeight; } const attributes = {}; const setAttr = (prop, value) => { if (!isUnsetKeyword(value)) attributes[prop] = value.toString(); }; setAttr("width", width); setAttr("height", height); const viewBox = [ box.left, box.top, boxWidth, boxHeight ]; attributes.viewBox = viewBox.join(" "); return { attributes, viewBox, body }; } // node_modules/@iconify/utils/lib/svg/id.js var regex = /\sid="(\S+)"/g; var counters = /* @__PURE__ */ new Map(); function nextID(id) { id = id.replace(/[0-9]+$/, "") || "a"; const count = counters.get(id) || 0; counters.set(id, count + 1); return count ? `${id}${count}` : id; } function replaceIDs(body) { const ids = []; let match; while (match = regex.exec(body)) ids.push(match[1]); if (!ids.length) return body; const suffix = "suffix" + (Math.random() * 16777216 | Date.now()).toString(16); ids.forEach((id) => { const newID = nextID(id); const escapedID = id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); body = body.replace(new RegExp('([#;"])(' + escapedID + ')([")]|\\.[a-z])', "g"), "$1" + newID + suffix + "$3"); }); body = body.replace(new RegExp(suffix, "g"), ""); return body; } // node_modules/@iconify/utils/lib/svg/html.js function iconToHTML(body, attributes) { let renderAttribsHTML = body.indexOf("xlink:") === -1 ? "" : ' xmlns:xlink="http://www.w3.org/1999/xlink"'; for (const attr in attributes) renderAttribsHTML += " " + attr + '="' + attributes[attr] + '"'; return '" + body + ""; } // node_modules/@iconify/utils/lib/colors/keywords.js var colorKeywords = { transparent: { type: "transparent" }, none: { type: "none" }, currentcolor: { type: "current" } }; function add(keyword, colors) { const type = "rgb"; const r = colors[0]; const length = colors.length; colorKeywords[keyword] = { type, r, g: length > 1 ? colors[1] : r, b: length > 2 ? colors[2] : r, alpha: length > 3 ? colors[3] : 1 }; } add("silver", [192]); add("gray", [128]); add("white", [255]); add("maroon", [ 128, 0, 0 ]); add("red", [ 255, 0, 0 ]); add("purple", [128, 0]); add("fuchsia", [255, 0]); add("green", [0, 128]); add("lime", [0, 255]); add("olive", [ 128, 128, 0 ]); add("yellow", [ 255, 255, 0 ]); add("navy", [ 0, 0, 128 ]); add("blue", [ 0, 0, 255 ]); add("teal", [ 0, 128, 128 ]); add("aqua", [ 0, 255, 255 ]); add("aliceblue", [ 240, 248, 255 ]); add("antiquewhite", [ 250, 235, 215 ]); add("aqua", [ 0, 255, 255 ]); add("aquamarine", [ 127, 255, 212 ]); add("azure", [ 240, 255, 255 ]); add("beige", [ 245, 245, 220 ]); add("bisque", [ 255, 228, 196 ]); add("black", [0]); add("blanchedalmond", [ 255, 235, 205 ]); add("blue", [ 0, 0, 255 ]); add("blueviolet", [ 138, 43, 226 ]); add("brown", [ 165, 42, 42 ]); add("burlywood", [ 222, 184, 135 ]); add("cadetblue", [ 95, 158, 160 ]); add("chartreuse", [ 127, 255, 0 ]); add("chocolate", [ 210, 105, 30 ]); add("coral", [ 255, 127, 80 ]); add("cornflowerblue", [ 100, 149, 237 ]); add("cornsilk", [ 255, 248, 220 ]); add("crimson", [ 220, 20, 60 ]); add("cyan", [ 0, 255, 255 ]); add("darkblue", [ 0, 0, 139 ]); add("darkcyan", [ 0, 139, 139 ]); add("darkgoldenrod", [ 184, 134, 11 ]); add("darkgray", [169]); add("darkgreen", [0, 100]); add("darkgrey", [169]); add("darkkhaki", [ 189, 183, 107 ]); add("darkmagenta", [139, 0]); add("darkolivegreen", [ 85, 107, 47 ]); add("darkorange", [ 255, 140, 0 ]); add("darkorchid", [ 153, 50, 204 ]); add("darkred", [ 139, 0, 0 ]); add("darksalmon", [ 233, 150, 122 ]); add("darkseagreen", [143, 188]); add("darkslateblue", [ 72, 61, 139 ]); add("darkslategray", [ 47, 79, 79 ]); add("darkslategrey", [ 47, 79, 79 ]); add("darkturquoise", [ 0, 206, 209 ]); add("darkviolet", [ 148, 0, 211 ]); add("deeppink", [ 255, 20, 147 ]); add("deepskyblue", [ 0, 191, 255 ]); add("dimgray", [105]); add("dimgrey", [105]); add("dodgerblue", [ 30, 144, 255 ]); add("firebrick", [ 178, 34, 34 ]); add("floralwhite", [ 255, 250, 240 ]); add("forestgreen", [34, 139]); add("fuchsia", [255, 0]); add("gainsboro", [220]); add("ghostwhite", [ 248, 248, 255 ]); add("gold", [ 255, 215, 0 ]); add("goldenrod", [ 218, 165, 32 ]); add("gray", [128]); add("green", [0, 128]); add("greenyellow", [ 173, 255, 47 ]); add("grey", [128]); add("honeydew", [240, 255]); add("hotpink", [ 255, 105, 180 ]); add("indianred", [ 205, 92, 92 ]); add("indigo", [ 75, 0, 130 ]); add("ivory", [ 255, 255, 240 ]); add("khaki", [ 240, 230, 140 ]); add("lavender", [ 230, 230, 250 ]); add("lavenderblush", [ 255, 240, 245 ]); add("lawngreen", [ 124, 252, 0 ]); add("lemonchiffon", [ 255, 250, 205 ]); add("lightblue", [ 173, 216, 230 ]); add("lightcoral", [ 240, 128, 128 ]); add("lightcyan", [ 224, 255, 255 ]); add("lightgoldenrodyellow", [ 250, 250, 210 ]); add("lightgray", [211]); add("lightgreen", [144, 238]); add("lightgrey", [211]); add("lightpink", [ 255, 182, 193 ]); add("lightsalmon", [ 255, 160, 122 ]); add("lightseagreen", [ 32, 178, 170 ]); add("lightskyblue", [ 135, 206, 250 ]); add("lightslategray", [ 119, 136, 153 ]); add("lightslategrey", [ 119, 136, 153 ]); add("lightsteelblue", [ 176, 196, 222 ]); add("lightyellow", [ 255, 255, 224 ]); add("lime", [0, 255]); add("limegreen", [50, 205]); add("linen", [ 250, 240, 230 ]); add("magenta", [255, 0]); add("maroon", [ 128, 0, 0 ]); add("mediumaquamarine", [ 102, 205, 170 ]); add("mediumblue", [ 0, 0, 205 ]); add("mediumorchid", [ 186, 85, 211 ]); add("mediumpurple", [ 147, 112, 219 ]); add("mediumseagreen", [ 60, 179, 113 ]); add("mediumslateblue", [ 123, 104, 238 ]); add("mediumspringgreen", [ 0, 250, 154 ]); add("mediumturquoise", [ 72, 209, 204 ]); add("mediumvioletred", [ 199, 21, 133 ]); add("midnightblue", [ 25, 25, 112 ]); add("mintcream", [ 245, 255, 250 ]); add("mistyrose", [ 255, 228, 225 ]); add("moccasin", [ 255, 228, 181 ]); add("navajowhite", [ 255, 222, 173 ]); add("navy", [ 0, 0, 128 ]); add("oldlace", [ 253, 245, 230 ]); add("olive", [ 128, 128, 0 ]); add("olivedrab", [ 107, 142, 35 ]); add("orange", [ 255, 165, 0 ]); add("orangered", [ 255, 69, 0 ]); add("orchid", [ 218, 112, 214 ]); add("palegoldenrod", [ 238, 232, 170 ]); add("palegreen", [152, 251]); add("paleturquoise", [ 175, 238, 238 ]); add("palevioletred", [ 219, 112, 147 ]); add("papayawhip", [ 255, 239, 213 ]); add("peachpuff", [ 255, 218, 185 ]); add("peru", [ 205, 133, 63 ]); add("pink", [ 255, 192, 203 ]); add("plum", [221, 160]); add("powderblue", [ 176, 224, 230 ]); add("purple", [128, 0]); add("rebeccapurple", [ 102, 51, 153 ]); add("red", [ 255, 0, 0 ]); add("rosybrown", [ 188, 143, 143 ]); add("royalblue", [ 65, 105, 225 ]); add("saddlebrown", [ 139, 69, 19 ]); add("salmon", [ 250, 128, 114 ]); add("sandybrown", [ 244, 164, 96 ]); add("seagreen", [ 46, 139, 87 ]); add("seashell", [ 255, 245, 238 ]); add("sienna", [ 160, 82, 45 ]); add("silver", [192]); add("skyblue", [ 135, 206, 235 ]); add("slateblue", [ 106, 90, 205 ]); add("slategray", [ 112, 128, 144 ]); add("slategrey", [ 112, 128, 144 ]); add("snow", [ 255, 250, 250 ]); add("springgreen", [ 0, 255, 127 ]); add("steelblue", [ 70, 130, 180 ]); add("tan", [ 210, 180, 140 ]); add("teal", [ 0, 128, 128 ]); add("thistle", [216, 191]); add("tomato", [ 255, 99, 71 ]); add("turquoise", [ 64, 224, 208 ]); add("violet", [238, 130]); add("wheat", [ 245, 222, 179 ]); add("white", [255]); add("whitesmoke", [245]); add("yellow", [ 255, 255, 0 ]); add("yellowgreen", [ 154, 205, 50 ]); // node_modules/@iconify/utils/lib/css/icons.js var commonSelector = ".icon--{prefix}"; var iconSelector = ".icon--{prefix}--{name}"; var defaultSelectors = { commonSelector, iconSelector, overrideSelector: commonSelector + iconSelector }; // node_modules/@iconify/utils/lib/emoji/format.js var defaultUnicodeOptions = { prefix: "", separator: "", case: "lower", format: "utf-32", add0: false, throwOnError: true }; var defaultSequenceOptions = { ...defaultUnicodeOptions, separator: "-" }; // node_modules/mermaid/node_modules/marked/lib/marked.esm.js function L() { return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null }; } var T = L(); function G(l3) { T = l3; } var E = { exec: () => null }; function d(l3, e = "") { let t = typeof l3 == "string" ? l3 : l3.source, n = { replace: (r, i) => { let s = typeof i == "string" ? i : i.source; return s = s.replace(m.caret, "$1"), t = t.replace(r, s), n; }, getRegex: () => new RegExp(t, e) }; return n; } var be = (() => { try { return !!new RegExp("(?<=1)(?/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, listReplaceTabs: /^\t+/, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] /, listReplaceTask: /^\[[ xX]\] +/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^/i, startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i, endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i, startAngleBracket: /^$/, pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/, unicodeAlphaNumeric: /[\p{L}\p{N}]/u, escapeTest: /[&<>"']/, escapeReplace: /[&<>"']/g, escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, unescapeTest: /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: (l3) => new RegExp(`^( {0,3}${l3})((?:[ ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: (l3) => new RegExp(`^ {0,${Math.min(3, l3 - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`), hrRegex: (l3) => new RegExp(`^ {0,${Math.min(3, l3 - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`), fencesBeginRegex: (l3) => new RegExp(`^ {0,${Math.min(3, l3 - 1)}}(?:\`\`\`|~~~)`), headingBeginRegex: (l3) => new RegExp(`^ {0,${Math.min(3, l3 - 1)}}#`), htmlBeginRegex: (l3) => new RegExp(`^ {0,${Math.min(3, l3 - 1)}}<(?:[a-z].*>|!--)`, "i") }; var Re = /^(?:[ \t]*(?:\n|$))+/; var Te = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/; var Oe = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/; var I = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/; var we = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/; var F = /(?:[*+-]|\d{1,9}[.)])/; var ie = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/; var oe = d(ie).replace(/bull/g, F).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex(); var ye = d(ie).replace(/bull/g, F).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(); var j = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/; var Pe = /^[^\n]+/; var Q = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/; var Se = d(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", Q).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(); var $e = d(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, F).getRegex(); var v = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul"; var U = /|$))/; var _e = d("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))", "i").replace("comment", U).replace("tag", v).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(); var ae = d(j).replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", ")|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex(); var Le = d(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", ae).getRegex(); var K = { blockquote: Le, code: Te, def: Se, fences: Oe, heading: we, hr: I, html: _e, lheading: oe, list: $e, newline: Re, paragraph: ae, table: E, text: Pe }; var re = d("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3} )[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", ")|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex(); var Me = { ...K, lheading: ye, table: re, paragraph: d(j).replace("hr", I).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", re).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", ")|<(?:script|pre|style|textarea|!--)").replace("tag", v).getRegex() }; var ze = { ...K, html: d(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", U).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: E, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: d(j).replace("hr", I).replace("heading", ` *#{1,6} *[^ ]`).replace("lheading", oe).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() }; var Ae = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/; var Ee = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/; var le = /^( {2,}|\\)\n(?!\s*$)/; var Ie = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-", be ? "(?`+)[^`]+\k(?!`)/).replace("html", /<(?! )[^<>]*?>/).getRegex(); var ce = /^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/; var De = d(ce, "u").replace(/punct/g, D).getRegex(); var He = d(ce, "u").replace(/punct/g, pe).getRegex(); var he = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)"; var Ze = d(he, "gu").replace(/notPunctSpace/g, ue).replace(/punctSpace/g, W).replace(/punct/g, D).getRegex(); var Ge = d(he, "gu").replace(/notPunctSpace/g, qe).replace(/punctSpace/g, Be).replace(/punct/g, pe).getRegex(); var Ne = d("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, ue).replace(/punctSpace/g, W).replace(/punct/g, D).getRegex(); var Fe = d(/\\(punct)/, "gu").replace(/punct/g, D).getRegex(); var je = d(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(); var Qe = d(U).replace("(?:-->|$)", "-->").getRegex(); var Ue = d("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment", Qe).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(); var q = /(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/; var Ke = d(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label", q).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(); var de = d(/^!?\[(label)\]\[(ref)\]/).replace("label", q).replace("ref", Q).getRegex(); var ke = d(/^!?\[(ref)\](?:\[\])?/).replace("ref", Q).getRegex(); var We = d("reflink|nolink(?!\\()", "g").replace("reflink", de).replace("nolink", ke).getRegex(); var se = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/; var X = { _backpedal: E, anyPunctuation: Fe, autolink: je, blockSkip: ve, br: le, code: Ee, del: E, emStrongLDelim: De, emStrongRDelimAst: Ze, emStrongRDelimUnd: Ne, escape: Ae, link: Ke, nolink: ke, punctuation: Ce, reflink: de, reflinkSearch: We, tag: Ue, text: Ie, url: E }; var Xe = { ...X, link: d(/^!?\[(label)\]\((.*?)\)/).replace("label", q).getRegex(), reflink: d(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", q).getRegex() }; var N = { ...X, emStrongRDelimAst: Ge, emStrongLDelim: He, url: d(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol", se).replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: d(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\": ">", '"': """, "'": "'" }; var ge = (l3) => Ve[l3]; function w(l3, e) { if (e) { if (m.escapeTest.test(l3)) return l3.replace(m.escapeReplace, ge); } else if (m.escapeTestNoEncode.test(l3)) return l3.replace(m.escapeReplaceNoEncode, ge); return l3; } function J(l3) { try { l3 = encodeURI(l3).replace(m.percentDecode, "%"); } catch { return null; } return l3; } function V(l3, e) { var _a2; let t = l3.replace(m.findPipe, (i, s, a) => { let o = false, p = s; for (; --p >= 0 && a[p] === "\\"; ) o = !o; return o ? "|" : " |"; }), n = t.split(m.splitPipe), r = 0; if (n[0].trim() || n.shift(), n.length > 0 && !((_a2 = n.at(-1)) == null ? void 0 : _a2.trim()) && n.pop(), e) if (n.length > e) n.splice(e); else for (; n.length < e; ) n.push(""); for (; r < n.length; r++) n[r] = n[r].trim().replace(m.slashPipe, "|"); return n; } function z(l3, e, t) { let n = l3.length; if (n === 0) return ""; let r = 0; for (; r < n; ) { let i = l3.charAt(n - r - 1); if (i === e && !t) r++; else if (i !== e && t) r++; else break; } return l3.slice(0, n - r); } function fe(l3, e) { if (l3.indexOf(e[1]) === -1) return -1; let t = 0; for (let n = 0; n < l3.length; n++) if (l3[n] === "\\") n++; else if (l3[n] === e[0]) t++; else if (l3[n] === e[1] && (t--, t < 0)) return n; return t > 0 ? -2 : -1; } function me(l3, e, t, n, r) { let i = e.href, s = e.title || null, a = l3[1].replace(r.other.outputLinkReplace, "$1"); n.state.inLink = true; let o = { type: l3[0].charAt(0) === "!" ? "image" : "link", raw: t, href: i, title: s, text: a, tokens: n.inlineTokens(a) }; return n.state.inLink = false, o; } function Ye(l3, e, t) { let n = l3.match(t.other.indentCodeCompensation); if (n === null) return e; let r = n[1]; return e.split(` `).map((i) => { let s = i.match(t.other.beginningSpace); if (s === null) return i; let [a] = s; return a.length >= r.length ? i.slice(r.length) : i; }).join(` `); } var y = class { constructor(e) { __publicField(this, "options"); __publicField(this, "rules"); __publicField(this, "lexer"); this.options = e || T; } space(e) { let t = this.rules.block.newline.exec(e); if (t && t[0].length > 0) return { type: "space", raw: t[0] }; } code(e) { let t = this.rules.block.code.exec(e); if (t) { let n = t[0].replace(this.rules.other.codeRemoveIndent, ""); return { type: "code", raw: t[0], codeBlockStyle: "indented", text: this.options.pedantic ? n : z(n, ` `) }; } } fences(e) { let t = this.rules.block.fences.exec(e); if (t) { let n = t[0], r = Ye(n, t[3] || "", this.rules); return { type: "code", raw: n, lang: t[2] ? t[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t[2], text: r }; } } heading(e) { let t = this.rules.block.heading.exec(e); if (t) { let n = t[2].trim(); if (this.rules.other.endingHash.test(n)) { let r = z(n, "#"); (this.options.pedantic || !r || this.rules.other.endingSpaceChar.test(r)) && (n = r.trim()); } return { type: "heading", raw: t[0], depth: t[1].length, text: n, tokens: this.lexer.inline(n) }; } } hr(e) { let t = this.rules.block.hr.exec(e); if (t) return { type: "hr", raw: z(t[0], ` `) }; } blockquote(e) { let t = this.rules.block.blockquote.exec(e); if (t) { let n = z(t[0], ` `).split(` `), r = "", i = "", s = []; for (; n.length > 0; ) { let a = false, o = [], p; for (p = 0; p < n.length; p++) if (this.rules.other.blockquoteStart.test(n[p])) o.push(n[p]), a = true; else if (!a) o.push(n[p]); else break; n = n.slice(p); let u = o.join(` `), c = u.replace(this.rules.other.blockquoteSetextReplace, ` $1`).replace(this.rules.other.blockquoteSetextReplace2, ""); r = r ? `${r} ${u}` : u, i = i ? `${i} ${c}` : c; let g = this.lexer.state.top; if (this.lexer.state.top = true, this.lexer.blockTokens(c, s, true), this.lexer.state.top = g, n.length === 0) break; let h = s.at(-1); if ((h == null ? void 0 : h.type) === "code") break; if ((h == null ? void 0 : h.type) === "blockquote") { let R = h, f = R.raw + ` ` + n.join(` `), O = this.blockquote(f); s[s.length - 1] = O, r = r.substring(0, r.length - R.raw.length) + O.raw, i = i.substring(0, i.length - R.text.length) + O.text; break; } else if ((h == null ? void 0 : h.type) === "list") { let R = h, f = R.raw + ` ` + n.join(` `), O = this.list(f); s[s.length - 1] = O, r = r.substring(0, r.length - h.raw.length) + O.raw, i = i.substring(0, i.length - R.raw.length) + O.raw, n = f.substring(s.at(-1).raw.length).split(` `); continue; } } return { type: "blockquote", raw: r, tokens: s, text: i }; } } list(e) { let t = this.rules.block.list.exec(e); if (t) { let n = t[1].trim(), r = n.length > 1, i = { type: "list", raw: "", ordered: r, start: r ? +n.slice(0, -1) : "", loose: false, items: [] }; n = r ? `\\d{1,9}\\${n.slice(-1)}` : `\\${n}`, this.options.pedantic && (n = r ? n : "[*+-]"); let s = this.rules.other.listItemRegex(n), a = false; for (; e; ) { let p = false, u = "", c = ""; if (!(t = s.exec(e)) || this.rules.block.hr.test(e)) break; u = t[0], e = e.substring(u.length); let g = t[2].split(` `, 1)[0].replace(this.rules.other.listReplaceTabs, (H) => " ".repeat(3 * H.length)), h = e.split(` `, 1)[0], R = !g.trim(), f = 0; if (this.options.pedantic ? (f = 2, c = g.trimStart()) : R ? f = t[1].length + 1 : (f = t[2].search(this.rules.other.nonSpaceChar), f = f > 4 ? 1 : f, c = g.slice(f), f += t[1].length), R && this.rules.other.blankLine.test(h) && (u += h + ` `, e = e.substring(h.length + 1), p = true), !p) { let H = this.rules.other.nextBulletRegex(f), ee = this.rules.other.hrRegex(f), te = this.rules.other.fencesBeginRegex(f), ne = this.rules.other.headingBeginRegex(f), xe = this.rules.other.htmlBeginRegex(f); for (; e; ) { let Z = e.split(` `, 1)[0], A; if (h = Z, this.options.pedantic ? (h = h.replace(this.rules.other.listReplaceNesting, " "), A = h) : A = h.replace(this.rules.other.tabCharGlobal, " "), te.test(h) || ne.test(h) || xe.test(h) || H.test(h) || ee.test(h)) break; if (A.search(this.rules.other.nonSpaceChar) >= f || !h.trim()) c += ` ` + A.slice(f); else { if (R || g.replace(this.rules.other.tabCharGlobal, " ").search(this.rules.other.nonSpaceChar) >= 4 || te.test(g) || ne.test(g) || ee.test(g)) break; c += ` ` + h; } !R && !h.trim() && (R = true), u += Z + ` `, e = e.substring(Z.length + 1), g = A.slice(f); } } i.loose || (a ? i.loose = true : this.rules.other.doubleBlankLine.test(u) && (a = true)); let O = null, Y; this.options.gfm && (O = this.rules.other.listIsTask.exec(c), O && (Y = O[0] !== "[ ] ", c = c.replace(this.rules.other.listReplaceTask, ""))), i.items.push({ type: "list_item", raw: u, task: !!O, checked: Y, loose: false, text: c, tokens: [] }), i.raw += u; } let o = i.items.at(-1); if (o) o.raw = o.raw.trimEnd(), o.text = o.text.trimEnd(); else return; i.raw = i.raw.trimEnd(); for (let p = 0; p < i.items.length; p++) if (this.lexer.state.top = false, i.items[p].tokens = this.lexer.blockTokens(i.items[p].text, []), !i.loose) { let u = i.items[p].tokens.filter((g) => g.type === "space"), c = u.length > 0 && u.some((g) => this.rules.other.anyLine.test(g.raw)); i.loose = c; } if (i.loose) for (let p = 0; p < i.items.length; p++) i.items[p].loose = true; return i; } } html(e) { let t = this.rules.block.html.exec(e); if (t) return { type: "html", block: true, raw: t[0], pre: t[1] === "pre" || t[1] === "script" || t[1] === "style", text: t[0] }; } def(e) { let t = this.rules.block.def.exec(e); if (t) { let n = t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, " "), r = t[2] ? t[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", i = t[3] ? t[3].substring(1, t[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t[3]; return { type: "def", tag: n, raw: t[0], href: r, title: i }; } } table(e) { var _a2; let t = this.rules.block.table.exec(e); if (!t || !this.rules.other.tableDelimiter.test(t[2])) return; let n = V(t[1]), r = t[2].replace(this.rules.other.tableAlignChars, "").split("|"), i = ((_a2 = t[3]) == null ? void 0 : _a2.trim()) ? t[3].replace(this.rules.other.tableRowBlankLine, "").split(` `) : [], s = { type: "table", raw: t[0], header: [], align: [], rows: [] }; if (n.length === r.length) { for (let a of r) this.rules.other.tableAlignRight.test(a) ? s.align.push("right") : this.rules.other.tableAlignCenter.test(a) ? s.align.push("center") : this.rules.other.tableAlignLeft.test(a) ? s.align.push("left") : s.align.push(null); for (let a = 0; a < n.length; a++) s.header.push({ text: n[a], tokens: this.lexer.inline(n[a]), header: true, align: s.align[a] }); for (let a of i) s.rows.push(V(a, s.header.length).map((o, p) => ({ text: o, tokens: this.lexer.inline(o), header: false, align: s.align[p] }))); return s; } } lheading(e) { let t = this.rules.block.lheading.exec(e); if (t) return { type: "heading", raw: t[0], depth: t[2].charAt(0) === "=" ? 1 : 2, text: t[1], tokens: this.lexer.inline(t[1]) }; } paragraph(e) { let t = this.rules.block.paragraph.exec(e); if (t) { let n = t[1].charAt(t[1].length - 1) === ` ` ? t[1].slice(0, -1) : t[1]; return { type: "paragraph", raw: t[0], text: n, tokens: this.lexer.inline(n) }; } } text(e) { let t = this.rules.block.text.exec(e); if (t) return { type: "text", raw: t[0], text: t[0], tokens: this.lexer.inline(t[0]) }; } escape(e) { let t = this.rules.inline.escape.exec(e); if (t) return { type: "escape", raw: t[0], text: t[1] }; } tag(e) { let t = this.rules.inline.tag.exec(e); if (t) return !this.lexer.state.inLink && this.rules.other.startATag.test(t[0]) ? this.lexer.state.inLink = true : this.lexer.state.inLink && this.rules.other.endATag.test(t[0]) && (this.lexer.state.inLink = false), !this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(t[0]) ? this.lexer.state.inRawBlock = true : this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(t[0]) && (this.lexer.state.inRawBlock = false), { type: "html", raw: t[0], inLink: this.lexer.state.inLink, inRawBlock: this.lexer.state.inRawBlock, block: false, text: t[0] }; } link(e) { let t = this.rules.inline.link.exec(e); if (t) { let n = t[2].trim(); if (!this.options.pedantic && this.rules.other.startAngleBracket.test(n)) { if (!this.rules.other.endAngleBracket.test(n)) return; let s = z(n.slice(0, -1), "\\"); if ((n.length - s.length) % 2 === 0) return; } else { let s = fe(t[2], "()"); if (s === -2) return; if (s > -1) { let o = (t[0].indexOf("!") === 0 ? 5 : 4) + t[1].length + s; t[2] = t[2].substring(0, s), t[0] = t[0].substring(0, o).trim(), t[3] = ""; } } let r = t[2], i = ""; if (this.options.pedantic) { let s = this.rules.other.pedanticHrefTitle.exec(r); s && (r = s[1], i = s[3]); } else i = t[3] ? t[3].slice(1, -1) : ""; return r = r.trim(), this.rules.other.startAngleBracket.test(r) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(n) ? r = r.slice(1) : r = r.slice(1, -1)), me(t, { href: r && r.replace(this.rules.inline.anyPunctuation, "$1"), title: i && i.replace(this.rules.inline.anyPunctuation, "$1") }, t[0], this.lexer, this.rules); } } reflink(e, t) { let n; if ((n = this.rules.inline.reflink.exec(e)) || (n = this.rules.inline.nolink.exec(e))) { let r = (n[2] || n[1]).replace(this.rules.other.multipleSpaceGlobal, " "), i = t[r.toLowerCase()]; if (!i) { let s = n[0].charAt(0); return { type: "text", raw: s, text: s }; } return me(n, i, n[0], this.lexer, this.rules); } } emStrong(e, t, n = "") { let r = this.rules.inline.emStrongLDelim.exec(e); if (!r || r[3] && n.match(this.rules.other.unicodeAlphaNumeric)) return; if (!(r[1] || r[2] || "") || !n || this.rules.inline.punctuation.exec(n)) { let s = [...r[0]].length - 1, a, o, p = s, u = 0, c = r[0][0] === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd; for (c.lastIndex = 0, t = t.slice(-1 * e.length + s); (r = c.exec(t)) != null; ) { if (a = r[1] || r[2] || r[3] || r[4] || r[5] || r[6], !a) continue; if (o = [...a].length, r[3] || r[4]) { p += o; continue; } else if ((r[5] || r[6]) && s % 3 && !((s + o) % 3)) { u += o; continue; } if (p -= o, p > 0) continue; o = Math.min(o, o + p + u); let g = [...r[0]][0].length, h = e.slice(0, s + r.index + g + o); if (Math.min(s, o) % 2) { let f = h.slice(1, -1); return { type: "em", raw: h, text: f, tokens: this.lexer.inlineTokens(f) }; } let R = h.slice(2, -2); return { type: "strong", raw: h, text: R, tokens: this.lexer.inlineTokens(R) }; } } } codespan(e) { let t = this.rules.inline.code.exec(e); if (t) { let n = t[2].replace(this.rules.other.newLineCharGlobal, " "), r = this.rules.other.nonSpaceChar.test(n), i = this.rules.other.startingSpaceChar.test(n) && this.rules.other.endingSpaceChar.test(n); return r && i && (n = n.substring(1, n.length - 1)), { type: "codespan", raw: t[0], text: n }; } } br(e) { let t = this.rules.inline.br.exec(e); if (t) return { type: "br", raw: t[0] }; } del(e) { let t = this.rules.inline.del.exec(e); if (t) return { type: "del", raw: t[0], text: t[2], tokens: this.lexer.inlineTokens(t[2]) }; } autolink(e) { let t = this.rules.inline.autolink.exec(e); if (t) { let n, r; return t[2] === "@" ? (n = t[1], r = "mailto:" + n) : (n = t[1], r = n), { type: "link", raw: t[0], text: n, href: r, tokens: [{ type: "text", raw: n, text: n }] }; } } url(e) { var _a2; let t; if (t = this.rules.inline.url.exec(e)) { let n, r; if (t[2] === "@") n = t[0], r = "mailto:" + n; else { let i; do i = t[0], t[0] = ((_a2 = this.rules.inline._backpedal.exec(t[0])) == null ? void 0 : _a2[0]) ?? ""; while (i !== t[0]); n = t[0], t[1] === "www." ? r = "http://" + t[0] : r = t[0]; } return { type: "link", raw: t[0], text: n, href: r, tokens: [{ type: "text", raw: n, text: n }] }; } } inlineText(e) { let t = this.rules.inline.text.exec(e); if (t) { let n = this.lexer.state.inRawBlock; return { type: "text", raw: t[0], text: t[0], escaped: n }; } } }; var x = class l { constructor(e) { __publicField(this, "tokens"); __publicField(this, "options"); __publicField(this, "state"); __publicField(this, "tokenizer"); __publicField(this, "inlineQueue"); this.tokens = [], this.tokens.links = /* @__PURE__ */ Object.create(null), this.options = e || T, this.options.tokenizer = this.options.tokenizer || new y(), this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: false, inRawBlock: false, top: true }; let t = { other: m, block: C.normal, inline: M.normal }; this.options.pedantic ? (t.block = C.pedantic, t.inline = M.pedantic) : this.options.gfm && (t.block = C.gfm, this.options.breaks ? t.inline = M.breaks : t.inline = M.gfm), this.tokenizer.rules = t; } static get rules() { return { block: C, inline: M }; } static lex(e, t) { return new l(t).lex(e); } static lexInline(e, t) { return new l(t).inlineTokens(e); } lex(e) { e = e.replace(m.carriageReturn, ` `), this.blockTokens(e, this.tokens); for (let t = 0; t < this.inlineQueue.length; t++) { let n = this.inlineQueue[t]; this.inlineTokens(n.src, n.tokens); } return this.inlineQueue = [], this.tokens; } blockTokens(e, t = [], n = false) { var _a2, _b, _c; for (this.options.pedantic && (e = e.replace(m.tabCharGlobal, " ").replace(m.spaceLine, "")); e; ) { let r; if ((_b = (_a2 = this.options.extensions) == null ? void 0 : _a2.block) == null ? void 0 : _b.some((s) => (r = s.call({ lexer: this }, e, t)) ? (e = e.substring(r.raw.length), t.push(r), true) : false)) continue; if (r = this.tokenizer.space(e)) { e = e.substring(r.raw.length); let s = t.at(-1); r.raw.length === 1 && s !== void 0 ? s.raw += ` ` : t.push(r); continue; } if (r = this.tokenizer.code(e)) { e = e.substring(r.raw.length); let s = t.at(-1); (s == null ? void 0 : s.type) === "paragraph" || (s == null ? void 0 : s.type) === "text" ? (s.raw += (s.raw.endsWith(` `) ? "" : ` `) + r.raw, s.text += ` ` + r.text, this.inlineQueue.at(-1).src = s.text) : t.push(r); continue; } if (r = this.tokenizer.fences(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.heading(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.hr(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.blockquote(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.list(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.html(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.def(e)) { e = e.substring(r.raw.length); let s = t.at(-1); (s == null ? void 0 : s.type) === "paragraph" || (s == null ? void 0 : s.type) === "text" ? (s.raw += (s.raw.endsWith(` `) ? "" : ` `) + r.raw, s.text += ` ` + r.raw, this.inlineQueue.at(-1).src = s.text) : this.tokens.links[r.tag] || (this.tokens.links[r.tag] = { href: r.href, title: r.title }, t.push(r)); continue; } if (r = this.tokenizer.table(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.lheading(e)) { e = e.substring(r.raw.length), t.push(r); continue; } let i = e; if ((_c = this.options.extensions) == null ? void 0 : _c.startBlock) { let s = 1 / 0, a = e.slice(1), o; this.options.extensions.startBlock.forEach((p) => { o = p.call({ lexer: this }, a), typeof o == "number" && o >= 0 && (s = Math.min(s, o)); }), s < 1 / 0 && s >= 0 && (i = e.substring(0, s + 1)); } if (this.state.top && (r = this.tokenizer.paragraph(i))) { let s = t.at(-1); n && (s == null ? void 0 : s.type) === "paragraph" ? (s.raw += (s.raw.endsWith(` `) ? "" : ` `) + r.raw, s.text += ` ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r), n = i.length !== e.length, e = e.substring(r.raw.length); continue; } if (r = this.tokenizer.text(e)) { e = e.substring(r.raw.length); let s = t.at(-1); (s == null ? void 0 : s.type) === "text" ? (s.raw += (s.raw.endsWith(` `) ? "" : ` `) + r.raw, s.text += ` ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r); continue; } if (e) { let s = "Infinite loop on byte: " + e.charCodeAt(0); if (this.options.silent) { console.error(s); break; } else throw new Error(s); } } return this.state.top = true, t; } inline(e, t = []) { return this.inlineQueue.push({ src: e, tokens: t }), t; } inlineTokens(e, t = []) { var _a2, _b, _c, _d, _e2; let n = e, r = null; if (this.tokens.links) { let o = Object.keys(this.tokens.links); if (o.length > 0) for (; (r = this.tokenizer.rules.inline.reflinkSearch.exec(n)) != null; ) o.includes(r[0].slice(r[0].lastIndexOf("[") + 1, -1)) && (n = n.slice(0, r.index) + "[" + "a".repeat(r[0].length - 2) + "]" + n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex)); } for (; (r = this.tokenizer.rules.inline.anyPunctuation.exec(n)) != null; ) n = n.slice(0, r.index) + "++" + n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex); let i; for (; (r = this.tokenizer.rules.inline.blockSkip.exec(n)) != null; ) i = r[2] ? r[2].length : 0, n = n.slice(0, r.index + i) + "[" + "a".repeat(r[0].length - i - 2) + "]" + n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); n = ((_b = (_a2 = this.options.hooks) == null ? void 0 : _a2.emStrongMask) == null ? void 0 : _b.call({ lexer: this }, n)) ?? n; let s = false, a = ""; for (; e; ) { s || (a = ""), s = false; let o; if ((_d = (_c = this.options.extensions) == null ? void 0 : _c.inline) == null ? void 0 : _d.some((u) => (o = u.call({ lexer: this }, e, t)) ? (e = e.substring(o.raw.length), t.push(o), true) : false)) continue; if (o = this.tokenizer.escape(e)) { e = e.substring(o.raw.length), t.push(o); continue; } if (o = this.tokenizer.tag(e)) { e = e.substring(o.raw.length), t.push(o); continue; } if (o = this.tokenizer.link(e)) { e = e.substring(o.raw.length), t.push(o); continue; } if (o = this.tokenizer.reflink(e, this.tokens.links)) { e = e.substring(o.raw.length); let u = t.at(-1); o.type === "text" && (u == null ? void 0 : u.type) === "text" ? (u.raw += o.raw, u.text += o.text) : t.push(o); continue; } if (o = this.tokenizer.emStrong(e, n, a)) { e = e.substring(o.raw.length), t.push(o); continue; } if (o = this.tokenizer.codespan(e)) { e = e.substring(o.raw.length), t.push(o); continue; } if (o = this.tokenizer.br(e)) { e = e.substring(o.raw.length), t.push(o); continue; } if (o = this.tokenizer.del(e)) { e = e.substring(o.raw.length), t.push(o); continue; } if (o = this.tokenizer.autolink(e)) { e = e.substring(o.raw.length), t.push(o); continue; } if (!this.state.inLink && (o = this.tokenizer.url(e))) { e = e.substring(o.raw.length), t.push(o); continue; } let p = e; if ((_e2 = this.options.extensions) == null ? void 0 : _e2.startInline) { let u = 1 / 0, c = e.slice(1), g; this.options.extensions.startInline.forEach((h) => { g = h.call({ lexer: this }, c), typeof g == "number" && g >= 0 && (u = Math.min(u, g)); }), u < 1 / 0 && u >= 0 && (p = e.substring(0, u + 1)); } if (o = this.tokenizer.inlineText(p)) { e = e.substring(o.raw.length), o.raw.slice(-1) !== "_" && (a = o.raw.slice(-1)), s = true; let u = t.at(-1); (u == null ? void 0 : u.type) === "text" ? (u.raw += o.raw, u.text += o.text) : t.push(o); continue; } if (e) { let u = "Infinite loop on byte: " + e.charCodeAt(0); if (this.options.silent) { console.error(u); break; } else throw new Error(u); } } return t; } }; var P = class { constructor(e) { __publicField(this, "options"); __publicField(this, "parser"); this.options = e || T; } space(e) { return ""; } code({ text: e, lang: t, escaped: n }) { var _a2; let r = (_a2 = (t || "").match(m.notSpaceStart)) == null ? void 0 : _a2[0], i = e.replace(m.endingNewline, "") + ` `; return r ? '
' + (n ? i : w(i, true)) + `
` : "
" + (n ? i : w(i, true)) + `
`; } blockquote({ tokens: e }) { return `
${this.parser.parse(e)}
`; } html({ text: e }) { return e; } def(e) { return ""; } heading({ tokens: e, depth: t }) { return `${this.parser.parseInline(e)} `; } hr(e) { return `
`; } list(e) { let t = e.ordered, n = e.start, r = ""; for (let a = 0; a < e.items.length; a++) { let o = e.items[a]; r += this.listitem(o); } let i = t ? "ol" : "ul", s = t && n !== 1 ? ' start="' + n + '"' : ""; return "<" + i + s + `> ` + r + " `; } listitem(e) { var _a2; let t = ""; if (e.task) { let n = this.checkbox({ checked: !!e.checked }); e.loose ? ((_a2 = e.tokens[0]) == null ? void 0 : _a2.type) === "paragraph" ? (e.tokens[0].text = n + " " + e.tokens[0].text, e.tokens[0].tokens && e.tokens[0].tokens.length > 0 && e.tokens[0].tokens[0].type === "text" && (e.tokens[0].tokens[0].text = n + " " + w(e.tokens[0].tokens[0].text), e.tokens[0].tokens[0].escaped = true)) : e.tokens.unshift({ type: "text", raw: n + " ", text: n + " ", escaped: true }) : t += n + " "; } return t += this.parser.parse(e.tokens, !!e.loose), `
  • ${t}
  • `; } checkbox({ checked: e }) { return "'; } paragraph({ tokens: e }) { return `

    ${this.parser.parseInline(e)}

    `; } table(e) { let t = "", n = ""; for (let i = 0; i < e.header.length; i++) n += this.tablecell(e.header[i]); t += this.tablerow({ text: n }); let r = ""; for (let i = 0; i < e.rows.length; i++) { let s = e.rows[i]; n = ""; for (let a = 0; a < s.length; a++) n += this.tablecell(s[a]); r += this.tablerow({ text: n }); } return r && (r = `${r}`), ` ` + t + ` ` + r + `
    `; } tablerow({ text: e }) { return ` ${e} `; } tablecell(e) { let t = this.parser.parseInline(e.tokens), n = e.header ? "th" : "td"; return (e.align ? `<${n} align="${e.align}">` : `<${n}>`) + t + ` `; } strong({ tokens: e }) { return `${this.parser.parseInline(e)}`; } em({ tokens: e }) { return `${this.parser.parseInline(e)}`; } codespan({ text: e }) { return `${w(e, true)}`; } br(e) { return "
    "; } del({ tokens: e }) { return `${this.parser.parseInline(e)}`; } link({ href: e, title: t, tokens: n }) { let r = this.parser.parseInline(n), i = J(e); if (i === null) return r; e = i; let s = '
    ", s; } image({ href: e, title: t, text: n, tokens: r }) { r && (n = this.parser.parseInline(r, this.parser.textRenderer)); let i = J(e); if (i === null) return w(n); e = i; let s = `${n} { let a = i[s].flat(1 / 0); n = n.concat(this.walkTokens(a, t)); }) : i.tokens && (n = n.concat(this.walkTokens(i.tokens, t))); } } return n; } use(...e) { let t = this.defaults.extensions || { renderers: {}, childTokens: {} }; return e.forEach((n) => { let r = { ...n }; if (r.async = this.defaults.async || r.async || false, n.extensions && (n.extensions.forEach((i) => { if (!i.name) throw new Error("extension name required"); if ("renderer" in i) { let s = t.renderers[i.name]; s ? t.renderers[i.name] = function(...a) { let o = i.renderer.apply(this, a); return o === false && (o = s.apply(this, a)), o; } : t.renderers[i.name] = i.renderer; } if ("tokenizer" in i) { if (!i.level || i.level !== "block" && i.level !== "inline") throw new Error("extension level must be 'block' or 'inline'"); let s = t[i.level]; s ? s.unshift(i.tokenizer) : t[i.level] = [i.tokenizer], i.start && (i.level === "block" ? t.startBlock ? t.startBlock.push(i.start) : t.startBlock = [i.start] : i.level === "inline" && (t.startInline ? t.startInline.push(i.start) : t.startInline = [i.start])); } "childTokens" in i && i.childTokens && (t.childTokens[i.name] = i.childTokens); }), r.extensions = t), n.renderer) { let i = this.defaults.renderer || new P(this.defaults); for (let s in n.renderer) { if (!(s in i)) throw new Error(`renderer '${s}' does not exist`); if (["options", "parser"].includes(s)) continue; let a = s, o = n.renderer[a], p = i[a]; i[a] = (...u) => { let c = o.apply(i, u); return c === false && (c = p.apply(i, u)), c || ""; }; } r.renderer = i; } if (n.tokenizer) { let i = this.defaults.tokenizer || new y(this.defaults); for (let s in n.tokenizer) { if (!(s in i)) throw new Error(`tokenizer '${s}' does not exist`); if (["options", "rules", "lexer"].includes(s)) continue; let a = s, o = n.tokenizer[a], p = i[a]; i[a] = (...u) => { let c = o.apply(i, u); return c === false && (c = p.apply(i, u)), c; }; } r.tokenizer = i; } if (n.hooks) { let i = this.defaults.hooks || new S(); for (let s in n.hooks) { if (!(s in i)) throw new Error(`hook '${s}' does not exist`); if (["options", "block"].includes(s)) continue; let a = s, o = n.hooks[a], p = i[a]; S.passThroughHooks.has(s) ? i[a] = (u) => { if (this.defaults.async && S.passThroughHooksRespectAsync.has(s)) return (async () => { let g = await o.call(i, u); return p.call(i, g); })(); let c = o.call(i, u); return p.call(i, c); } : i[a] = (...u) => { if (this.defaults.async) return (async () => { let g = await o.apply(i, u); return g === false && (g = await p.apply(i, u)), g; })(); let c = o.apply(i, u); return c === false && (c = p.apply(i, u)), c; }; } r.hooks = i; } if (n.walkTokens) { let i = this.defaults.walkTokens, s = n.walkTokens; r.walkTokens = function(a) { let o = []; return o.push(s.call(this, a)), i && (o = o.concat(i.call(this, a))), o; }; } this.defaults = { ...this.defaults, ...r }; }), this; } setOptions(e) { return this.defaults = { ...this.defaults, ...e }, this; } lexer(e, t) { return x.lex(e, t ?? this.defaults); } parser(e, t) { return b.parse(e, t ?? this.defaults); } parseMarkdown(e) { return (n, r) => { let i = { ...r }, s = { ...this.defaults, ...i }, a = this.onError(!!s.silent, !!s.async); if (this.defaults.async === true && i.async === false) return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.")); if (typeof n > "u" || n === null) return a(new Error("marked(): input parameter is undefined or null")); if (typeof n != "string") return a(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n) + ", string expected")); if (s.hooks && (s.hooks.options = s, s.hooks.block = e), s.async) return (async () => { let o = s.hooks ? await s.hooks.preprocess(n) : n, u = await (s.hooks ? await s.hooks.provideLexer() : e ? x.lex : x.lexInline)(o, s), c = s.hooks ? await s.hooks.processAllTokens(u) : u; s.walkTokens && await Promise.all(this.walkTokens(c, s.walkTokens)); let h = await (s.hooks ? await s.hooks.provideParser() : e ? b.parse : b.parseInline)(c, s); return s.hooks ? await s.hooks.postprocess(h) : h; })().catch(a); try { s.hooks && (n = s.hooks.preprocess(n)); let p = (s.hooks ? s.hooks.provideLexer() : e ? x.lex : x.lexInline)(n, s); s.hooks && (p = s.hooks.processAllTokens(p)), s.walkTokens && this.walkTokens(p, s.walkTokens); let c = (s.hooks ? s.hooks.provideParser() : e ? b.parse : b.parseInline)(p, s); return s.hooks && (c = s.hooks.postprocess(c)), c; } catch (o) { return a(o); } }; } onError(e, t) { return (n) => { if (n.message += ` Please report this to https://github.com/markedjs/marked.`, e) { let r = "

    An error occurred:

    " + w(n.message + "", true) + "
    "; return t ? Promise.resolve(r) : r; } if (t) return Promise.reject(n); throw n; }; } }; var _ = new B(); function k(l3, e) { return _.parse(l3, e); } k.options = k.setOptions = function(l3) { return _.setOptions(l3), k.defaults = _.defaults, G(k.defaults), k; }; k.getDefaults = L; k.defaults = T; k.use = function(...l3) { return _.use(...l3), k.defaults = _.defaults, G(k.defaults), k; }; k.walkTokens = function(l3, e) { return _.walkTokens(l3, e); }; k.parseInline = _.parseInline; k.Parser = b; k.parser = b.parse; k.Renderer = P; k.TextRenderer = $; k.Lexer = x; k.lexer = x.lex; k.Tokenizer = y; k.Hooks = S; k.parse = k; var Zt = k.options; var Gt = k.setOptions; var Nt = k.use; var Ft = k.walkTokens; var jt = k.parseInline; var Ut = b.parse; var Kt = x.lex; // node_modules/mermaid/dist/chunks/mermaid.core/chunk-U2HBQHQK.mjs var unknownIcon = { body: '?', height: 80, width: 80 }; var iconsStore = /* @__PURE__ */ new Map(); var loaderStore = /* @__PURE__ */ new Map(); var registerIconPacks = __name((iconLoaders) => { for (const iconLoader of iconLoaders) { if (!iconLoader.name) { throw new Error( 'Invalid icon loader. Must have a "name" property with non-empty string value.' ); } log.debug("Registering icon pack:", iconLoader.name); if ("loader" in iconLoader) { loaderStore.set(iconLoader.name, iconLoader.loader); } else if ("icons" in iconLoader) { iconsStore.set(iconLoader.name, iconLoader.icons); } else { log.error("Invalid icon loader:", iconLoader); throw new Error('Invalid icon loader. Must have either "icons" or "loader" property.'); } } }, "registerIconPacks"); var getRegisteredIconData = __name(async (iconName, fallbackPrefix) => { const data = stringToIcon(iconName, true, fallbackPrefix !== void 0); if (!data) { throw new Error(`Invalid icon name: ${iconName}`); } const prefix = data.prefix || fallbackPrefix; if (!prefix) { throw new Error(`Icon name must contain a prefix: ${iconName}`); } let icons = iconsStore.get(prefix); if (!icons) { const loader = loaderStore.get(prefix); if (!loader) { throw new Error(`Icon set not found: ${data.prefix}`); } try { const loaded = await loader(); icons = { ...loaded, prefix }; iconsStore.set(prefix, icons); } catch (e) { log.error(e); throw new Error(`Failed to load icon set: ${data.prefix}`); } } const iconData = getIconData(icons, data.name); if (!iconData) { throw new Error(`Icon not found: ${iconName}`); } return iconData; }, "getRegisteredIconData"); var isIconAvailable = __name(async (iconName) => { try { await getRegisteredIconData(iconName); return true; } catch { return false; } }, "isIconAvailable"); var getIconSVG = __name(async (iconName, customisations, extraAttributes) => { let iconData; try { iconData = await getRegisteredIconData(iconName, customisations == null ? void 0 : customisations.fallbackPrefix); } catch (e) { log.error(e); iconData = unknownIcon; } const renderData = iconToSVG(iconData, customisations); const svg = iconToHTML(replaceIDs(renderData.body), { ...renderData.attributes, ...extraAttributes }); return sanitizeText(svg, getConfig()); }, "getIconSVG"); function preprocessMarkdown(markdown, { markdownAutoWrap }) { const withoutBR = markdown.replace(//g, "\n"); const withoutMultipleNewlines = withoutBR.replace(/\n{2,}/g, "\n"); const withoutExtraSpaces = dedent(withoutMultipleNewlines); if (markdownAutoWrap === false) { } return withoutExtraSpaces; } __name(preprocessMarkdown, "preprocessMarkdown"); function nonMarkdownToLines(nonMarkdownText) { return nonMarkdownText.split(/\\n|\n|/gi).map( (line) => { var _a2; return ((_a2 = line.trim().match(/<[^>]+>|[^\s<>]+/g)) == null ? void 0 : _a2.map((word) => ({ content: word, type: "normal" }))) ?? []; } ); } __name(nonMarkdownToLines, "nonMarkdownToLines"); function markdownToLines(markdown, config = {}) { const preprocessedMarkdown = preprocessMarkdown(markdown, config); const nodes = k.lexer(preprocessedMarkdown); const lines = [[]]; let currentLine = 0; function processNode(node, parentType = "normal") { if (node.type === "text") { const textLines = node.text.split("\n"); textLines.forEach((textLine, index) => { if (index !== 0) { currentLine++; lines.push([]); } textLine.split(" ").forEach((word) => { word = word.replace(/'/g, `'`); if (word) { lines[currentLine].push({ content: word, type: parentType }); } }); }); } else if (node.type === "strong" || node.type === "em") { node.tokens.forEach((contentNode) => { processNode(contentNode, node.type); }); } else if (node.type === "html") { lines[currentLine].push({ content: node.text, type: "normal" }); } } __name(processNode, "processNode"); nodes.forEach((treeNode) => { var _a2; if (treeNode.type === "paragraph") { (_a2 = treeNode.tokens) == null ? void 0 : _a2.forEach((contentNode) => { processNode(contentNode); }); } else if (treeNode.type === "html") { lines[currentLine].push({ content: treeNode.text, type: "normal" }); } else { lines[currentLine].push({ content: treeNode.raw, type: "normal" }); } }); return lines; } __name(markdownToLines, "markdownToLines"); function nonMarkdownToHTML(text) { if (!text) { return ""; } return `

    ${/** * Replace new lines with
    tags. * * Unlike in markdown text, `\n` sequences are treated as line breaks here. */ text.replace(/\\n|\n/g, "
    ")}

    `; } __name(nonMarkdownToHTML, "nonMarkdownToHTML"); function markdownToHTML(markdown, { markdownAutoWrap } = {}) { const nodes = k.lexer(markdown); function output(node) { var _a2, _b, _c; if (node.type === "text") { if (markdownAutoWrap === false) { return node.text.replace(/\n */g, "
    ").replace(/ /g, " "); } return node.text.replace(/\n */g, "
    "); } else if (node.type === "strong") { return `${(_a2 = node.tokens) == null ? void 0 : _a2.map(output).join("")}`; } else if (node.type === "em") { return `${(_b = node.tokens) == null ? void 0 : _b.map(output).join("")}`; } else if (node.type === "paragraph") { return `

    ${(_c = node.tokens) == null ? void 0 : _c.map(output).join("")}

    `; } else if (node.type === "space") { return ""; } else if (node.type === "html") { return `${node.text}`; } else if (node.type === "escape") { return node.text; } log.warn(`Unsupported markdown: ${node.type}`); return node.raw; } __name(output, "output"); return nodes.map(output).join(""); } __name(markdownToHTML, "markdownToHTML"); function splitTextToChars(text) { if (Intl.Segmenter) { return [...new Intl.Segmenter().segment(text)].map((s) => s.segment); } return [...text]; } __name(splitTextToChars, "splitTextToChars"); function splitWordToFitWidth(checkFit, word) { const characters = splitTextToChars(word.content); return splitWordToFitWidthRecursion(checkFit, [], characters, word.type); } __name(splitWordToFitWidth, "splitWordToFitWidth"); function splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) { if (remainingChars.length === 0) { return [ { content: usedChars.join(""), type }, { content: "", type } ]; } const [nextChar, ...rest] = remainingChars; const newWord = [...usedChars, nextChar]; if (checkFit([{ content: newWord.join(""), type }])) { return splitWordToFitWidthRecursion(checkFit, newWord, rest, type); } if (usedChars.length === 0 && nextChar) { usedChars.push(nextChar); remainingChars.shift(); } return [ { content: usedChars.join(""), type }, { content: remainingChars.join(""), type } ]; } __name(splitWordToFitWidthRecursion, "splitWordToFitWidthRecursion"); function splitLineToFitWidth(line, checkFit) { if (line.some(({ content }) => content.includes("\n"))) { throw new Error("splitLineToFitWidth does not support newlines in the line"); } return splitLineToFitWidthRecursion(line, checkFit); } __name(splitLineToFitWidth, "splitLineToFitWidth"); function splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) { if (words.length === 0) { if (newLine.length > 0) { lines.push(newLine); } return lines.length > 0 ? lines : []; } let joiner = ""; if (words[0].content === " ") { joiner = " "; words.shift(); } const nextWord = words.shift() ?? { content: " ", type: "normal" }; const lineWithNextWord = [...newLine]; if (joiner !== "") { lineWithNextWord.push({ content: joiner, type: "normal" }); } lineWithNextWord.push(nextWord); if (checkFit(lineWithNextWord)) { return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord); } if (newLine.length > 0) { lines.push(newLine); words.unshift(nextWord); } else if (nextWord.content) { const [line, rest] = splitWordToFitWidth(checkFit, nextWord); lines.push([line]); if (rest.content) { words.unshift(rest); } } return splitLineToFitWidthRecursion(words, checkFit, lines); } __name(splitLineToFitWidthRecursion, "splitLineToFitWidthRecursion"); function applyStyle(dom, styleFn) { if (styleFn) { dom.attr("style", styleFn); } } __name(applyStyle, "applyStyle"); var maxSafeSizeForWidth = 16384; async function addHtmlSpan(element, node, width, classes, addBackground = false, config = getConfig()) { const fo = element.append("foreignObject"); fo.attr("width", `${Math.min(10 * width, maxSafeSizeForWidth)}px`); fo.attr("height", `${Math.min(10 * width, maxSafeSizeForWidth)}px`); const div = fo.append("xhtml:div"); const sanitizedLabel = hasKatex(node.label) ? await renderKatexSanitized(node.label.replace(common_default.lineBreakRegex, "\n"), config) : sanitizeText(node.label, config); const labelClass = node.isNode ? "nodeLabel" : "edgeLabel"; const span = div.append("span"); span.html(sanitizedLabel); applyStyle(span, node.labelStyle); span.attr("class", `${labelClass} ${classes}`); applyStyle(div, node.labelStyle); div.style("display", "table-cell"); div.style("white-space", "nowrap"); div.style("line-height", "1.5"); if (width !== Number.POSITIVE_INFINITY) { div.style("max-width", width + "px"); div.style("text-align", "center"); } div.attr("xmlns", "http://www.w3.org/1999/xhtml"); if (addBackground) { div.attr("class", "labelBkg"); } let bbox = div.node().getBoundingClientRect(); if (bbox.width === width) { div.style("display", "table"); div.style("white-space", "break-spaces"); div.style("width", width + "px"); bbox = div.node().getBoundingClientRect(); } return fo.node(); } __name(addHtmlSpan, "addHtmlSpan"); function createTspan(textElement, lineIndex, lineHeight, centerText = false) { const tspan = textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); if (centerText) { tspan.attr("text-anchor", "middle"); } return tspan; } __name(createTspan, "createTspan"); function computeWidthOfText(parentNode, lineHeight, line) { const testElement = parentNode.append("text"); const testSpan = createTspan(testElement, 1, lineHeight); updateTextContentAndStyles(testSpan, line); const textLength = testSpan.node().getComputedTextLength(); testElement.remove(); return textLength; } __name(computeWidthOfText, "computeWidthOfText"); function computeDimensionOfText(parentNode, lineHeight, text) { var _a2; const testElement = parentNode.append("text"); const testSpan = createTspan(testElement, 1, lineHeight); updateTextContentAndStyles(testSpan, [{ content: text, type: "normal" }]); const textDimension = (_a2 = testSpan.node()) == null ? void 0 : _a2.getBoundingClientRect(); if (textDimension) { testElement.remove(); } return textDimension; } __name(computeDimensionOfText, "computeDimensionOfText"); function createFormattedText(width, g, structuredText, addBackground = false, centerText = false) { const lineHeight = 1.1; const labelGroup = g.append("g"); const bkg = labelGroup.insert("rect").attr("class", "background").attr("style", "stroke: none"); const textElement = labelGroup.append("text").attr("y", "-10.1"); if (centerText) { textElement.attr("text-anchor", "middle"); } let lineIndex = 0; for (const line of structuredText) { const checkWidth = __name((line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width, "checkWidth"); const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth); for (const preparedLine of linesUnderWidth) { const tspan = createTspan(textElement, lineIndex, lineHeight, centerText); updateTextContentAndStyles(tspan, preparedLine); lineIndex++; } } if (addBackground) { const bbox = textElement.node().getBBox(); const padding = 2; bkg.attr("x", bbox.x - padding).attr("y", bbox.y - padding).attr("width", bbox.width + 2 * padding).attr("height", bbox.height + 2 * padding); return labelGroup.node(); } else { return textElement.node(); } } __name(createFormattedText, "createFormattedText"); function decodeHTMLEntities(text) { const regex2 = /&(amp|lt|gt);/g; return text.replace(regex2, (match, entity) => { switch (entity) { case "amp": return "&"; case "lt": return "<"; case "gt": return ">"; default: return match; } }); } __name(decodeHTMLEntities, "decodeHTMLEntities"); function updateTextContentAndStyles(tspan, wrappedLine) { tspan.text(""); wrappedLine.forEach((word, index) => { const innerTspan = tspan.append("tspan").attr("font-style", word.type === "em" ? "italic" : "normal").attr("class", "text-inner-tspan").attr("font-weight", word.type === "strong" ? "bold" : "normal"); if (index === 0) { innerTspan.text(decodeHTMLEntities(word.content)); } else { innerTspan.text(" " + decodeHTMLEntities(word.content)); } }); } __name(updateTextContentAndStyles, "updateTextContentAndStyles"); async function replaceIconSubstring(text, config = {}) { const pendingReplacements = []; text.replace(/(fa[bklrs]?):fa-([\w-]+)/g, (fullMatch, prefix, iconName) => { pendingReplacements.push( (async () => { const registeredIconName = `${prefix}:${iconName}`; if (await isIconAvailable(registeredIconName)) { return await getIconSVG(registeredIconName, void 0, { class: "label-icon" }); } else { return ``; } })() ); return fullMatch; }); const replacements = await Promise.all(pendingReplacements); return text.replace(/(fa[bklrs]?):fa-([\w-]+)/g, () => replacements.shift() ?? ""); } __name(replaceIconSubstring, "replaceIconSubstring"); var createText = __name(async (el, text = "", { style = "", isTitle = false, classes = "", useHtmlLabels = true, markdown = true, isNode = true, /** * The width to wrap the text within. Set to `Number.POSITIVE_INFINITY` for no wrapping. */ width = 200, addSvgBackground = false } = {}, config) => { log.debug( "XYZ createText", text, style, isTitle, classes, useHtmlLabels, isNode, "addSvgBackground: ", addSvgBackground ); if (useHtmlLabels) { const htmlText = markdown ? markdownToHTML(text, config) : nonMarkdownToHTML(text); const decodedReplacedText = await replaceIconSubstring(decodeEntities(htmlText), config); const inputForKatex = text.replace(/\\\\/g, "\\"); const node = { isNode, label: hasKatex(text) ? inputForKatex : decodedReplacedText, labelStyle: style.replace("fill:", "color:") }; const vertexNode = await addHtmlSpan(el, node, width, classes, addSvgBackground, config); return vertexNode; } else { const sanitizeBR = decodeEntities(text.replace(//g, "
    ")); const structuredText = markdown ? markdownToLines(sanitizeBR.replace("
    ", "
    "), config) : nonMarkdownToLines(sanitizeBR); const svgLabel = createFormattedText( width, el, structuredText, text ? addSvgBackground : false, !isNode ); if (isNode) { if (/stroke:/.exec(style)) { style = style.replace("stroke:", "lineColor:"); } const nodeLabelTextStyle = style.replace(/stroke:[^;]+;?/g, "").replace(/stroke-width:[^;]+;?/g, "").replace(/fill:[^;]+;?/g, "").replace(/color:/g, "fill:"); select_default(svgLabel).attr("style", nodeLabelTextStyle); } else { const edgeLabelRectStyle = style.replace(/stroke:[^;]+;?/g, "").replace(/stroke-width:[^;]+;?/g, "").replace(/fill:[^;]+;?/g, "").replace(/background:/g, "fill:"); select_default(svgLabel).select("rect").attr("style", edgeLabelRectStyle.replace(/background:/g, "fill:")); const edgeLabelTextStyle = style.replace(/stroke:[^;]+;?/g, "").replace(/stroke-width:[^;]+;?/g, "").replace(/fill:[^;]+;?/g, "").replace(/color:/g, "fill:"); select_default(svgLabel).select("text").attr("style", edgeLabelTextStyle); } if (isTitle) { select_default(svgLabel).selectAll("tspan.text-outer-tspan").classed("title-row", true); } else { select_default(svgLabel).selectAll("tspan.text-outer-tspan").classed("row", true); } return svgLabel; } }, "createText"); export { dedent, unknownIcon, registerIconPacks, getIconSVG, computeDimensionOfText, createText }; //# sourceMappingURL=chunk-HX7G7X5J.js.map