@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diplodoc/mermaid-extension",
3
- "version": "1.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
- "prepublishOnly": "npm run build",
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
- "@doc-tools/transform": "^2.16.4",
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 { runtime = "_assets/mermaid-extension.js", classes = "yfm-mermaid", bundle = true } = options;
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,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/plugin/index.ts", "../src/plugin/transform.ts"],
4
- "sourcesContent": ["export { transform } from './transform';", "import MarkdownIt from 'markdown-it';\nimport type { MarkdownItPluginCb, MarkdownItPluginOpts } from '@doc-tools/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 = (md: MarkdownIt, {\n classes, runtime, bundle, output, updateTokens\n}: PluginOptions & {\n output: string,\n updateTokens: boolean\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 { runtime = '_assets/mermaid-extension.js', classes = 'yfm-mermaid', bundle = true } = 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}"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,yBAAuB;AAWvB,SAAS,eAAe,OAAc;AAClC,SAAO,MAAM,SAAS,WAAW,MAAM,KAAK,MAAM,oBAAoB;AAC1E;AAEA,SAAS,OACL,KACA,OACA,OACF;AACE,MAAI,EAAE,SAAS,MAAM;AACjB,WAAO,eAAe,KAAK,OAAO;AAAA,MAC9B,YAAY;AAAA,MACZ;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,SAAO;AACX;AAEA,SAAS,KAAK,MAAc,IAAY;AACpC,QAAM,EAAE,WAAW,aAAa,IAAI,WAAW,SAAS;AACxD,QAAM,EAAE,QAAQ,IAAI,WAAW,WAAW;AAE1C,YAAU,QAAQ,EAAE,GAAG,EAAE,WAAW,KAAK,CAAC;AAC1C,eAAa,MAAM,EAAE;AACzB;AAMA,SAAS,WAAW,QAAgB;AAChC,SAAO,KAAK,YAAa,UAAW;AACxC;AAEA,IAAM,qBAAqB,CAAC,IAAgB;AAAA,EACxC;AAAA,EAAS;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AACtC,MAGM;AACF,QAAM,kBAAuC,CAAC,EAAE,QAAQ,IAAI,MAAM;AAC9D,WAAO,KAAK,WAAW,oBAAI,IAAY,CAAC;AAExC,UAAM,SAAS,OAAO,OAAO,cAAc;AAE3C,QAAI,gBAAgB,OAAO,QAAQ;AAC/B,aAAO,QAAQ,CAAC,UAAU;AACtB,cAAM,OAAO;AACb,cAAM,QAAQ,SAAS,WAAY,SAAU;AAAA,MACjD,CAAC;AAAA,IACL;AAEA,QAAI,OAAO,QAAQ;AACf,UAAI,OAAO,IAAI,QAAQ,CAAC;AACxB,UAAI,KAAK,SAAS,IAAI,KAAK,UAAU,CAAC;AACtC,UAAI,KAAK,OAAO,KAAK,OAAO;AAE5B,UAAI,QAAQ;AACR,cAAM,EAAE,KAAK,IAAI,WAAW,WAAW;AACvC,cAAM,OAAO,KAAK,+BAAS,SAAS;AACpC,YAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,GAAG;AACxB,cAAI,QAAQ,IAAI,IAAI;AAEpB,eAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK,QAAQ,OAAO,CAAC;AAAA,QACrD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI;AACA,OAAG,KAAK,MAAM,MAAM,SAAS,WAAW,eAAe;AAAA,EAC3D,SAAS,GAAP;AACE,OAAG,KAAK,MAAM,KAAK,WAAW,eAAe;AAAA,EACjD;AACJ;AAMO,SAAS,UAAU,UAAkC,CAAC,GAAG;AAC5D,QAAM,EAAE,UAAU,gCAAgC,UAAU,eAAe,SAAS,KAAK,IAAI;AAE7F,QAAM,SAAiD,SAAS,IAAgB,EAAE,SAAS,IAAI,GAAG;AAC9F,uBAAmB,IAAI;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IAClB,CAAC;AAED,OAAG,SAAS,MAAM,UAAU,CAAC,QAAQ,QAAQ;AACzC,YAAM,QAAQ,OAAO,GAAG;AACxB,YAAM,OAAO,mBAAmB,MAAM,QAAQ,KAAK,CAAC;AAEpD,aAAO,sCAAuC;AAAA,IAClD;AAAA,EACJ;AAEA,SAAO,OAAO,QAAQ;AAAA,IAClB,QAAQ,OAAe,EAAE,SAAS,GAAiB;AAC/C,YAAM,KAAK,IAAI,mBAAAA,QAAW,EAAE,IAAI,CAACC,QAAO;AACpC,2BAAmBA,KAAI;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR,cAAc;AAAA,QAClB,CAAC;AAAA,MACL,CAAC;AAED,SAAG,MAAM,OAAO,CAAC,CAAC;AAAA,IACtB;AAAA,EACJ,CAAC;AAED,SAAO;AACX;",
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
  }
@@ -1,4 +1,4 @@
1
- import type { MarkdownItPluginCb } from '@doc-tools/transform/lib/plugins/typings';
1
+ import type { MarkdownItPluginCb } from '@diplodoc/transform/lib/plugins/typings';
2
2
  export type PluginOptions = {
3
3
  runtime: string;
4
4
  classes: string;
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((acc, key) => {
5
- if (props.includes(key)) {
6
- acc[key] = object[key];
7
- }
8
- return acc;
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((acc, key) => {
13
- if (!props.includes(key)) {
14
- acc[key] = object[key];
15
- }
16
- return acc;
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(async (config, options) => {
32
- if (mermaid) {
33
- mermaid.initialize(config);
34
- return mermaid.run(options);
35
- }
36
- }, [mermaid]);
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 () => {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/react/index.ts"],
4
- "sourcesContent": ["import type { InitConfig, RunOptions, ZoomOptions } from '../types';\nimport { useEffect, useState, useCallback } from 'react';\n\nexport type RuntimeOptions = {\n onError?: (error: any) => void\n}\n\nfunction pick<O extends Record<string, any>, P extends string, R extends {\n [K in P]: O[K];\n}>(object: O, props: readonly P[]): R {\n return Object.keys(object).reduce((acc, key) => {\n if ((props as readonly string[]).includes(key)) {\n acc[key] = object[key];\n }\n\n return acc;\n }, {} as Record<string, any>) as R;\n}\n\nfunction omit<O extends Record<string, any>, P extends string, R extends {\n [K in keyof Omit<O, P>]: O[K];\n}>(object: O, props: readonly P[]): R {\n return Object.keys(object).reduce((acc, key) => {\n if (!(props as readonly string[]).includes(key)) {\n acc[key] = object[key];\n }\n\n return acc;\n }, {} as Record<string, any>) 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(async (config: InitConfig, options?: RunOptions) => {\n if (mermaid) {\n mermaid.initialize(config);\n return mermaid.run(options);\n }\n }, [ mermaid ]);\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,SAAS,WAAW,UAAU,mBAAmB;AAMjD,SAAS,KAEN,QAAW,OAAwB;AAClC,SAAO,OAAO,KAAK,MAAM,EAAE,OAAO,CAAC,KAAK,QAAQ;AAC5C,QAAK,MAA4B,SAAS,GAAG,GAAG;AAC5C,UAAI,GAAG,IAAI,OAAO,GAAG;AAAA,IACzB;AAEA,WAAO;AAAA,EACX,GAAG,CAAC,CAAwB;AAChC;AAEA,SAAS,KAEN,QAAW,OAAwB;AAClC,SAAO,OAAO,KAAK,MAAM,EAAE,OAAO,CAAC,KAAK,QAAQ;AAC5C,QAAI,CAAE,MAA4B,SAAS,GAAG,GAAG;AAC7C,UAAI,GAAG,IAAI,OAAO,GAAG;AAAA,IACzB;AAEA,WAAO;AAAA,EACX,GAAG,CAAC,CAAwB;AAChC;AAEO,SAAS,eAAe,OAAiD;AAC5E,QAAM,gBAAgB,WAAW;AACjC,QAAM,SAAS,KAAK,OAAO,CAAE,iBAAiB,SAAS,SAAU,CAAC;AAClE,QAAM,UAAU,KAAK,OAAO,CAAE,iBAAiB,OAAQ,CAAC;AAExD,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,CAAE,SAAS,UAAW,IAAI,SAAyC,IAAI;AAC7E,QAAM,SAAS,YAAY,OAAO,QAAoB,YAAyB;AAC3E,QAAI,SAAS;AACT,cAAQ,WAAW,MAAM;AACzB,aAAO,QAAQ,IAAI,OAAO;AAAA,IAC9B;AAAA,EACJ,GAAG,CAAE,OAAQ,CAAC;AAEd,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;",
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=`