@coderminer/vue-markdown 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +110 -0
- package/LICENSE +21 -0
- package/README.md +579 -3
- package/README.zh-CN.md +547 -0
- package/dist/chunks/MarkdownBlockquote-DVXziX2t.js +18 -0
- package/dist/chunks/MarkdownBlockquote-DVXziX2t.js.map +1 -0
- package/dist/chunks/MarkdownBreak-BwCi2Itt.js +18 -0
- package/dist/chunks/MarkdownBreak-BwCi2Itt.js.map +1 -0
- package/dist/chunks/MarkdownCode-B1k9tmW5.js +65 -0
- package/dist/chunks/MarkdownCode-B1k9tmW5.js.map +1 -0
- package/dist/chunks/MarkdownConfigProvider-5N3ylrIu.js +51 -0
- package/dist/chunks/MarkdownConfigProvider-5N3ylrIu.js.map +1 -0
- package/dist/chunks/MarkdownContent-BAK6dqo7.js +15 -0
- package/dist/chunks/MarkdownContent-BAK6dqo7.js.map +1 -0
- package/dist/chunks/MarkdownCustomTag-BBdn3-WO.js +42 -0
- package/dist/chunks/MarkdownCustomTag-BBdn3-WO.js.map +1 -0
- package/dist/chunks/MarkdownEmphasis-CppivOEu.js +18 -0
- package/dist/chunks/MarkdownEmphasis-CppivOEu.js.map +1 -0
- package/dist/chunks/MarkdownEmpty-Av5k6bqa.js +16 -0
- package/dist/chunks/MarkdownEmpty-Av5k6bqa.js.map +1 -0
- package/dist/chunks/MarkdownError-C0sPs5W0.js +19 -0
- package/dist/chunks/MarkdownError-C0sPs5W0.js.map +1 -0
- package/dist/chunks/MarkdownFootnoteReference-Dy3Khwyj.js +24 -0
- package/dist/chunks/MarkdownFootnoteReference-Dy3Khwyj.js.map +1 -0
- package/dist/chunks/MarkdownFootnotes-BRPzkbXv.js +23 -0
- package/dist/chunks/MarkdownFootnotes-BRPzkbXv.js.map +1 -0
- package/dist/chunks/MarkdownHeading-DaNcP0_6.js +31 -0
- package/dist/chunks/MarkdownHeading-DaNcP0_6.js.map +1 -0
- package/dist/chunks/MarkdownHorizontalRule-QNe_cuUI.js +18 -0
- package/dist/chunks/MarkdownHorizontalRule-QNe_cuUI.js.map +1 -0
- package/dist/chunks/MarkdownHtml-66lYkvwM.js +15 -0
- package/dist/chunks/MarkdownHtml-66lYkvwM.js.map +1 -0
- package/dist/chunks/MarkdownImage-BRy76svs.js +53 -0
- package/dist/chunks/MarkdownImage-BRy76svs.js.map +1 -0
- package/dist/chunks/MarkdownInlineCode-MXZYFwex.js +18 -0
- package/dist/chunks/MarkdownInlineCode-MXZYFwex.js.map +1 -0
- package/dist/chunks/MarkdownLink-Dbx3NwgV.js +47 -0
- package/dist/chunks/MarkdownLink-Dbx3NwgV.js.map +1 -0
- package/dist/chunks/MarkdownList-BJ-_C71k.js +22 -0
- package/dist/chunks/MarkdownList-BJ-_C71k.js.map +1 -0
- package/dist/chunks/MarkdownListItem-Z1EHIY26.js +18 -0
- package/dist/chunks/MarkdownListItem-Z1EHIY26.js.map +1 -0
- package/dist/chunks/MarkdownLoading-D-RYtXxf.js +17 -0
- package/dist/chunks/MarkdownLoading-D-RYtXxf.js.map +1 -0
- package/dist/chunks/MarkdownParagraph-BxLSmSaG.js +18 -0
- package/dist/chunks/MarkdownParagraph-BxLSmSaG.js.map +1 -0
- package/dist/chunks/MarkdownRenderer-DLRRfsdI.js +416 -0
- package/dist/chunks/MarkdownRenderer-DLRRfsdI.js.map +1 -0
- package/dist/chunks/MarkdownRoot-DEE6iVfh.js +25 -0
- package/dist/chunks/MarkdownRoot-DEE6iVfh.js.map +1 -0
- package/dist/chunks/MarkdownStrikethrough-CblvbqDk.js +18 -0
- package/dist/chunks/MarkdownStrikethrough-CblvbqDk.js.map +1 -0
- package/dist/chunks/MarkdownStrong-uU5MzAoJ.js +18 -0
- package/dist/chunks/MarkdownStrong-uU5MzAoJ.js.map +1 -0
- package/dist/chunks/MarkdownTable-DmBTg_CR.js +18 -0
- package/dist/chunks/MarkdownTable-DmBTg_CR.js.map +1 -0
- package/dist/chunks/MarkdownTableCell-eiCJe847.js +33 -0
- package/dist/chunks/MarkdownTableCell-eiCJe847.js.map +1 -0
- package/dist/chunks/MarkdownTableRow-DuJaPntg.js +18 -0
- package/dist/chunks/MarkdownTableRow-DuJaPntg.js.map +1 -0
- package/dist/chunks/MarkdownTableSection-PFHz-R33.js +26 -0
- package/dist/chunks/MarkdownTableSection-PFHz-R33.js.map +1 -0
- package/dist/chunks/MarkdownTaskItem-BcmKo1lk.js +40 -0
- package/dist/chunks/MarkdownTaskItem-BcmKo1lk.js.map +1 -0
- package/dist/chunks/MarkdownToc-BdOHF-Yo.js +51 -0
- package/dist/chunks/MarkdownToc-BdOHF-Yo.js.map +1 -0
- package/dist/chunks/MarkdownTocItem-DT9mR3vL.js +27 -0
- package/dist/chunks/MarkdownTocItem-DT9mR3vL.js.map +1 -0
- package/dist/chunks/MermaidLiveEditor-W-qf3G-5.js +416 -0
- package/dist/chunks/MermaidLiveEditor-W-qf3G-5.js.map +1 -0
- package/dist/chunks/VueSyntaxHighlighter-DyLsYMwy.js +262 -0
- package/dist/chunks/VueSyntaxHighlighter-DyLsYMwy.js.map +1 -0
- package/dist/chunks/adapters-CMwX_NEI.js +28 -0
- package/dist/chunks/adapters-CMwX_NEI.js.map +1 -0
- package/dist/chunks/asyncToGenerator-ChigusFD.js +26 -0
- package/dist/chunks/blank-line-Cb-JBP_5.js +90 -0
- package/dist/chunks/blank-line-Cb-JBP_5.js.map +1 -0
- package/dist/chunks/codemirror-DyphMAEg.js +84 -0
- package/dist/chunks/codemirror-DyphMAEg.js.map +1 -0
- package/dist/chunks/config-aRYo2R8_.js +12 -0
- package/dist/chunks/config-aRYo2R8_.js.map +1 -0
- package/dist/chunks/context-8NfW6fxI.js +32 -0
- package/dist/chunks/context-8NfW6fxI.js.map +1 -0
- package/dist/chunks/default-DWVS-I_8.js +23 -0
- package/dist/chunks/default-DWVS-I_8.js.map +1 -0
- package/dist/chunks/diagnostics-CtHoJyiX.js +25 -0
- package/dist/chunks/diagnostics-CtHoJyiX.js.map +1 -0
- package/dist/chunks/export-DZQ3cUry.js +1575 -0
- package/dist/chunks/export-DZQ3cUry.js.map +1 -0
- package/dist/chunks/hast-nodes-C0bX3M5Z.js +35 -0
- package/dist/chunks/hast-nodes-C0bX3M5Z.js.map +1 -0
- package/dist/chunks/highlightjs-BEh-YwEG.js +6041 -0
- package/dist/chunks/highlightjs-BEh-YwEG.js.map +1 -0
- package/dist/chunks/identity-jZEhX2d5.js +6244 -0
- package/dist/chunks/identity-jZEhX2d5.js.map +1 -0
- package/dist/chunks/labels-BtHiUTQI.js +49 -0
- package/dist/chunks/labels-BtHiUTQI.js.map +1 -0
- package/dist/chunks/lib-BQiWGWpu.js +5087 -0
- package/dist/chunks/lib-BQiWGWpu.js.map +1 -0
- package/dist/chunks/lib-LwqA_W3J.js +127 -0
- package/dist/chunks/lib-LwqA_W3J.js.map +1 -0
- package/dist/chunks/longest-streak-DZE_EqsU.js +10 -0
- package/dist/chunks/longest-streak-DZE_EqsU.js.map +1 -0
- package/dist/chunks/micromark-factory-space-Db040TnW.js +139 -0
- package/dist/chunks/micromark-factory-space-Db040TnW.js.map +1 -0
- package/dist/chunks/normalize-CRYv3Wqt.js +220 -0
- package/dist/chunks/normalize-CRYv3Wqt.js.map +1 -0
- package/dist/chunks/objectSpread2-CtBNx0TF.js +57 -0
- package/dist/chunks/plugin-DqkFHyny.js +28 -0
- package/dist/chunks/plugin-DqkFHyny.js.map +1 -0
- package/dist/chunks/preset-BjaOuJUL.js +46 -0
- package/dist/chunks/preset-BjaOuJUL.js.map +1 -0
- package/dist/chunks/registry-DLjr93-V.js +6144 -0
- package/dist/chunks/registry-DLjr93-V.js.map +1 -0
- package/dist/chunks/render-Cs8iKrgz.js +1724 -0
- package/dist/chunks/render-Cs8iKrgz.js.map +1 -0
- package/dist/chunks/runtime-DJMnzjah.js +546 -0
- package/dist/chunks/runtime-DJMnzjah.js.map +1 -0
- package/dist/chunks/security-y4EwUyAs.js +214 -0
- package/dist/chunks/security-y4EwUyAs.js.map +1 -0
- package/dist/chunks/shared-DNAvZ-UY.js +76 -0
- package/dist/chunks/shared-DNAvZ-UY.js.map +1 -0
- package/dist/chunks/space-separated-tokens-CmBjEPdR.js +1099 -0
- package/dist/chunks/space-separated-tokens-CmBjEPdR.js.map +1 -0
- package/dist/chunks/url-D2BoivaE.js +26 -0
- package/dist/chunks/url-D2BoivaE.js.map +1 -0
- package/dist/chunks/useActiveHeading-BaGVMJnB.js +316 -0
- package/dist/chunks/useActiveHeading-BaGVMJnB.js.map +1 -0
- package/dist/components/CodeBlock.d.ts +73 -0
- package/dist/components/CodeBlock.js +1 -0
- package/dist/components/Icon.d.ts +6 -0
- package/dist/components/MarkdownBlockquote.d.ts +18 -0
- package/dist/components/MarkdownBlockquote.js +1 -0
- package/dist/components/MarkdownBreak.d.ts +8 -0
- package/dist/components/MarkdownBreak.js +1 -0
- package/dist/components/MarkdownChildren.d.ts +17 -0
- package/dist/components/MarkdownCode.d.ts +29 -0
- package/dist/components/MarkdownCode.js +1 -0
- package/dist/components/MarkdownConfigProvider.d.ts +33 -0
- package/dist/components/MarkdownConfigProvider.js +1 -0
- package/dist/components/MarkdownContent.d.ts +16 -0
- package/dist/components/MarkdownContent.js +1 -0
- package/dist/components/MarkdownCustomTag.d.ts +20 -0
- package/dist/components/MarkdownCustomTag.js +1 -0
- package/dist/components/MarkdownEmphasis.d.ts +18 -0
- package/dist/components/MarkdownEmphasis.js +1 -0
- package/dist/components/MarkdownEmpty.d.ts +8 -0
- package/dist/components/MarkdownEmpty.js +1 -0
- package/dist/components/MarkdownError.d.ts +11 -0
- package/dist/components/MarkdownError.js +1 -0
- package/dist/components/MarkdownFootnoteReference.d.ts +19 -0
- package/dist/components/MarkdownFootnoteReference.js +1 -0
- package/dist/components/MarkdownFootnotes.d.ts +17 -0
- package/dist/components/MarkdownFootnotes.js +1 -0
- package/dist/components/MarkdownHeading.d.ts +18 -0
- package/dist/components/MarkdownHeading.js +1 -0
- package/dist/components/MarkdownHorizontalRule.d.ts +8 -0
- package/dist/components/MarkdownHorizontalRule.js +1 -0
- package/dist/components/MarkdownHtml.d.ts +8 -0
- package/dist/components/MarkdownHtml.js +1 -0
- package/dist/components/MarkdownImage.d.ts +15 -0
- package/dist/components/MarkdownImage.js +1 -0
- package/dist/components/MarkdownInlineCode.d.ts +18 -0
- package/dist/components/MarkdownInlineCode.js +1 -0
- package/dist/components/MarkdownLink.d.ts +22 -0
- package/dist/components/MarkdownLink.js +1 -0
- package/dist/components/MarkdownList.d.ts +18 -0
- package/dist/components/MarkdownList.js +1 -0
- package/dist/components/MarkdownListItem.d.ts +18 -0
- package/dist/components/MarkdownListItem.js +1 -0
- package/dist/components/MarkdownLoading.d.ts +8 -0
- package/dist/components/MarkdownLoading.js +1 -0
- package/dist/components/MarkdownMath.d.ts +12 -0
- package/dist/components/MarkdownMath.js +1 -0
- package/dist/components/MarkdownMermaid.d.ts +78 -0
- package/dist/components/MarkdownMermaid.js +1 -0
- package/dist/components/MarkdownParagraph.d.ts +18 -0
- package/dist/components/MarkdownParagraph.js +1 -0
- package/dist/components/MarkdownRenderer.d.ts +170 -0
- package/dist/components/MarkdownRenderer.js +1 -0
- package/dist/components/MarkdownRoot.d.ts +24 -0
- package/dist/components/MarkdownRoot.js +1 -0
- package/dist/components/MarkdownStrikethrough.d.ts +18 -0
- package/dist/components/MarkdownStrikethrough.js +1 -0
- package/dist/components/MarkdownStrong.d.ts +18 -0
- package/dist/components/MarkdownStrong.js +1 -0
- package/dist/components/MarkdownTable.d.ts +18 -0
- package/dist/components/MarkdownTable.js +1 -0
- package/dist/components/MarkdownTableCell.d.ts +20 -0
- package/dist/components/MarkdownTableCell.js +1 -0
- package/dist/components/MarkdownTableRow.d.ts +18 -0
- package/dist/components/MarkdownTableRow.js +1 -0
- package/dist/components/MarkdownTableSection.d.ts +18 -0
- package/dist/components/MarkdownTableSection.js +1 -0
- package/dist/components/MarkdownTaskItem.d.ts +20 -0
- package/dist/components/MarkdownTaskItem.js +1 -0
- package/dist/components/MarkdownToc.d.ts +36 -0
- package/dist/components/MarkdownToc.js +1 -0
- package/dist/components/MarkdownTocItem.d.ts +14 -0
- package/dist/components/MarkdownTocItem.js +1 -0
- package/dist/components/MermaidBlock.d.ts +50 -0
- package/dist/components/MermaidBlock.js +1 -0
- package/dist/components/MermaidLiveEditor.d.ts +44 -0
- package/dist/components/MermaidLiveEditor.js +1 -0
- package/dist/components/VueSyntaxHighlighter.d.ts +39 -0
- package/dist/components/VueSyntaxHighlighter.js +1 -0
- package/dist/components/codeRegion.d.ts +14 -0
- package/dist/components/config.d.ts +7 -0
- package/dist/components/context.d.ts +45 -0
- package/dist/components/index.d.ts +42 -0
- package/dist/components/index.js +38 -0
- package/dist/components/render.d.ts +9 -0
- package/dist/components/scroll-lock.d.ts +7 -0
- package/dist/components/types.d.ts +29 -0
- package/dist/composables/useActiveHeading.d.ts +12 -0
- package/dist/composables/useCodeHighlighter.d.ts +30 -0
- package/dist/composables/useLineWindow.d.ts +38 -0
- package/dist/composables/useMarkdownDocument.d.ts +23 -0
- package/dist/core/adapters.d.ts +7 -0
- package/dist/core/config.d.ts +5 -0
- package/dist/core/diagnostics.d.ts +9 -0
- package/dist/core/finalize.d.ts +18 -0
- package/dist/core/hast-nodes.d.ts +6 -0
- package/dist/core/highlight-lines.d.ts +8 -0
- package/dist/core/identity.d.ts +4 -0
- package/dist/core/labels.d.ts +4 -0
- package/dist/core/manifest.d.ts +38 -0
- package/dist/core/memo.d.ts +5 -0
- package/dist/core/model-hast.d.ts +8 -0
- package/dist/core/model.d.ts +10 -0
- package/dist/core/normalize.d.ts +27 -0
- package/dist/core/parts.d.ts +135 -0
- package/dist/core/preset.d.ts +10 -0
- package/dist/core/run.d.ts +16 -0
- package/dist/core/search.d.ts +5 -0
- package/dist/core/security.d.ts +21 -0
- package/dist/core/slugger.d.ts +6 -0
- package/dist/core/types.d.ts +390 -0
- package/dist/core/url.d.ts +10 -0
- package/dist/editor/codemirror.d.ts +14 -0
- package/dist/editor/index.d.ts +2 -0
- package/dist/editor/index.js +1 -0
- package/dist/export/index.d.ts +6 -0
- package/dist/headless.d.ts +21 -0
- package/dist/headless.js +12 -0
- package/dist/highlight/highlightjs.d.ts +7 -0
- package/dist/highlight/index.d.ts +3 -0
- package/dist/highlight/index.js +3 -0
- package/dist/highlight/shared.d.ts +16 -0
- package/dist/highlight/shiki.d.ts +7 -0
- package/dist/highlight/shiki.js +76 -0
- package/dist/highlight/shiki.js.map +1 -0
- package/dist/html/index.d.ts +17 -0
- package/dist/html/index.js +13 -0
- package/dist/html/index.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/math/index.d.ts +4 -0
- package/dist/math/index.js +583 -0
- package/dist/math/index.js.map +1 -0
- package/dist/math/katex.d.ts +4 -0
- package/dist/math/plugin.d.ts +20 -0
- package/dist/mermaid/index.d.ts +5 -0
- package/dist/mermaid/index.js +3 -0
- package/dist/mermaid/plugin.d.ts +14 -0
- package/dist/mermaid/runtime.d.ts +12 -0
- package/dist/mermaid/sanitize.d.ts +12 -0
- package/dist/node-components.d.ts +1 -0
- package/dist/node-components.js +39 -0
- package/dist/pipeline/custom.d.ts +8 -0
- package/dist/pipeline/identity.d.ts +12 -0
- package/dist/pipeline/index.d.ts +5 -0
- package/dist/pipeline/official.d.ts +6 -0
- package/dist/pipeline.d.ts +1 -0
- package/dist/pipeline.js +1 -0
- package/dist/plugins/builtin.d.ts +15 -0
- package/dist/plugins/define.d.ts +7 -0
- package/dist/plugins/registry.d.ts +16 -0
- package/dist/plugins/source.d.ts +7 -0
- package/dist/plugins.d.ts +3 -0
- package/dist/plugins.js +1 -0
- package/dist/presets.d.ts +3 -0
- package/dist/presets.js +1 -0
- package/dist/style.css +2 -0
- package/dist/styles/components.css +712 -0
- package/dist/styles/index.d.ts +1 -0
- package/dist/styles/math-full.css +3 -0
- package/dist/styles/math.css +18 -0
- package/dist/styles/tokens.css +96 -0
- package/package.json +211 -6
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
import { t as e } from "./asyncToGenerator-ChigusFD.js";
|
|
2
|
+
import { t } from "./lib-BQiWGWpu.js";
|
|
3
|
+
// src/mermaid/sanitize.ts
|
|
4
|
+
var n = /* @__PURE__ */ new Set([
|
|
5
|
+
"svg",
|
|
6
|
+
"g",
|
|
7
|
+
"path",
|
|
8
|
+
"rect",
|
|
9
|
+
"circle",
|
|
10
|
+
"ellipse",
|
|
11
|
+
"line",
|
|
12
|
+
"polyline",
|
|
13
|
+
"polygon",
|
|
14
|
+
"text",
|
|
15
|
+
"tspan",
|
|
16
|
+
"defs",
|
|
17
|
+
"marker",
|
|
18
|
+
"use",
|
|
19
|
+
"title",
|
|
20
|
+
"desc",
|
|
21
|
+
"clippath",
|
|
22
|
+
"lineargradient",
|
|
23
|
+
"radialgradient",
|
|
24
|
+
"stop",
|
|
25
|
+
"pattern",
|
|
26
|
+
"mask",
|
|
27
|
+
"symbol",
|
|
28
|
+
"textpath",
|
|
29
|
+
"style"
|
|
30
|
+
]), r = {
|
|
31
|
+
clippath: "clipPath",
|
|
32
|
+
lineargradient: "linearGradient",
|
|
33
|
+
radialgradient: "radialGradient",
|
|
34
|
+
textpath: "textPath"
|
|
35
|
+
}, i = {
|
|
36
|
+
id: "id",
|
|
37
|
+
class: "class",
|
|
38
|
+
d: "d",
|
|
39
|
+
fill: "fill",
|
|
40
|
+
fillopacity: "fill-opacity",
|
|
41
|
+
fillrule: "fill-rule",
|
|
42
|
+
stroke: "stroke",
|
|
43
|
+
strokewidth: "stroke-width",
|
|
44
|
+
strokedasharray: "stroke-dasharray",
|
|
45
|
+
strokedashoffset: "stroke-dashoffset",
|
|
46
|
+
strokelinecap: "stroke-linecap",
|
|
47
|
+
strokelinejoin: "stroke-linejoin",
|
|
48
|
+
strokemiterlimit: "stroke-miterlimit",
|
|
49
|
+
strokeopacity: "stroke-opacity",
|
|
50
|
+
x: "x",
|
|
51
|
+
y: "y",
|
|
52
|
+
x1: "x1",
|
|
53
|
+
y1: "y1",
|
|
54
|
+
x2: "x2",
|
|
55
|
+
y2: "y2",
|
|
56
|
+
cx: "cx",
|
|
57
|
+
cy: "cy",
|
|
58
|
+
r: "r",
|
|
59
|
+
rx: "rx",
|
|
60
|
+
ry: "ry",
|
|
61
|
+
width: "width",
|
|
62
|
+
height: "height",
|
|
63
|
+
viewbox: "viewBox",
|
|
64
|
+
preserveaspectratio: "preserveAspectRatio",
|
|
65
|
+
transform: "transform",
|
|
66
|
+
transformorigin: "transform-origin",
|
|
67
|
+
points: "points",
|
|
68
|
+
pathlength: "pathLength",
|
|
69
|
+
offset: "offset",
|
|
70
|
+
stopcolor: "stop-color",
|
|
71
|
+
stopopacity: "stop-opacity",
|
|
72
|
+
markerstart: "marker-start",
|
|
73
|
+
markermid: "marker-mid",
|
|
74
|
+
markerend: "marker-end",
|
|
75
|
+
markerwidth: "markerWidth",
|
|
76
|
+
markerheight: "markerHeight",
|
|
77
|
+
markerunits: "markerUnits",
|
|
78
|
+
refx: "refX",
|
|
79
|
+
refy: "refY",
|
|
80
|
+
orient: "orient",
|
|
81
|
+
gradientunits: "gradientUnits",
|
|
82
|
+
gradienttransform: "gradientTransform",
|
|
83
|
+
spreadmethod: "spreadMethod",
|
|
84
|
+
fx: "fx",
|
|
85
|
+
fy: "fy",
|
|
86
|
+
fr: "fr",
|
|
87
|
+
patternunits: "patternUnits",
|
|
88
|
+
patterncontentunits: "patternContentUnits",
|
|
89
|
+
patterntransform: "patternTransform",
|
|
90
|
+
clippathunits: "clipPathUnits",
|
|
91
|
+
clippath: "clip-path",
|
|
92
|
+
cliprule: "clip-rule",
|
|
93
|
+
mask: "mask",
|
|
94
|
+
maskunits: "maskUnits",
|
|
95
|
+
maskcontentunits: "maskContentUnits",
|
|
96
|
+
textlength: "textLength",
|
|
97
|
+
lengthadjust: "lengthAdjust",
|
|
98
|
+
textanchor: "text-anchor",
|
|
99
|
+
dominantbaseline: "dominant-baseline",
|
|
100
|
+
alignmentbaseline: "alignment-baseline",
|
|
101
|
+
baselineshift: "baseline-shift",
|
|
102
|
+
fontfamily: "font-family",
|
|
103
|
+
fontsize: "font-size",
|
|
104
|
+
fontweight: "font-weight",
|
|
105
|
+
fontstyle: "font-style",
|
|
106
|
+
fontvariant: "font-variant",
|
|
107
|
+
letterspacing: "letter-spacing",
|
|
108
|
+
wordspacing: "word-spacing",
|
|
109
|
+
textdecoration: "text-decoration",
|
|
110
|
+
whitespace: "white-space",
|
|
111
|
+
texttransform: "text-transform",
|
|
112
|
+
direction: "direction",
|
|
113
|
+
writingmode: "writing-mode",
|
|
114
|
+
lineheight: "line-height",
|
|
115
|
+
dx: "dx",
|
|
116
|
+
dy: "dy",
|
|
117
|
+
rotate: "rotate",
|
|
118
|
+
startoffset: "startOffset",
|
|
119
|
+
method: "method",
|
|
120
|
+
spacing: "spacing",
|
|
121
|
+
side: "side",
|
|
122
|
+
color: "color",
|
|
123
|
+
display: "display",
|
|
124
|
+
visibility: "visibility",
|
|
125
|
+
overflow: "overflow",
|
|
126
|
+
opacity: "opacity",
|
|
127
|
+
role: "role",
|
|
128
|
+
arialabel: "aria-label",
|
|
129
|
+
ariahidden: "aria-hidden",
|
|
130
|
+
ariahaspopup: "aria-haspopup",
|
|
131
|
+
arialabelledby: "aria-labelledby",
|
|
132
|
+
ariadescribedby: "aria-describedby",
|
|
133
|
+
ariaroledescription: "aria-roledescription",
|
|
134
|
+
focusable: "focusable",
|
|
135
|
+
tabindex: "tabindex",
|
|
136
|
+
href: "href",
|
|
137
|
+
xlinkhref: "xlink:href",
|
|
138
|
+
xmlspace: "xml:space",
|
|
139
|
+
vectoreffect: "vector-effect",
|
|
140
|
+
paintorder: "paint-order",
|
|
141
|
+
shaperendering: "shape-rendering",
|
|
142
|
+
pointerevents: "pointer-events",
|
|
143
|
+
filter: "filter",
|
|
144
|
+
cursor: "cursor"
|
|
145
|
+
}, a = /* @__PURE__ */ new Set([
|
|
146
|
+
"script",
|
|
147
|
+
"foreignobject",
|
|
148
|
+
"iframe",
|
|
149
|
+
"object",
|
|
150
|
+
"embed",
|
|
151
|
+
"image",
|
|
152
|
+
"audio",
|
|
153
|
+
"video"
|
|
154
|
+
]), o = /@import|@font-face|expression\s*\(|javascript\s*:|-moz-binding|behavior\s*:/i, s = /url\(\s*([^)]*)\)/gi, c = /* @__PURE__ */ new Set([
|
|
155
|
+
"media",
|
|
156
|
+
"supports",
|
|
157
|
+
"layer"
|
|
158
|
+
]), l = /* @__PURE__ */ new Set(["charset", "layer"]);
|
|
159
|
+
function u(e) {
|
|
160
|
+
let t = e.trim(), n = t.charAt(0);
|
|
161
|
+
return (n === "\"" || n === "'") && t.charAt(t.length - 1) === n && (t = t.slice(1, -1).trim()), t.startsWith("#");
|
|
162
|
+
}
|
|
163
|
+
function d(e) {
|
|
164
|
+
return e === "className" ? "class" : e.startsWith("data-") ? e : e.startsWith("data") && e.length > 4 && e.charAt(4) >= "A" && e.charAt(4) <= "Z" ? e.replace(/([A-Z])/g, "-$1").toLowerCase() : i[e.toLowerCase().replace(/[-_:]/g, "")];
|
|
165
|
+
}
|
|
166
|
+
function f(e) {
|
|
167
|
+
var t;
|
|
168
|
+
let n = {}, r = (t = e.properties) == null ? {} : t;
|
|
169
|
+
for (let e of Object.keys(r)) {
|
|
170
|
+
let t = d(e);
|
|
171
|
+
if (!t) continue;
|
|
172
|
+
if (t === "href" || t === "xlink:href") {
|
|
173
|
+
var i;
|
|
174
|
+
let a = String((i = r[e]) == null ? "" : i);
|
|
175
|
+
a.startsWith("#") && (n[t] = a);
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
let a = r[e];
|
|
179
|
+
a != null && a !== !1 && (n[t] = Array.isArray(a) ? a.map(String).join(" ") : String(a));
|
|
180
|
+
}
|
|
181
|
+
return n;
|
|
182
|
+
}
|
|
183
|
+
function p(e) {
|
|
184
|
+
let t = "";
|
|
185
|
+
for (let n of e) n.type === "text" ? t += n.value : n.type === "element" && (t += p(n.children));
|
|
186
|
+
return t;
|
|
187
|
+
}
|
|
188
|
+
function m(e) {
|
|
189
|
+
let t = /^@([-a-zA-Z]+)/.exec(e);
|
|
190
|
+
return t ? t[1].toLowerCase() : "";
|
|
191
|
+
}
|
|
192
|
+
function h(e) {
|
|
193
|
+
let t = 0, n = "";
|
|
194
|
+
for (let r = 0; r < e.length; r++) {
|
|
195
|
+
let i = e.charAt(r);
|
|
196
|
+
if (n) i === "\\" ? r++ : i === n && (n = "");
|
|
197
|
+
else if (i === "\"" || i === "'") n = i;
|
|
198
|
+
else if (i === "(" || i === "[") t++;
|
|
199
|
+
else if (i === ")" || i === "]") t = Math.max(0, t - 1);
|
|
200
|
+
else if (t === 0 && (i === "+" || i === "~")) return !0;
|
|
201
|
+
}
|
|
202
|
+
return !1;
|
|
203
|
+
}
|
|
204
|
+
function g(e, t) {
|
|
205
|
+
let n = e.trim();
|
|
206
|
+
if (!n.startsWith(t)) return !1;
|
|
207
|
+
let r = n.charAt(t.length);
|
|
208
|
+
return r !== "" && /[a-zA-Z0-9_-]/.test(r) ? !1 : !h(n);
|
|
209
|
+
}
|
|
210
|
+
function _(e) {
|
|
211
|
+
let t = [], n = "", r = 0, i = "";
|
|
212
|
+
for (let a = 0; a < e.length; a++) {
|
|
213
|
+
let o = e.charAt(a);
|
|
214
|
+
if (i) n += o, o === "\\" ? n += e.charAt(++a) : o === i && (i = "");
|
|
215
|
+
else if (o === "\"" || o === "'") i = o, n += o;
|
|
216
|
+
else {
|
|
217
|
+
if (o === "(" || o === "[") r++;
|
|
218
|
+
else if (o === ")" || o === "]") r = Math.max(0, r - 1);
|
|
219
|
+
else if (o === "," && r === 0) {
|
|
220
|
+
t.push(n), n = "";
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
n += o;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return t.push(n), t;
|
|
227
|
+
}
|
|
228
|
+
function v(e, t, n) {
|
|
229
|
+
let r = 0, i = "";
|
|
230
|
+
for (let a = t; a < n; a++) {
|
|
231
|
+
let t = e.charAt(a);
|
|
232
|
+
if (i) t === "\\" ? a++ : t === i && (i = "");
|
|
233
|
+
else if (t === "\"" || t === "'") i = t;
|
|
234
|
+
else if (t === "/" && e.charAt(a + 1) === "*") {
|
|
235
|
+
let t = e.indexOf("*/", a + 2);
|
|
236
|
+
if (t === -1 || t >= n) return -1;
|
|
237
|
+
a = t + 1;
|
|
238
|
+
} else if (t === "{") r++;
|
|
239
|
+
else if (t === "}" && (r--, r === 0)) return a;
|
|
240
|
+
}
|
|
241
|
+
return -1;
|
|
242
|
+
}
|
|
243
|
+
function y(e, t, n) {
|
|
244
|
+
if (e.startsWith("@")) {
|
|
245
|
+
let r = m(e);
|
|
246
|
+
return r.endsWith("keyframes") ? !0 : c.has(r) && b(t, n);
|
|
247
|
+
}
|
|
248
|
+
return e ? _(e).every((e) => g(e, n)) : !1;
|
|
249
|
+
}
|
|
250
|
+
function b(e, t) {
|
|
251
|
+
let n = 0;
|
|
252
|
+
for (; n < e.length;) {
|
|
253
|
+
for (; n < e.length && /[\s;]/.test(e.charAt(n));) n++;
|
|
254
|
+
if (n >= e.length) break;
|
|
255
|
+
let r = n, i = "", a = 0, o = -1, s = -1;
|
|
256
|
+
for (; n < e.length; n++) {
|
|
257
|
+
let t = e.charAt(n);
|
|
258
|
+
if (i) t === "\\" ? n++ : t === i && (i = "");
|
|
259
|
+
else if (t === "\"" || t === "'") i = t;
|
|
260
|
+
else if (t === "/" && e.charAt(n + 1) === "*") {
|
|
261
|
+
let t = e.indexOf("*/", n + 2);
|
|
262
|
+
if (t === -1) return !1;
|
|
263
|
+
n = t + 1;
|
|
264
|
+
} else if (t === "(" || t === "[") a++;
|
|
265
|
+
else if (t === ")" || t === "]") a = Math.max(0, a - 1);
|
|
266
|
+
else if (a === 0) {
|
|
267
|
+
if (t === "{") {
|
|
268
|
+
o = n;
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
if (t === ";") {
|
|
272
|
+
s = n;
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
if (t === "}") return !1;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (i) return !1;
|
|
279
|
+
let c = e.slice(r, o === -1 ? s : o).trim();
|
|
280
|
+
if (o !== -1) {
|
|
281
|
+
let r = v(e, o, e.length);
|
|
282
|
+
if (r === -1 || !y(c, e.slice(o + 1, r), t)) return !1;
|
|
283
|
+
n = r + 1;
|
|
284
|
+
} else if (s !== -1) {
|
|
285
|
+
if (!c.startsWith("@") || !l.has(m(c))) return !1;
|
|
286
|
+
n = s + 1;
|
|
287
|
+
} else {
|
|
288
|
+
if (c !== "") return !1;
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return !0;
|
|
293
|
+
}
|
|
294
|
+
function x(e, t) {
|
|
295
|
+
if (!t || !e.trim() || o.test(e) || !b(e, t)) return;
|
|
296
|
+
let n = e.replace(s, (e, t) => u(t) ? e : "none");
|
|
297
|
+
return n.trim() ? n : void 0;
|
|
298
|
+
}
|
|
299
|
+
function S(e) {
|
|
300
|
+
let t = [], n = "", r = () => {
|
|
301
|
+
let e = n.replace(/\s+/g, " ").trim();
|
|
302
|
+
e && t.push(e), n = "";
|
|
303
|
+
}, i = (e) => {
|
|
304
|
+
if (e.type === "text") {
|
|
305
|
+
n += e.value;
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
if (e.type !== "element") return;
|
|
309
|
+
let t = e.tagName.toLowerCase();
|
|
310
|
+
if (t === "br") r();
|
|
311
|
+
else if (t === "div" || t === "p" || t === "li" || t === "tr") {
|
|
312
|
+
r();
|
|
313
|
+
for (let t of e.children) i(t);
|
|
314
|
+
r();
|
|
315
|
+
} else for (let t of e.children) i(t);
|
|
316
|
+
};
|
|
317
|
+
for (let t of e) i(t);
|
|
318
|
+
return r(), t;
|
|
319
|
+
}
|
|
320
|
+
function C(e, t) {
|
|
321
|
+
let n = S(e.children);
|
|
322
|
+
if (n.length === 0) return [];
|
|
323
|
+
let r = f(e), i = {};
|
|
324
|
+
for (let e of [
|
|
325
|
+
"x",
|
|
326
|
+
"y",
|
|
327
|
+
"transform",
|
|
328
|
+
"class"
|
|
329
|
+
]) r[e] !== void 0 && (i[e] = r[e]);
|
|
330
|
+
return i.x === void 0 && (i.x = "0"), i.y === void 0 && (i.y = "0"), [{
|
|
331
|
+
kind: "element",
|
|
332
|
+
key: t,
|
|
333
|
+
tag: "text",
|
|
334
|
+
attrs: i,
|
|
335
|
+
children: n.map((e, n) => ({
|
|
336
|
+
kind: "element",
|
|
337
|
+
key: `${t}.${n}`,
|
|
338
|
+
tag: "tspan",
|
|
339
|
+
attrs: {
|
|
340
|
+
x: i.x,
|
|
341
|
+
dy: n === 0 ? "1em" : "1.2em"
|
|
342
|
+
},
|
|
343
|
+
children: [{
|
|
344
|
+
kind: "text",
|
|
345
|
+
key: `${t}.${n}.text`,
|
|
346
|
+
value: e
|
|
347
|
+
}]
|
|
348
|
+
}))
|
|
349
|
+
}];
|
|
350
|
+
}
|
|
351
|
+
function w(e, t = "", i) {
|
|
352
|
+
let o = [];
|
|
353
|
+
return e.forEach((e, s) => {
|
|
354
|
+
var c;
|
|
355
|
+
let l = t ? `${t}.${s}` : String(s);
|
|
356
|
+
if (e.type === "text") {
|
|
357
|
+
e.value.trim() !== "" && o.push({
|
|
358
|
+
kind: "text",
|
|
359
|
+
key: l,
|
|
360
|
+
value: e.value
|
|
361
|
+
});
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
if (e.type !== "element") return;
|
|
365
|
+
let u = e.tagName.toLowerCase();
|
|
366
|
+
if (u === "foreignobject") o.push(...C(e, l));
|
|
367
|
+
else if (u === "style") {
|
|
368
|
+
let t = x(p(e.children), i);
|
|
369
|
+
t && o.push({
|
|
370
|
+
kind: "element",
|
|
371
|
+
key: l,
|
|
372
|
+
tag: "style",
|
|
373
|
+
attrs: {},
|
|
374
|
+
children: [{
|
|
375
|
+
kind: "text",
|
|
376
|
+
key: `${l}.css`,
|
|
377
|
+
value: t
|
|
378
|
+
}]
|
|
379
|
+
});
|
|
380
|
+
} else a.has(u) || (n.has(u) ? o.push({
|
|
381
|
+
kind: "element",
|
|
382
|
+
key: l,
|
|
383
|
+
tag: (c = r[u]) == null ? u : c,
|
|
384
|
+
attrs: f(e),
|
|
385
|
+
children: w(e.children, l, i)
|
|
386
|
+
}) : o.push(...w(e.children, l, i)));
|
|
387
|
+
}), o;
|
|
388
|
+
}
|
|
389
|
+
function T(e) {
|
|
390
|
+
var t;
|
|
391
|
+
let n = (t = e.properties) == null ? void 0 : t.id;
|
|
392
|
+
return typeof n == "string" && n !== "" ? `#${n}` : void 0;
|
|
393
|
+
}
|
|
394
|
+
function E(e) {
|
|
395
|
+
var t;
|
|
396
|
+
let n = e.find((e) => e.kind === "element" && e.tag.toLowerCase() === "svg"), r = n == null || (t = n.attrs) == null ? void 0 : t.id;
|
|
397
|
+
return typeof r == "string" && r !== "" ? `#${r}` : void 0;
|
|
398
|
+
}
|
|
399
|
+
function D(e) {
|
|
400
|
+
let n = t(e, { fragment: !0 }), r = n.children.find((e) => e.type === "element" && e.tagName.toLowerCase() === "svg");
|
|
401
|
+
return r ? w([r], "", T(r)) : w(n.children);
|
|
402
|
+
}
|
|
403
|
+
function O(e) {
|
|
404
|
+
let t = {};
|
|
405
|
+
if (!e || typeof e != "object") return t;
|
|
406
|
+
for (let n of Object.keys(e)) {
|
|
407
|
+
let r = d(n);
|
|
408
|
+
if (!r) continue;
|
|
409
|
+
let i = String(e[n]);
|
|
410
|
+
r === "href" || r === "xlink:href" ? i.startsWith("#") && (t[r] = i) : t[r] = i;
|
|
411
|
+
}
|
|
412
|
+
return t;
|
|
413
|
+
}
|
|
414
|
+
function k(e) {
|
|
415
|
+
let t = "";
|
|
416
|
+
if (!Array.isArray(e)) return t;
|
|
417
|
+
for (let n of e) n.kind === "text" ? t += n.value : n.kind === "element" && (t += k(n.children));
|
|
418
|
+
return t;
|
|
419
|
+
}
|
|
420
|
+
function A(e, t = "", i) {
|
|
421
|
+
let o = [];
|
|
422
|
+
return Array.isArray(e) && e.forEach((e, s) => {
|
|
423
|
+
var c;
|
|
424
|
+
let l = t ? `${t}.${s}` : String(s);
|
|
425
|
+
if (e.kind === "text") {
|
|
426
|
+
o.push({
|
|
427
|
+
kind: "text",
|
|
428
|
+
key: l,
|
|
429
|
+
value: e.value
|
|
430
|
+
});
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
if (e.kind !== "element" || typeof e.tag != "string") return;
|
|
434
|
+
let u = Array.isArray(e.children) ? e.children : [], d = e.tag.toLowerCase();
|
|
435
|
+
if (d === "style") {
|
|
436
|
+
let e = x(k(u), i);
|
|
437
|
+
e && o.push({
|
|
438
|
+
kind: "element",
|
|
439
|
+
key: l,
|
|
440
|
+
tag: "style",
|
|
441
|
+
attrs: {},
|
|
442
|
+
children: [{
|
|
443
|
+
kind: "text",
|
|
444
|
+
key: `${l}.css`,
|
|
445
|
+
value: e
|
|
446
|
+
}]
|
|
447
|
+
});
|
|
448
|
+
} else a.has(d) || (n.has(d) ? o.push({
|
|
449
|
+
kind: "element",
|
|
450
|
+
key: l,
|
|
451
|
+
tag: (c = r[d]) == null ? d : c,
|
|
452
|
+
attrs: O(e.attrs),
|
|
453
|
+
children: A(u, l, i)
|
|
454
|
+
}) : o.push(...A(u, l, i)));
|
|
455
|
+
}), o;
|
|
456
|
+
}
|
|
457
|
+
function j(e) {
|
|
458
|
+
return A(e, "", Array.isArray(e) ? E(e) : void 0);
|
|
459
|
+
}
|
|
460
|
+
// src/mermaid/runtime.ts
|
|
461
|
+
var M, N = null, P = Promise.resolve(), F = 0;
|
|
462
|
+
function I() {
|
|
463
|
+
return typeof window < "u" && typeof window.matchMedia == "function" && window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
464
|
+
}
|
|
465
|
+
function L(e) {
|
|
466
|
+
return e === "dark" || e === "auto" && I() ? "dark" : e === "custom" ? "neutral" : "default";
|
|
467
|
+
}
|
|
468
|
+
function R() {
|
|
469
|
+
return z.apply(this, arguments);
|
|
470
|
+
}
|
|
471
|
+
function z() {
|
|
472
|
+
return z = e(function* () {
|
|
473
|
+
return M || (M = import("mermaid").then((e) => {
|
|
474
|
+
var t;
|
|
475
|
+
return (t = e.default) == null ? e : t;
|
|
476
|
+
})), M;
|
|
477
|
+
}), z.apply(this, arguments);
|
|
478
|
+
}
|
|
479
|
+
function B(e, t) {
|
|
480
|
+
return V.apply(this, arguments);
|
|
481
|
+
}
|
|
482
|
+
function V() {
|
|
483
|
+
return V = e(function* (e, t) {
|
|
484
|
+
(N === null || N !== t) && (yield e.initialize({
|
|
485
|
+
startOnLoad: !1,
|
|
486
|
+
securityLevel: "strict",
|
|
487
|
+
htmlLabels: !1,
|
|
488
|
+
theme: L(t),
|
|
489
|
+
fontFamily: "var(--vmd-font-sans)"
|
|
490
|
+
}), N = t);
|
|
491
|
+
}), V.apply(this, arguments);
|
|
492
|
+
}
|
|
493
|
+
function H(e) {
|
|
494
|
+
return /(cannot find module|failed to resolve module|failed to fetch dynamically imported module|err_module_not_found|not installed)/i.test(e) && /mermaid/i.test(e);
|
|
495
|
+
}
|
|
496
|
+
function U(e) {
|
|
497
|
+
let t = e instanceof Error ? e.message : typeof e == "string" ? e : "Mermaid rendering failed.";
|
|
498
|
+
return H(t) ? "Mermaid is not available. Install the optional `mermaid` peer dependency to render diagrams." : t;
|
|
499
|
+
}
|
|
500
|
+
function W() {
|
|
501
|
+
return `vmd-mermaid-${++F}`;
|
|
502
|
+
}
|
|
503
|
+
function G(e) {
|
|
504
|
+
return K.apply(this, arguments);
|
|
505
|
+
}
|
|
506
|
+
function K() {
|
|
507
|
+
return K = e(function* (t, n = {}) {
|
|
508
|
+
if (typeof window > "u" || typeof DOMParser > "u") return {
|
|
509
|
+
nodes: [],
|
|
510
|
+
error: "Mermaid requires a browser environment."
|
|
511
|
+
};
|
|
512
|
+
if (!t.trim()) return {
|
|
513
|
+
nodes: [],
|
|
514
|
+
error: "Mermaid source is empty."
|
|
515
|
+
};
|
|
516
|
+
let r = function() {
|
|
517
|
+
var r = e(function* () {
|
|
518
|
+
try {
|
|
519
|
+
var e;
|
|
520
|
+
let r = yield R();
|
|
521
|
+
yield B(r, n.theme);
|
|
522
|
+
let i = (e = n.id) == null ? W() : e, { svg: a } = yield r.render(i, t);
|
|
523
|
+
return {
|
|
524
|
+
svg: a,
|
|
525
|
+
nodes: D(a)
|
|
526
|
+
};
|
|
527
|
+
} catch (e) {
|
|
528
|
+
return {
|
|
529
|
+
nodes: [],
|
|
530
|
+
error: U(e)
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
});
|
|
534
|
+
return function() {
|
|
535
|
+
return r.apply(this, arguments);
|
|
536
|
+
};
|
|
537
|
+
}(), i = P.then(r, r);
|
|
538
|
+
return P = i.catch(() => void 0), i;
|
|
539
|
+
}), K.apply(this, arguments);
|
|
540
|
+
}
|
|
541
|
+
function q() {
|
|
542
|
+
M = void 0, N = null, P = Promise.resolve(), F = 0;
|
|
543
|
+
}
|
|
544
|
+
export { j as a, n as i, G as n, D as o, q as r, W as t };
|
|
545
|
+
|
|
546
|
+
//# sourceMappingURL=runtime-DJMnzjah.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-DJMnzjah.js","names":["_asyncToGenerator","ALLOWED_TAGS","SVG_TAG_NAMES","ALLOWED_ATTRIBUTES","DROPPED_TAGS","UNSAFE_CSS","CSS_URL","SCOPED_AT_RULES","SCOPED_STATEMENT_AT_RULES","isFragmentReference","value","reference","quote","attributeName","key","safeAttributes","_element$properties","attrs","properties","element","name","_properties$key","rawText","node","nodes","atRuleName","match","prelude","hasSiblingCombinator","depth","index","selector","char","isScopedSelector","scope","rest","splitSelectors","selectors","current","findBlockEnd","start","limit","css","close","isScopedBlock","isScopedStyleSheet","body","open","semicolon","end","sanitizeStyleSheet","safe","collectLabelLines","lines","buffer","flush","line","visit","tag","child","convertForeignObject","source","sanitizeNodes","result","_SVG_TAG_NAMES$tag","path","svgScope","_element$properties2","id","modelScope","_svg$attrs","svg","sanitizeSvg","root","fromHtml","svgElement","safeModelAttributes","modelText","sanitizeModelNodes","_SVG_TAG_NAMES$tag2","children","sanitizeMermaidNodes","mermaidPromise","initializedTheme","queue","counter","prefersDark","themeName","theme","loadMermaid","_loadMermaid","_module$default","module","initialize","_initialize","api","missingMermaid","message","classifyMermaidError","error","createMermaidRenderId","renderMermaid","_renderMermaid","run","_ref","_options$id","options","resetMermaidRuntime"],"sources":["../../src/mermaid/sanitize.ts","../../src/mermaid/runtime.ts"],"sourcesContent":["import { fromHtml } from 'hast-util-from-html'\r\nimport type { Element, RootContent } from 'hast'\r\nimport type { MarkdownNode } from '../core/types'\r\n\r\nconst ALLOWED_TAGS = new Set([\r\n 'svg',\r\n 'g',\r\n 'path',\r\n 'rect',\r\n 'circle',\r\n 'ellipse',\r\n 'line',\r\n 'polyline',\r\n 'polygon',\r\n 'text',\r\n 'tspan',\r\n 'defs',\r\n 'marker',\r\n 'use',\r\n 'title',\r\n 'desc',\r\n 'clippath',\r\n 'lineargradient',\r\n 'radialgradient',\r\n 'stop',\r\n 'pattern',\r\n 'mask',\r\n 'symbol',\r\n 'textpath',\r\n 'style',\r\n])\r\n\r\n// Hast lowercases element lookups while SVG element names are case-sensitive.\r\nconst SVG_TAG_NAMES: Record<string, string> = {\r\n clippath: 'clipPath',\r\n lineargradient: 'linearGradient',\r\n radialgradient: 'radialGradient',\r\n textpath: 'textPath',\r\n}\r\n\r\n// Keys are normalized with `attributeName` (lowercase, without `-`, `_`, or\r\n// `:`), values are the case-sensitive SVG attribute names. Hast exposes SVG\r\n// properties in camelCase (`strokeWidth`, `stopColor`, `viewBox`, ...), while\r\n// Vue writes the keys it receives with `setAttribute`, so both sides must be\r\n// converted back to their SVG spelling.\r\nconst ALLOWED_ATTRIBUTES: Record<string, string> = {\r\n id: 'id',\r\n class: 'class',\r\n d: 'd',\r\n fill: 'fill',\r\n fillopacity: 'fill-opacity',\r\n fillrule: 'fill-rule',\r\n stroke: 'stroke',\r\n strokewidth: 'stroke-width',\r\n strokedasharray: 'stroke-dasharray',\r\n strokedashoffset: 'stroke-dashoffset',\r\n strokelinecap: 'stroke-linecap',\r\n strokelinejoin: 'stroke-linejoin',\r\n strokemiterlimit: 'stroke-miterlimit',\r\n strokeopacity: 'stroke-opacity',\r\n x: 'x',\r\n y: 'y',\r\n x1: 'x1',\r\n y1: 'y1',\r\n x2: 'x2',\r\n y2: 'y2',\r\n cx: 'cx',\r\n cy: 'cy',\r\n r: 'r',\r\n rx: 'rx',\r\n ry: 'ry',\r\n width: 'width',\r\n height: 'height',\r\n viewbox: 'viewBox',\r\n preserveaspectratio: 'preserveAspectRatio',\r\n transform: 'transform',\r\n transformorigin: 'transform-origin',\r\n points: 'points',\r\n pathlength: 'pathLength',\r\n offset: 'offset',\r\n stopcolor: 'stop-color',\r\n stopopacity: 'stop-opacity',\r\n markerstart: 'marker-start',\r\n markermid: 'marker-mid',\r\n markerend: 'marker-end',\r\n markerwidth: 'markerWidth',\r\n markerheight: 'markerHeight',\r\n markerunits: 'markerUnits',\r\n refx: 'refX',\r\n refy: 'refY',\r\n orient: 'orient',\r\n gradientunits: 'gradientUnits',\r\n gradienttransform: 'gradientTransform',\r\n spreadmethod: 'spreadMethod',\r\n fx: 'fx',\r\n fy: 'fy',\r\n fr: 'fr',\r\n patternunits: 'patternUnits',\r\n patterncontentunits: 'patternContentUnits',\r\n patterntransform: 'patternTransform',\r\n clippathunits: 'clipPathUnits',\r\n clippath: 'clip-path',\r\n cliprule: 'clip-rule',\r\n mask: 'mask',\r\n maskunits: 'maskUnits',\r\n maskcontentunits: 'maskContentUnits',\r\n textlength: 'textLength',\r\n lengthadjust: 'lengthAdjust',\r\n textanchor: 'text-anchor',\r\n dominantbaseline: 'dominant-baseline',\r\n alignmentbaseline: 'alignment-baseline',\r\n baselineshift: 'baseline-shift',\r\n fontfamily: 'font-family',\r\n fontsize: 'font-size',\r\n fontweight: 'font-weight',\r\n fontstyle: 'font-style',\r\n fontvariant: 'font-variant',\r\n letterspacing: 'letter-spacing',\r\n wordspacing: 'word-spacing',\r\n textdecoration: 'text-decoration',\r\n whitespace: 'white-space',\r\n texttransform: 'text-transform',\r\n direction: 'direction',\r\n writingmode: 'writing-mode',\r\n lineheight: 'line-height',\r\n dx: 'dx',\r\n dy: 'dy',\r\n rotate: 'rotate',\r\n startoffset: 'startOffset',\r\n method: 'method',\r\n spacing: 'spacing',\r\n side: 'side',\r\n color: 'color',\r\n display: 'display',\r\n visibility: 'visibility',\r\n overflow: 'overflow',\r\n opacity: 'opacity',\r\n role: 'role',\r\n arialabel: 'aria-label',\r\n ariahidden: 'aria-hidden',\r\n ariahaspopup: 'aria-haspopup',\r\n arialabelledby: 'aria-labelledby',\r\n ariadescribedby: 'aria-describedby',\r\n ariaroledescription: 'aria-roledescription',\r\n focusable: 'focusable',\r\n tabindex: 'tabindex',\r\n href: 'href',\r\n xlinkhref: 'xlink:href',\r\n xmlspace: 'xml:space',\r\n vectoreffect: 'vector-effect',\r\n paintorder: 'paint-order',\r\n shaperendering: 'shape-rendering',\r\n pointerevents: 'pointer-events',\r\n filter: 'filter',\r\n cursor: 'cursor',\r\n}\r\n\r\nconst DROPPED_TAGS = new Set([\r\n 'script',\r\n 'foreignobject',\r\n 'iframe',\r\n 'object',\r\n 'embed',\r\n 'image',\r\n 'audio',\r\n 'video',\r\n])\r\n\r\n// Mermaid scopes its generated stylesheet to the SVG id. Keep that scoped\r\n// theme CSS, but remove constructs that could load remote resources or execute\r\n// in older engines.\r\nconst UNSAFE_CSS =\r\n /@import|@font-face|expression\\s*\\(|javascript\\s*:|-moz-binding|behavior\\s*:/i\r\nconst CSS_URL = /url\\(\\s*([^)]*)\\)/gi\r\nconst SCOPED_AT_RULES = new Set(['media', 'supports', 'layer'])\r\nconst SCOPED_STATEMENT_AT_RULES = new Set(['charset', 'layer'])\r\n\r\nfunction isFragmentReference(reference: string): boolean {\r\n let value = reference.trim()\r\n const quote = value.charAt(0)\r\n if (\r\n (quote === '\"' || quote === \"'\") &&\r\n value.charAt(value.length - 1) === quote\r\n ) {\r\n value = value.slice(1, -1).trim()\r\n }\r\n return value.startsWith('#')\r\n}\r\n\r\nfunction attributeName(key: string): string | undefined {\r\n if (key === 'className') return 'class'\r\n if (key.startsWith('data-')) return key\r\n if (\r\n key.startsWith('data') &&\r\n key.length > 4 &&\r\n key.charAt(4) >= 'A' &&\r\n key.charAt(4) <= 'Z'\r\n ) {\r\n return key.replace(/([A-Z])/g, '-$1').toLowerCase()\r\n }\r\n const normalized = key.toLowerCase().replace(/[-_:]/g, '')\r\n return ALLOWED_ATTRIBUTES[normalized]\r\n}\r\n\r\nfunction safeAttributes(element: Element): Record<string, string> {\r\n const attrs: Record<string, string> = {}\r\n const properties = element.properties ?? {}\r\n for (const key of Object.keys(properties)) {\r\n const name = attributeName(key)\r\n if (!name) continue\r\n if (name === 'href' || name === 'xlink:href') {\r\n const value = String(properties[key] ?? '')\r\n if (value.startsWith('#')) attrs[name] = value\r\n continue\r\n }\r\n const value = properties[key]\r\n if (value === null || value === undefined || value === false) continue\r\n attrs[name] = Array.isArray(value)\r\n ? value.map(String).join(' ')\r\n : String(value)\r\n }\r\n return attrs\r\n}\r\n\r\nfunction rawText(nodes: readonly RootContent[]): string {\r\n let value = ''\r\n for (const node of nodes) {\r\n if (node.type === 'text') value += node.value\r\n else if (node.type === 'element') value += rawText(node.children)\r\n }\r\n return value\r\n}\r\n\r\nfunction atRuleName(prelude: string): string {\r\n const match = /^@([-a-zA-Z]+)/.exec(prelude)\r\n return match ? match[1].toLowerCase() : ''\r\n}\r\n\r\nfunction hasSiblingCombinator(selector: string): boolean {\r\n let depth = 0\r\n let quote = ''\r\n for (let index = 0; index < selector.length; index++) {\r\n const char = selector.charAt(index)\r\n if (quote) {\r\n if (char === '\\\\') index++\r\n else if (char === quote) quote = ''\r\n continue\r\n }\r\n if (char === '\"' || char === \"'\") {\r\n quote = char\r\n continue\r\n }\r\n if (char === '(' || char === '[') depth++\r\n else if (char === ')' || char === ']') depth = Math.max(0, depth - 1)\r\n else if (depth === 0 && (char === '+' || char === '~')) return true\r\n }\r\n return false\r\n}\r\n\r\nfunction isScopedSelector(selector: string, scope: string): boolean {\r\n const value = selector.trim()\r\n if (!value.startsWith(scope)) return false\r\n const rest = value.charAt(scope.length)\r\n if (rest !== '' && /[a-zA-Z0-9_-]/.test(rest)) return false\r\n // Descendant and child combinators stay inside the SVG. Sibling combinators\r\n // could reach host-page elements next to the diagram.\r\n return !hasSiblingCombinator(value)\r\n}\r\n\r\nfunction splitSelectors(prelude: string): string[] {\r\n const selectors: string[] = []\r\n let current = ''\r\n let depth = 0\r\n let quote = ''\r\n for (let index = 0; index < prelude.length; index++) {\r\n const char = prelude.charAt(index)\r\n if (quote) {\r\n current += char\r\n if (char === '\\\\') {\r\n current += prelude.charAt(++index)\r\n } else if (char === quote) {\r\n quote = ''\r\n }\r\n continue\r\n }\r\n if (char === '\"' || char === \"'\") {\r\n quote = char\r\n current += char\r\n continue\r\n }\r\n if (char === '(' || char === '[') depth++\r\n else if (char === ')' || char === ']') depth = Math.max(0, depth - 1)\r\n else if (char === ',' && depth === 0) {\r\n selectors.push(current)\r\n current = ''\r\n continue\r\n }\r\n current += char\r\n }\r\n selectors.push(current)\r\n return selectors\r\n}\r\n\r\nfunction findBlockEnd(css: string, start: number, limit: number): number {\r\n let depth = 0\r\n let quote = ''\r\n for (let index = start; index < limit; index++) {\r\n const char = css.charAt(index)\r\n if (quote) {\r\n if (char === '\\\\') index++\r\n else if (char === quote) quote = ''\r\n continue\r\n }\r\n if (char === '\"' || char === \"'\") {\r\n quote = char\r\n continue\r\n }\r\n if (char === '/' && css.charAt(index + 1) === '*') {\r\n const close = css.indexOf('*/', index + 2)\r\n if (close === -1 || close >= limit) return -1\r\n index = close + 1\r\n continue\r\n }\r\n if (char === '{') depth++\r\n else if (char === '}') {\r\n depth--\r\n if (depth === 0) return index\r\n }\r\n }\r\n return -1\r\n}\r\n\r\nfunction isScopedBlock(\r\n prelude: string,\r\n body: string,\r\n scope: string,\r\n): boolean {\r\n if (prelude.startsWith('@')) {\r\n const name = atRuleName(prelude)\r\n if (name.endsWith('keyframes')) return true\r\n return SCOPED_AT_RULES.has(name) && isScopedStyleSheet(body, scope)\r\n }\r\n if (!prelude) return false\r\n return splitSelectors(prelude).every((selector) =>\r\n isScopedSelector(selector, scope),\r\n )\r\n}\r\n\r\nfunction isScopedStyleSheet(css: string, scope: string): boolean {\r\n let index = 0\r\n while (index < css.length) {\r\n while (index < css.length && /[\\s;]/.test(css.charAt(index))) {\r\n index++\r\n }\r\n if (index >= css.length) break\r\n\r\n const start = index\r\n let quote = ''\r\n let depth = 0\r\n let open = -1\r\n let semicolon = -1\r\n for (; index < css.length; index++) {\r\n const char = css.charAt(index)\r\n if (quote) {\r\n if (char === '\\\\') index++\r\n else if (char === quote) quote = ''\r\n continue\r\n }\r\n if (char === '\"' || char === \"'\") {\r\n quote = char\r\n continue\r\n }\r\n if (char === '/' && css.charAt(index + 1) === '*') {\r\n const close = css.indexOf('*/', index + 2)\r\n if (close === -1) return false\r\n index = close + 1\r\n continue\r\n }\r\n if (char === '(' || char === '[') depth++\r\n else if (char === ')' || char === ']') depth = Math.max(0, depth - 1)\r\n else if (depth === 0) {\r\n if (char === '{') {\r\n open = index\r\n break\r\n }\r\n if (char === ';') {\r\n semicolon = index\r\n break\r\n }\r\n if (char === '}') return false\r\n }\r\n }\r\n if (quote) return false\r\n\r\n const prelude = css.slice(start, open !== -1 ? open : semicolon).trim()\r\n if (open !== -1) {\r\n const end = findBlockEnd(css, open, css.length)\r\n if (end === -1) return false\r\n if (!isScopedBlock(prelude, css.slice(open + 1, end), scope)) {\r\n return false\r\n }\r\n index = end + 1\r\n continue\r\n }\r\n if (semicolon !== -1) {\r\n if (\r\n !prelude.startsWith('@') ||\r\n !SCOPED_STATEMENT_AT_RULES.has(atRuleName(prelude))\r\n ) {\r\n return false\r\n }\r\n index = semicolon + 1\r\n continue\r\n }\r\n if (prelude !== '') return false\r\n break\r\n }\r\n return true\r\n}\r\n\r\nfunction sanitizeStyleSheet(\r\n css: string,\r\n scope: string | undefined,\r\n): string | undefined {\r\n if (!scope || !css.trim() || UNSAFE_CSS.test(css)) return undefined\r\n if (!isScopedStyleSheet(css, scope)) return undefined\r\n const safe = css.replace(CSS_URL, (match, reference: string) =>\r\n isFragmentReference(reference) ? match : 'none',\r\n )\r\n return safe.trim() ? safe : undefined\r\n}\r\n\r\nfunction collectLabelLines(nodes: readonly RootContent[]): string[] {\r\n const lines: string[] = []\r\n let buffer = ''\r\n\r\n const flush = (): void => {\r\n const line = buffer.replace(/\\s+/g, ' ').trim()\r\n if (line) lines.push(line)\r\n buffer = ''\r\n }\r\n\r\n const visit = (node: RootContent): void => {\r\n if (node.type === 'text') {\r\n buffer += node.value\r\n return\r\n }\r\n if (node.type !== 'element') return\r\n const tag = node.tagName.toLowerCase()\r\n if (tag === 'br') {\r\n flush()\r\n return\r\n }\r\n if (tag === 'div' || tag === 'p' || tag === 'li' || tag === 'tr') {\r\n flush()\r\n for (const child of node.children) visit(child)\r\n flush()\r\n return\r\n }\r\n for (const child of node.children) visit(child)\r\n }\r\n\r\n for (const node of nodes) visit(node)\r\n flush()\r\n return lines\r\n}\r\n\r\nfunction convertForeignObject(node: Element, key: string): MarkdownNode[] {\r\n const lines = collectLabelLines(node.children)\r\n if (lines.length === 0) return []\r\n\r\n const source = safeAttributes(node)\r\n const attrs: Record<string, string> = {}\r\n for (const name of ['x', 'y', 'transform', 'class']) {\r\n if (source[name] !== undefined) attrs[name] = source[name]\r\n }\r\n if (attrs.x === undefined) attrs.x = '0'\r\n if (attrs.y === undefined) attrs.y = '0'\r\n\r\n return [\r\n {\r\n kind: 'element',\r\n key,\r\n tag: 'text',\r\n attrs,\r\n children: lines.map((line, index) => ({\r\n kind: 'element',\r\n key: `${key}.${index}`,\r\n tag: 'tspan',\r\n attrs: {\r\n x: attrs.x,\r\n dy: index === 0 ? '1em' : '1.2em',\r\n },\r\n children: [\r\n {\r\n kind: 'text',\r\n key: `${key}.${index}.text`,\r\n value: line,\r\n },\r\n ],\r\n })),\r\n },\r\n ]\r\n}\r\n\r\nfunction sanitizeNodes(\r\n nodes: readonly RootContent[],\r\n path = '',\r\n scope?: string,\r\n): MarkdownNode[] {\r\n const result: MarkdownNode[] = []\r\n nodes.forEach((node, index) => {\r\n const key = path ? `${path}.${index}` : String(index)\r\n if (node.type === 'text') {\r\n if (node.value.trim() !== '') {\r\n result.push({ kind: 'text', key, value: node.value })\r\n }\r\n return\r\n }\r\n if (node.type !== 'element') return\r\n const tag = node.tagName.toLowerCase()\r\n if (tag === 'foreignobject') {\r\n result.push(...convertForeignObject(node, key))\r\n return\r\n }\r\n if (tag === 'style') {\r\n const css = sanitizeStyleSheet(rawText(node.children), scope)\r\n if (css) {\r\n result.push({\r\n kind: 'element',\r\n key,\r\n tag: 'style',\r\n attrs: {},\r\n children: [{ kind: 'text', key: `${key}.css`, value: css }],\r\n })\r\n }\r\n return\r\n }\r\n if (DROPPED_TAGS.has(tag)) return\r\n if (!ALLOWED_TAGS.has(tag)) {\r\n result.push(...sanitizeNodes(node.children, key, scope))\r\n return\r\n }\r\n result.push({\r\n kind: 'element',\r\n key,\r\n tag: SVG_TAG_NAMES[tag] ?? tag,\r\n attrs: safeAttributes(node),\r\n children: sanitizeNodes(node.children, key, scope),\r\n })\r\n })\r\n return result\r\n}\r\n\r\nfunction svgScope(element: Element): string | undefined {\r\n const id = element.properties?.id\r\n return typeof id === 'string' && id !== '' ? `#${id}` : undefined\r\n}\r\n\r\nfunction modelScope(nodes: readonly MarkdownNode[]): string | undefined {\r\n const svg = nodes.find(\r\n (node): node is Extract<MarkdownNode, { kind: 'element' }> =>\r\n node.kind === 'element' && node.tag.toLowerCase() === 'svg',\r\n )\r\n const id = svg?.attrs?.id\r\n return typeof id === 'string' && id !== '' ? `#${id}` : undefined\r\n}\r\n\r\n/** Sanitize Mermaid SVG output into normalized nodes. */\r\nexport function sanitizeSvg(svg: string): MarkdownNode[] {\r\n const root = fromHtml(svg, { fragment: true })\r\n const svgElement = root.children.find(\r\n (node): node is Element =>\r\n node.type === 'element' && node.tagName.toLowerCase() === 'svg',\r\n )\r\n return svgElement\r\n ? sanitizeNodes([svgElement], '', svgScope(svgElement))\r\n : sanitizeNodes(root.children)\r\n}\r\n\r\nfunction safeModelAttributes(\r\n attrs: Record<string, string> | undefined,\r\n): Record<string, string> {\r\n const safe: Record<string, string> = {}\r\n if (!attrs || typeof attrs !== 'object') return safe\r\n for (const key of Object.keys(attrs)) {\r\n const name = attributeName(key)\r\n if (!name) continue\r\n const value = String(attrs[key])\r\n if (name === 'href' || name === 'xlink:href') {\r\n if (value.startsWith('#')) safe[name] = value\r\n continue\r\n }\r\n safe[name] = value\r\n }\r\n return safe\r\n}\r\n\r\nfunction modelText(nodes: readonly MarkdownNode[]): string {\r\n let value = ''\r\n if (!Array.isArray(nodes)) return value\r\n for (const node of nodes) {\r\n if (node.kind === 'text') value += node.value\r\n else if (node.kind === 'element') value += modelText(node.children)\r\n }\r\n return value\r\n}\r\n\r\nfunction sanitizeModelNodes(\r\n nodes: readonly MarkdownNode[],\r\n path = '',\r\n scope?: string,\r\n): MarkdownNode[] {\r\n const result: MarkdownNode[] = []\r\n if (!Array.isArray(nodes)) return result\r\n nodes.forEach((node, index) => {\r\n const key = path ? `${path}.${index}` : String(index)\r\n if (node.kind === 'text') {\r\n result.push({ kind: 'text', key, value: node.value })\r\n return\r\n }\r\n if (node.kind !== 'element' || typeof node.tag !== 'string') return\r\n const children = Array.isArray(node.children) ? node.children : []\r\n const tag = node.tag.toLowerCase()\r\n if (tag === 'style') {\r\n const css = sanitizeStyleSheet(modelText(children), scope)\r\n if (css) {\r\n result.push({\r\n kind: 'element',\r\n key,\r\n tag: 'style',\r\n attrs: {},\r\n children: [{ kind: 'text', key: `${key}.css`, value: css }],\r\n })\r\n }\r\n return\r\n }\r\n if (DROPPED_TAGS.has(tag)) return\r\n if (!ALLOWED_TAGS.has(tag)) {\r\n result.push(...sanitizeModelNodes(children, key, scope))\r\n return\r\n }\r\n result.push({\r\n kind: 'element',\r\n key,\r\n tag: SVG_TAG_NAMES[tag] ?? tag,\r\n attrs: safeModelAttributes(node.attrs),\r\n children: sanitizeModelNodes(children, key, scope),\r\n })\r\n })\r\n return result\r\n}\r\n\r\n/**\r\n * Sanitize nodes returned by an injected Mermaid renderer. Renderer output is\r\n * treated as untrusted even when it looks like normalized SVG nodes. A\r\n * stylesheet is kept only when the root SVG has an id and every selector is\r\n * scoped to it.\r\n */\r\nexport function sanitizeMermaidNodes(\r\n nodes: readonly MarkdownNode[],\r\n): MarkdownNode[] {\r\n const scope = Array.isArray(nodes) ? modelScope(nodes) : undefined\r\n return sanitizeModelNodes(nodes, '', scope)\r\n}\r\n\r\nexport { ALLOWED_TAGS as MERMAID_ALLOWED_TAGS }\r\n","import type {\r\n MarkdownTheme,\r\n MermaidRenderOptions,\r\n MermaidRenderResult,\r\n} from '../core/types'\r\nimport { sanitizeSvg } from './sanitize'\r\n\r\ninterface MermaidApi {\r\n initialize(config: Record<string, unknown>): void | Promise<void>\r\n render(id: string, source: string): Promise<{ svg: string }>\r\n}\r\n\r\nlet mermaidPromise: Promise<MermaidApi> | undefined\r\nlet initializedTheme: MarkdownTheme | null | undefined = null\r\nlet queue: Promise<unknown> = Promise.resolve()\r\nlet counter = 0\r\n\r\nfunction prefersDark(): boolean {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof window.matchMedia === 'function' &&\r\n window.matchMedia('(prefers-color-scheme: dark)').matches\r\n )\r\n}\r\n\r\nfunction themeName(theme: MarkdownTheme | undefined): string {\r\n if (theme === 'dark' || (theme === 'auto' && prefersDark())) return 'dark'\r\n if (theme === 'custom') return 'neutral'\r\n return 'default'\r\n}\r\n\r\nasync function loadMermaid(): Promise<MermaidApi> {\r\n if (!mermaidPromise) {\r\n mermaidPromise = import('mermaid').then((module) => {\r\n const api = (module as { default?: MermaidApi }).default ?? module\r\n return api as MermaidApi\r\n })\r\n }\r\n return mermaidPromise\r\n}\r\n\r\nasync function initialize(api: MermaidApi, theme: MarkdownTheme | undefined): Promise<void> {\r\n if (initializedTheme !== null && initializedTheme === theme) return\r\n await api.initialize({\r\n startOnLoad: false,\r\n securityLevel: 'strict',\r\n htmlLabels: false,\r\n theme: themeName(theme),\r\n fontFamily: 'var(--vmd-font-sans)',\r\n })\r\n initializedTheme = theme\r\n}\r\n\r\nfunction missingMermaid(message: string): boolean {\r\n return /(cannot find module|failed to resolve module|failed to fetch dynamically imported module|err_module_not_found|not installed)/i.test(\r\n message,\r\n ) && /mermaid/i.test(message)\r\n}\r\n\r\n/** Report the actual failure, adding an install hint for a missing peer. */\r\nexport function classifyMermaidError(error: unknown): string {\r\n const message = error instanceof Error\r\n ? error.message\r\n : typeof error === 'string'\r\n ? error\r\n : 'Mermaid rendering failed.'\r\n if (missingMermaid(message)) {\r\n return 'Mermaid is not available. Install the optional `mermaid` peer dependency to render diagrams.'\r\n }\r\n return message\r\n}\r\n\r\n/** Create a unique DOM-safe identifier for one Mermaid render. */\r\nexport function createMermaidRenderId(): string {\r\n return `vmd-mermaid-${++counter}`\r\n}\r\n\r\n/**\r\n * Render one diagram through a single lazy Mermaid instance. Renders are\r\n * serialized so Mermaid's global state cannot interleave.\r\n */\r\nexport async function renderMermaid(\r\n source: string,\r\n options: MermaidRenderOptions = {},\r\n): Promise<MermaidRenderResult> {\r\n if (typeof window === 'undefined' || typeof DOMParser === 'undefined') {\r\n return { nodes: [], error: 'Mermaid requires a browser environment.' }\r\n }\r\n if (!source.trim()) {\r\n return { nodes: [], error: 'Mermaid source is empty.' }\r\n }\r\n\r\n const run = async (): Promise<MermaidRenderResult> => {\r\n try {\r\n const api = await loadMermaid()\r\n await initialize(api, options.theme)\r\n const id = options.id ?? createMermaidRenderId()\r\n const { svg } = await api.render(id, source)\r\n return { svg, nodes: sanitizeSvg(svg) }\r\n } catch (error) {\r\n return { nodes: [], error: classifyMermaidError(error) }\r\n }\r\n }\r\n\r\n const result = queue.then(run, run)\r\n queue = result.catch(() => undefined)\r\n return result\r\n}\r\n\r\nexport function resetMermaidRuntime(): void {\r\n mermaidPromise = undefined\r\n initializedTheme = null\r\n queue = Promise.resolve()\r\n counter = 0\r\n}\r\n\r\nexport default renderMermaid\r\n"],"mappings":";;;AAIA,IAAMC,oBAAe,IAAI,IAAI;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC,GAGKC,IAAwC;CAC5C,UAAU;CACV,gBAAgB;CAChB,gBAAgB;CAChB,UAAU;AACZ,GAOMC,IAA6C;CACjD,IAAI;CACJ,OAAO;CACP,GAAG;CACH,MAAM;CACN,aAAa;CACb,UAAU;CACV,QAAQ;CACR,aAAa;CACb,iBAAiB;CACjB,kBAAkB;CAClB,eAAe;CACf,gBAAgB;CAChB,kBAAkB;CAClB,eAAe;CACf,GAAG;CACH,GAAG;CACH,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,GAAG;CACH,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,QAAQ;CACR,SAAS;CACT,qBAAqB;CACrB,WAAW;CACX,iBAAiB;CACjB,QAAQ;CACR,YAAY;CACZ,QAAQ;CACR,WAAW;CACX,aAAa;CACb,aAAa;CACb,WAAW;CACX,WAAW;CACX,aAAa;CACb,cAAc;CACd,aAAa;CACb,MAAM;CACN,MAAM;CACN,QAAQ;CACR,eAAe;CACf,mBAAmB;CACnB,cAAc;CACd,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,cAAc;CACd,qBAAqB;CACrB,kBAAkB;CAClB,eAAe;CACf,UAAU;CACV,UAAU;CACV,MAAM;CACN,WAAW;CACX,kBAAkB;CAClB,YAAY;CACZ,cAAc;CACd,YAAY;CACZ,kBAAkB;CAClB,mBAAmB;CACnB,eAAe;CACf,YAAY;CACZ,UAAU;CACV,YAAY;CACZ,WAAW;CACX,aAAa;CACb,eAAe;CACf,aAAa;CACb,gBAAgB;CAChB,YAAY;CACZ,eAAe;CACf,WAAW;CACX,aAAa;CACb,YAAY;CACZ,IAAI;CACJ,IAAI;CACJ,QAAQ;CACR,aAAa;CACb,QAAQ;CACR,SAAS;CACT,MAAM;CACN,OAAO;CACP,SAAS;CACT,YAAY;CACZ,UAAU;CACV,SAAS;CACT,MAAM;CACN,WAAW;CACX,YAAY;CACZ,cAAc;CACd,gBAAgB;CAChB,iBAAiB;CACjB,qBAAqB;CACrB,WAAW;CACX,UAAU;CACV,MAAM;CACN,WAAW;CACX,UAAU;CACV,cAAc;CACd,YAAY;CACZ,gBAAgB;CAChB,eAAe;CACf,QAAQ;CACR,QAAQ;AACV,GAEMC,oBAAe,IAAI,IAAI;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC,GAKKC,IACJ,gFACIC,IAAU,uBACVC,oBAAkB,IAAI,IAAI;CAAC;CAAS;CAAY;AAAO,CAAC,GACxDC,oBAA4B,IAAI,IAAI,CAAC,WAAW,OAAO,CAAC;AAE9D,SAASC,EAAoB,GAA4B;CACvD,IAAIC,IAAQC,EAAU,KAAK,GACrBC,IAAQF,EAAM,OAAO,CAAC;CAO5B,QALGE,MAAU,QAAOA,MAAU,QAC5BF,EAAM,OAAOA,EAAM,SAAS,CAAC,MAAME,MAEnC,IAAQF,EAAM,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,IAE3BA,EAAM,WAAW,GAAG;AAC7B;AAEA,SAASG,EAAc,GAAiC;CAYtD,OAXIC,MAAQ,cAAoB,UAC5BA,EAAI,WAAW,OAAO,IAAUA,IAElCA,EAAI,WAAW,MAAM,KACrBA,EAAI,SAAS,KACbA,EAAI,OAAO,CAAC,KAAK,OACjBA,EAAI,OAAO,CAAC,KAAK,MAEVA,EAAI,QAAQ,YAAY,KAAK,CAAC,CAAC,YAAY,IAG7CX,EADYW,EAAI,YAAY,CAAC,CAAC,QAAQ,UAAU,EAC7B;AAC5B;AAEA,SAASC,EAAe,GAA0C;;CAChE,IAAME,IAAgC,CAAC,GACjCC,KAAA,IAAaC,EAAQ,eAAA,OAAc,CAAC,IAAfH;CAC3B,KAAK,IAAMF,KAAO,OAAO,KAAKI,CAAU,GAAG;EACzC,IAAME,IAAOP,EAAcC,CAAG;EAC9B,IAAI,CAACM,GAAM;EACX,IAAIA,MAAS,UAAUA,MAAS,cAAc;;GAC5C,IAAMV,IAAQ,QAAA,IAAOQ,EAAWJ,OAAA,OAAQ,KAARO,CAAU;GAC1C,AAAIX,EAAM,WAAW,GAAG,MAAG,EAAMU,KAAQV;GACzC;EACF;EACA,IAAMA,IAAQQ,EAAWJ;EACzB,AAAIJ,KAAU,QAA+BA,MAAU,OACvD,EAAMU,KAAQ,MAAM,QAAQV,CAAK,IAC7BA,EAAM,IAAI,MAAM,CAAC,CAAC,KAAK,GAAG,IAC1B,OAAOA,CAAK;CAClB;CACA,OAAOO;AACT;AAEA,SAASK,EAAQ,GAAuC;CACtD,IAAIZ,IAAQ;CACZ,KAAK,IAAMa,KAAQC,GACjB,AAAID,EAAK,SAAS,SAAQ,KAASA,EAAK,QAC/BA,EAAK,SAAS,cAAW,KAASD,EAAQC,EAAK,QAAQ;CAElE,OAAOb;AACT;AAEA,SAASe,EAAW,GAAyB;CAC3C,IAAMC,IAAQ,iBAAiB,KAAKC,CAAO;CAC3C,OAAOD,IAAQA,EAAM,EAAE,CAAC,YAAY,IAAI;AAC1C;AAEA,SAASE,EAAqB,GAA2B;CACvD,IAAIC,IAAQ,GACRjB,IAAQ;CACZ,KAAK,IAAIkB,IAAQ,GAAGA,IAAQC,EAAS,QAAQ,KAAS;EACpD,IAAMC,IAAOD,EAAS,OAAOD,CAAK;EAClC,IAAIlB,GACF,AAAIoB,MAAS,OAAM,MACVA,MAASpB,MAAO,IAAQ;OAGnC,IAAIoB,MAAS,QAAOA,MAAS,KAC3B,IAAQA;OAGV,IAAIA,MAAS,OAAOA,MAAS,KAAK;OAC7B,IAAIA,MAAS,OAAOA,MAAS,KAAK,IAAQ,KAAK,IAAI,GAAGH,IAAQ,CAAC;OAC/D,IAAIA,MAAU,MAAMG,MAAS,OAAOA,MAAS,MAAM,OAAO;CACjE;CACA,OAAO;AACT;AAEA,SAASC,EAAiB,GAAkB,GAAwB;CAClE,IAAMvB,IAAQqB,EAAS,KAAK;CAC5B,IAAI,CAACrB,EAAM,WAAWwB,CAAK,GAAG,OAAO;CACrC,IAAMC,IAAOzB,EAAM,OAAOwB,EAAM,MAAM;CAItC,OAHIC,MAAS,MAAM,gBAAgB,KAAKA,CAAI,IAAU,KAG/C,CAACP,EAAqBlB,CAAK;AACpC;AAEA,SAAS0B,EAAe,GAA2B;CACjD,IAAMC,IAAsB,CAAC,GACzBC,IAAU,IACVT,IAAQ,GACRjB,IAAQ;CACZ,KAAK,IAAIkB,IAAQ,GAAGA,IAAQH,EAAQ,QAAQ,KAAS;EACnD,IAAMK,IAAOL,EAAQ,OAAOG,CAAK;EACjC,IAAIlB,GAEF,AADA,KAAWoB,GACPA,MAAS,OACX,KAAWL,EAAQ,OAAO,EAAEG,CAAK,IACxBE,MAASpB,MAClB,IAAQ;OAIZ,IAAIoB,MAAS,QAAOA,MAAS,KAE3B,AADA,IAAQA,GACR,KAAWA;OAGb;OAAIA,MAAS,OAAOA,MAAS,KAAK;QAC7B,IAAIA,MAAS,OAAOA,MAAS,KAAK,IAAQ,KAAK,IAAI,GAAGH,IAAQ,CAAC;QAC/D,IAAIG,MAAS,OAAOH,MAAU,GAAG;IAEpC,AADAQ,EAAU,KAAKC,CAAO,GACtB,IAAU;IACV;GACF;GACA,KAAWN;EADX;CAEF;CAEA,OADAK,EAAU,KAAKC,CAAO,GACfD;AACT;AAEA,SAASE,EAAa,GAAa,GAAe,GAAuB;CACvE,IAAIV,IAAQ,GACRjB,IAAQ;CACZ,KAAK,IAAIkB,IAAQU,GAAOV,IAAQW,GAAO,KAAS;EAC9C,IAAMT,IAAOU,EAAI,OAAOZ,CAAK;EAC7B,IAAIlB,GACF,AAAIoB,MAAS,OAAM,MACVA,MAASpB,MAAO,IAAQ;OAGnC,IAAIoB,MAAS,QAAOA,MAAS,KAC3B,IAAQA;OAGV,IAAIA,MAAS,OAAOU,EAAI,OAAOZ,IAAQ,CAAC,MAAM,KAAK;GACjD,IAAMa,IAAQD,EAAI,QAAQ,MAAMZ,IAAQ,CAAC;GACzC,IAAIa,MAAU,MAAMA,KAASF,GAAO,OAAO;GAC3C,IAAQE,IAAQ;EAElB,OACA,IAAIX,MAAS,KAAK;OACb,IAAIA,MAAS,QAChB,KACIH,MAAU,IAAG,OAAOC;CAE5B;CACA,OAAO;AACT;AAEA,SAASc,EACP,GACA,GACA,GACS;CACT,IAAIjB,EAAQ,WAAW,GAAG,GAAG;EAC3B,IAAMP,IAAOK,EAAWE,CAAO;EAE/B,OADIP,EAAK,SAAS,WAAW,IAAU,KAChCb,EAAgB,IAAIa,CAAI,KAAKyB,EAAmBC,GAAMZ,CAAK;CACpE;CAEA,OADKP,IACES,EAAeT,CAAO,CAAC,CAAC,OAAO,MACpCM,EAAiBF,GAAUG,CAAK,CAClC,IAHqB;AAIvB;AAEA,SAASW,EAAmB,GAAa,GAAwB;CAC/D,IAAIf,IAAQ;CACZ,OAAOA,IAAQY,EAAI,SAAQ;EACzB,OAAOZ,IAAQY,EAAI,UAAU,QAAQ,KAAKA,EAAI,OAAOZ,CAAK,CAAC,IACzD;EAEF,IAAIA,KAASY,EAAI,QAAQ;EAEzB,IAAMF,IAAQV,GACVlB,IAAQ,IACRiB,IAAQ,GACRkB,IAAO,IACPC,IAAY;EAChB,OAAOlB,IAAQY,EAAI,QAAQ,KAAS;GAClC,IAAMV,IAAOU,EAAI,OAAOZ,CAAK;GAC7B,IAAIlB,GACF,AAAIoB,MAAS,OAAM,MACVA,MAASpB,MAAO,IAAQ;QAGnC,IAAIoB,MAAS,QAAOA,MAAS,KAC3B,IAAQA;QAGV,IAAIA,MAAS,OAAOU,EAAI,OAAOZ,IAAQ,CAAC,MAAM,KAAK;IACjD,IAAMa,IAAQD,EAAI,QAAQ,MAAMZ,IAAQ,CAAC;IACzC,IAAIa,MAAU,IAAI,OAAO;IACzB,IAAQA,IAAQ;GAElB,OACA,IAAIX,MAAS,OAAOA,MAAS,KAAK;QAC7B,IAAIA,MAAS,OAAOA,MAAS,KAAK,IAAQ,KAAK,IAAI,GAAGH,IAAQ,CAAC;QAC/D,IAAIA,MAAU,GAAG;IACpB,IAAIG,MAAS,KAAK;KAChB,IAAOF;KACP;IACF;IACA,IAAIE,MAAS,KAAK;KAChB,IAAYF;KACZ;IACF;IACA,IAAIE,MAAS,KAAK,OAAO;GAC3B;EACF;EACA,IAAIpB,GAAO,OAAO;EAElB,IAAMe,IAAUe,EAAI,MAAMF,GAAOO,MAAS,KAAYC,IAAPD,CAAgB,CAAC,CAAC,KAAK;EACtE,IAAIA,MAAS,IAAI;GACf,IAAME,IAAMV,EAAaG,GAAKK,GAAML,EAAI,MAAM;GAE9C,IADIO,MAAQ,MACR,CAACL,EAAcjB,GAASe,EAAI,MAAMK,IAAO,GAAGE,CAAG,GAAGf,CAAK,GACzD,OAAO;GAET,IAAQe,IAAM;EAEhB,OACA,IAAID,MAAc,IAAI;GACpB,IACE,CAACrB,EAAQ,WAAW,GAAG,KACvB,CAACnB,EAA0B,IAAIiB,EAAWE,CAAO,CAAC,GAElD,OAAO;GAET,IAAQqB,IAAY;EAEtB,OACA;OAAIrB,MAAY,IAAI,OAAO;GAC3B;EAD2B;CAE7B;CACA,OAAO;AACT;AAEA,SAASuB,EACP,GACA,GACoB;CAEpB,IADI,CAAChB,KAAS,CAACQ,EAAI,KAAK,KAAKrC,EAAW,KAAKqC,CAAG,KAC5C,CAACG,EAAmBH,GAAKR,CAAK,GAAG;CACrC,IAAMiB,IAAOT,EAAI,QAAQpC,IAAU,GAAO,MACxCG,EAAoBE,CAAS,IAAIe,IAAQ,MAC3C;CACA,OAAOyB,EAAK,KAAK,IAAIA,IAAO,KAAA;AAC9B;AAEA,SAASC,EAAkB,GAAyC;CAClE,IAAMC,IAAkB,CAAC,GACrBC,IAAS,IAEPC,UAAoB;EACxB,IAAMC,IAAOF,EAAO,QAAQ,QAAQ,GAAG,CAAC,CAAC,KAAK;EAE9C,AADIE,KAAMH,EAAM,KAAKG,CAAI,GACzB,IAAS;CACX,GAEMC,KAAS,MAA4B;EACzC,IAAIlC,EAAK,SAAS,QAAQ;GACxB,KAAUA,EAAK;GACf;EACF;EACA,IAAIA,EAAK,SAAS,WAAW;EAC7B,IAAMmC,IAAMnC,EAAK,QAAQ,YAAY;EACrC,IAAImC,MAAQ,MACV,EAAM;OAGR,IAAIA,MAAQ,SAASA,MAAQ,OAAOA,MAAQ,QAAQA,MAAQ,MAAM;GAChE,EAAM;GACN,KAAK,IAAMC,KAASpC,EAAK,UAAU,EAAMoC,CAAK;GAC9C,EAAM;EAER,OACA,KAAK,IAAMA,KAASpC,EAAK,UAAU,EAAMoC,CAAK;CAChD;CAEA,KAAK,IAAMpC,KAAQC,GAAO,EAAMD,CAAI;CAEpC,OADAgC,EAAM,GACCF;AACT;AAEA,SAASO,EAAqB,GAAe,GAA6B;CACxE,IAAMP,IAAQD,EAAkB7B,EAAK,QAAQ;CAC7C,IAAI8B,EAAM,WAAW,GAAG,OAAO,CAAC;CAEhC,IAAMQ,IAAS9C,EAAeQ,CAAI,GAC5BN,IAAgC,CAAC;CACvC,KAAK,IAAMG,KAAQ;EAAC;EAAK;EAAK;EAAa;CAAO,GAChD,AAAIyC,EAAOzC,OAAU,KAAA,MAAW,EAAMA,KAAQyC,EAAOzC;CAKvD,OAHIH,EAAM,MAAM,KAAA,MAAW,EAAM,IAAI,MACjCA,EAAM,MAAM,KAAA,MAAW,EAAM,IAAI,MAE9B,CACL;EACE,MAAM;EACN;EACA,KAAK;EACL;EACA,UAAUoC,EAAM,KAAK,GAAM,OAAW;GACpC,MAAM;GACN,KAAK,GAAGvC,EAAI,GAAGgB;GACf,KAAK;GACL,OAAO;IACL,GAAGb,EAAM;IACT,IAAIa,MAAU,IAAI,QAAQ;GAC5B;GACA,UAAU,CACR;IACE,MAAM;IACN,KAAK,GAAGhB,EAAI,GAAGgB,EAAM;IACrB,OAAO0B;GACT,CACF;EACF,EAAE;CACJ,CACF;AACF;AAEA,SAASM,EACP,GACA,IAAO,IACP,GACgB;CAChB,IAAMC,IAAyB,CAAC;CAyChC,OAxCAvC,EAAM,SAAS,GAAM,MAAU;;EAC7B,IAAMV,IAAMmD,IAAO,GAAGA,EAAK,GAAGnC,MAAU,OAAOA,CAAK;EACpD,IAAIP,EAAK,SAAS,QAAQ;GACxB,AAAIA,EAAK,MAAM,KAAK,MAAM,MACxBwC,EAAO,KAAK;IAAE,MAAM;IAAQ;IAAK,OAAOxC,EAAK;GAAM,CAAC;GAEtD;EACF;EACA,IAAIA,EAAK,SAAS,WAAW;EAC7B,IAAMmC,IAAMnC,EAAK,QAAQ,YAAY;EACrC,IAAImC,MAAQ,iBACV,EAAO,KAAK,GAAGE,EAAqBrC,GAAMT,CAAG,CAAC;OAGhD,IAAI4C,MAAQ,SAAS;GACnB,IAAMhB,IAAMQ,EAAmB5B,EAAQC,EAAK,QAAQ,GAAGW,CAAK;GAC5D,AAAIQ,KACFqB,EAAO,KAAK;IACV,MAAM;IACN;IACA,KAAK;IACL,OAAO,CAAC;IACR,UAAU,CAAC;KAAE,MAAM;KAAQ,KAAK,GAAGjD,EAAI;KAAO,OAAO4B;IAAI,CAAC;GAC5D,CAAC;EAGL,OACA,AAAItC,EAAa,IAAIsD,CAAG,MACnBzD,EAAa,IAAIyD,CAAG,IAIzBK,EAAO,KAAK;GACV,MAAM;GACN;GACA,MAAA,IAAK7D,EAAcwD,OAAA,OAAQA,IAARM;GACnB,OAAOjD,EAAeQ,CAAI;GAC1B,UAAUuC,EAAcvC,EAAK,UAAUT,GAAKoB,CAAK;EACnD,CAAC,IATC6B,EAAO,KAAK,GAAGD,EAAcvC,EAAK,UAAUT,GAAKoB,CAAK,CAAC;CAU3D,CAAC,GACM6B;AACT;AAEA,SAASG,EAAS,GAAsC;;CACtD,IAAME,KAAA,IAAKjD,EAAQ,eAAA,OAAA,KAAA,IAAAgD,EAAY;CAC/B,OAAO,OAAOC,KAAO,YAAYA,MAAO,KAAK,IAAIA,MAAO,KAAA;AAC1D;AAEA,SAASC,EAAW,GAAoD;;CACtE,IAAME,IAAM/C,EAAM,MACf,MACCD,EAAK,SAAS,aAAaA,EAAK,IAAI,YAAY,MAAM,KAC1D,GACM6C,IAAAG,KAAA,SAAA,IAAKA,EAAK,UAAA,OAAA,KAAA,IAAAD,EAAO;CACvB,OAAO,OAAOF,KAAO,YAAYA,MAAO,KAAK,IAAIA,MAAO,KAAA;AAC1D;AAGA,SAAgBI,EAAY,GAA6B;CACvD,IAAMC,IAAOC,EAASH,GAAK,EAAE,UAAU,GAAK,CAAC,GACvCI,IAAaF,EAAK,SAAS,MAC9B,MACClD,EAAK,SAAS,aAAaA,EAAK,QAAQ,YAAY,MAAM,KAC9D;CACA,OAAOoD,IACHb,EAAc,CAACa,CAAU,GAAG,IAAIT,EAASS,CAAU,CAAC,IACpDb,EAAcW,EAAK,QAAQ;AACjC;AAEA,SAASG,EACP,GACwB;CACxB,IAAMzB,IAA+B,CAAC;CACtC,IAAI,CAAClC,KAAS,OAAOA,KAAU,UAAU,OAAOkC;CAChD,KAAK,IAAMrC,KAAO,OAAO,KAAKG,CAAK,GAAG;EACpC,IAAMG,IAAOP,EAAcC,CAAG;EAC9B,IAAI,CAACM,GAAM;EACX,IAAMV,IAAQ,OAAOO,EAAMH,EAAI;EAC/B,AAAIM,MAAS,UAAUA,MAAS,eAC1BV,EAAM,WAAW,GAAG,MAAG,EAAKU,KAAQV,KAG1C,EAAKU,KAAQV;CACf;CACA,OAAOyC;AACT;AAEA,SAAS0B,EAAU,GAAwC;CACzD,IAAInE,IAAQ;CACZ,IAAI,CAAC,MAAM,QAAQc,CAAK,GAAG,OAAOd;CAClC,KAAK,IAAMa,KAAQC,GACjB,AAAID,EAAK,SAAS,SAAQ,KAASA,EAAK,QAC/BA,EAAK,SAAS,cAAW,KAASsD,EAAUtD,EAAK,QAAQ;CAEpE,OAAOb;AACT;AAEA,SAASoE,EACP,GACA,IAAO,IACP,GACgB;CAChB,IAAMf,IAAyB,CAAC;CAqChC,OApCK,MAAM,QAAQvC,CAAK,KACxBA,EAAM,SAAS,GAAM,MAAU;;EAC7B,IAAMV,IAAMmD,IAAO,GAAGA,EAAK,GAAGnC,MAAU,OAAOA,CAAK;EACpD,IAAIP,EAAK,SAAS,QAAQ;GACxB,EAAO,KAAK;IAAE,MAAM;IAAQ;IAAK,OAAOA,EAAK;GAAM,CAAC;GACpD;EACF;EACA,IAAIA,EAAK,SAAS,aAAa,OAAOA,EAAK,OAAQ,UAAU;EAC7D,IAAMyD,IAAW,MAAM,QAAQzD,EAAK,QAAQ,IAAIA,EAAK,WAAW,CAAC,GAC3DmC,IAAMnC,EAAK,IAAI,YAAY;EACjC,IAAImC,MAAQ,SAAS;GACnB,IAAMhB,IAAMQ,EAAmB2B,EAAUG,CAAQ,GAAG9C,CAAK;GACzD,AAAIQ,KACFqB,EAAO,KAAK;IACV,MAAM;IACN;IACA,KAAK;IACL,OAAO,CAAC;IACR,UAAU,CAAC;KAAE,MAAM;KAAQ,KAAK,GAAGjD,EAAI;KAAO,OAAO4B;IAAI,CAAC;GAC5D,CAAC;EAGL,OACA,AAAItC,EAAa,IAAIsD,CAAG,MACnBzD,EAAa,IAAIyD,CAAG,IAIzBK,EAAO,KAAK;GACV,MAAM;GACN;GACA,MAAA,IAAK7D,EAAcwD,OAAA,OAAQA,IAARqB;GACnB,OAAOH,EAAoBrD,EAAK,KAAK;GACrC,UAAUuD,EAAmBE,GAAUlE,GAAKoB,CAAK;EACnD,CAAC,IATC6B,EAAO,KAAK,GAAGe,EAAmBE,GAAUlE,GAAKoB,CAAK,CAAC;CAU3D,CAAC,GACM6B;AACT;AAQA,SAAgBkB,EACd,GACgB;CAEhB,OAAOH,EAAmBtD,GAAO,IADnB,MAAM,QAAQA,CAAK,IAAI6C,EAAW7C,CAAK,IAAI,KAAA,CACf;AAC5C;;AC5oBA,IAAI0D,GACAC,IAAqD,MACrDC,IAA0B,QAAQ,QAAQ,GAC1CC,IAAU;AAEd,SAASC,IAAuB;CAC9B,OACE,OAAO,SAAW,OAClB,OAAO,OAAO,cAAe,cAC7B,OAAO,WAAW,8BAA8B,CAAC,CAAC;AAEtD;AAEA,SAASC,EAAU,GAA0C;CAG3D,OAFIC,MAAU,UAAWA,MAAU,UAAUF,EAAY,IAAW,SAChEE,MAAU,WAAiB,YACxB;AACT;AAEA,SAAeC,IAAA;;;;C,OAAmC,IAAAzF,EAAA,aAAA;EAOhD,OANKkF,MACH,IAAiB,OAAO,UAAU,CAAC,MAAM,MAAW;;GAElD,QAAA,IADaU,EAAoC,YAAA,OAAWA,IAAXD;EAEnD,CAAC,IAEIT;CACT,CAAA,G;;AAEA,SAAeW,EAAW,GAAiB,GAAA;;;;C,OAAjB,IAAA7F,EAAA,WAAA,GAAiB,GAAiD;EAC1F,CAAImF,MAAqB,QAAQA,MAAqBK,OACtD,MAAMO,EAAI,WAAW;GACnB,aAAa;GACb,eAAe;GACf,YAAY;GACZ,OAAOR,EAAUC,CAAK;GACtB,YAAY;EACd,CAAC,GACD,IAAmBA;CACrB,CAAA,G;;AAEA,SAASQ,EAAe,GAA0B;CAChD,OAAO,gIAAgI,KACrIC,CACF,KAAK,WAAW,KAAKA,CAAO;AAC9B;AAGA,SAAgBC,EAAqB,GAAwB;CAC3D,IAAMD,IAAUE,aAAiB,QAC7BA,EAAM,UACN,OAAOA,KAAU,WACfA,IACA;CAIN,OAHIH,EAAeC,CAAO,IACjB,iGAEFA;AACT;AAGA,SAAgBG,IAAgC;CAC9C,OAAO,eAAe,EAAEf;AAC1B;AAMA,SAAsBgB,EACpB,GAAA;;;;C,OACA,IAAArG,EAAA,WAAA,GAAA,IAAgC,CAAC,GACH;EAC9B,IAAI,OAAO,SAAW,OAAe,OAAO,YAAc,KACxD,OAAO;GAAE,OAAO,CAAC;GAAG,OAAO;EAA0C;EAEvE,IAAI,CAAC6D,EAAO,KAAK,GACf,OAAO;GAAE,OAAO,CAAC;GAAG,OAAO;EAA2B;EAGxD,IAAM0C,IAAA,WAAA;GAAgD,IAAAC,IAAAxG,EAAA,aAAA;IACpD,IAAI;;KACF,IAAM+F,IAAM,MAAMN,EAAY;KAC9B,MAAMI,EAAWE,GAAKW,EAAQ,KAAK;KACnC,IAAMtC,KAAA,IAAKsC,EAAQ,OAAA,OAAMN,EAAsB,IAA5BK,GACb,EAAE,WAAQ,MAAMV,EAAI,OAAO3B,GAAIP,CAAM;KAC3C,OAAO;MAAE;MAAK,OAAOW,EAAYD,CAAG;KAAE;IACxC,SAAS4B,GAAO;KACd,OAAO;MAAE,OAAO,CAAC;MAAG,OAAOD,EAAqBC,CAAK;KAAE;IACzD;GACF,CAAA;;;;E,KAEMpC,IAASqB,EAAM,KAAKmB,GAAKA,CAAG;EAElC,OADA,IAAQxC,EAAO,YAAY,KAAA,CAAS,GAC7BA;CACT,CAAA,G;;AAEA,SAAgB4C,IAA4B;CAI1C,AAHA,IAAiB,KAAA,GACjB,IAAmB,MACnB,IAAQ,QAAQ,QAAQ,GACxB,IAAU;AACZ"}
|