@diplodoc/mermaid-extension 1.1.1 → 1.1.2
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/package.json +10 -3
- package/plugin/index.js +5 -1
- package/plugin/index.js.map +2 -2
- package/plugin/transform.d.ts +1 -1
- package/react/index.js +27 -18
- package/react/index.js.map +2 -2
- package/runtime/index.js +1 -1
- package/runtime/index.js.map +2 -2
- package/runtime/zoom-menu.d.ts +0 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@diplodoc/mermaid-extension",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Mermaid plugin for Diplodoc transformer and builder",
|
|
5
5
|
"main": "plugin/index.js",
|
|
6
6
|
"types": "plugin/index.d.ts",
|
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
"build": "run-p build:*",
|
|
16
16
|
"build:js": "./esbuild/build.js",
|
|
17
17
|
"build:declarations": "tsc --emitDeclarationOnly --outDir .",
|
|
18
|
-
"
|
|
18
|
+
"prepublish": "npm run build",
|
|
19
|
+
"lint": "eslint .",
|
|
20
|
+
"lint:fix": "eslint --fix .",
|
|
19
21
|
"test": "jest"
|
|
20
22
|
},
|
|
21
23
|
"keywords": [
|
|
@@ -38,20 +40,25 @@
|
|
|
38
40
|
}
|
|
39
41
|
},
|
|
40
42
|
"devDependencies": {
|
|
41
|
-
"@
|
|
43
|
+
"@diplodoc/eslint-config": "^1.0.14",
|
|
44
|
+
"@diplodoc/prettier-config": "^1.0.0",
|
|
45
|
+
"@diplodoc/tsconfig": "^1.0.2",
|
|
42
46
|
"@types/d3": "^7.4.0",
|
|
43
47
|
"@types/markdown-it": "^12.2.3",
|
|
44
48
|
"@types/node": "^20.3.2",
|
|
45
49
|
"@types/react": "^18.0.35",
|
|
46
50
|
"esbuild": "^0.17.12",
|
|
47
51
|
"esbuild-inline-sass": "^0.4.1",
|
|
52
|
+
"eslint": "^8.51.0",
|
|
48
53
|
"jest": "^29.5.0",
|
|
49
54
|
"markdown-it": "^13.0.1",
|
|
50
55
|
"npm-run-all": "^4.1.5",
|
|
56
|
+
"prettier": "^3.0.3",
|
|
51
57
|
"react": "^18.2.0",
|
|
52
58
|
"typescript": "^5.0.2"
|
|
53
59
|
},
|
|
54
60
|
"dependencies": {
|
|
61
|
+
"@diplodoc/transform": "^4.2.1",
|
|
55
62
|
"@gravity-ui/icons": "^2.3.0",
|
|
56
63
|
"mermaid": "^10.0.2",
|
|
57
64
|
"ts-dedent": "^2.2.0"
|
package/plugin/index.js
CHANGED
|
@@ -94,7 +94,11 @@ var registerTransforms = (md, {
|
|
|
94
94
|
}
|
|
95
95
|
};
|
|
96
96
|
function transform(options = {}) {
|
|
97
|
-
const {
|
|
97
|
+
const {
|
|
98
|
+
runtime = "_assets/mermaid-extension.js",
|
|
99
|
+
classes = "yfm-mermaid",
|
|
100
|
+
bundle = true
|
|
101
|
+
} = options;
|
|
98
102
|
const plugin = function(md, { output = "." }) {
|
|
99
103
|
registerTransforms(md, {
|
|
100
104
|
classes,
|
package/plugin/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/plugin/index.ts", "../src/plugin/transform.ts"],
|
|
4
|
-
"sourcesContent": ["export {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,yBAAuB;
|
|
4
|
+
"sourcesContent": ["export {transform} from './transform';\n", "import MarkdownIt from 'markdown-it';\nimport type {\n MarkdownItPluginCb,\n MarkdownItPluginOpts,\n} from '@diplodoc/transform/lib/plugins/typings';\nimport type ParserCore from 'markdown-it/lib/parser_core';\nimport type Token from 'markdown-it/lib/token';\n\nexport type PluginOptions = {\n runtime: string;\n classes: string;\n bundle: boolean;\n};\n\nfunction isMermaidBlock(token: Token) {\n return token.type === 'fence' && token.info.match(/^\\s*mermaid(\\s*|$)/);\n}\n\nfunction hidden<B extends Record<string | symbol, unknown>, F extends string | symbol, V>(\n box: B,\n field: F,\n value: V,\n) {\n if (!(field in box)) {\n Object.defineProperty(box, field, {\n enumerable: false,\n value: value,\n });\n }\n\n return box as B & {[P in F]: V};\n}\n\nfunction copy(from: string, to: string) {\n const {mkdirSync, copyFileSync} = dynrequire('node:fs');\n const {dirname} = dynrequire('node:path');\n\n mkdirSync(dirname(to), {recursive: true});\n copyFileSync(from, to);\n}\n\n/*\n * Runtime require hidden for builders.\n * Used for nodejs api\n */\nfunction dynrequire(module: string) {\n return eval(`require('${module}')`);\n}\n\nconst registerTransforms = (\n md: MarkdownIt,\n {\n classes,\n runtime,\n bundle,\n output,\n updateTokens,\n }: PluginOptions & {\n output: string;\n updateTokens: boolean;\n },\n) => {\n const applyTransforms: ParserCore.RuleCore = ({tokens, env}) => {\n hidden(env, 'bundled', new Set<string>());\n\n const blocks = tokens.filter(isMermaidBlock);\n\n if (updateTokens && blocks.length) {\n blocks.forEach((token) => {\n token.type = 'mermaid';\n token.attrSet('class', `mermaid ${classes}`);\n });\n }\n\n if (blocks.length) {\n env.meta = env.meta || {};\n env.meta.script = env.meta.script || [];\n env.meta.script.push(runtime);\n\n if (bundle) {\n const {join} = dynrequire('node:path');\n const file = join(PACKAGE, 'runtime');\n if (!env.bundled.has(file)) {\n env.bundled.add(file);\n\n copy(require.resolve(file), join(output, runtime));\n }\n }\n }\n };\n\n try {\n md.core.ruler.after('fence', 'mermaid', applyTransforms);\n } catch (e) {\n md.core.ruler.push('mermaid', applyTransforms);\n }\n};\n\ntype InputOptions = MarkdownItPluginOpts & {\n destRoot: string;\n};\n\nexport function transform(options: Partial<PluginOptions> = {}) {\n const {\n runtime = '_assets/mermaid-extension.js',\n classes = 'yfm-mermaid',\n bundle = true,\n } = options;\n\n const plugin: MarkdownItPluginCb<{output: string}> = function (md: MarkdownIt, {output = '.'}) {\n registerTransforms(md, {\n classes,\n runtime,\n bundle,\n output,\n updateTokens: true,\n });\n\n md.renderer.rules.mermaid = (tokens, idx) => {\n const token = tokens[idx];\n const code = encodeURIComponent(token.content.trim());\n\n return `<div class=\"mermaid\" data-content=\"${code}\"></div>`;\n };\n };\n\n Object.assign(plugin, {\n collect(input: string, {destRoot}: InputOptions) {\n const md = new MarkdownIt().use((md) => {\n registerTransforms(md, {\n classes,\n runtime,\n bundle,\n output: destRoot,\n updateTokens: false,\n });\n });\n\n md.parse(input, {});\n },\n });\n\n return plugin;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["MarkdownIt", "md"]
|
|
7
7
|
}
|
package/plugin/transform.d.ts
CHANGED
package/react/index.js
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
// src/react/index.ts
|
|
2
2
|
import { useEffect, useState, useCallback } from "react";
|
|
3
3
|
function pick(object, props) {
|
|
4
|
-
return Object.keys(object).reduce(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
return Object.keys(object).reduce(
|
|
5
|
+
(acc, key) => {
|
|
6
|
+
if (props.includes(key)) {
|
|
7
|
+
acc[key] = object[key];
|
|
8
|
+
}
|
|
9
|
+
return acc;
|
|
10
|
+
},
|
|
11
|
+
{}
|
|
12
|
+
);
|
|
10
13
|
}
|
|
11
14
|
function omit(object, props) {
|
|
12
|
-
return Object.keys(object).reduce(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
return Object.keys(object).reduce(
|
|
16
|
+
(acc, key) => {
|
|
17
|
+
if (!props.includes(key)) {
|
|
18
|
+
acc[key] = object[key];
|
|
19
|
+
}
|
|
20
|
+
return acc;
|
|
21
|
+
},
|
|
22
|
+
{}
|
|
23
|
+
);
|
|
18
24
|
}
|
|
19
25
|
function MermaidRuntime(props) {
|
|
20
26
|
const renderMermaid = useMermaid();
|
|
@@ -28,12 +34,15 @@ function MermaidRuntime(props) {
|
|
|
28
34
|
}
|
|
29
35
|
function useMermaid() {
|
|
30
36
|
const [mermaid, setMermaid] = useState(null);
|
|
31
|
-
const render = useCallback(
|
|
32
|
-
|
|
33
|
-
mermaid
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
const render = useCallback(
|
|
38
|
+
async (config, options) => {
|
|
39
|
+
if (mermaid) {
|
|
40
|
+
mermaid.initialize(config);
|
|
41
|
+
return mermaid.run(options);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
[mermaid]
|
|
45
|
+
);
|
|
37
46
|
useEffect(() => {
|
|
38
47
|
(window.mermaidJsonp = window.mermaidJsonp || []).push(setMermaid);
|
|
39
48
|
return () => {
|
package/react/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/react/index.ts"],
|
|
4
|
-
"sourcesContent": ["import type {
|
|
5
|
-
"mappings": ";AACA,
|
|
4
|
+
"sourcesContent": ["import type {InitConfig, RunOptions} from '../types';\nimport {useEffect, useState, useCallback} from 'react';\n\nexport type RuntimeOptions = {\n onError?: (error: any) => void;\n};\n\nfunction pick<\n O extends Record<string, any>,\n P extends string,\n R extends {\n [K in P]: O[K];\n },\n>(object: O, props: readonly P[]): R {\n return Object.keys(object).reduce(\n (acc, key) => {\n if ((props as readonly string[]).includes(key)) {\n acc[key] = object[key];\n }\n\n return acc;\n },\n {} as Record<string, any>,\n ) as R;\n}\n\nfunction omit<\n O extends Record<string, any>,\n P extends string,\n R extends {\n [K in keyof Omit<O, P>]: O[K];\n },\n>(object: O, props: readonly P[]): R {\n return Object.keys(object).reduce(\n (acc, key) => {\n if (!(props as readonly string[]).includes(key)) {\n acc[key] = object[key];\n }\n\n return acc;\n },\n {} as Record<string, any>,\n ) as R;\n}\n\nexport function MermaidRuntime(props: InitConfig & RunOptions & RuntimeOptions) {\n const renderMermaid = useMermaid();\n const config = omit(props, ['querySelector', 'nodes', 'onError']);\n const options = pick(props, ['querySelector', 'nodes']);\n\n useEffect(() => {\n renderMermaid(config, options).catch(props.onError || (() => {}));\n });\n\n return null;\n}\n\nexport function useMermaid() {\n const [mermaid, setMermaid] = useState<Parameters<Callback>[0] | null>(null);\n const render = useCallback(\n async (config: InitConfig, options?: RunOptions) => {\n if (mermaid) {\n mermaid.initialize(config);\n return mermaid.run(options);\n }\n },\n [mermaid],\n );\n\n useEffect(() => {\n (window.mermaidJsonp = window.mermaidJsonp || []).push(setMermaid);\n\n return () => {\n const index = window.mermaidJsonp.indexOf(setMermaid);\n if (index > -1) {\n window.mermaidJsonp.splice(index, 1);\n }\n };\n }, []);\n\n return render;\n}\n"],
|
|
5
|
+
"mappings": ";AACA,SAAQ,WAAW,UAAU,mBAAkB;AAM/C,SAAS,KAMP,QAAW,OAAwB;AACjC,SAAO,OAAO,KAAK,MAAM,EAAE;AAAA,IACvB,CAAC,KAAK,QAAQ;AACV,UAAK,MAA4B,SAAS,GAAG,GAAG;AAC5C,YAAI,GAAG,IAAI,OAAO,GAAG;AAAA,MACzB;AAEA,aAAO;AAAA,IACX;AAAA,IACA,CAAC;AAAA,EACL;AACJ;AAEA,SAAS,KAMP,QAAW,OAAwB;AACjC,SAAO,OAAO,KAAK,MAAM,EAAE;AAAA,IACvB,CAAC,KAAK,QAAQ;AACV,UAAI,CAAE,MAA4B,SAAS,GAAG,GAAG;AAC7C,YAAI,GAAG,IAAI,OAAO,GAAG;AAAA,MACzB;AAEA,aAAO;AAAA,IACX;AAAA,IACA,CAAC;AAAA,EACL;AACJ;AAEO,SAAS,eAAe,OAAiD;AAC5E,QAAM,gBAAgB,WAAW;AACjC,QAAM,SAAS,KAAK,OAAO,CAAC,iBAAiB,SAAS,SAAS,CAAC;AAChE,QAAM,UAAU,KAAK,OAAO,CAAC,iBAAiB,OAAO,CAAC;AAEtD,YAAU,MAAM;AACZ,kBAAc,QAAQ,OAAO,EAAE,MAAM,MAAM,YAAY,MAAM;AAAA,IAAC,EAAE;AAAA,EACpE,CAAC;AAED,SAAO;AACX;AAEO,SAAS,aAAa;AACzB,QAAM,CAAC,SAAS,UAAU,IAAI,SAAyC,IAAI;AAC3E,QAAM,SAAS;AAAA,IACX,OAAO,QAAoB,YAAyB;AAChD,UAAI,SAAS;AACT,gBAAQ,WAAW,MAAM;AACzB,eAAO,QAAQ,IAAI,OAAO;AAAA,MAC9B;AAAA,IACJ;AAAA,IACA,CAAC,OAAO;AAAA,EACZ;AAEA,YAAU,MAAM;AACZ,KAAC,OAAO,eAAe,OAAO,gBAAgB,CAAC,GAAG,KAAK,UAAU;AAEjE,WAAO,MAAM;AACT,YAAM,QAAQ,OAAO,aAAa,QAAQ,UAAU;AACpD,UAAI,QAAQ,IAAI;AACZ,eAAO,aAAa,OAAO,OAAO,CAAC;AAAA,MACvC;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,CAAC;AAEL,SAAO;AACX;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/runtime/index.js
CHANGED
|
@@ -1562,7 +1562,7 @@ ${i.themeCSS}`),i.fontFamily!==void 0&&(b+=`
|
|
|
1562
1562
|
`)})}g[0]=g[0].replace(/^\r?\n/,"");var E=g[0];return o.forEach(function(w,S){var O=E.match(/(?:^|\n)( *)$/),B=O?O[1]:"",P=w;typeof w=="string"&&w.includes(`
|
|
1563
1563
|
`)&&(P=String(w).split(`
|
|
1564
1564
|
`).map(function(R,G){return G===0?R:""+B+R}).join(`
|
|
1565
|
-
`)),E+=P+g[S+1]}),E}var r1t=bdn;lu();g1();Cm();var EPr=ia(Qf(),1),_Pr=ia(Dh(),1);var TPr=ia(V1(),1);Uo();var QOn=(i,o,h)=>{Ht.warn(i),WDt(i)?(h&&h(i.str,i.hash),o.push({...i,message:i.str,error:i})):(h&&h(i),i instanceof Error&&o.push({str:i.message,message:i.message,hash:i.name,error:i}))},fNe=async function(i={querySelector:".mermaid"}){try{await JOn(i)}catch(o){if(WDt(o)&&Ht.error(o.str),Z1.parseError&&Z1.parseError(o),!i.suppressErrors)throw Ht.error("Use the suppressErrors option to suppress these errors"),o}},JOn=async function({postRenderCallback:i,querySelector:o,nodes:h}={querySelector:".mermaid"}){let g=Mu.getConfig();Ht.debug(`${i?"":"No "}Callback function found`);let b;if(h)b=h;else if(o)b=document.querySelectorAll(o);else throw new Error("Nodes and querySelector are both undefined");Ht.debug(`Found ${b.length} diagrams`),g?.startOnLoad!==void 0&&(Ht.debug("Start On Load: "+g?.startOnLoad),Mu.updateSiteConfig({startOnLoad:g?.startOnLoad}));let x=new Ga.initIdGenerator(g.deterministicIds,g.deterministicIDSeed),E,w=[];for(let S of Array.from(b)){Ht.info("Rendering diagram: "+S.id);if(S.getAttribute("data-processed"))continue;S.setAttribute("data-processed","true");let O=`mermaid-${x.next()}`;E=S.innerHTML,E=r1t(Ga.entityDecode(E)).trim().replace(/<br\s*\/?>/gi,"<br/>");let B=Ga.detectInit(E);B&&Ht.debug("Detected early reinit: ",B);try{let{svg:P,bindFunctions:R}=await gNe(O,E,S);S.innerHTML=P,i&&await i(O),R&&R(S)}catch(P){QOn(P,w,Z1.parseError)}}if(w.length>0)throw w[0]},hNe=function(i){Mu.initialize(i)},tNn=async function(i,o,h){Ht.warn("mermaid.init is deprecated. Please use run instead."),i&&hNe(i);let g={postRenderCallback:h,querySelector:".mermaid"};typeof o=="string"?g.querySelector=o:o&&(o instanceof HTMLElement?g.nodes=[o]:g.nodes=o),await fNe(g)},eNn=async(i,{lazyLoad:o=!0}={})=>{Udt(...i),o===!1&&await PEe()},dNe=function(){if(Z1.startOnLoad){let{startOnLoad:i}=Mu.getConfig();i&&Z1.run().catch(o=>Ht.error("Mermaid failed to initialize",o))}};if(typeof document<"u"){window.addEventListener("load",dNe,!1)}var nNn=function(i){Z1.parseError=i},Tgt=[],mBt=!1,pNe=async()=>{if(!mBt){for(mBt=!0;Tgt.length>0;){let i=Tgt.shift();if(i)try{await i()}catch(o){Ht.error("Error executing queue",o)}}mBt=!1}},rNn=async(i,o)=>new Promise((h,g)=>{let b=()=>new Promise((x,E)=>{Mu.parse(i,o).then(w=>{x(w),h(w)},w=>{var S;Ht.error("Error parsing",w),(S=Z1.parseError)==null||S.call(Z1,w),E(w),g(w)})});Tgt.push(b),pNe().catch(g)}),gNe=(i,o,h)=>new Promise((g,b)=>{let x=()=>new Promise((E,w)=>{Mu.render(i,o,h).then(S=>{E(S),g(S)},S=>{var O;Ht.error("Error parsing",S),(O=Z1.parseError)==null||O.call(Z1,S),w(S),b(S)})});Tgt.push(x),pNe().catch(b)}),Z1={startOnLoad:!0,mermaidAPI:Mu,parse:rNn,render:gNe,init:tNn,run:fNe,registerExternalDiagrams:eNn,initialize:hNe,parseError:void 0,contentLoaded:dNe,setParseErrorHandler:nNn};Uo();Uo();var bNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5Zm0 1.5a5.725 5.725 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5Zm.75-7.75a.75.75 0 0 0-1.5 0V6H4.75a.75.75 0 0 0 0 1.5H6v1.25a.75.75 0 0 0 1.5 0V7.5h1.25a.75.75 0 0 0 0-1.5H7.5V4.75Z" clip-rule="evenodd"/></svg>';var mNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5Zm0 1.5a5.725 5.725 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5Zm-2-6.5a.75.75 0 0 0 0 1.5h4a.75.75 0 0 0 0-1.5h-4Z" clip-rule="evenodd"/></svg>';var vNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M11.823 9.295a.73.73 0 0 1-.552 1.205H4.729a.73.73 0 0 1-.552-1.205L7.2 5.786a1 1 0 0 1 .757-.347h.084a1 1 0 0 1 .757.347l3.024 3.509Z" clip-rule="evenodd"/></svg>';var wNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M4.177 6.705A.73.73 0 0 1 4.729 5.5h6.542a.73.73 0 0 1 .552 1.205L8.8 10.214a1 1 0 0 1-.757.347h-.084a1 1 0 0 1-.757-.347L4.177 6.705Z" clip-rule="evenodd"/></svg>';var yNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M9.295 4.177a.73.73 0 0 1 1.205.552v6.542a.73.73 0 0 1-1.205.552L5.786 8.8a1 1 0 0 1-.347-.757v-.084a1 1 0 0 1 .347-.757l3.509-3.024Z" clip-rule="evenodd"/></svg>';var xNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.705 11.823a.73.73 0 0 1-1.205-.552V4.729a.73.73 0 0 1 1.205-.552L10.214 7.2a1 1 0 0 1 .347.757v.084a1 1 0 0 1-.347.757l-3.509 3.024Z" clip-rule="evenodd"/></svg>';var kNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11ZM8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z" clip-rule="evenodd"/></svg>';var fNn=1,ENe=500,hNn="mermaid-zoom-menu-control",DY={up:["move up",vNe,["KeyW","w"],[0,0,1]],down:["move down",wNe,["KeyS","s"],[0,0,-1]],left:["move left",yNe,["KeyA","a"],[0,1,0]],right:["move right",xNe,["KeyD","d"],[0,-1,0]],zoomin:["zoom in",bNe,["KeyE","e"],[1,0,0]],zoomout:["zoom out",mNe,["KeyQ","q"],[-1,0,0]],reset:["reset",kNe,["KeyR","r"],r4]},dNn=()=>new Promise(i=>requestAnimationFrame(i)),pNn=(i,o)=>i.map((h,g)=>h+o[g]),Cgt=new WeakMap,_Ne=(i,o,h)=>{if(Cgt.has(h))return Cgt.get(h);let g=new Set,b=null,x=async()=>{for(;g.size;){let E=Date.now(),[w,S,O]=[0,0,0];for(let R of g){let G=DY[R][3];if(G===r4)try{await i.transition().call(h.transform,r4).end()}catch{}else[w,S,O]=pNn([w,S,O],G)}await dNn();let{k:B}=dW(o.node()),P=(Date.now()-E)/1e3;[w,S,O]=[w*P*fNn,S*P*ENe,O*P*ENe],(S||O)&&h.translateBy(i,S,O),w&&h.scaleTo(i,B+w)}};return Cgt.set(h,{add(E){g.add(E),b||(b=x().finally(()=>b=null))},delete(E){g.delete(E)}}),Cgt.get(h)},TNe=(i,o,h)=>{let g=_Ne(i,o,h),b=Object.keys(DY).reduce((w,S)=>{let B=DY[S][2][0];return w[B]=S,w},{}),x=w=>{if(w.altKey||w.ctrlKey||w.shiftKey||w.metaKey)return;let S=b[w.code];S&&(w.preventDefault(),g.add(S))},E=w=>{let S=b[w.code];S&&(w.preventDefault(),g.delete(S))};return document.addEventListener("keydown",x),document.addEventListener("keyup",E),()=>{document.removeEventListener("keydown",x),document.removeEventListener("keyup",E)}},CNe=(i,o,h,g)=>{let b=_Ne(o,h,g),x=document.createElement("div"),E=Object.keys(DY).map(P=>[P,...DY[P]]).reduce((P,[R,G,X])=>P+`
|
|
1565
|
+
`)),E+=P+g[S+1]}),E}var r1t=bdn;lu();g1();Cm();var EPr=ia(Qf(),1),_Pr=ia(Dh(),1);var TPr=ia(V1(),1);Uo();var QOn=(i,o,h)=>{Ht.warn(i),WDt(i)?(h&&h(i.str,i.hash),o.push({...i,message:i.str,error:i})):(h&&h(i),i instanceof Error&&o.push({str:i.message,message:i.message,hash:i.name,error:i}))},fNe=async function(i={querySelector:".mermaid"}){try{await JOn(i)}catch(o){if(WDt(o)&&Ht.error(o.str),Z1.parseError&&Z1.parseError(o),!i.suppressErrors)throw Ht.error("Use the suppressErrors option to suppress these errors"),o}},JOn=async function({postRenderCallback:i,querySelector:o,nodes:h}={querySelector:".mermaid"}){let g=Mu.getConfig();Ht.debug(`${i?"":"No "}Callback function found`);let b;if(h)b=h;else if(o)b=document.querySelectorAll(o);else throw new Error("Nodes and querySelector are both undefined");Ht.debug(`Found ${b.length} diagrams`),g?.startOnLoad!==void 0&&(Ht.debug("Start On Load: "+g?.startOnLoad),Mu.updateSiteConfig({startOnLoad:g?.startOnLoad}));let x=new Ga.initIdGenerator(g.deterministicIds,g.deterministicIDSeed),E,w=[];for(let S of Array.from(b)){Ht.info("Rendering diagram: "+S.id);if(S.getAttribute("data-processed"))continue;S.setAttribute("data-processed","true");let O=`mermaid-${x.next()}`;E=S.innerHTML,E=r1t(Ga.entityDecode(E)).trim().replace(/<br\s*\/?>/gi,"<br/>");let B=Ga.detectInit(E);B&&Ht.debug("Detected early reinit: ",B);try{let{svg:P,bindFunctions:R}=await gNe(O,E,S);S.innerHTML=P,i&&await i(O),R&&R(S)}catch(P){QOn(P,w,Z1.parseError)}}if(w.length>0)throw w[0]},hNe=function(i){Mu.initialize(i)},tNn=async function(i,o,h){Ht.warn("mermaid.init is deprecated. Please use run instead."),i&&hNe(i);let g={postRenderCallback:h,querySelector:".mermaid"};typeof o=="string"?g.querySelector=o:o&&(o instanceof HTMLElement?g.nodes=[o]:g.nodes=o),await fNe(g)},eNn=async(i,{lazyLoad:o=!0}={})=>{Udt(...i),o===!1&&await PEe()},dNe=function(){if(Z1.startOnLoad){let{startOnLoad:i}=Mu.getConfig();i&&Z1.run().catch(o=>Ht.error("Mermaid failed to initialize",o))}};if(typeof document<"u"){window.addEventListener("load",dNe,!1)}var nNn=function(i){Z1.parseError=i},Tgt=[],mBt=!1,pNe=async()=>{if(!mBt){for(mBt=!0;Tgt.length>0;){let i=Tgt.shift();if(i)try{await i()}catch(o){Ht.error("Error executing queue",o)}}mBt=!1}},rNn=async(i,o)=>new Promise((h,g)=>{let b=()=>new Promise((x,E)=>{Mu.parse(i,o).then(w=>{x(w),h(w)},w=>{var S;Ht.error("Error parsing",w),(S=Z1.parseError)==null||S.call(Z1,w),E(w),g(w)})});Tgt.push(b),pNe().catch(g)}),gNe=(i,o,h)=>new Promise((g,b)=>{let x=()=>new Promise((E,w)=>{Mu.render(i,o,h).then(S=>{E(S),g(S)},S=>{var O;Ht.error("Error parsing",S),(O=Z1.parseError)==null||O.call(Z1,S),w(S),b(S)})});Tgt.push(x),pNe().catch(b)}),Z1={startOnLoad:!0,mermaidAPI:Mu,parse:rNn,render:gNe,init:tNn,run:fNe,registerExternalDiagrams:eNn,initialize:hNe,parseError:void 0,contentLoaded:dNe,setParseErrorHandler:nNn};Uo();Uo();var bNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5Zm0 1.5a5.725 5.725 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5Zm.75-7.75a.75.75 0 0 0-1.5 0V6H4.75a.75.75 0 0 0 0 1.5H6v1.25a.75.75 0 0 0 1.5 0V7.5h1.25a.75.75 0 0 0 0-1.5H7.5V4.75Z" clip-rule="evenodd"/></svg>';var mNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.75 11a4.25 4.25 0 1 0 0-8.5 4.25 4.25 0 0 0 0 8.5Zm0 1.5a5.725 5.725 0 0 0 3.501-1.188l2.719 2.718a.75.75 0 1 0 1.06-1.06l-2.718-2.719A5.75 5.75 0 1 0 6.75 12.5Zm-2-6.5a.75.75 0 0 0 0 1.5h4a.75.75 0 0 0 0-1.5h-4Z" clip-rule="evenodd"/></svg>';var vNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M11.823 9.295a.73.73 0 0 1-.552 1.205H4.729a.73.73 0 0 1-.552-1.205L7.2 5.786a1 1 0 0 1 .757-.347h.084a1 1 0 0 1 .757.347l3.024 3.509Z" clip-rule="evenodd"/></svg>';var wNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M4.177 6.705A.73.73 0 0 1 4.729 5.5h6.542a.73.73 0 0 1 .552 1.205L8.8 10.214a1 1 0 0 1-.757.347h-.084a1 1 0 0 1-.757-.347L4.177 6.705Z" clip-rule="evenodd"/></svg>';var yNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M9.295 4.177a.73.73 0 0 1 1.205.552v6.542a.73.73 0 0 1-1.205.552L5.786 8.8a1 1 0 0 1-.347-.757v-.084a1 1 0 0 1 .347-.757l3.509-3.024Z" clip-rule="evenodd"/></svg>';var xNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M6.705 11.823a.73.73 0 0 1-1.205-.552V4.729a.73.73 0 0 1 1.205-.552L10.214 7.2a1 1 0 0 1 .347.757v.084a1 1 0 0 1-.347.757l-3.509 3.024Z" clip-rule="evenodd"/></svg>';var kNe='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11ZM8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14Z" clip-rule="evenodd"/></svg>';var fNn=1,ENe=500,hNn="mermaid-zoom-menu-control",DY={up:["move up",vNe,["KeyW","w"],[0,0,1]],down:["move down",wNe,["KeyS","s"],[0,0,-1]],left:["move left",yNe,["KeyA","a"],[0,1,0]],right:["move right",xNe,["KeyD","d"],[0,-1,0]],zoomin:["zoom in",bNe,["KeyE","e"],[1,0,0]],zoomout:["zoom out",mNe,["KeyQ","q"],[-1,0,0]],reset:["reset",kNe,["KeyR","r"],r4]},dNn=()=>new Promise(i=>requestAnimationFrame(i)),pNn=(i,o)=>i.map((h,g)=>h+o[g]),Cgt=new WeakMap,_Ne=(i,o,h)=>{if(Cgt.has(h))return Cgt.get(h);let g=new Set,b=null,x=async()=>{for(;g.size;){let E=Date.now(),[w,S,O]=[0,0,0];for(let R of g){let G=DY[R][3];if(G===r4)try{await i.transition().call(h.transform,r4).end()}catch{}else[w,S,O]=pNn([w,S,O],G)}await dNn();let{k:B}=dW(o.node()),P=(Date.now()-E)/1e3;[w,S,O]=[w*P*fNn,S*P*ENe,O*P*ENe],(S||O)&&h.translateBy(i,S,O),w&&h.scaleTo(i,B+w)}};return Cgt.set(h,{add(E){g.add(E),b||(b=x().finally(()=>{b=null}))},delete(E){g.delete(E)}}),Cgt.get(h)},TNe=(i,o,h)=>{let g=_Ne(i,o,h),b=Object.keys(DY).reduce((w,S)=>{let B=DY[S][2][0];return w[B]=S,w},{}),x=w=>{if(w.altKey||w.ctrlKey||w.shiftKey||w.metaKey)return;let S=b[w.code];S&&(w.preventDefault(),g.add(S))},E=w=>{let S=b[w.code];S&&(w.preventDefault(),g.delete(S))};return document.addEventListener("keydown",x),document.addEventListener("keyup",E),()=>{document.removeEventListener("keydown",x),document.removeEventListener("keyup",E)}},CNe=(i,o,h,g)=>{let b=_Ne(o,h,g),x=document.createElement("div"),E=Object.keys(DY).map(P=>[P,...DY[P]]).reduce((P,[R,G,X])=>P+`
|
|
1566
1566
|
<div class="${hNn}" title="${G}" data-action="${R}">
|
|
1567
1567
|
${X}
|
|
1568
1568
|
</div>`,"");x.innerHTML=`
|