From d4bad4acf8f609bfb4c88ac573ee110948f5b470 Mon Sep 17 00:00:00 2001 From: Mister-Hope Date: Tue, 22 Oct 2024 19:05:37 +0800 Subject: [PATCH] feat: add plugin-markdown-chart --- .vscode/settings.json | 6 + docs/.vuepress/config.ts | 9 + docs/package.json | 18 +- .../plugins/markdown/markdown-chart/README.md | 58 + .../markdown/markdown-chart/chartjs.md | 294 +++ .../markdown/markdown-chart/echarts.md | 198 ++ .../markdown/markdown-chart/flowchart.md | 357 ++++ .../markdown/markdown-chart/markmap.md | 102 + .../markdown/markdown-chart/mermaid.md | 576 ++++++ .../markdown/markdown-chart/plantuml.md | 667 +++++++ package.json | 4 +- .../plugin-markdown-chart/package.json | 97 + .../plugin-markdown-chart/rollup.config.ts | 16 + .../src/client/components/ChartJS.ts | 142 ++ .../src/client/components/ECharts.ts | 142 ++ .../src/client/components/FlowChart.ts | 112 ++ .../src/client/components/MarkMap.ts | 113 ++ .../src/client/components/Mermaid.ts | 228 +++ .../src/client/helpers/echarts.ts | 38 + .../src/client/helpers/index.ts | 2 + .../src/client/helpers/mermaid.ts | 20 + .../plugin-markdown-chart/src/client/index.ts | 1 + .../src/client/styles/chartjs.scss | 26 + .../src/client/styles/echarts.scss | 34 + .../src/client/styles/flowchart.scss | 33 + .../src/client/styles/markmap.scss | 125 ++ .../src/client/styles/mermaid.scss | 96 + .../src/client/typings/index.ts | 1 + .../src/client/typings/mermaid.ts | 171 ++ .../src/client/utils/flowchart-presets/ant.ts | 52 + .../client/utils/flowchart-presets/base.ts | 16 + .../client/utils/flowchart-presets/index.ts | 15 + .../src/client/utils/flowchart-presets/pie.ts | 52 + .../src/client/utils/flowchart-presets/vue.ts | 52 + .../src/client/utils/index.ts | 1 + .../plugin-markdown-chart/src/node/index.ts | 3 + .../src/node/markdown-it-plugins/chartjs.ts | 47 + .../src/node/markdown-it-plugins/echarts.ts | 74 + .../src/node/markdown-it-plugins/flowchart.ts | 31 + .../src/node/markdown-it-plugins/index.ts | 6 + .../src/node/markdown-it-plugins/markmap.ts | 28 + .../src/node/markdown-it-plugins/mermaid.ts | 96 + .../src/node/markdown-it-plugins/plantuml.ts | 24 + .../src/node/markdownChartPlugin.ts | 117 ++ .../plugin-markdown-chart/src/node/options.ts | 70 + .../src/node/prepareConfigFile.ts | 64 + .../src/node/prepcareConfigFile.ts | 64 + .../plugin-markdown-chart/src/node/utils.ts | 25 + .../plugin-markdown-chart/src/shims.d.ts | 10 + .../node/__snapshots__/chartjs.spec.ts.snap | 15 + .../node/__snapshots__/echarts.spec.ts.snap | 19 + .../node/__snapshots__/flowchart.spec.ts.snap | 47 + .../node/__snapshots__/markmap.spec.ts.snap | 66 + .../node/__snapshots__/mermaid.spec.ts.snap | 124 ++ .../tests/node/chartjs.spec.ts | 203 ++ .../tests/node/echarts.spec.ts | 185 ++ .../tests/node/flowchart.spec.ts | 90 + .../tests/node/markmap.spec.ts | 66 + .../tests/node/mermaid.spec.ts | 276 +++ .../plugin-markdown-chart/tsconfig.build.json | 9 + pnpm-lock.yaml | 1751 ++++++++++++++--- tsconfig.build.json | 2 + 62 files changed, 7114 insertions(+), 272 deletions(-) create mode 100644 docs/plugins/markdown/markdown-chart/README.md create mode 100644 docs/plugins/markdown/markdown-chart/chartjs.md create mode 100644 docs/plugins/markdown/markdown-chart/echarts.md create mode 100644 docs/plugins/markdown/markdown-chart/flowchart.md create mode 100644 docs/plugins/markdown/markdown-chart/markmap.md create mode 100644 docs/plugins/markdown/markdown-chart/mermaid.md create mode 100644 docs/plugins/markdown/markdown-chart/plantuml.md create mode 100644 plugins/markdown/plugin-markdown-chart/package.json create mode 100644 plugins/markdown/plugin-markdown-chart/rollup.config.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/components/ChartJS.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/components/ECharts.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/components/FlowChart.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/components/MarkMap.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/components/Mermaid.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/helpers/echarts.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/helpers/index.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/helpers/mermaid.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/index.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/styles/chartjs.scss create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/styles/echarts.scss create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/styles/flowchart.scss create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/styles/markmap.scss create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/styles/mermaid.scss create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/typings/index.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/typings/mermaid.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/ant.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/base.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/index.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/pie.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/vue.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/client/utils/index.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/index.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/chartjs.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/echarts.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/flowchart.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/index.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/markmap.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/mermaid.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/plantuml.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/markdownChartPlugin.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/options.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/prepareConfigFile.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/prepcareConfigFile.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/node/utils.ts create mode 100644 plugins/markdown/plugin-markdown-chart/src/shims.d.ts create mode 100644 plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/chartjs.spec.ts.snap create mode 100644 plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/echarts.spec.ts.snap create mode 100644 plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/flowchart.spec.ts.snap create mode 100644 plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/markmap.spec.ts.snap create mode 100644 plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/mermaid.spec.ts.snap create mode 100644 plugins/markdown/plugin-markdown-chart/tests/node/chartjs.spec.ts create mode 100644 plugins/markdown/plugin-markdown-chart/tests/node/echarts.spec.ts create mode 100644 plugins/markdown/plugin-markdown-chart/tests/node/flowchart.spec.ts create mode 100644 plugins/markdown/plugin-markdown-chart/tests/node/markmap.spec.ts create mode 100644 plugins/markdown/plugin-markdown-chart/tests/node/mermaid.spec.ts create mode 100644 plugins/markdown/plugin-markdown-chart/tsconfig.build.json diff --git a/.vscode/settings.json b/.vscode/settings.json index b2b10e18e6..f4a0fa0c30 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,14 +21,17 @@ "cSpell.words": [ "artalk", "bumpp", + "chartjs", "composables", "darkmode", "devtool", "docsearch", + "echarts", "envinfo", "esbuild", "frontmatter", "fullscreen", + "gantt", "giscus", "globby", "gtag", @@ -36,12 +39,15 @@ "lazyload", "lightmode", "katex", + "markmap", "mathjax", "mdit", + "mindmap", "nord", "nprogress", "pageview", "photoswipe", + "plantuml", "prefetch", "preload", "prismjs", diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts index 4c9454a4b1..fcdf3962ef 100644 --- a/docs/.vuepress/config.ts +++ b/docs/.vuepress/config.ts @@ -8,6 +8,7 @@ import { catalogPlugin } from '@vuepress/plugin-catalog' import { commentPlugin } from '@vuepress/plugin-comment' import { docsearchPlugin } from '@vuepress/plugin-docsearch' import { feedPlugin } from '@vuepress/plugin-feed' +import { markdownChartPlugin } from '@vuepress/plugin-markdown-chart' import { markdownImagePlugin } from '@vuepress/plugin-markdown-image' import { markdownMathPlugin } from '@vuepress/plugin-markdown-math' import { redirectPlugin } from '@vuepress/plugin-redirect' @@ -91,6 +92,14 @@ export default defineUserConfig({ json: true, rss: true, }), + markdownChartPlugin({ + chartjs: true, + echarts: true, + flowchart: true, + markmap: true, + mermaid: true, + plantuml: true, + }), markdownImagePlugin({ figure: true, mark: true, diff --git a/docs/package.json b/docs/package.json index 3e8ae3002c..97bc3406c0 100644 --- a/docs/package.json +++ b/docs/package.json @@ -12,13 +12,15 @@ "@mdit/plugin-footnote": "0.13.1", "@vuepress/bundler-vite": "2.0.0-rc.18", "@vuepress/bundler-webpack": "2.0.0-rc.18", - "@vuepress/plugin-back-to-top": "workspace:*", "@vuepress/helper": "workspace:*", + "@vuepress/plugin-back-to-top": "workspace:*", + "@vuepress/plugin-cache": "workspace:*", "@vuepress/plugin-catalog": "workspace:*", "@vuepress/plugin-comment": "workspace:*", "@vuepress/plugin-copy-code": "workspace:*", "@vuepress/plugin-docsearch": "workspace:*", "@vuepress/plugin-feed": "workspace:*", + "@vuepress/plugin-markdown-chart": "workspace:*", "@vuepress/plugin-markdown-image": "workspace:*", "@vuepress/plugin-markdown-math": "workspace:*", "@vuepress/plugin-markdown-tab": "workspace:*", @@ -31,11 +33,17 @@ "@vuepress/plugin-revealjs": "workspace:*", "@vuepress/plugin-search": "workspace:*", "@vuepress/plugin-shiki": "workspace:*", - "@vuepress/plugin-cache": "workspace:*", "@vuepress/theme-default": "workspace:*", - "katex": "0.16.11", - "mathjax-full": "3.2.2", - "sass-embedded": "1.80.3", + "chart.js": "^4.4.5", + "echarts": "^5.5.1", + "flowchart.ts": "^3.0.1", + "katex": "^0.16.11", + "markmap-lib": "^0.17.2", + "markmap-toolbar": "^0.17.2", + "markmap-view": "^0.17.2", + "mathjax-full": "^3.2.2", + "mermaid": "^11.3.0", + "sass-embedded": "^1.80.3", "sass-loader": "^16.0.2", "vue": "^3.5.12", "vuepress": "2.0.0-rc.18" diff --git a/docs/plugins/markdown/markdown-chart/README.md b/docs/plugins/markdown/markdown-chart/README.md new file mode 100644 index 0000000000..f1afb6ad2b --- /dev/null +++ b/docs/plugins/markdown/markdown-chart/README.md @@ -0,0 +1,58 @@ +# markdown-chart + + + +Add powerful charts to your VuePress site. + +This plugin provides 6 ways to let you insert charts into your markdown file. + +- chart.js: A lightweight, easy-to-use, highly customizable chart library. + + chart.js is lighter comparing to echarts. + +- echarts: A powerful, interactive charting and visualization library for browser. + + echarts is more powerful comparing to chart.js. + +- Flowchart: A simple markdown extension to generate flowcharts and sequence diagrams. + + Lightweight, only focusing on flowcharts. + +- Markmap: Create mindmap with markdown + + The runtime is very heavy, not recommended. + +- Mermaid: Generation of diagram and flowchart from text in a similar manner as markdown. + + Powerful collection of common charts. + +- Plantuml: UML diagram driven by Java. + + No runtime, diagram render is processed on plantuml server. + +## Usage + +```bash +npm i -D @vuepress/plugin-markdown-chart@next +``` + +```ts +import { markdownChartPlugin } from '@vuepress/plugin-markdown-chart' + +export default { + plugins: [ + markdownChartPlugin({ + // Enable chart.js + chartjs: true, + // Enable echarts + echarts: true, + // Enable flowchart.ts + flowchart: true, + // Enable markmap + markmap: true, + // Enable mermaid + mermaid: true, + }), + ], +} +``` diff --git a/docs/plugins/markdown/markdown-chart/chartjs.md b/docs/plugins/markdown/markdown-chart/chartjs.md new file mode 100644 index 0000000000..e3c0befb2a --- /dev/null +++ b/docs/plugins/markdown/markdown-chart/chartjs.md @@ -0,0 +1,294 @@ +--- +title: Chart.js +icon: chart-simple +--- + +Add [chart.js][] support to the Markdown files in your VuePress site. + +[chart.js]: https://www.chartjs.org/docs/latest/ + + + +## Settings + +Install [chart.js][] in your project: + +::: code-tabs#shell + +@tab pnpm + +```bash +pnpm add -D chart.js +``` + +@tab yarn + +```bash +yarn add -D chart.js +``` + +@tab npm + +```bash +npm i -D chart.js +``` + +::: + +Then enabling via: + +```js {7} title=".vuepress/config.js" +import { markdownChartPlugin } from '@vuepress/plugin-markdown-chart' + +export default { + plugins: [ + markdownChartPlugin({ + // Enable chart.js + chartjs: true, + }), + ], +} +``` + +## Syntax + +````md +::: chartjs Title + +```json +{ + // Your chart config here. +} +``` + +::: +```` + +`js` and `javascript` code block is also supported, and you are expected to assign your export object to `module.exports`. + +## Demo + +:::: md-demo Bar Chart + +::: chartjs A bar chart + +```json +{ + "type": "bar", + "data": { + "labels": ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"], + "datasets": [ + { + "label": "# of Votes", + "data": [12, 19, 3, 5, 2, 3], + "backgroundColor": [ + "rgba(255, 99, 132, 0.2)", + "rgba(54, 162, 235, 0.2)", + "rgba(255, 206, 86, 0.2)", + "rgba(75, 192, 192, 0.2)", + "rgba(153, 102, 255, 0.2)", + "rgba(255, 159, 64, 0.2)" + ], + "borderColor": [ + "rgba(255, 99, 132, 1)", + "rgba(54, 162, 235, 1)", + "rgba(255, 206, 86, 1)", + "rgba(75, 192, 192, 1)", + "rgba(153, 102, 255, 1)", + "rgba(255, 159, 64, 1)" + ], + "borderWidth": 1 + } + ] + }, + "options": { + "scales": { + "y": { + "beginAtZero": true + } + } + } +} +``` + +::: + +:::: + +:::: md-demo Bubble Chart + +::: chartjs A Bubble Chart + +```json +{ + "type": "bubble", + "data": { + "datasets": [ + { + "label": "First Dataset", + "data": [ + { "x": 20, "y": 30, "r": 15 }, + { "x": 40, "y": 10, "r": 10 } + ], + "backgroundColor": "rgb(255, 99, 132)" + } + ] + } +} +``` + +::: + +:::: + +:::: md-demo Line Chart + +::: chartjs A Line Chart + +```json +{ + "type": "line", + "data": { + "labels": ["January", "February", "March", "April", "May", "June", "July"], + "datasets": [ + { + "label": "My First Dataset", + "data": [65, 59, 80, 81, 56, 55, 40], + "fill": false, + "borderColor": "rgb(75, 192, 192)", + "tension": 0.1 + } + ] + } +} +``` + +::: + +:::: + +:::: md-demo Polar Area Chart + +::: chartjs A Polar Area Chart + +```json +{ + "type": "polarArea", + "data": { + "labels": ["Red", "Green", "Yellow", "Grey", "Blue"], + "datasets": [ + { + "label": "My First Dataset", + "data": [11, 16, 7, 3, 14], + "backgroundColor": [ + "rgb(255, 99, 132)", + "rgb(75, 192, 192)", + "rgb(255, 205, 86)", + "rgb(201, 203, 207)", + "rgb(54, 162, 235)" + ] + } + ] + } +} +``` + +::: + +:::: + +:::: md-demo Radar Chart + +::: chartjs A Radar Chart + +```json +{ + "type": "radar", + "data": { + "labels": [ + "Eating", + "Drinking", + "Sleeping", + "Designing", + "Coding", + "Cycling", + "Running" + ], + "datasets": [ + { + "label": "My First Dataset", + "data": [65, 59, 90, 81, 56, 55, 40], + "fill": true, + "backgroundColor": "rgba(255, 99, 132, 0.2)", + "borderColor": "rgb(255, 99, 132)", + "pointBackgroundColor": "rgb(255, 99, 132)", + "pointBorderColor": "#fff", + "pointHoverBackgroundColor": "#fff", + "pointHoverBorderColor": "rgb(255, 99, 132)" + }, + { + "label": "My Second Dataset", + "data": [28, 48, 40, 19, 96, 27, 100], + "fill": true, + "backgroundColor": "rgba(54, 162, 235, 0.2)", + "borderColor": "rgb(54, 162, 235)", + "pointBackgroundColor": "rgb(54, 162, 235)", + "pointBorderColor": "#fff", + "pointHoverBackgroundColor": "#fff", + "pointHoverBorderColor": "rgb(54, 162, 235)" + } + ] + }, + "options": { + "elements": { + "line": { + "borderWidth": 3 + } + } + } +} +``` + +::: + +:::: + +:::: md-demo Scatter Chart + +::: chartjs A Scatter Chart + +```json +{ + "type": "scatter", + "data": { + "datasets": [ + { + "label": "Scatter Dataset", + "data": [ + { "x": -10, "y": 0 }, + { "x": 0, "y": 10 }, + { "x": 10, "y": 5 }, + { "x": 0.5, "y": 5.5 } + ], + "backgroundColor": "rgb(255, 99, 132)" + } + ] + }, + "options": { + "scales": { + "x": { + "type": "linear", + "position": "bottom" + } + } + } +} +``` + +::: + +:::: + +## Docs + +For details, please see [Chart.js Docs](https://www.chartjs.org/docs/latest/). diff --git a/docs/plugins/markdown/markdown-chart/echarts.md b/docs/plugins/markdown/markdown-chart/echarts.md new file mode 100644 index 0000000000..5f88c7df42 --- /dev/null +++ b/docs/plugins/markdown/markdown-chart/echarts.md @@ -0,0 +1,198 @@ +--- +title: ECharts +icon: chart-simple +--- + + + +Add [echarts][] support to the Markdown files in your VuePress site. + +[echarts]: https://echarts.apache.org/en/index.html + + + +## Settings + +Install [echarts][] in your project: + +::: code-tabs#shell + +@tab pnpm + +```bash +pnpm add -D echarts +``` + +@tab yarn + +```bash +yarn add -D echarts +``` + +@tab npm + +```bash +npm i -D echarts +``` + +::: + +Then enabling via: + + + +```js {7} title=".vuepress/config.js" +import { markdownChartPlugin } from '@vuepress/plugin-markdown-chart' + +export default { + plugins: [ + markdownChartPlugin({ + // Enable echarts + echarts: true, + }), + ], +} +``` + + + +## Syntax + +### With JSON + +If you can generate your chart data easily, you can just provide echarts config using JSON code block: + +````md +::: echarts Title + +```json +{ + // Your echarts config here. +} +``` + +::: +```` + +### With Scripts + +If you need to use script to get the data, you can use `js` or `javascript` code block. + +We will expose the echarts instance as `echarts` in the script, and you are expected to assign the echarts option object to `option` variable. Also, you can assign `width` and `height` variable to set the chart size. + +````md +::: echarts Title + +```js +const option = { + // Your echarts config here. +} +``` + +::: +```` + +::: tip + +You can use top-level await and `fetch` to get data from network requests. + +::: + +## Advanced + +You can import and call `defineEChartsConfig` in [client config file][client-config] to customize echarts. + +```ts title=".vuepress/client.ts" +import { defineClientConfig } from 'vuepress/client' +import { defineEChartsConfig } from 'vuepress-plugin-md-enhance/client' + +defineEChartsConfig({ + options: { + // global echarts options + }, + setup: async () => { + // echarts setup + // e.g.: await import("echarts-wordcloud") + }, +}) + +export default defineClientConfig({ + // ... +}) +``` + +## Docs + +For details, please see [ECharts Docs](https://echarts.apache.org/handbook/en/get-started/). + +## Demo + +:::: md-demo Line Chart + + + +:::: + +:::: md-demo Bar Chart + + + +:::: + +:::: md-demo Pie Chart + + + +:::: + +:::: md-demo Scatter Chart + + + +:::: + +:::: md-demo Polar Chart + + + +:::: + +:::: md-demo Candlestick Chart + + + +:::: + +:::: md-demo Radar Chart + + + +:::: + +:::: md-demo Heat Map + + + +:::: + +:::: md-demo Tree Chart + + + +:::: + +:::: md-demo Multiple Chart + + + +:::: + +:::: md-demo WordCloud (with setup function) + + + +:::: + +[client-config]: https://vuejs.press/guide/configuration.html#client-config-file + + diff --git a/docs/plugins/markdown/markdown-chart/flowchart.md b/docs/plugins/markdown/markdown-chart/flowchart.md new file mode 100644 index 0000000000..83d8e84aa2 --- /dev/null +++ b/docs/plugins/markdown/markdown-chart/flowchart.md @@ -0,0 +1,357 @@ +--- +title: Flowchart +icon: route +--- + + + +Let the Markdown file support flow chart in your VuePress site. + + + +## Settings + +Install [flowchart.ts](http://flowchart.js.org/) in your project: + +::: code-tabs#shell + +@tab pnpm + +```bash +pnpm add -D flowchart.ts +``` + +@tab yarn + +```bash +yarn add -D flowchart.ts +``` + +@tab npm + +```bash +npm i -D flowchart.ts +``` + +::: + +Then enabling via: + + + +```js {7} title=".vuepress/config.js" +import { markdownChartPlugin } from '@vuepress/plugin-markdown-chart' + +export default { + plugins: [ + markdownChartPlugin({ + // Enable flowchart + flowchart: true, + }), + ], +} +``` + + + +## Syntax + +````md + + +```flow:preset + + + +``` +```` + +Available presets for now: + +- `vue` (default) +- `ant` +- `pie` + +## Playground + + + +## Demo + +::: md-demo Vue theme + +```flow +st=>start: Start|past:>http://www.google.com[blank] +e=>end: End|future:>http://www.google.com +op1=>operation: My Operation|past +op2=>operation: Stuff|current +sub1=>subroutine: My Subroutine|invalid +cond=>condition: Yes +or No?|approved:>http://www.google.com +c2=>condition: Good idea|rejected +io=>inputoutput: catch something...|future + +st->op1(right)->cond +cond(yes, right)->c2 +cond(no)->sub1(left)->op1 +c2(yes)->io->e +c2(no)->op2->e +``` + +::: + +::: md-demo Ant theme + +```flow:ant +st=>start: Start|past:>http://www.google.com[blank] +e=>end: End|future:>http://www.google.com +op1=>operation: My Operation|past +op2=>operation: Stuff|current +sub1=>subroutine: My Subroutine|invalid +cond=>condition: Yes +or No?|approved:>http://www.google.com +c2=>condition: Good idea|rejected +io=>inputoutput: catch something...|future + +st->op1(right)->cond +cond(yes, right)->c2 +cond(no)->sub1(left)->op1 +c2(yes)->io->e +c2(no)->op2->e +``` + +::: + +::: md-demo Pie theme + +```flow:pie +st=>start: Start|past:>http://www.google.com[blank] +e=>end: End|future:>http://www.google.com +op1=>operation: My Operation|past +op2=>operation: Stuff|current +sub1=>subroutine: My Subroutine|invalid +cond=>condition: Yes +or No?|approved:>http://www.google.com +c2=>condition: Good idea|rejected +io=>inputoutput: catch something...|future + +st->op1(right)->cond +cond(yes, right)->c2 +cond(no)->sub1(left)->op1 +c2(yes)->io->e +c2(no)->op2->e +``` + +::: + +## Flowchart Intro + +### Node Types + +Defines the shape that the node will take. + +::: md-demo Start & End + +- `[Variable]->start: [Text]` + + Used as the first node where flows start from. + Default text is `Start`. + +- `[Variable]->end: [Text]` + + Used as the last node where a flow ends. + Default text is `End`. + +```flow +st=>start: Start +e=>end: End + +st->e +``` + +::: + +::: md-demo Operation + +Indicates that an operation needs to happen in the flow. + +- `[Variable]->operation: [Text]` + +```flow +process=>operation: Operation +e=>end: End + +process->e +``` + +::: + +::: md-demo Input / Output + +Indicates that IO happens in a flow. + +- `[Variable]->inputoutput: [Text]` + +```flow +process=>inputoutput: Inputoutput +e=>end: End + +process->e +``` + +::: + +::: md-demo Subroutine + +Indicates that a subroutine happens in the flow and that there should be another flowchart that documents this subroutine. + +- `[Variable]->subroutine: [Text]` + +```flow +process=>subroutine: Subroutine +e=>end: End + +process->e +``` + +::: + +::: md-demo Condition + +Allows for a conditional or logical statement to direct the flow into one of two or more paths. + +- `[Variable]->condition: [Text]` + +- `[Variable]([yesText])->[Position]` +- `[Variable]([noText])->[Position]` + +```flow +cond=>condition: Process? +process=>operation: Process +e=>end: End + +cond(yes)->process->e +cond(no)->e +``` + +::: + +::: md-demo Parallel + +Allows for multiple flows to happen simultaneously. + +- `[Variable]->parallel: [Text]` +- `[Variable](path1, direction)->[Position]` +- `[Variable](path1, direction)->[Position]` + +```flow +para=>parallel: parallel tasks +process=>operation: Process +e=>end: End + +para(path1, bottom)->process->e +para(path2)->e +``` + +::: + +## Connections + +Connections are defined in their own section below the node definitions. + +The `->` operator specifies a connection from one node to another like `nodeVar1->nodeVar2->nodeVar3`. + +Not all nodes need to be specified in one string and can be separated like so + +```md +nodeVar1->nodeVar2 +nodeVar2->nodeVar3 +``` + +Connection syntax is as follows: + +`[([, [[([, ]` + +Items in `[]` are optional. + +### Directions + +The following directions are available and define the direction the connection will leave the node from. If there are more than one specifier, it is always the last. All nodes have a default direction making this an optional specification. `` will be used and one of the below list should be used in its place. + +- `left` +- `right` +- `top` +- `bottom` + +### Node Specific Specifiers by Type + +Each node variable has optional specifiers, like direction, and some have special specifiers depending on the node type that are defined below. Specifiers are added after the variable name in `()` and separated with `,` like `nodeVar(spec1, spec2)`. + +- **start** + **operation** + **inputoutput** + **subroutine** + + Optional direction + + `startVar()->nextNode` + + `operationVar()->nextNode` + + `inputoutputVar()->nextNode` + + `subroutineVar()->nextNode` + +- **condition** + + Required logical specification of `yes` or `no` + + Optional direction + + ```md + conditionalVar(yes, )->nextNode1 + conditionalVar(no, )->nextNode2 + ``` + +- **parallel** + + Required path specification of `path1`, `path2`, or `path3` + + Optional direction + + ```md + parallelVar(path1, )->nextNode1 + parallelVar(path2, )->nextNode2 + parallelVar(path3, )->nextNode3 + ``` + +### Links + +An external link can be added to a node with the `:>` operator. + +The `st` node is linked with `http://www.google.com` and will open a new tab because `[blank]` is at the end of the URL. + +The `e` node is linked with `http://www.yahoo.com` and will cause the page to navigate to that page instead of opening a new tab. + +```md +st=>start: Start:>http://www.google.com[blank] +e=>end: End:>http://www.yahoo.com +``` + +## Advice + +Symbols that should possibly not be used in the text: `=>` and `->` and `:>` and `|` and `@>` and `:$` + +To emphasize a specific path in your flowchart, you can define it like this: + +```md +st@>op1({"stroke":"Red"})@>cond({"stroke":"Red","stroke-width":6,"arrow-end":"classic-wide-long"})@>c2({"stroke":"Red"})@>op2({"stroke":"Red"})@>e({"stroke":"Red"}) +``` + + + + diff --git a/docs/plugins/markdown/markdown-chart/markmap.md b/docs/plugins/markdown/markdown-chart/markmap.md new file mode 100644 index 0000000000..bb7cda582c --- /dev/null +++ b/docs/plugins/markdown/markdown-chart/markmap.md @@ -0,0 +1,102 @@ +--- +title: Markmap +icon: fab fa-markdown +--- + + + +Let the Markdown file support markmap in your VuePress site. + + + +## Settings + +Install `markmap-lib`, `markmap-toolbar` and `markmap-view` in your project: + +::: code-tabs#shell + +@tab pnpm + +```bash +pnpm add -D markmap-lib markmap-toolbar markmap-view +``` + +@tab yarn + +```bash +yarn add -D markmap-lib markmap-toolbar markmap-view +``` + +@tab npm + +```bash +npm i -D markmap-lib markmap-toolbar markmap-view +``` + +::: + +Then enabling via: + + + +```js {7} title=".vuepress/config.js" +import { markdownChartPlugin } from '@vuepress/plugin-markdown-chart' + +export default { + plugins: [ + markdownChartPlugin({ + // Enable Markmap + markmap: true, + }), + ], +} +``` + + + +## Syntax + +````md +```markmap + +``` +```` + +Configuring through frontmatter syntax is supported. + +## Demo + +::: md-demo + +````markmap +--- +markmap: + colorFreezeLevel: 2 +--- + +# markmap + +## Links + +- +- [GitHub](https://github.com/markmap/markmap) + +## Features + +- links +- **strong** ~~del~~ *italic* ==highlight== +- multiline + text +- `inline code` +- + ```js + console.log('code block'); + ``` +- Katex + - $x = {-b \pm \sqrt{b^2-4ac} \over 2a}$ +- Now we can wrap very very very very long text based on `maxWidth` option +```` + +::: + + diff --git a/docs/plugins/markdown/markdown-chart/mermaid.md b/docs/plugins/markdown/markdown-chart/mermaid.md new file mode 100644 index 0000000000..b54d854da2 --- /dev/null +++ b/docs/plugins/markdown/markdown-chart/mermaid.md @@ -0,0 +1,576 @@ +--- +title: Mermaid +icon: chart-pie +--- + + + +Let the Markdown file support [mermaid](https://mermaid.js.org/) in your VuePress site. + + + +## Settings + +Install [mermaid](https://mermaid.js.org/) in your project: + +::: code-tabs#shell + +@tab pnpm + +```bash +pnpm add -D mermaid +``` + +@tab yarn + +```bash +yarn add -D mermaid +``` + +@tab npm + +```bash +npm i -D mermaid +``` + +::: + +Then enabling via: + + + +```js {7} title=".vuepress/config.js" +import { markdownChartPlugin } from '@vuepress/plugin-markdown-chart' + +export default { + plugins: [ + markdownChartPlugin({ + // Enable mermaid + mermaid: true, + }), + ], +} +``` + + + +## Syntax + +````md +```mermaid + + + +``` +```` + +Besides using mermaid, you can also use the following code blocks: + +- class: `classDiagram` +- c4c: `C4Context` +- er: `erDiagram` +- gantt: `gantt` +- git-graph: `gitGraph` +- journey: `journey` +- mindmap: `mindmap` +- pie: `pie` +- quadrant: `quadrantChart` +- requirement: `requirementDiagram` +- sankey: `sankey-beta` +- sequence: `sequenceDiagram` +- state: `stateDiagram-v2` +- timeline: `timeline` +- xy: `xychart-beta` + +You do not need to declare diagram type and intent your code. + +When the diagram supports setting title, you can add the title directly after fence info: + +````md +```sequence Chart Title +sequence diagram body +... +``` +```` + +## Usage + +Please see [mermaid](https://mermaid.js.org/). + +## Advanced + +You can import and call `defineMermaidConfig` in [client config file][client-config] to customize mermaid: + +```ts title=".vuepress/client.ts" +import { defineClientConfig } from 'vuepress/client' +import { defineMermaidConfig } from 'vuepress-plugin-md-enhance/client' + +defineMermaidConfig({ + // mermaid options here +}) + +export default defineClientConfig({ + // ... +}) +``` + +## Demo + +::: md-demo Flowchart + +```mermaid +--- +title: Flowchart +--- +flowchart TB + c1-->a2 + subgraph one + a1-->a2 + end + subgraph two + b1-->b2 + end + subgraph three + c1-->c2 + end + one --> two + three --> two + two --> c2 +``` + +::: + +::: md-demo Sequence Diagram + +```sequence Greetings +Alice ->> Bob: Hello Bob, how are you? +Bob-->>John: How about you John? +Bob--x Alice: I am good thanks! +Bob-x John: I am good thanks! +Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. + +Bob-->Alice: Checking with John... +Alice->John: Yes... John, how are you? +``` + +::: + +::: md-demo Class Diagram + +```class Animal Example +note "From Duck till Zebra" +Animal <|-- Duck +note for Duck "can fly\ncan swim\ncan dive\ncan help in debugging" +Animal <|-- Fish +Animal <|-- Zebra +Animal : +int age +Animal : +String gender +Animal: +isMammal() +Animal: +mate() +class Duck{ + +String beakColor + +swim() + +quack() +} +class Fish{ + -int sizeInFeet + -canEat() +} +class Zebra{ + +bool is_wild + +run() +} +``` + +::: + +::: md-demo State Diagram + +```state Check if n is negative + +state if_state <> +[*] --> IsPositive +IsPositive --> if_state +if_state --> False: if n < 0 +if_state --> True : if n >= 0 +``` + +::: + +::: md-demo Entity Relationship Diagrams + +```er Er Example +CAR ||--o{ NAMED-DRIVER : allows +CAR { + string registrationNumber + string make + string model +} +PERSON ||--o{ NAMED-DRIVER : is +PERSON { + string firstName + string lastName + int age +} +``` + +::: + +::: md-demo User Journey Diagram + +```journey +title My working day +section Go to work + Make tea: 5: Me + Go upstairs: 3: Me + Do work: 1: Me, Cat +section Go home + Go downstairs: 5: Me + Sit down: 5: Me +``` + +::: + +::: md-demo Gantt Diagrams + +```gantt +dateFormat YYYY-MM-DD +title Adding GANTT diagram functionality to mermaid +excludes weekends +%% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".) + +section A section +Completed task :done, des1, 2014-01-06,2014-01-08 +Active task :active, des2, 2014-01-09, 3d +Future task : des3, after des2, 5d +Future task2 : des4, after des3, 5d + +section Critical tasks +Completed task in the critical line :crit, done, 2014-01-06,24h +Implement parser :crit, done, after des1, 2d +Create tests for parser :crit, active, 3d +Future task in critical line :crit, 5d +Create tests for renderer :2d +Add to mermaid :1d + +section Documentation +Describe gantt syntax :active, a1, after des1, 3d +Add gantt diagram to demo page :after a1 , 20h +Add another diagram to demo page :doc1, after a1 , 48h + +section Last section +Describe gantt syntax :after doc1, 3d +Add gantt diagram to demo page :20h +Add another diagram to demo page :48h +``` + +::: + +::: md-demo Pie Chart Diagrams + +```pie +title What Voldemort doesn't have? + "FRIENDS" : 2 + "FAMILY" : 3 + "NOSE" : 45 +``` + +::: + +::: md-demo Git Graph Diagrams + +```git-graph +commit +branch hotfix +checkout hotfix +commit +branch develop +checkout develop +commit id:"ash" tag:"abc" +branch featureB +checkout featureB +commit type:HIGHLIGHT +checkout main +checkout hotfix +commit type:NORMAL +checkout develop +commit type:REVERSE +checkout featureB +commit +checkout main +merge hotfix +checkout featureB +commit +checkout develop +branch featureA +commit +checkout develop +merge hotfix +checkout featureA +commit +checkout featureB +commit +checkout develop +merge featureA +branch release +checkout release +commit +checkout main +commit +checkout release +merge main +checkout develop +merge release +``` + +::: + +::: md-demo C4C Diagrams + +```c4c +title System Context diagram for Internet Banking System + +Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.") +Person(customerB, "Banking Customer B") +Person_Ext(customerC, "Banking Customer C") +System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") + +Person(customerD, "Banking Customer D", "A customer of the bank,
with personal bank accounts.") + +Enterprise_Boundary(b1, "BankBoundary") { + + SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") + + System_Boundary(b2, "BankBoundary2") { + System(SystemA, "Banking System A") + System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts.") + } + + System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") + SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") + + Boundary(b3, "BankBoundary3", "boundary") { + SystemQueue(SystemF, "Banking System F Queue", "A system of the bank, with personal bank accounts.") + SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") + } +} + +BiRel(customerA, SystemAA, "Uses") +BiRel(SystemAA, SystemE, "Uses") +Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") +Rel(SystemC, customerA, "Sends e-mails to") +``` + +::: + +::: md-demo Mindmap + +```mindmap +root((VuePress)) + Out of box + Default theme + Navbar + Sidebar + Darkmode + I18n + Search + Search + DocSearch
by algolia + Customize + Theme + (hope) + Plugins + (components) + (md-enhance) +``` + +::: + +::: md-demo Timeline + +```timeline +title Timeline of Industrial Revolution +section 17th-20th century + Industry 1.0 : Machinery, Water power, Steam
power + Industry 2.0 : Electricity, Internal combustion engine, Mass production + Industry 3.0 : Electronics, Computers, Automation +section 21st century + Industry 4.0 : Internet, Robotics, Internet of Things + Industry 5.0 : Artificial intelligence, Big data,3D printing +``` + +::: + +::: md-demo Sankey + +```sankey +Agricultural 'waste',Bio-conversion,124.729 +Bio-conversion,Liquid,0.597 +Bio-conversion,Losses,26.862 +Bio-conversion,Solid,280.322 +Bio-conversion,Gas,81.144 +Biofuel imports,Liquid,35 +Biomass imports,Solid,35 +Coal imports,Coal,11.606 +Coal reserves,Coal,63.965 +Coal,Solid,75.571 +District heating,Industry,10.639 +District heating,Heating and cooling - commercial,22.505 +District heating,Heating and cooling - homes,46.184 +Electricity grid,Over generation / exports,104.453 +Electricity grid,Heating and cooling - homes,113.726 +Electricity grid,H2 conversion,27.14 +Electricity grid,Industry,342.165 +Electricity grid,Road transport,37.797 +Electricity grid,Agriculture,4.412 +Electricity grid,Heating and cooling - commercial,40.858 +Electricity grid,Losses,56.691 +Electricity grid,Rail transport,7.863 +Electricity grid,Lighting & appliances - commercial,90.008 +Electricity grid,Lighting & appliances - homes,93.494 +Gas imports,Ngas,40.719 +Gas reserves,Ngas,82.233 +Gas,Heating and cooling - commercial,0.129 +Gas,Losses,1.401 +Gas,Thermal generation,151.891 +Gas,Agriculture,2.096 +Gas,Industry,48.58 +Geothermal,Electricity grid,7.013 +H2 conversion,H2,20.897 +H2 conversion,Losses,6.242 +H2,Road transport,20.897 +Hydro,Electricity grid,6.995 +Liquid,Industry,121.066 +Liquid,International shipping,128.69 +Liquid,Road transport,135.835 +Liquid,Domestic aviation,14.458 +Liquid,International aviation,206.267 +Liquid,Agriculture,3.64 +Liquid,National navigation,33.218 +Liquid,Rail transport,4.413 +Marine algae,Bio-conversion,4.375 +Ngas,Gas,122.952 +Nuclear,Thermal generation,839.978 +Oil imports,Oil,504.287 +Oil reserves,Oil,107.703 +Oil,Liquid,611.99 +Other waste,Solid,56.587 +Other waste,Bio-conversion,77.81 +Pumped heat,Heating and cooling - homes,193.026 +Pumped heat,Heating and cooling - commercial,70.672 +Solar PV,Electricity grid,59.901 +Solar Thermal,Heating and cooling - homes,19.263 +Solar,Solar Thermal,19.263 +Solar,Solar PV,59.901 +Solid,Agriculture,0.882 +Solid,Thermal generation,400.12 +Solid,Industry,46.477 +Thermal generation,Electricity grid,525.531 +Thermal generation,Losses,787.129 +Thermal generation,District heating,79.329 +Tidal,Electricity grid,9.452 +UK land based bioenergy,Bio-conversion,182.01 +Wave,Electricity grid,19.013 +Wind,Electricity grid,289.366 +``` + +::: + +::: md-demo Requirement + +```requirement +requirement test_req { +id: 1 +text: the test text. +risk: high +verifymethod: test +} + +element test_entity { +type: simulation +} + +test_entity - satisfies -> test_req +``` + +::: + +::: md-demo Quadrant Chart + +```quadrant +title Reach and engagement of campaigns +x-axis Low Reach --> High Reach +y-axis Low Engagement --> High Engagement +quadrant-1 We should expand +quadrant-2 Need to promote +quadrant-3 Re-evaluate +quadrant-4 May be improved +Campaign A: [0.3, 0.6] +Campaign B: [0.45, 0.23] +Campaign C: [0.57, 0.69] +Campaign D: [0.78, 0.34] +Campaign E: [0.40, 0.34] +Campaign F: [0.35, 0.78] +``` + +::: + +::: md-demo XY Chart + +```xy +title "Sales Revenue" +x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec] +y-axis "Revenue (in $)" 4000 --> 11000 +bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000] +line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000] +``` + +::: + +::: md-demo Block Chart + +```block +columns 3 +Frontend blockArrowId6<[" "]>(right) Backend +space:2 down<[" "]>(down) +Disk left<[" "]>(left) Database[("Database")] + +classDef front fill:#696,stroke:#333; +classDef back fill:#969,stroke:#333; +class Frontend front +class Backend,Database back +``` + +::: + +::: md-demo A Complex Example + +```mermaid +graph TB + sq[Square shape] --> ci((Circle shape)) + + subgraph A + od>Odd shape]-- Two line
edge comment --> ro + di{Diamond with
line break} -.-> ro(Rounded
square
shape) + di==>ro2(Rounded square shape) + end + + %% Notice that no text in shape are added here instead that is appended further down + e --> od3>Really long text with line break
in an Odd shape] + + %% Comments after double percent signs + e((Inner / circle
and some odd
special characters)) --> f(,.?!+-*ز) + + cyr[Cyrillic]-->cyr2((Circle shape)); + + classDef green fill:#9f6,stroke:#333,stroke-width:2px; + classDef orange fill:#f96,stroke:#333,stroke-width:4px; + class sq,e green + class di orange +``` + +::: + +[client-config]: https://vuejs.press/guide/configuration.html#client-config-file + + diff --git a/docs/plugins/markdown/markdown-chart/plantuml.md b/docs/plugins/markdown/markdown-chart/plantuml.md new file mode 100644 index 0000000000..c07c5b423f --- /dev/null +++ b/docs/plugins/markdown/markdown-chart/plantuml.md @@ -0,0 +1,667 @@ +--- +title: Plantuml +icon: diagram-project +--- + + + +Let the Markdown files in your VuePress site support [plantuml][]. + +[plantuml]: https://plantuml.com/ + + + +## Settings + +You can enable this feature via: + + + +```js {7} title=".vuepress/config.js" +import { markdownChartPlugin } from '@vuepress/plugin-markdown-chart' + +export default { + plugins: [ + markdownChartPlugin({ + // Enable plantuml + plantuml: true, + }), + ], +} +``` + + + +## Syntax + +You can insert the same content that [plantuml][] supports, for example: + +```md +@startuml +content +@enduml +``` + +## Demo + + + + +::: md-demo Sequence Diagram + +@startuml +Alice -> Bob: Authentication Request + +alt successful case + + Bob -> Alice: Authentication Accepted + +else some kind of failure + + Bob -> Alice: Authentication Failure + group My own label + Alice -> Log : Log attack start + loop 1000 times + Alice -> Bob: DNS Attack + end + Alice -> Log : Log attack end + end + +else Another type of failure + +Bob -> Alice: Please repeat + +end +@enduml + +::: + +::: md-demo Use Case + +@startuml +:Main Admin: as Admin +(Use the application) as (Use) + +User -> (Start) +User --> (Use) + +Admin ---> (Use) + +note right of Admin : This is an example. + +note right of (Use) +A note can also +be on several lines +end note + +note "This note is connected\nto several objects." as N2 +(Start) .. N2 +N2 .. (Use) +@enduml + +::: + +::: md-demo Class + +@startuml +abstract class AbstractList +abstract AbstractCollection +interface List +interface Collection + +List <|-- AbstractList +Collection <|-- AbstractCollection + +Collection <|- List +AbstractCollection <|- AbstractList +AbstractList <|-- ArrayList + +class ArrayList { + Object[] elementData + size() +} + +enum TimeUnit { + DAYS + HOURS + MINUTES +} + +annotation SuppressWarnings + +annotation Annotation { + annotation with members + String foo() + String bar() +} +@enduml + +::: + +::: md-demo Activity + +@startuml +start +:ClickServlet.handleRequest(); +:new page; +if (Page.onSecurityCheck) then (true) + :Page.onInit(); + if (isForward?) then (no) + :Process controls; + if (continue processing?) then (no) + stop + endif + + if (isPost?) then (yes) + :Page.onPost(); + else (no) + :Page.onGet(); + endif + :Page.onRender(); + endif +else (false) +endif + +if (do redirect?) then (yes) + :redirect process; +else + if (do forward?) then (yes) + :Forward request; + else (no) + :Render page template; + endif +endif + +stop +@enduml + +::: + +::: md-demo Component + +@startuml +package "Some Group" { + HTTP - [First Component] + [Another Component] +} + +node "Other Groups" { + FTP - [Second Component] + [First Component] --> FTP +} + +cloud { + [Example 1] +} + +database "MySql" { + folder "This is my folder" { + [Folder 3] + } + frame "Foo" { + [Frame 4] + } +} + +[Another Component] --> [Example 1] +[Example 1] --> [Folder 3] +[Folder 3] --> [Frame 4] + +@enduml + +::: + +::: md-demo State + +@startuml +state start1 <> +state choice1 <> +state fork1 <> +state join2 <> +state end3 <> + +[*] --> choice1 : from start\nto choice +start1 --> choice1 : from start stereo\nto choice + +choice1 --> fork1 : from choice\nto fork +choice1 --> join2 : from choice\nto join +choice1 --> end3 : from choice\nto end stereo + +fork1 ---> State1 : from fork\nto state +fork1 --> State2 : from fork\nto state + +State2 --> join2 : from state\nto join +State1 --> [*] : from state\nto end + +join2 --> [*] : from join\nto end +@enduml + +::: + +::: md-demo Object + +@startuml +object London +object Washington +object Berlin +object NewYork + +map CapitalCity { + UK *-> London + USA *--> Washington + Germany *---> Berlin +} + +NewYork --> CapitalCity::USA +@enduml + +::: + +::: md-demo Deployment + +@startuml +node node1 +node node2 +node node3 +node node4 +node node5 +node1 -- node2 : label1 +node1 .. node3 : label2 +node1 ~~ node4 : label3 +node1 == node5 +@enduml + +::: + +::: md-demo Timing + +@startuml +scale 5 as 150 pixels + +clock clk with period 1 +binary "enable" as en +binary "R/W" as rw +binary "data Valid" as dv +concise "dataBus" as db +concise "address bus" as addr + +@6 as :write_beg +@10 as :write_end + +@15 as :read_beg +@19 as :read_end + +@0 +en is low +db is "0x0" +addr is "0x03f" +rw is low +dv is 0 + +@:write_beg-3 + en is high +@:write_beg-2 + db is "0xDEADBEEF" +@:write_beg-1 +dv is 1 +@:write_beg +rw is high + +@:write_end +rw is low +dv is low +@:write_end+1 +rw is low +db is "0x0" +addr is "0x23" + +@12 +dv is high +@13 +db is "0xFFFF" + +@20 +en is low +dv is low +@21 +db is "0x0" + +highlight :write_beg to :write_end #Gold:Write +highlight :read_beg to :read_end #lightBlue:Read + +db@:write_beg-1 <-> @:write_end : setup time +db@:write_beg-1 -> addr@:write_end+1 : hold +@enduml + +::: + +::: md-demo RegExp + +@startregex +/([\s\S]+)<\/style> +@endregex + +::: + +::: md-demo Network + +@startuml +nwdiag { + group nightly { + color = "#FFAAAA"; + description = "<&clock> Restarted nightly <&clock>"; + web02; + db01; + } + network dmz { + address = "210.x.x.x/24" + + user [description = "<&person*4.5>\n user1"]; + web01 [address = "210.x.x.1, 210.x.x.20", description = "<&cog*4>\nweb01"] + web02 [address = "210.x.x.2", description = "<&cog*4>\nweb02"]; + + } + network internal { + address = "172.x.x.x/24"; + + web01 [address = "172.x.x.1"]; + web02 [address = "172.x.x.2"]; + db01 [address = "172.x.x.100", description = "<&spreadsheet*4>\n db01"]; + db02 [address = "172.x.x.101", description = "<&spreadsheet*4>\n db02"]; + ptr [address = "172.x.x.110", description = "<&print*4>\n ptr01"]; + } +} +@enduml + +::: + +::: md-demo Salt + +@startsalt +{+ +{/ General | Fullscreen | Behavior | Saving } +{ +{ Open image in: | ^Smart Mode^ } +[X] Smooth images when zoomed +[X] Confirm image deletion +[ ] Show hidden images +} +[Close] +} +@endsalt + +::: + +::: md-demo Archimate + +@startuml +skinparam rectangle<> { + roundCorner 25 +} +sprite $bProcess jar:archimate/business-process +sprite $aService jar:archimate/application-service +sprite $aComponent jar:archimate/application-component + +rectangle "Handle claim" as HC <<$bProcess>><> #Business +rectangle "Capture Information" as CI <<$bProcess>><> #Business +rectangle "Notify\nAdditional Stakeholders" as NAS <<$bProcess>><> #Business +rectangle "Validate" as V <<$bProcess>><> #Business +rectangle "Investigate" as I <<$bProcess>><> #Business +rectangle "Pay" as P <<$bProcess>><> #Business + +HC *-down- CI +HC *-down- NAS +HC *-down- V +HC *-down- I +HC *-down- P + +CI -right->> NAS +NAS -right->> V +V -right->> I +I -right->> P + +rectangle "Scanning" as scanning <<$aService>><> #Application +rectangle "Customer admnistration" as customerAdministration <<$aService>><> #Application +rectangle "Claims admnistration" as claimsAdministration <<$aService>><> #Application +rectangle Printing <<$aService>><> #Application +rectangle Payment <<$aService>><> #Application + +scanning -up-> CI +customerAdministration -up-> CI +claimsAdministration -up-> NAS +claimsAdministration -up-> V +claimsAdministration -up-> I +Payment -up-> P + +Printing -up-> V +Printing -up-> P + +rectangle "Document\nManagement\nSystem" as DMS <<$aComponent>> #Application +rectangle "General\nCRM\nSystem" as CRM <<$aComponent>> #Application +rectangle "Home & Away\nPolicy\nAdministration" as HAPA <<$aComponent>> #Application +rectangle "Home & Away\nFinancial\nAdministration" as HFPA <<$aComponent>> #Application + +DMS .up.|> scanning +DMS .up.|> Printing +CRM .up.|> customerAdministration +HAPA .up.|> claimsAdministration +HFPA .up.|> Payment + +legend left +Example from the "Archisurance case study" (OpenGroup). +See +==== +<$bProcess> :business process +==== +<$aService> : application service +==== +<$aComponent> : application component +endlegend +@enduml + +::: + +::: md-demo Gantt + +@startgantt + +Project starts the 2020-12-01 + +[Task1] requires 10 days +sunday are closed + +note bottom + memo1 ... + memo2 ... + explanations1 ... + explanations2 ... +end note + +[Task2] requires 20 days +[Task2] starts 10 days after [Task1]'s end +-- Separator title -- +[M1] happens on 5 days after [Task1]'s end + + + +-- end -- +@endgantt + +::: + +::: md-demo Mindmap + +@startmindmap +caption figure 1 +title My super title + +* <&flag>Debian +** <&globe>Ubuntu +*** Linux Mint +*** Kubuntu +*** Lubuntu +*** KDE Neon +** <&graph>LMDE +** <&pulse>SolydXK +** <&people>SteamOS +** <&star>Raspbian with a very long name +*** Raspmbc => OSMC +*** Raspyfi => Volumio + +header +My super header +endheader + +center footer My super footer + +legend right + Short + legend +endlegend +@endmindmap + +::: + +::: md-demo WBS + +@startwbs ++ New Job +++ Decide on Job Requirements ++++ Identity gaps ++++ Review JDs +++++ Sign-Up for courses +++++ Volunteer +++++ Reading +++- Checklist ++++- Responsibilities ++++- Location +++ CV Upload Done ++++ CV Updated +++++ Spelling & Grammar +++++ Check dates +---- Skills ++++ Recruitment sites chosen +@endwbs + +::: + +::: md-demo JSON + +@startjson +#highlight "lastName" +#highlight "address" / "city" +#highlight "phoneNumbers" / "0" / "number" +{ + "firstName": "John", + "lastName": "Smith", + "isAlive": true, + "age": 28, + "address": { + "streetAddress": "21 2nd Street", + "city": "New York", + "state": "NY", + "postalCode": "10021-3100" + }, + "phoneNumbers": [ + { + "type": "home", + "number": "212 555-1234" + }, + { + "type": "office", + "number": "646 555-4567" + } + ], + "children": [], + "spouse": null +} +@endjson + +::: + +::: md-demo YAML + +@startyaml +doe: "a deer, a female deer" +ray: "a drop of golden sun" +pi: 3.14159 +xmas: true +french-hens: 3 +calling-birds: + - huey + - dewey + - louie + - fred +xmas-fifth-day: + calling-birds: four + french-hens: 3 + golden-rings: 5 + partridges: + count: 1 + location: "a pear tree" + turtle-doves: two +@endyaml + +::: + + + + + diff --git a/package.json b/package.json index 7752f4fa07..8c118e5b75 100644 --- a/package.json +++ b/package.json @@ -37,14 +37,14 @@ "@lerna-lite/publish": "^3.10.0", "@rollup/plugin-commonjs": "^28.0.1", "@rollup/plugin-node-resolve": "^15.3.0", - "@types/node": "^22.7.7", + "@types/node": "^22.7.8", "@types/webpack-env": "^1.18.5", "@vitest/coverage-istanbul": "^2.1.3", "conventional-changelog-cli": "^5.0.0", "cpx2": "^8.0.0", "cross-env": "^7.0.3", "eslint": "^9.13.0", - "eslint-config-vuepress": "^5.2.1", + "eslint-config-vuepress": "^5.2.2", "http-server": "^14.1.1", "husky": "^9.1.6", "nano-staged": "^0.8.0", diff --git a/plugins/markdown/plugin-markdown-chart/package.json b/plugins/markdown/plugin-markdown-chart/package.json new file mode 100644 index 0000000000..6cea741771 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/package.json @@ -0,0 +1,97 @@ +{ + "name": "@vuepress/plugin-markdown-chart", + "version": "2.0.0-rc.56", + "description": "VuePress plugin - markdown chart", + "keywords": [ + "vuepress-plugin", + "vuepress", + "plugin", + "markdown", + "chart", + "chartjs", + "echarts", + "flowchart", + "markmap", + "mermaid" + ], + "homepage": "https://ecosystem.vuejs.press/plugins/markdown/markdown-chart.html", + "bugs": { + "url": "https://github.com/vuepress/ecosystem/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/vuepress/ecosystem.git", + "directory": "plugins/markdown/plugin-markdown-chart" + }, + "license": "MIT", + "author": { + "name": "Mr.Hope", + "email": "mister-hope@outlook.com", + "url": "https://mister-hope.com" + }, + "type": "module", + "exports": { + ".": "./lib/node/index.js", + "./client/*": "./lib/client/*", + "./package.json": "./package.json" + }, + "main": "./lib/node/index.js", + "types": "./lib/node/index.d.ts", + "files": [ + "lib" + ], + "scripts": { + "build": "tsc -b tsconfig.build.json", + "bundle": "rollup -c rollup.config.ts --configPlugin esbuild", + "clean": "rimraf --glob ./lib ./*.tsbuildinfo", + "style": "sass src:lib --embed-sources --style=compressed" + }, + "dependencies": { + "@mdit/plugin-container": "^0.13.1", + "@mdit/plugin-plantuml": "^0.13.1", + "@vuepress/helper": "workspace:*", + "@vueuse/core": "^11.1.0", + "vue": "^3.5.12" + }, + "devDependencies": { + "@types/markdown-it": "^14.1.2", + "markdown-it": "^14.1.0", + "markmap-common": "^0.17.1" + }, + "peerDependencies": { + "chart.js": "^4.4.5", + "echarts": "^5.5.1", + "flowchart.ts": "^3.0.1", + "markmap-lib": "^0.17.2", + "markmap-toolbar": "^0.17.2", + "markmap-view": "^0.17.2", + "mermaid": "^11.3.0", + "vuepress": "2.0.0-rc.18" + }, + "peerDependenciesMeta": { + "chart.js": { + "optional": true + }, + "echarts": { + "optional": true + }, + "flowchart.ts": { + "optional": true + }, + "markmap-lib": { + "optional": true + }, + "markmap-toolbar": { + "optional": true + }, + "markmap-view": { + "optional": true + }, + "mermaid": { + "optional": true + } + }, + "publishConfig": { + "access": "public" + } +} diff --git a/plugins/markdown/plugin-markdown-chart/rollup.config.ts b/plugins/markdown/plugin-markdown-chart/rollup.config.ts new file mode 100644 index 0000000000..8deeb099fd --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/rollup.config.ts @@ -0,0 +1,16 @@ +import { rollupBundle } from '../../../scripts/rollup.js' + +export default [ + ...rollupBundle('node/index'), + ...rollupBundle({ + base: 'client', + files: [ + 'components/ChartJS', + 'components/ECharts', + 'components/FlowChart', + 'components/MarkMap', + 'components/Mermaid', + 'index', + ], + }), +] diff --git a/plugins/markdown/plugin-markdown-chart/src/client/components/ChartJS.ts b/plugins/markdown/plugin-markdown-chart/src/client/components/ChartJS.ts new file mode 100644 index 0000000000..41a223deac --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/components/ChartJS.ts @@ -0,0 +1,142 @@ +import { + LoadingIcon, + decodeData, + useDarkmode, + wait, +} from '@vuepress/helper/client' +import type { Chart, ChartConfiguration } from 'chart.js' +import type { PropType, VNode } from 'vue' +import { computed, defineComponent, h, ref, shallowRef, watch } from 'vue' + +import '../styles/chartjs.css' + +declare const __MC_DELAY__: number + +const parseChartConfig = ( + config: string, + type: 'js' | 'json', +): ChartConfiguration => { + if (type === 'json') return JSON.parse(config) as ChartConfiguration + + // eslint-disable-next-line @typescript-eslint/no-implied-eval + const runner = new Function( + `\ +let config,__chart_js_config__; +{ +${config} +__chart_js_config__=config; +} +return __chart_js_config__;\ +`, + ) as () => ChartConfiguration + + return runner() +} + +export default defineComponent({ + name: 'ChartJS', + + props: { + /** + * Chart config + * + * 图表配置 + */ + config: { + type: String, + required: true, + }, + + /** + * Chart id + * + * 图表 id + */ + id: { + type: String, + required: true, + }, + + /** + * Chart title + * + * 图表标题 + */ + title: { + type: String, + default: '', + }, + + /** + * Chart config type + * + * 图表配置类型 + */ + type: { + type: String as PropType<'js' | 'json'>, + default: 'json', + }, + }, + + setup(props) { + const isDarkmode = useDarkmode() + + const chartElement = shallowRef() + const chartCanvasElement = shallowRef() + + const loading = ref(true) + + const config = computed(() => decodeData(props.config)) + + let loaded = false + + let chart: Chart | null + + const renderChart = async (darkmode: boolean): Promise => { + const [{ default: Chart }] = await Promise.all([ + import(/* webpackChunkName: "chartjs" */ 'chart.js/auto'), + loaded ? Promise.resolve() : wait(__MC_DELAY__), + ]) + + loaded = true + + Chart.defaults.borderColor = darkmode ? '#ccc' : '#36A2EB' + Chart.defaults.color = darkmode ? '#fff' : '#000' + Chart.defaults.maintainAspectRatio = false + + const data = parseChartConfig(config.value, props.type) + const ctx = chartCanvasElement.value!.getContext('2d')! + + chart?.destroy() + chart = new Chart(ctx, data) + + loading.value = false + } + + watch(isDarkmode, (value) => renderChart(value), { immediate: true }) + + return (): (VNode | null)[] => [ + props.title + ? h('div', { class: 'chartjs-title' }, decodeURIComponent(props.title)) + : null, + loading.value + ? h(LoadingIcon, { class: 'chartjs-loading', height: 192 }) + : null, + h( + 'div', + { + ref: chartElement, + class: 'chartjs-wrapper', + id: props.id, + style: { + display: loading.value ? 'none' : 'block', + }, + }, + h('canvas', { + ref: chartCanvasElement, + height: 400, + }), + ), + ] + }, +}) diff --git a/plugins/markdown/plugin-markdown-chart/src/client/components/ECharts.ts b/plugins/markdown/plugin-markdown-chart/src/client/components/ECharts.ts new file mode 100644 index 0000000000..f58044af6b --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/components/ECharts.ts @@ -0,0 +1,142 @@ +import { LoadingIcon, decodeData, wait } from '@vuepress/helper/client' +import { useDebounceFn, useEventListener } from '@vueuse/core' +import type { EChartsOption, EChartsType } from 'echarts' +import type { PropType, VNode } from 'vue' +import { + defineComponent, + h, + onMounted, + onUnmounted, + ref, + shallowRef, +} from 'vue' + +import { useEChartsConfig } from '../helpers/index.js' +import '../styles/echarts.css' + +declare const __MC_DELAY__: number + +interface EChartsConfig { + width?: number + height?: number + option: EChartsOption +} + +const AsyncFunction = (async (): Promise => {}).constructor + +const parseEChartsConfig = ( + config: string, + type: 'js' | 'json', + echarts: EChartsType, +): Promise => { + if (type === 'js') { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + const runner = AsyncFunction( + 'echarts', + `\ +let width,height,option,__echarts_config__; +{ +${config} +__echarts_config__={width,height,option}; +} +return __echarts_config__; +`, + ) as (echarts: EChartsType) => Promise + + return runner(echarts) + } + + return Promise.resolve({ option: JSON.parse(config) as EChartsOption }) +} + +export default defineComponent({ + name: 'ECharts', + + props: { + /** + * ECharts config + * + * 图表配置 + */ + config: { type: String, required: true }, + + /** + * Chart id + * + * 图表 id + */ + id: { type: String, required: true }, + + /** + * Chart title + * + * 图表标题 + */ + title: { type: String, default: '' }, + + /** + * Chart config type + * + * 图表配置类型 + */ + type: { type: String as PropType<'js' | 'json'>, default: 'json' }, + }, + + setup(props) { + const echartsConfig = useEChartsConfig() + + const loading = ref(true) + const echartsContainer = shallowRef() + + let chart: EChartsType | null = null + + useEventListener( + 'resize', + useDebounceFn(() => { + chart?.resize() + }, 100), + ) + + onMounted(() => { + void Promise.all([ + import(/* webpackChunkName: "echarts" */ 'echarts'), + wait(__MC_DELAY__), + ]).then(async ([echarts]) => { + await echartsConfig.setup?.() + + chart = echarts.init(echartsContainer.value) + + const { option, ...size } = await parseEChartsConfig( + decodeData(props.config), + props.type, + chart, + ) + + chart.resize(size) + chart.setOption({ ...echartsConfig.option, ...option }) + + loading.value = false + }) + }) + + onUnmounted(() => { + chart?.dispose() + }) + + return (): (VNode | null)[] => [ + props.title + ? h('div', { class: 'echarts-title' }, decodeURIComponent(props.title)) + : null, + h('div', { class: 'echarts-wrapper' }, [ + h('div', { + ref: echartsContainer, + class: 'echarts-container', + id: props.id, + }), + loading.value + ? h(LoadingIcon, { class: 'echarts-loading', height: 360 }) + : null, + ]), + ] + }, +}) diff --git a/plugins/markdown/plugin-markdown-chart/src/client/components/FlowChart.ts b/plugins/markdown/plugin-markdown-chart/src/client/components/FlowChart.ts new file mode 100644 index 0000000000..f3673c1464 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/components/FlowChart.ts @@ -0,0 +1,112 @@ +import { LoadingIcon, decodeData, wait } from '@vuepress/helper/client' +import { useDebounceFn, useEventListener } from '@vueuse/core' +import type { Chart } from 'flowchart.ts' +import type { PropType, VNode } from 'vue' +import { computed, defineComponent, h, onMounted, ref, shallowRef } from 'vue' + +import { flowchartPresets } from '../utils/index.js' + +import '../styles/flowchart.css' + +declare const __MC_DELAY__: number + +export default defineComponent({ + name: 'FlowChart', + + props: { + /** + * Flowchart code content + * + * 流程图代码内容 + */ + code: { type: String, required: true }, + + /** + * Flowchart id + * + * 流程图 id + */ + id: { type: String, required: true }, + + /** + * Flowchart preset + * + * 流程图预设 + */ + preset: { + type: String as PropType<'ant' | 'pie' | 'vue'>, + default: 'vue', + }, + }, + + setup(props) { + let flowchart: Chart | null = null + const element = shallowRef() + + const loading = ref(true) + const scale = ref(1) + + const preset = computed>(() => { + const current = flowchartPresets[props.preset] + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (!current) { + // eslint-disable-next-line no-console + console.warn(`[md-enhance:flowchart] Unknown preset: ${props.preset}`) + + return flowchartPresets.vue + } + + return current + }) + + const getScale = (width: number): number => + width < 419 ? 0.8 : width > 1280 ? 1 : 0.9 + + useEventListener( + 'resize', + useDebounceFn(() => { + if (flowchart) { + const newScale = getScale(window.innerWidth) + + if (scale.value !== newScale) { + scale.value = newScale + + flowchart.draw(props.id, { ...preset.value, scale: newScale }) + } + } + }, 100), + ) + + onMounted(() => { + void Promise.all([ + import(/* webpackChunkName: "flowchart" */ 'flowchart.ts'), + wait(__MC_DELAY__), + ]).then(([{ parse }]) => { + flowchart = parse(decodeData(props.code)) + + // Update scale + scale.value = getScale(window.innerWidth) + + loading.value = false + + // Draw svg to #id + flowchart.draw(props.id, { ...preset.value, scale: scale.value }) + }) + }) + + return (): (VNode | null)[] => [ + loading.value + ? h(LoadingIcon, { class: 'flowchart-loading', height: 192 }) + : null, + h('div', { + ref: element, + class: ['flowchart-wrapper', props.preset], + id: props.id, + style: { + display: loading.value ? 'none' : 'block', + }, + }), + ] + }, +}) diff --git a/plugins/markdown/plugin-markdown-chart/src/client/components/MarkMap.ts b/plugins/markdown/plugin-markdown-chart/src/client/components/MarkMap.ts new file mode 100644 index 0000000000..aeb601c5ba --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/components/MarkMap.ts @@ -0,0 +1,113 @@ +import { LoadingIcon, decodeData } from '@vuepress/helper/client' +import { useDebounceFn, useEventListener } from '@vueuse/core' +import type { Markmap } from 'markmap-view' +import type { VNode } from 'vue' +import { + defineComponent, + h, + onMounted, + onUnmounted, + ref, + shallowRef, +} from 'vue' + +import '../styles/markmap.css' + +declare const __MC_DELAY__: number + +export default defineComponent({ + name: 'MarkMap', + + props: { + /** + * Chart id + * + * 图表 id + */ + id: { type: String, required: true }, + + /** + * Markmap data + * + * Markmap 数据 + */ + data: { type: String, required: true }, + }, + + setup(props) { + const loading = ref(true) + const markupWrapper = shallowRef() + const markmapSvg = shallowRef() + + let markmap: Markmap | null = null + + useEventListener( + 'resize', + useDebounceFn(() => { + void markmap?.fit() + }, 100), + ) + + onMounted(() => { + void Promise.all([ + import(/* webpackChunkName: "markmap" */ 'markmap-lib'), + import(/* webpackChunkName: "markmap" */ 'markmap-view'), + import(/* webpackChunkName: "markmap" */ 'markmap-toolbar'), + // Delay + new Promise((resolve) => { + setTimeout(resolve, __MC_DELAY__) + }), + ]).then( + async ([{ Transformer, builtInPlugins }, markmapView, { Toolbar }]) => { + const { Markmap, deriveOptions, loadCSS, loadJS } = markmapView + + const transformer = new Transformer(builtInPlugins) + const { features, frontmatter, root } = transformer.transform( + decodeData(props.data), + ) + const { styles, scripts } = transformer.getUsedAssets(features) + + if (styles) await loadCSS(styles) + if (scripts) await loadJS(scripts, { getMarkmap: () => markmapView }) + + markmap = Markmap.create( + markmapSvg.value!, + deriveOptions({ + maxWidth: 240, + ...frontmatter?.markmap, + }), + root, + ) + + await markmap.fit() + + const { el } = Toolbar.create(markmap) + + el.style.position = 'absolute' + el.style.bottom = '0.5rem' + el.style.right = '0.5rem' + + markupWrapper.value!.append(el) + + loading.value = false + }, + ) + }) + + onUnmounted(() => { + markmap?.destroy() + }) + + return (): VNode => + h('div', { class: 'markmap-wrapper', ref: markupWrapper }, [ + h('svg', { + ref: markmapSvg, + class: 'markmap-svg', + id: props.id, + }), + loading.value + ? h(LoadingIcon, { class: 'markmap-loading', height: 360 }) + : null, + ]) + }, +}) diff --git a/plugins/markdown/plugin-markdown-chart/src/client/components/Mermaid.ts b/plugins/markdown/plugin-markdown-chart/src/client/components/Mermaid.ts new file mode 100644 index 0000000000..9bb1b9b2c2 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/components/Mermaid.ts @@ -0,0 +1,228 @@ +import { + LoadingIcon, + decodeData, + isFunction, + useDarkmode, +} from '@vuepress/helper/client' +import type { VNode } from 'vue' +import { + computed, + defineComponent, + h, + onMounted, + ref, + shallowRef, + watch, +} from 'vue' + +import { useMermaidOptions } from '../helpers/index.js' +import type { MermaidThemeVariables } from '../typings/index.js' + +import '../styles/mermaid.css' + +declare const __MC_DELAY__: number + +const DEFAULT_CHART_OPTIONS = { useMaxWidth: false } + +const getThemeVariables = (isDarkmode: boolean): MermaidThemeVariables => ({ + dark: isDarkmode, + background: isDarkmode ? '#1e1e1e' : '#fff', + + primaryColor: isDarkmode ? '#389d70' : '#4abf8a', + primaryBorderColor: isDarkmode ? '#389d70' : '#4abf8a', + primaryTextColor: isDarkmode ? '#fff' : '#000', + + secondaryColor: '#ffb500', + secondaryBorderColor: isDarkmode ? '#fff' : '#000', + secondaryTextColor: isDarkmode ? '#ddd' : '#333', + + tertiaryColor: isDarkmode ? '#282828' : '#efeef4', + tertiaryBorderColor: isDarkmode ? '#bbb' : '#242424', + tertiaryTextColor: isDarkmode ? '#ddd' : '#333', + + // Note + noteBkgColor: isDarkmode ? '#f6d365' : '#fff5ad', + noteTextColor: '#242424', + noteBorderColor: isDarkmode ? '#f6d365' : '#333', + + lineColor: isDarkmode ? '#d3d3d3' : '#333', + textColor: isDarkmode ? '#fff' : '#242424', + + mainBkg: isDarkmode ? '#389d70' : '#4abf8a', + errorBkgColor: '#eb4d5d', + errorTextColor: '#fff', + + // Flowchart + nodeBorder: isDarkmode ? '#389d70' : '#4abf8a', + nodeTextColor: isDarkmode ? '#fff' : '#242424', + + // Sequence + signalTextColor: isDarkmode ? '#9e9e9e' : '#242424', + + // Class + classText: '#fff', + + // State + labelColor: '#fff', + + attributeBackgroundColorEven: isDarkmode ? '#0d1117' : '#fff', + attributeBackgroundColorOdd: isDarkmode ? '#161b22' : '#f8f8f8', + + // Colors + fillType0: isDarkmode ? '#cf1322' : '#f1636e', + fillType1: '#f39c12', + fillType2: '#2ecc71', + fillType3: '#fa541c', + fillType4: '#25a55b', + fillType5: '#13c2c2', + fillType6: '#096dd9', + fillType7: '#aa6fe9', +}) + +export default defineComponent({ + name: 'Mermaid', + + props: { + /** + * Mermaid id + */ + id: { type: String, required: true }, + + /** + * Mermaid config + * + * Mermaid 配置 + */ + code: { type: String, required: true }, + + /** + * Mermaid title + * + * Mermaid 标题 + */ + title: { type: String, default: '' }, + }, + + setup(props) { + const isDarkmode = useDarkmode() + const { themeVariables, ...mermaidOptions } = useMermaidOptions() + const mermaidElement = shallowRef() + + const code = computed(() => decodeData(props.code)) + + const svgCode = ref('') + let loaded = false + + const renderMermaid = async (): Promise => { + const [{ default: mermaid }] = await Promise.all([ + import( + /* webpackChunkName: "mermaid" */ 'mermaid/dist/mermaid.esm.min.mjs' + ), + loaded + ? Promise.resolve() + : ((loaded = true), + new Promise((resolve) => { + setTimeout(resolve, __MC_DELAY__) + })), + ]) + + mermaid.initialize({ + theme: 'base', + themeVariables: { + ...getThemeVariables(isDarkmode.value), + ...(isFunction(themeVariables) + ? themeVariables(isDarkmode.value) + : themeVariables), + }, + flowchart: DEFAULT_CHART_OPTIONS, + sequence: DEFAULT_CHART_OPTIONS, + journey: DEFAULT_CHART_OPTIONS, + gantt: DEFAULT_CHART_OPTIONS, + er: DEFAULT_CHART_OPTIONS, + pie: DEFAULT_CHART_OPTIONS, + ...mermaidOptions, + startOnLoad: false, + }) + + svgCode.value = (await mermaid.render(props.id, code.value)).svg + } + + const preview = (): void => { + const { body } = document + const div = document.createElement('div') + + div.classList.add('mermaid-preview') + + div.innerHTML = svgCode.value + body.appendChild(div) + + div.addEventListener('click', () => { + body.removeChild(div) + }) + } + + const download = (): void => { + const dataURI = `data:image/svg+xml;charset=utf8,${svgCode.value + .replace(/
/g, '
') + .replace(/%/g, '%25') + .replace(/"/g, '%22') + .replace(/'/g, '%27') + .replace(/&/g, '%26') + .replace(/#/g, '%23') + .replace(/{/g, '%7B') + .replace(/}/g, '%7D') + .replace(//g, '%3E')}` + + const a = document.createElement('a') + + a.setAttribute('href', dataURI) + a.setAttribute( + 'download', + `${props.title ? decodeData(props.title) : props.id}.svg`, + ) + a.click() + } + + watch(isDarkmode, () => renderMermaid()) + + onMounted(() => { + void renderMermaid() + }) + + return (): VNode[] => [ + h('div', { class: 'mermaid-actions' }, [ + h('button', { + class: 'preview-button', + onClick: () => { + preview() + }, + title: 'preview', + innerHTML: + '', + }), + h('button', { + class: 'download-button', + onClick: () => { + download() + }, + title: 'download', + innerHTML: + '', + }), + ]), + h( + 'div', + { + ref: mermaidElement, + class: 'mermaid-wrapper', + }, + svgCode.value + ? // Mermaid + h('div', { class: 'mermaid-content', innerHTML: svgCode.value }) + : // Loading + h(LoadingIcon, { class: 'mermaid-loading', height: 96 }), + ), + ] + }, +}) diff --git a/plugins/markdown/plugin-markdown-chart/src/client/helpers/echarts.ts b/plugins/markdown/plugin-markdown-chart/src/client/helpers/echarts.ts new file mode 100644 index 0000000000..12d49b0ed8 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/helpers/echarts.ts @@ -0,0 +1,38 @@ +import type { EChartsOption } from 'echarts' +import type { App } from 'vue' +import { inject } from 'vue' + +declare const __VUEPRESS_DEV__: boolean + +export interface EChartsConfig { + /** + * ECharts global options + * + * ECharts 全局选项 + */ + option?: EChartsOption + + /** + * ECharts setup function + * + * ECharts 初始化函数 + */ + setup?: () => Promise +} + +let echartsConfig: EChartsConfig = {} + +const echartsSymbol = Symbol(__VUEPRESS_DEV__ ? 'echarts' : '') + +export const defineEChartsConfig = (config: EChartsConfig): void => { + echartsConfig = config +} + +/** @deprecated: use defineEChartsConfig instead */ +export const defineEchartsConfig = defineEChartsConfig + +export const useEChartsConfig = (): EChartsConfig => inject(echartsSymbol)! + +export const injectEChartsConfig = (app: App): void => { + app.provide(echartsSymbol, echartsConfig) +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/helpers/index.ts b/plugins/markdown/plugin-markdown-chart/src/client/helpers/index.ts new file mode 100644 index 0000000000..2be54ab565 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/helpers/index.ts @@ -0,0 +1,2 @@ +export * from './echarts.js' +export * from './mermaid.js' diff --git a/plugins/markdown/plugin-markdown-chart/src/client/helpers/mermaid.ts b/plugins/markdown/plugin-markdown-chart/src/client/helpers/mermaid.ts new file mode 100644 index 0000000000..0e51166a60 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/helpers/mermaid.ts @@ -0,0 +1,20 @@ +import type { App } from 'vue' +import { inject } from 'vue' + +import type { MermaidOptions } from '../typings/index.js' + +declare const __VUEPRESS_DEV__: boolean + +let mermaidOptions: MermaidOptions = {} + +const mermaidSymbol = Symbol(__VUEPRESS_DEV__ ? 'mermaid' : '') + +export const defineMermaidConfig = (options: MermaidOptions): void => { + mermaidOptions = options +} + +export const useMermaidOptions = (): MermaidOptions => inject(mermaidSymbol)! + +export const injectMermaidConfig = (app: App): void => { + app.provide(mermaidSymbol, mermaidOptions) +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/index.ts b/plugins/markdown/plugin-markdown-chart/src/client/index.ts new file mode 100644 index 0000000000..e094067de8 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/index.ts @@ -0,0 +1 @@ +export * from './helpers/index.js' diff --git a/plugins/markdown/plugin-markdown-chart/src/client/styles/chartjs.scss b/plugins/markdown/plugin-markdown-chart/src/client/styles/chartjs.scss new file mode 100644 index 0000000000..83d84a3204 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/styles/chartjs.scss @@ -0,0 +1,26 @@ +.chartjs-title { + margin: 0.5rem auto; + font-weight: 600; + font-size: 18px; + text-align: center; +} + +.chartjs-loading { + color: var(--vp-c-accent-bg); +} + +.chartjs-wrapper { + overflow-x: auto; + padding: 0.6em 0.4em; + text-align: center; + transition: all 1s; + + @media print { + page-break-inside: avoid; + } + + @media (max-width: 719px) { + margin: 0 -1rem; + padding: 0.6em 0; + } +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/styles/echarts.scss b/plugins/markdown/plugin-markdown-chart/src/client/styles/echarts.scss new file mode 100644 index 0000000000..d1b724e8fe --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/styles/echarts.scss @@ -0,0 +1,34 @@ +.echarts-title { + margin: 1rem auto 0.5rem; + font-weight: 600; + font-size: 18px; + text-align: center; +} + +.echarts-wrapper { + position: relative; + text-align: center; + transition: all 1s; + + @media (max-width: 719px) { + margin: 0 -1rem; + } + + @media print { + page-break-inside: avoid; + } +} + +.echarts-container { + min-height: 360px; + + @media print { + page-break-inside: avoid; + } +} + +.echarts-loading { + position: absolute; + inset: 0 0 auto; + color: var(--vp-c-accent-bg); +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/styles/flowchart.scss b/plugins/markdown/plugin-markdown-chart/src/client/styles/flowchart.scss new file mode 100644 index 0000000000..065afd35d3 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/styles/flowchart.scss @@ -0,0 +1,33 @@ +.flowchart-loading { + color: var(--vp-c-accent-bg); +} + +.flowchart-wrapper { + overflow-x: auto; + + padding: 0.6em 0.4em; + + text-align: center; + direction: ltr; + + transition: all 1s; + + @media print { + page-break-inside: avoid; + } + + @media (max-width: 719px) { + margin: 0 -1.5rem; + padding: 0.6em 0; + } + + &.vue { + .start-element, + .end-element, + .operation-element, + .parallel-element { + rx: 5px; + ry: 5px; + } + } +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/styles/markmap.scss b/plugins/markdown/plugin-markdown-chart/src/client/styles/markmap.scss new file mode 100644 index 0000000000..223dfe4b96 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/styles/markmap.scss @@ -0,0 +1,125 @@ +.markmap-title { + margin: 1rem auto 0.5rem; + font-weight: 600; + font-size: 18px; + text-align: center; +} + +// override css variables +.markmap { + --markmap-a-color: var(--vp-c-accent) !important; + --markmap-a-hover-color: var(--vp-c-accent) !important; + --markmap-code-bg: var(--vp-c-border) !important; + --markmap-code-color: var(--vp-c-text) !important; + --markup-circle-open-bg: var(--vp-c-white) !important; + --markup-text-color: var(--vp-c-text) !important; +} + +.markmap-wrapper { + position: relative; + text-align: center; + transition: all 1s; + + @media (max-width: 719px) { + margin: 0 -1rem; + } + + pre { + padding: 0 !important; + line-height: inherit !important; + + code { + padding: 0 !important; + background-color: var(--vp-c-border) !important; + color: inherit; + } + } + + // FIXME: katex can not work with math plugin + .katex-html { + display: none; + } +} + +.markmap-svg { + width: 100%; + min-height: 360px; + color: var(--vp-c-text); + + @media print { + page-break-inside: avoid; + } +} + +.markmap-loading { + position: absolute; + inset: 0 0 auto; + color: var(--vp-c-accent-bg); +} + +.mm-toolbar { + display: flex; + align-items: center; + + padding: 0.25rem; + border-width: 1px; + border-style: solid; + border-color: var(--vp-c-border); + border-radius: 0.25rem; + + background: var(--vp-c-control); + + line-height: 1; + + user-select: none; + + &:hover { + box-shadow: 0 2px 12px 0 var(--vp-c-shadow); + } + + .mm-toolbar-brand { + display: none; + } + + svg { + display: block; + } + + a { + display: inline-block; + text-decoration-line: none; + } + + > span { + padding-right: 0.25rem; + padding-left: 0.25rem; + } +} + +.mm-toolbar-item { + &:not(:first-child) { + margin-left: 0.25rem; + } + + > * { + min-width: 20px; + height: 20px; + + font-size: 0.75rem; + line-height: 1rem; + line-height: 20px; + text-align: center; + + cursor: pointer; + } + + &.active, + &:hover { + border-radius: 0.25rem; + background-color: var(--vp-c-accent-bg); + + > * { + color: var(--vp-c-control); + } + } +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/styles/mermaid.scss b/plugins/markdown/plugin-markdown-chart/src/client/styles/mermaid.scss new file mode 100644 index 0000000000..0f3a5dd9aa --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/styles/mermaid.scss @@ -0,0 +1,96 @@ +.mermaid-preview, +.mermaid-wrapper { + // mermaid style fix + .node rect, + .clusters rect, + rect.note, + .actor { + rx: 8; + ry: 8; + } +} + +.mermaid-wrapper { + position: relative; + + overflow-x: auto; + + padding: 0.6em 0.4em; + + text-align: center; + + transition: all 1s; + + @media (max-width: 419px) { + margin: 0 -1.5rem; + padding: 0.6em 0; + } +} + +.mermaid-loading { + color: var(--vp-c-accent-bg); +} + +.mermaid-content { + @media print { + page-break-inside: avoid; + } +} + +.mermaid-actions { + text-align: end; + + @media print { + display: none; + } +} + +.mermaid-preview { + position: fixed; + inset: 0; + z-index: 800; + + display: flex; + align-items: center; + justify-content: center; + + background-color: rgb(255 255 255 / 80%); + + [data-theme='dark'] & { + background-color: rgb(0 0 0 / 80%); + } + + svg { + max-width: 100%; + max-height: 100%; + } +} + +.preview-button, +.download-button { + width: 2rem; + height: 2rem; + margin: 0.25rem; + padding: 0.5rem; + border-width: 0; + border-radius: 0.5rem; + + background: var(--vp-c-control); + color: var(--vp-c-text-mute); + + cursor: pointer; + + @media (max-width: 719px) { + width: 1.5rem; + height: 1.5rem; + } + + &:hover { + background: var(--vp-c-control-hover); + } + + svg { + width: 100%; + height: 100%; + } +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/typings/index.ts b/plugins/markdown/plugin-markdown-chart/src/client/typings/index.ts new file mode 100644 index 0000000000..8f807c7121 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/typings/index.ts @@ -0,0 +1 @@ +export type * from './mermaid.js' diff --git a/plugins/markdown/plugin-markdown-chart/src/client/typings/mermaid.ts b/plugins/markdown/plugin-markdown-chart/src/client/typings/mermaid.ts new file mode 100644 index 0000000000..26aea2b195 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/typings/mermaid.ts @@ -0,0 +1,171 @@ +import type { MermaidConfig } from 'mermaid' + +export interface MermaidThemeVariables { + dark?: boolean + background?: string + + // Basic + textColor?: string + lineColor?: string + mainBkg?: string + errorBkgColor?: string + errorTextColor?: string + fontFamily?: string + titleColor?: string + border1?: string + border2?: string + + // Nodes + nodeBorder?: string + nodeTextColor?: string + + primaryColor?: string + primaryBorderColor?: string + primaryTextColor?: string + + secondaryColor?: string + secondaryBorderColor?: string + secondaryTextColor?: string + + tertiaryColor?: string + tertiaryBorderColor?: string + tertiaryTextColor?: string + + // C4 + personBorder?: string + personBkg?: string + + // Class + classText?: string + + // Er + attributeBackgroundColorOdd?: string + attributeBackgroundColorEven?: string + + // Flowchart + arrowheadColor?: string + clusterBkg?: string + clusterBorder?: string + edgeLabelBackground?: string + + // Gantt + excludeBkgColor?: string + sectionBkgColor?: string + sectionBkgColor2?: string + altSectionBkgColor?: string + gridColor?: string + todayLineColor?: string + taskBkgColor?: string + taskBorderColor?: string + taskTextColor?: string + taskTextDarkColor?: string + taskTextClickableColor?: string + taskTextOutsideColor?: string + activeTaskBorderColor?: string + activeTaskBkgColor?: string + doneTaskBorderColor?: string + doneTaskBkgColor?: string + critBorderColor?: string + critBkgColor?: string + + // Git + git1?: string + git2?: string + git3?: string + git4?: string + git5?: string + git6?: string + git7?: string + gitBranchLabel1?: string + gitBranchLabel2?: string + gitBranchLabel3?: string + gitBranchLabel4?: string + gitBranchLabel5?: string + gitBranchLabel6?: string + gitBranchLabel7?: string + gitInv1?: string + gitInv2?: string + gitInv3?: string + gitInv4?: string + gitInv5?: string + gitInv6?: string + gitInv7?: string + commitLabelBackground?: string + commitLabelColor?: string + commitLabelFontSize?: string + tagLabelBorder?: string + tagLabelBackground?: string + tagLabelColor?: string + tagLabelFontSize?: string + + // Journey + fillType0?: string + fillType1?: string + fillType2?: string + fillType3?: string + fillType4?: string + fillType5?: string + fillType6?: string + fillType7?: string + + // Pie + pie1?: string + pie2?: string + pie3?: string + pie4?: string + pie5?: string + pie6?: string + pie7?: string + pie8?: string + pie9?: string + pie10?: string + pie11?: string + pie12?: string + pieStrokeWidth?: string + pieOpacity?: string + pieOuterStrokeColor?: string + pieOuterStrokeWidth?: string + pieTitleTextSize?: string + pieTitleTextColor?: string + + // Requirement + requirementBackground?: string + requirementBorderColor?: string + requirementBorderSize?: string + requirementTextColor?: string + relationColor?: string + relationLabelBackground?: string + relationLabelColor?: string + + // State + labelColor?: string + + // Sequence + signalColor?: string + signalTextColor?: string + labelBoxBorderColor?: string + labelBoxBkgColor?: string + labelTextColor?: string + loopTextColor?: string + noteBkgColor?: string + noteTextColor?: string + noteBorderColor?: string + activationBorderColor?: string + activationBkgColor?: string + sequenceNumberColor?: string + actorBorder?: string + actorBkg?: string + actorTextColor?: string + actorLineColor?: string + + [props: string]: boolean | string | undefined +} + +export type MermaidOptions = Omit< + MermaidConfig, + 'startOnLoad' | 'themeVariables' +> & { + themeVariables?: + | MermaidThemeVariables + | ((isDarkmode: boolean) => MermaidThemeVariables) +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/ant.ts b/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/ant.ts new file mode 100644 index 0000000000..16cae94323 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/ant.ts @@ -0,0 +1,52 @@ +import base from './base.js' + +export default { + ...base, + + // Style symbol types + symbols: { + start: { + 'class': 'start-element', + 'font-color': '#fff', + 'fill': '#595959', + 'line-width': '0px', + }, + end: { + 'class': 'end-element', + 'font-color': '#fff', + 'fill': '#595959', + 'line-width': '0px', + }, + operation: { + 'class': 'operation-element', + 'font-color': '#fff', + 'fill': '#1890ff', + 'line-width': '0px', + }, + inputoutput: { + 'class': 'inputoutput-element', + 'font-color': '#fff', + 'fill': '#1890ff', + 'line-width': '0px', + }, + subroutine: { + 'class': 'subroutine-element', + 'font-color': '#fff', + 'fill': '#FF485E', + 'element-color': '#fff', + 'line-color': 'red', + }, + condition: { + 'class': 'condition-element', + 'font-color': '#fff', + 'fill': '#FF485E', + 'line-width': '0px', + }, + parallel: { + 'class': 'parallel-element', + 'font-color': '#fff', + 'fill': '#1890ff', + 'line-width': '0px', + }, + }, +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/base.ts b/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/base.ts new file mode 100644 index 0000000000..2b27fd7b08 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/base.ts @@ -0,0 +1,16 @@ +export default { + 'x': 0, + 'y': 0, + 'line-width': 2, + 'line-length': 40, + 'text-margin': 8, + 'font-size': 14, + 'font-color': '#8DA1AC', + 'line-color': '#8DA1AC', + 'element-color': 'black', + 'fill': 'white', + 'yes-text': 'Yes', + 'no-text': 'No', + 'arrow-end': 'block', + 'scale': 1, +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/index.ts b/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/index.ts new file mode 100644 index 0000000000..93fa914822 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/index.ts @@ -0,0 +1,15 @@ +/** + * Forked from https://github.com/ulivz/vuepress-plugin-flowchart/tree/master/lib/presets + * + * MIT LICENSED + */ + +import ant from './ant.js' +import pie from './pie.js' +import vue from './vue.js' + +export const flowchartPresets = { + ant, + vue, + pie, +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/pie.ts b/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/pie.ts new file mode 100644 index 0000000000..50c482fef9 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/pie.ts @@ -0,0 +1,52 @@ +import base from './base.js' + +export default { + ...base, + + // Style symbol types + 'line-width': 1, + 'symbols': { + start: { + 'class': 'start-element', + 'fill': '#ccc', + 'line-color': '#5c6ac4', + 'font-color': '#000', + }, + end: { + 'class': 'end-element', + 'fill': '#ccc', + 'line-color': '#5c6ac4', + 'font-color': '#000', + }, + operation: { + 'class': 'operation-element', + 'fill': '#f1f1f1', + 'line-color': '#5c6ac4', + 'font-color': '#000', + }, + inputoutput: { + 'class': 'inputoutput-element', + 'fill': '#f1f1f1', + 'line-color': '#5c6ac4', + 'font-color': '#000', + }, + subroutine: { + 'class': 'subroutine-element', + 'fill': '#f1f1f1', + 'line-color': '#5c6ac4', + 'font-color': '#000', + }, + condition: { + 'class': 'condition-element', + 'fill': '#f1f1f1', + 'line-color': '#5c6ac4', + 'font-color': '#000', + }, + parallel: { + 'class': 'parallel-element', + 'fill': '#f1f1f1', + 'line-color': '#5c6ac4', + 'font-color': '#000', + }, + }, +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/vue.ts b/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/vue.ts new file mode 100644 index 0000000000..a895093acc --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/utils/flowchart-presets/vue.ts @@ -0,0 +1,52 @@ +import base from './base.js' + +export default { + ...base, + + // Style symbol types + symbols: { + start: { + 'class': 'start-element', + 'font-color': '#fff', + 'fill': '#2F495F', + 'line-width': '0px', + }, + end: { + 'class': 'end-element', + 'font-color': '#fff', + 'fill': '#2F495F', + 'line-width': '0px', + }, + operation: { + 'class': 'operation-element', + 'font-color': '#fff', + 'fill': '#00BC7D', + 'line-width': '0px', + }, + inputoutput: { + 'class': 'inputoutput-element', + 'font-color': '#fff', + 'fill': '#EB4D5D', + 'line-width': '0px', + }, + subroutine: { + 'class': 'subroutine-element', + 'font-color': '#fff', + 'fill': '#937AC4', + 'element-color': '#fff', + 'line-color': 'red', + }, + condition: { + 'class': 'condition-element', + 'font-color': '#fff', + 'fill': '#FFB500', + 'line-width': '0px', + }, + parallel: { + 'class': 'parallel-element', + 'font-color': '#fff', + 'fill': '#2F495F', + 'line-width': '0px', + }, + }, +} diff --git a/plugins/markdown/plugin-markdown-chart/src/client/utils/index.ts b/plugins/markdown/plugin-markdown-chart/src/client/utils/index.ts new file mode 100644 index 0000000000..9ea8a139c6 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/client/utils/index.ts @@ -0,0 +1 @@ +export * from './flowchart-presets/index.js' diff --git a/plugins/markdown/plugin-markdown-chart/src/node/index.ts b/plugins/markdown/plugin-markdown-chart/src/node/index.ts new file mode 100644 index 0000000000..67a63436c3 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/index.ts @@ -0,0 +1,3 @@ +export * from './markdown-it-plugins/index.js' +export * from './markdownChartPlugin.js' +export type * from './options.js' diff --git a/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/chartjs.ts b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/chartjs.ts new file mode 100644 index 0000000000..751c2cd4ee --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/chartjs.ts @@ -0,0 +1,47 @@ +import { container } from '@mdit/plugin-container' +import { encodeData } from '@vuepress/helper' +import type { PluginSimple } from 'markdown-it' + +export const chartjs: PluginSimple = (md) => { + container(md, { + name: 'chartjs', + openRender: (tokens, index) => { + const title = tokens[index].info + .trimStart() + // "chart" length + .slice(7) + .trim() + + const key = `chartjs-${index}` + + let config = '{}' + let configType = '' + + for (let i = index; i < tokens.length; i++) { + const { type, content, info } = tokens[i] + + if (type === 'container_chartjs_close') break + + if (!content) continue + if (type === 'fence') + if (info === 'json') { + config = encodeData(content) + configType = 'json' + } else if (info === 'js' || info === 'javascript') { + config = encodeData(content) + configType = 'js' + } + + // Set to an unknown token type + tokens[i].type = 'chartjs_empty' + // Hide token + tokens[i].hidden = true + } + + return `` + }, + closeRender: () => ``, + }) +} diff --git a/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/echarts.ts b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/echarts.ts new file mode 100644 index 0000000000..0c4d1f6f5d --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/echarts.ts @@ -0,0 +1,74 @@ +import { container } from '@mdit/plugin-container' +import { encodeData } from '@vuepress/helper' +import type { PluginSimple } from 'markdown-it' +import type Token from 'markdown-it/lib/token.mjs' + +const echartsRender = (tokens: Token[], index: number): string => { + const token = tokens[index] + const key = `echarts-${index}` + const { content, info } = token + const title = info.trim().split(':', 2)[1] + + return `` +} + +export const echarts: PluginSimple = (md) => { + // Handle ```echarts blocks + const { fence } = md.renderer.rules + + md.renderer.rules.fence = (...args): string => { + const [tokens, index] = args + const { info } = tokens[index] + const realInfo = info.split(':', 2)[0] + + if (realInfo === 'echarts') return echartsRender(tokens, index) + + return fence!(...args) + } + + md.renderer.rules.echarts = echartsRender + + container(md, { + name: 'echarts', + + openRender: (tokens, index) => { + const title = tokens[index].info + .trimStart() + // 'echarts' length + .slice(7) + .trim() + + const key = `echarts-${index}` + + let config = '{}' + let isJavaScript = false + + for (let i = index; i < tokens.length; i++) { + const { type, content, info } = tokens[i] + + if (type === 'container_echarts_close') break + + if (!content) continue + if (type === 'fence') + if (info === 'json') { + config = content + } else if (info === 'js' || info === 'javascript') { + config = content + isJavaScript = true + } + + // Set to an unknown token type + tokens[i].type = 'echarts_empty' + // Hide token + tokens[i].hidden = true + } + + return `` + }, + closeRender: () => ``, + }) +} diff --git a/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/flowchart.ts b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/flowchart.ts new file mode 100644 index 0000000000..d6f217cda7 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/flowchart.ts @@ -0,0 +1,31 @@ +import { encodeData } from '@vuepress/helper' +import type { PluginSimple } from 'markdown-it' +import type Token from 'markdown-it/lib/token.mjs' + +const flowchartRender = (tokens: Token[], index: number): string => { + const token = tokens[index] + const key = `flowchart-${index}` + const { content, info } = token + + return `` +} + +export const flowchart: PluginSimple = (md) => { + // Handle ```flow and ```flowchart blocks + const { fence } = md.renderer.rules + + md.renderer.rules.fence = (...args): string => { + const [tokens, index] = args + const { info } = tokens[index] + const [realInfo] = info.split(':', 2) + + if (realInfo === 'flow' || realInfo === 'flowchart') + return flowchartRender(tokens, index) + + return fence!(...args) + } + + md.renderer.rules.flowchart = flowchartRender +} diff --git a/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/index.ts b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/index.ts new file mode 100644 index 0000000000..581ec6f2f3 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/index.ts @@ -0,0 +1,6 @@ +export * from './chartjs.js' +export * from './echarts.js' +export * from './flowchart.js' +export * from './markmap.js' +export * from './mermaid.js' +export * from './plantuml.js' diff --git a/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/markmap.ts b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/markmap.ts new file mode 100644 index 0000000000..994c1d8a1a --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/markmap.ts @@ -0,0 +1,28 @@ +import { encodeData } from '@vuepress/helper' +import type { PluginSimple } from 'markdown-it' +import type Token from 'markdown-it/lib/token.mjs' + +const markmapRender = (tokens: Token[], index: number): string => { + const token = tokens[index] + const key = `markmap-${index}` + const { content } = token + + return `` +} + +export const markmap: PluginSimple = (md) => { + // Handle ```markmap blocks + const { fence } = md.renderer.rules + + md.renderer.rules.fence = (...args): string => { + const [tokens, index] = args + const { info } = tokens[index] + const [realInfo] = info.split(':', 2) + + if (realInfo === 'markmap') return markmapRender(tokens, index) + + return fence!(...args) + } + + md.renderer.rules.markmap = markmapRender +} diff --git a/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/mermaid.ts b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/mermaid.ts new file mode 100644 index 0000000000..957cc646c2 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/mermaid.ts @@ -0,0 +1,96 @@ +import { encodeData } from '@vuepress/helper' +import type { PluginSimple } from 'markdown-it' +import type { RenderRule } from 'markdown-it/lib/renderer.mjs' + +const mermaidRenderer: RenderRule = (tokens, index) => + `` + +interface MermaidOptions { + content: string + diagram?: string + title?: string +} + +export const getMermaidContent = ({ + diagram = 'mermaid', + content, + title = '', +}: MermaidOptions): string => `\ +${ + title + ? `\ +--- +title: ${title} +--- + +` + : '' +}\ +${ + diagram === 'mermaid' + ? '' + : `\ +${diagram} +` +}\ +${ + diagram === 'mermaid' || diagram === 'sankey-beta' + ? content + : content + .split('\n') + .map((line) => (line ? ` ${line}` : '')) + .join('\n') +}\ +` + +const getMermaid = (options: MermaidOptions, index: number): string => + `` + +const DIAGRAM_MAP: Record = { + 'block': 'block-beta', + 'class': 'classDiagram', + 'c4c': 'C4Context', + 'er': 'erDiagram', + 'gantt': 'gantt', + 'git-graph': 'gitGraph', + 'journey': 'journey', + 'mindmap': 'mindmap', + 'pie': 'pie', + 'quadrant': 'quadrantChart', + 'requirement': 'requirementDiagram', + 'sankey': 'sankey-beta', + 'sequence': 'sequenceDiagram', + 'state': 'stateDiagram-v2', + 'timeline': 'timeline', + 'xy': 'xychart-beta', +} + +export const mermaid: PluginSimple = (md) => { + // Handle ```mermaid blocks + const { fence } = md.renderer.rules + + md.renderer.rules.fence = (...args): string => { + const [tokens, index] = args + const { content, info } = tokens[index] + + const fenceInfo = info.trim() + + if (fenceInfo === 'mermaid') return getMermaid({ content }, index) + + const [name, ...rest] = fenceInfo.split(' ') + + if (DIAGRAM_MAP[name]) + return getMermaid( + { diagram: DIAGRAM_MAP[name], title: rest.join(' '), content }, + index, + ) + + return fence!(...args) + } + + md.renderer.rules.mermaid = mermaidRenderer +} diff --git a/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/plantuml.ts b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/plantuml.ts new file mode 100644 index 0000000000..aa5613a5cb --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/markdown-it-plugins/plantuml.ts @@ -0,0 +1,24 @@ +import type { MarkdownItPlantumlOptions } from '@mdit/plugin-plantuml' +import { plantuml as _plantuml } from '@mdit/plugin-plantuml' +import type { PluginWithOptions } from 'markdown-it' + +export const plantuml: PluginWithOptions = ( + md, + options = [ + 'chronology', + 'gantt', + 'json', + 'latex', + 'math', + 'mindmap', + 'regex', + 'salt', + 'uml', + 'wbs', + 'yaml', + ].map((name) => ({ name })), +) => { + options.forEach((option) => { + md.use(_plantuml, option) + }) +} diff --git a/plugins/markdown/plugin-markdown-chart/src/node/markdownChartPlugin.ts b/plugins/markdown/plugin-markdown-chart/src/node/markdownChartPlugin.ts new file mode 100644 index 0000000000..a683db311a --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/markdownChartPlugin.ts @@ -0,0 +1,117 @@ +import { + addViteOptimizeDepsExclude, + addViteOptimizeDepsInclude, + addViteSsrExternal, + addViteSsrNoExternal, + isArray, +} from '@vuepress/helper' +import type { Plugin } from 'vuepress/core' +import { + chartjs, + echarts, + flowchart, + markmap, + mermaid, + plantuml, +} from './markdown-it-plugins/index.js' +import type { MarkdownChartPluginOptions } from './options.js' +import { prepareConfigFile } from './prepareConfigFile.js' +import { PLUGIN_NAME, getInstallStatus, logger } from './utils.js' + +export const markdownChartPlugin = + (options: MarkdownChartPluginOptions = {}): Plugin => + (app) => { + if (app.env.isDebug) logger.info('Options:', options) + + const getStatus = ( + key: keyof MarkdownChartPluginOptions, + pkgs: string[] = [], + ): boolean => { + const enabled = Boolean(options[key]) + const pkgInstalled = pkgs.every((pkg) => + getInstallStatus(pkg, Boolean(options[key])), + ) + + return enabled && pkgInstalled + } + + const status = { + chartjs: getStatus('chartjs', ['chart.js']), + echarts: getStatus('echarts', ['echarts']), + flowchart: getStatus('flowchart', ['flowchart.ts']), + markmap: getStatus('markmap', [ + 'markmap-lib', + 'markmap-toolbar', + 'markmap-view', + ]), + mermaid: getStatus('mermaid', ['mermaid']), + } + + return { + name: PLUGIN_NAME, + + define: { + __MC_DELAY__: options.delay ?? 800, + }, + + extendsMarkdown: (md) => { + if (status.chartjs) md.use(chartjs) + if (status.echarts) md.use(echarts) + if (status.flowchart) md.use(flowchart) + if (isArray(options.plantuml)) md.use(plantuml, options) + else if (options.plantuml) md.use(plantuml) + if (status.markmap) md.use(markmap) + if (status.mermaid) md.use(mermaid) + }, + + extendsBundlerOptions: (bundlerOptions: unknown): void => { + addViteSsrNoExternal(bundlerOptions, app, [ + '@vuepress/helper', + 'fflate', + ]) + + if (status.chartjs) { + addViteOptimizeDepsExclude( + bundlerOptions, + app, + 'chart.js/auto/auto.mjs', + ) + addViteSsrExternal(bundlerOptions, app, 'chart.js') + } + + if (status.echarts) { + addViteOptimizeDepsExclude(bundlerOptions, app, 'echarts') + addViteSsrExternal(bundlerOptions, app, 'echarts') + } + + if (status.flowchart) { + addViteOptimizeDepsExclude(bundlerOptions, app, 'flowchart.ts') + addViteSsrExternal(bundlerOptions, app, 'flowchart.ts') + } + + if (status.markmap) { + addViteOptimizeDepsInclude(bundlerOptions, app, [ + 'markmap-lib', + 'markmap-toolbar', + 'markmap-view', + ]) + addViteSsrExternal(bundlerOptions, app, [ + 'markmap-lib', + 'markmap-toolbar', + 'markmap-view', + ]) + } + + if (status.mermaid) { + addViteOptimizeDepsExclude( + bundlerOptions, + app, + 'mermaid/dist/mermaid.esm.min.mjs', + ) + addViteSsrExternal(bundlerOptions, app, 'mermaid') + } + }, + + clientConfigFile: () => prepareConfigFile(app, status), + } + } diff --git a/plugins/markdown/plugin-markdown-chart/src/node/options.ts b/plugins/markdown/plugin-markdown-chart/src/node/options.ts new file mode 100644 index 0000000000..0380af2c5b --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/options.ts @@ -0,0 +1,70 @@ +import type { MarkdownItPlantumlOptions } from '@mdit/plugin-plantuml' + +export interface MarkdownChartPluginOptions { + /** + * Whether to enable chart support + * + * 是否启用 chart 图表支持 + * + * @default false + */ + chartjs?: boolean + + /** + * Whether to enable echarts support + * + * 是否启用 echarts 图表支持 + * + * @default false + */ + echarts?: boolean + + /** + * Whether to enable flowchart support + * + * 是否启用 flowchart 流程图支持 + * + * @default false + */ + flowchart?: boolean + + /** + * Whether to enable markmap support + * + * 是否启用 markmap 流程图支持 + * + * @default false + */ + markmap?: boolean + + /** + * Whether to enable mermaid support + * + * 是否启用 Mermaid 流程图支持 + * + * @default false + */ + mermaid?: boolean + + /** + * Whether enable plantuml support + * + * 是否启用 plantuml 支持 + * + * @default false + */ + plantuml?: MarkdownItPlantumlOptions[] | boolean + + /** + * The delay of operating dom, in ms + * + * If the theme you are using has a switching animation, it is recommended to configure this option to `Switch animation duration + 200` + * + * 操作页面 DOM 的延时,单位 ms + * + * 如果你使用的主题有切换动画,建议配置此选项为 `切换动画时长 + 200` + * + * @default 800 + */ + delay?: number +} diff --git a/plugins/markdown/plugin-markdown-chart/src/node/prepareConfigFile.ts b/plugins/markdown/plugin-markdown-chart/src/node/prepareConfigFile.ts new file mode 100644 index 0000000000..e59fd5fc10 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/prepareConfigFile.ts @@ -0,0 +1,64 @@ +import type { App } from 'vuepress/core' + +import { CLIENT_FOLDER } from './utils.js' + +export const prepareConfigFile = async ( + app: App, + status: Record, +): Promise => { + const imports = new Set() + const enhances = new Set() + + if (status.chart) { + imports.add(`import ChartJS from "${CLIENT_FOLDER}components/ChartJS.js";`) + enhances.add(`app.component("ChartJS", ChartJS)`) + } + + if (status.echarts) { + imports.add(`import ECharts from "${CLIENT_FOLDER}components/ECharts.js";`) + imports.add( + `import { injectEChartsConfig } from "${CLIENT_FOLDER}/index.js";`, + ) + enhances.add(`app.component("ECharts", ECharts);`) + enhances.add(`injectEChartsConfig(app);`) + } + + if (status.flowchart) { + imports.add( + `import FlowChart from "${CLIENT_FOLDER}components/FlowChart.js";`, + ) + + enhances.add(`app.component("FlowChart", FlowChart);`) + } + + if (status.markmap) { + imports.add(`import MarkMap from "${CLIENT_FOLDER}components/MarkMap.js";`) + enhances.add(`app.component("MarkMap", MarkMap);`) + } + + if (status.mermaid) { + imports.add(`import Mermaid from "${CLIENT_FOLDER}components/Mermaid.js";`) + imports.add( + `import { injectMermaidConfig } from "${CLIENT_FOLDER}index.js";`, + ) + enhances.add(`injectMermaidConfig(app);`) + enhances.add(`app.component("Mermaid", Mermaid);`) + } + + return app.writeTemp( + `markdown-chart/config.js`, + `\ +import { defineClientConfig } from "vuepress/client"; +${Array.from(imports.values()).join('\n')} + +export default defineClientConfig({ + enhance: ({ app }) => { +${Array.from(enhances.values()) + .map((item) => item.split('\n').map((line) => ` ${line}`)) + .flat() + .join('\n')} + }, +}); +`, + ) +} diff --git a/plugins/markdown/plugin-markdown-chart/src/node/prepcareConfigFile.ts b/plugins/markdown/plugin-markdown-chart/src/node/prepcareConfigFile.ts new file mode 100644 index 0000000000..8a07b9f09f --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/prepcareConfigFile.ts @@ -0,0 +1,64 @@ +import type { App } from 'vuepress/core' + +import { CLIENT_FOLDER } from './utils.js' + +export const prepareConfigFile = async ( + app: App, + status: Record, +): Promise => { + const imports = new Set() + const enhances = new Set() + + if (status.chart) { + imports.add(`import ChartJS from "${CLIENT_FOLDER}components/ChartJS.js";`) + enhances.add(`app.component("ChartJS", ChartJS)`) + } + + if (status.echarts) { + imports.add(`import ECharts from "${CLIENT_FOLDER}components/ECharts.js";`) + imports.add( + `import { injectEChartsConfig } from "${CLIENT_FOLDER}/index.js";`, + ) + enhances.add(`app.component("ECharts", ECharts);`) + enhances.add(`injectEChartsConfig(app);`) + } + + if (status.flowchart) { + imports.add( + `import FlowChart from "${CLIENT_FOLDER}components/FlowChart.js";`, + ) + + enhances.add(`app.component("FlowChart", FlowChart);`) + } + + if (status.markmap) { + imports.add(`import MarkMap from "${CLIENT_FOLDER}components/MarkMap.js";`) + enhances.add(`app.component("MarkMap", MarkMap);`) + } + + if (status.mermaid) { + imports.add(`import Mermaid from "${CLIENT_FOLDER}components/Mermaid.js";`) + imports.add( + `import { injectMermaidConfig } from "${CLIENT_FOLDER}/index.js";`, + ) + enhances.add(`injectMermaidConfig(app);`) + enhances.add(`app.component("Mermaid", Mermaid);`) + } + + return app.writeTemp( + `markdown-chart/config.js`, + `\ +import { defineClientConfig } from "vuepress/client"; +${Array.from(imports.values()).join('\n')} + +export default defineClientConfig({ + enhance: ({ app }) => { +${Array.from(enhances.values()) + .map((item) => item.split('\n').map((line) => ` ${line}`)) + .flat() + .join('\n')} + }, +}); +`, + ) +} diff --git a/plugins/markdown/plugin-markdown-chart/src/node/utils.ts b/plugins/markdown/plugin-markdown-chart/src/node/utils.ts new file mode 100644 index 0000000000..bf2064d390 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/node/utils.ts @@ -0,0 +1,25 @@ +import { + Logger, + getInstalledStatus as _getInstalledStatus, + ensureEndingSlash, +} from '@vuepress/helper' +import { getDirname, path } from 'vuepress/utils' + +const __dirname = getDirname(import.meta.url) + +export const PLUGIN_NAME = '@vuepress/plugin-markdown-chart' + +export const logger = new Logger(PLUGIN_NAME) + +export const CLIENT_FOLDER = ensureEndingSlash( + path.resolve(__dirname, '../client'), +) + +export const getInstallStatus = (pkg: string, hint = true): boolean => { + const isInstalled = _getInstalledStatus(pkg, import.meta.url) + + if (hint && !isInstalled) + logger.error(`Package ${pkg} is not installed, please install it manually!`) + + return isInstalled +} diff --git a/plugins/markdown/plugin-markdown-chart/src/shims.d.ts b/plugins/markdown/plugin-markdown-chart/src/shims.d.ts new file mode 100644 index 0000000000..a548d41c4e --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/src/shims.d.ts @@ -0,0 +1,10 @@ +declare module 'mermaid/dist/mermaid.esm.min.mjs' { + // eslint-disable-next-line import/no-rename-default + import mermaid from 'mermaid' + + export default mermaid +} + +declare module '*.css' { + export {} +} diff --git a/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/chartjs.spec.ts.snap b/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/chartjs.spec.ts.snap new file mode 100644 index 0000000000..d794c0b0ec --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/chartjs.spec.ts.snap @@ -0,0 +1,15 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`chartjs > Should not break markdown fence 1`] = ` +"
const a = 1;
+
+" +`; + +exports[`chartjs > Should resolve chart info with javascript block 1`] = `""`; + +exports[`chartjs > Should resolve chart with empty title and body 1`] = `""`; + +exports[`chartjs > Should resolve chartjs info with js block 1`] = `""`; + +exports[`chartjs > Should resolve chartjs info with json block 1`] = `""`; diff --git a/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/echarts.spec.ts.snap b/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/echarts.spec.ts.snap new file mode 100644 index 0000000000..00c30aec92 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/echarts.spec.ts.snap @@ -0,0 +1,19 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`echarts > Should not break markdown fence 1`] = ` +"
const a = 1;
+
+" +`; + +exports[`echarts > Should resolve echarts container with empty title and body 1`] = `""`; + +exports[`echarts > Should resolve echarts container with javascript block 1`] = `""`; + +exports[`echarts > Should resolve echarts container with js block 1`] = `""`; + +exports[`echarts > Should resolve echarts container with json block 1`] = `""`; + +exports[`echarts > Should resolve echarts fence 1`] = `""`; + +exports[`echarts > Should resolve echarts fence with empty title and body 1`] = `""`; diff --git a/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/flowchart.spec.ts.snap b/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/flowchart.spec.ts.snap new file mode 100644 index 0000000000..1d1de487ca --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/flowchart.spec.ts.snap @@ -0,0 +1,47 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`flowchart > Should handle preset 1`] = `""`; + +exports[`flowchart > Should handle preset 2`] = `""`; + +exports[`flowchart > Should not render 1`] = ` +"

st=>start: Start|past:>http://www.google.com[blank] +e=>end: End|future:>http://www.google.com +op1=>operation: My Operation|past +op2=>operation: Stuff|current +sub1=>subroutine: My Subroutine|invalid +cond=>condition: Yes +or No?|approved:>http://www.google.com +c2=>condition: Good idea|rejected +io=>inputoutput: catch something...|future

+

st->op1(right)->cond +cond(yes, right)->c2 +cond(no)->sub1(left)->op1 +c2(yes)->io->e +c2(no)->op2->e

+" +`; + +exports[`flowchart > Should not render 2`] = ` +"
st=>start: Start|past:>http://www.google.com[blank]
+e=>end: End|future:>http://www.google.com
+op1=>operation: My Operation|past
+op2=>operation: Stuff|current
+sub1=>subroutine: My Subroutine|invalid
+cond=>condition: Yes
+or No?|approved:>http://www.google.com
+c2=>condition: Good idea|rejected
+io=>inputoutput: catch something...|future
+
+st->op1(right)->cond
+cond(yes, right)->c2
+cond(no)->sub1(left)->op1
+c2(yes)->io->e
+c2(no)->op2->e
+
+" +`; + +exports[`flowchart > Should render \`\`\`flow 1`] = `""`; + +exports[`flowchart > Should render \`\`\`flowchart 1`] = `""`; diff --git a/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/markmap.spec.ts.snap b/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/markmap.spec.ts.snap new file mode 100644 index 0000000000..71025aebdd --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/markmap.spec.ts.snap @@ -0,0 +1,66 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`markmap plugin > Should not render 1`] = ` +"
+

markmap: +colorFreezeLevel: 2

+

markmap

+

Links

+ +

Features

+
    +
  • links
  • +
  • strong del italic ==highlight==
  • +
  • multiline +text
  • +
  • inline code
  • +
  • +
    const a = 1;
    +
    +
  • +
  • Katex +
      +
    • $x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}$
    • +
    +
  • +
  • Now we can wrap very very very very long text based on maxWidth option
  • +
+" +`; + +exports[`markmap plugin > Should not render 2`] = ` +"
---
+markmap:
+  colorFreezeLevel: 2
+---
+
+# markmap
+
+## Links
+
+- <https://markmap.js.org/>
+- [GitHub](https://github.com/markmap/markmap)
+
+## Features
+
+- links
+- **strong** ~~del~~ *italic* ==highlight==
+- multiline
+  text
+- \`inline code\`
+-
+    \`\`\`js
+    const a = 1;
+    \`\`\`
+- Katex
+  - $x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}$
+- Now we can wrap very very very very long text based on \`maxWidth\` option
+
+
+" +`; + +exports[`markmap plugin > Should render \`\`\`markmap 1`] = `""`; diff --git a/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/mermaid.spec.ts.snap b/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/mermaid.spec.ts.snap new file mode 100644 index 0000000000..36af614d4f --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/tests/node/__snapshots__/mermaid.spec.ts.snap @@ -0,0 +1,124 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`getMermaidContent() > Should work with content 1`] = ` +"flowchart TB + c1-->a2 + subgraph one + a1-->a2 + end + subgraph two + b1-->b2 + end + subgraph three + c1-->c2 + end + one --> two + three --> two + two --> c2" +`; + +exports[`getMermaidContent() > Should work with content 2`] = ` +"sequenceDiagram + Alice ->> Bob: Hello Bob, how are you? + Bob-->>John: How about you John? + Bob--x Alice: I am good thanks! + Bob-x John: I am good thanks! + Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. + + Bob-->Alice: Checking with John... + Alice->John: Yes... John, how are you?" +`; + +exports[`getMermaidContent() > Should work with title and content 1`] = ` +"--- +title: Sample Title +--- + +flowchart TB + c1-->a2 + subgraph one + a1-->a2 + end + subgraph two + b1-->b2 + end + subgraph three + c1-->c2 + end + one --> two + three --> two + two --> c2" +`; + +exports[`getMermaidContent() > Should work with title and content 2`] = ` +"--- +title: Sample Title +--- + +sequenceDiagram + Alice ->> Bob: Hello Bob, how are you? + Bob-->>John: How about you John? + Bob--x Alice: I am good thanks! + Bob-x John: I am good thanks! + Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. + + Bob-->Alice: Checking with John... + Alice->John: Yes... John, how are you?" +`; + +exports[`mermaid plugin > Should not render 1`] = ` +"

flowchart TB +c1-->a2 +subgraph one +a1-->a2 +end +subgraph two +b1-->b2 +end +subgraph three +c1-->c2 +end +one --> two +three --> two +two --> c2

+" +`; + +exports[`mermaid plugin > Should not render 2`] = ` +"
flowchart TB
+  c1-->a2
+  subgraph one
+  a1-->a2
+  end
+  subgraph two
+  b1-->b2
+  end
+  subgraph three
+  c1-->c2
+  end
+  one --> two
+  three --> two
+  two --> c2
+
+" +`; + +exports[`mermaid plugin > Should render \`\`\`class 1`] = `""`; + +exports[`mermaid plugin > Should render \`\`\`er 1`] = `""`; + +exports[`mermaid plugin > Should render \`\`\`gantt 1`] = `""`; + +exports[`mermaid plugin > Should render \`\`\`git-graph 1`] = `""`; + +exports[`mermaid plugin > Should render \`\`\`journey 1`] = `""`; + +exports[`mermaid plugin > Should render \`\`\`mermaid 1`] = `""`; + +exports[`mermaid plugin > Should render \`\`\`pie 1`] = `""`; + +exports[`mermaid plugin > Should render \`\`\`sequence 1`] = `""`; + +exports[`mermaid plugin > Should render \`\`\`sequence 2`] = `""`; + +exports[`mermaid plugin > Should render \`\`\`state 1`] = `""`; diff --git a/plugins/markdown/plugin-markdown-chart/tests/node/chartjs.spec.ts b/plugins/markdown/plugin-markdown-chart/tests/node/chartjs.spec.ts new file mode 100644 index 0000000000..bf1f63870a --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/tests/node/chartjs.spec.ts @@ -0,0 +1,203 @@ +import MarkdownIt from 'markdown-it' +import { describe, expect, it } from 'vitest' + +import { chartjs } from '../../src/node/markdown-it-plugins/chartjs.js' + +describe('chartjs', () => { + const markdownIt = MarkdownIt({ linkify: true }).use(chartjs) + + it('Should resolve chartjs info with json block', () => { + const result = markdownIt.render( + ` +::: chartjs A bar chart + +\`\`\`json +{ + "type": "bar", + "data": { + "labels": ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"], + "datasets": [ + { + "label": "# of Votes", + "data": [12, 19, 3, 5, 2, 3], + "backgroundColor": [ + "rgba(255, 99, 132, 0.2)", + "rgba(54, 162, 235, 0.2)", + "rgba(255, 206, 86, 0.2)", + "rgba(75, 192, 192, 0.2)", + "rgba(153, 102, 255, 0.2)", + "rgba(255, 159, 64, 0.2)" + ], + "borderColor": [ + "rgba(255, 99, 132, 1)", + "rgba(54, 162, 235, 1)", + "rgba(255, 206, 86, 1)", + "rgba(75, 192, 192, 1)", + "rgba(153, 102, 255, 1)", + "rgba(255, 159, 64, 1)" + ], + "borderWidth": 1 + } + ] + }, + "options": { + "scales": { + "y": { + "beginAtZero": true + } + } + } +} +\`\`\` + +::: +`, + {}, + ) + + expect(result).toMatch(/<\/ChartJS>/) + expect(result).toContain(`title="${encodeURIComponent('A bar chart')}"`) + expect(result).toContain('type="json"') + expect(result).toMatchSnapshot() + }) + + it('Should resolve chartjs info with js block', () => { + const result = markdownIt.render( + ` +::: chartjs A bar chart + +\`\`\`js +const config = { + type: "bar", + data: { + labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"], + datasets: [ + { + label: "# of Votes", + data: [12, 19, 3, 5, 2, 3], + backgroundColor: [ + "rgba(255, 99, 132, 0.2)", + "rgba(54, 162, 235, 0.2)", + "rgba(255, 206, 86, 0.2)", + "rgba(75, 192, 192, 0.2)", + "rgba(153, 102, 255, 0.2)", + "rgba(255, 159, 64, 0.2)", + ], + borderColor: [ + "rgba(255, 99, 132, 1)", + "rgba(54, 162, 235, 1)", + "rgba(255, 206, 86, 1)", + "rgba(75, 192, 192, 1)", + "rgba(153, 102, 255, 1)", + "rgba(255, 159, 64, 1)", + ], + borderWidth: 1, + }, + ], + }, + options: { + scales: { + y: { + beginAtZero: true, + }, + }, + }, +}; +\`\`\` + +::: +`, + {}, + ) + + expect(result).toMatch(/<\/ChartJS>/) + expect(result).toContain(`title="${encodeURIComponent('A bar chart')}"`) + expect(result).toContain('type="js"') + expect(result).toMatchSnapshot() + }) + + it('Should resolve chart info with javascript block', () => { + const result = markdownIt.render( + ` +::: chartjs A bar chart + +\`\`\`javascript +const config = { + type: "bar", + data: { + labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"], + datasets: [ + { + label: "# of Votes", + data: [12, 19, 3, 5, 2, 3], + backgroundColor: [ + "rgba(255, 99, 132, 0.2)", + "rgba(54, 162, 235, 0.2)", + "rgba(255, 206, 86, 0.2)", + "rgba(75, 192, 192, 0.2)", + "rgba(153, 102, 255, 0.2)", + "rgba(255, 159, 64, 0.2)", + ], + borderColor: [ + "rgba(255, 99, 132, 1)", + "rgba(54, 162, 235, 1)", + "rgba(255, 206, 86, 1)", + "rgba(75, 192, 192, 1)", + "rgba(153, 102, 255, 1)", + "rgba(255, 159, 64, 1)", + ], + borderWidth: 1, + }, + ], + }, + options: { + scales: { + y: { + beginAtZero: true, + }, + }, + }, +}; +\`\`\` + +::: +`, + {}, + ) + + expect(result).toMatch(/<\/ChartJS>/) + expect(result).toContain(`title="${encodeURIComponent('A bar chart')}"`) + expect(result).toContain('type="js"') + expect(result).toMatchSnapshot() + }) + + it('Should resolve chart with empty title and body', () => { + const result = markdownIt.render( + ` +::: chartjs + +::: +`, + {}, + ) + + expect(result).toMatch(/<\/ChartJS>/) + expect(result).not.toContain('title="') + expect(result).toContain('type=""') + expect(result).toMatchSnapshot() + }) + + it('Should not break markdown fence', () => { + const result = markdownIt.render( + ` +\`\`\`js +const a = 1; +\`\`\` +`, + {}, + ) + + expect(result).toMatch(/[\s\S]*<\/pre>/) + expect(result).toMatchSnapshot() + }) +}) diff --git a/plugins/markdown/plugin-markdown-chart/tests/node/echarts.spec.ts b/plugins/markdown/plugin-markdown-chart/tests/node/echarts.spec.ts new file mode 100644 index 0000000000..edd849bd96 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/tests/node/echarts.spec.ts @@ -0,0 +1,185 @@ +import MarkdownIt from 'markdown-it' +import { describe, expect, it } from 'vitest' + +import { echarts } from '../../src/node/markdown-it-plugins/echarts.js' + +describe('echarts', () => { + const markdownIt = MarkdownIt({ linkify: true }).use(echarts) + + it('Should resolve echarts container with json block', () => { + const result = markdownIt.render( + ` +::: echarts A line chart + +\`\`\`json +{ + 'xAxis': { + 'type': 'category', + 'data': ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + }, + 'yAxis': { + 'type': 'value' + }, + 'series': [ + { + 'data': [150, 230, 224, 218, 135, 147, 260], + 'type': 'line' + } + ] +} +\`\`\` + +::: +`, + {}, + ) + + expect(result).toMatch(/<\/ECharts>/) + expect(result).toContain(`title="${encodeURIComponent('A line chart')}"`) + expect(result).not.toContain('type=""') + expect(result).toMatchSnapshot() + }) + + it('Should resolve echarts container with js block', () => { + const result = markdownIt.render( + ` +::: echarts A line chart + +\`\`\`js +const option = { + xAxis: { + type: "category", + data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], + }, + yAxis: { + type: "value", + }, + series: [ + { + data: [150, 230, 224, 218, 135, 147, 260], + type: "line", + }, + ], +}; +\`\`\` + +::: +`, + {}, + ) + + expect(result).toMatch(/<\/ECharts>/) + expect(result).toContain(`title="${encodeURIComponent('A line chart')}"`) + expect(result).toContain('type="js"') + expect(result).toMatchSnapshot() + }) + + it('Should resolve echarts container with javascript block', () => { + const result = markdownIt.render( + ` +::: echarts A line chart + +\`\`\`javascript +const option = { + xAxis: { + type: "category", + data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], + }, + yAxis: { + type: "value", + }, + series: [ + { + data: [150, 230, 224, 218, 135, 147, 260], + type: "line", + }, + ], +}; +\`\`\` + +::: +`, + {}, + ) + + expect(result).toMatch(/<\/ECharts>/) + expect(result).toContain(`title="${encodeURIComponent('A line chart')}"`) + expect(result).toContain('type="js"') + expect(result).toMatchSnapshot() + }) + + it('Should resolve echarts container with empty title and body', () => { + const result = markdownIt.render( + ` +::: echarts + +::: +`, + {}, + ) + + expect(result).toMatch(/<\/ECharts>/) + expect(result).not.toContain('title="') + expect(result).not.toContain('type=""') + expect(result).toMatchSnapshot() + }) + + it('Should resolve echarts fence', () => { + const result = markdownIt.render( + ` +\`\`\`echarts:A line chart +{ + 'xAxis': { + 'type': 'category', + 'data': ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + }, + 'yAxis': { + 'type': 'value' + }, + 'series': [ + { + 'data': [150, 230, 224, 218, 135, 147, 260], + 'type': 'line' + } + ] +} +\`\`\` +`, + {}, + ) + + expect(result).toMatch(/<\/ECharts>/) + expect(result).toContain(`title="${encodeURIComponent('A line chart')}"`) + expect(result).not.toContain('type=""') + expect(result).toMatchSnapshot() + }) + + it('Should resolve echarts fence with empty title and body', () => { + const result = markdownIt.render( + ` +\`\`\`echarts +\`\`\` +`, + {}, + ) + + expect(result).toMatch(/<\/ECharts>/) + expect(result).not.toContain('title="') + expect(result).not.toContain('type=""') + expect(result).toMatchSnapshot() + }) + + it('Should not break markdown fence', () => { + const result = markdownIt.render( + ` +\`\`\`js +const a = 1; +\`\`\` +`, + {}, + ) + + expect(result).toMatch(/[\s\S]*<\/pre>/) + expect(result).toMatchSnapshot() + }) +}) diff --git a/plugins/markdown/plugin-markdown-chart/tests/node/flowchart.spec.ts b/plugins/markdown/plugin-markdown-chart/tests/node/flowchart.spec.ts new file mode 100644 index 0000000000..385e17000a --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/tests/node/flowchart.spec.ts @@ -0,0 +1,90 @@ +import MarkdownIt from 'markdown-it' +import { describe, expect, it } from 'vitest' + +import { flowchart } from '../../src/node/markdown-it-plugins/flowchart.js' + +const demo = `st=>start: Start|past:>http://www.google.com[blank] +e=>end: End|future:>http://www.google.com +op1=>operation: My Operation|past +op2=>operation: Stuff|current +sub1=>subroutine: My Subroutine|invalid +cond=>condition: Yes +or No?|approved:>http://www.google.com +c2=>condition: Good idea|rejected +io=>inputoutput: catch something...|future + +st->op1(right)->cond +cond(yes, right)->c2 +cond(no)->sub1(left)->op1 +c2(yes)->io->e +c2(no)->op2->e` + +describe('flowchart', () => { + const markdownIt = MarkdownIt({ linkify: true }).use(flowchart) + + it('Should render ```flow', () => { + const flowRenderResult = markdownIt.render(` +\`\`\`flow +${demo} +\`\`\` +`) + + expect(flowRenderResult).toMatch( + /<\/FlowChart>/, + ) + expect(flowRenderResult).toMatchSnapshot() + }) + + it('Should render ```flowchart', () => { + const flowChartRenderResult = markdownIt.render(` +\`\`\`flowchart +${demo} +\`\`\` +`) + + expect(flowChartRenderResult).toMatch( + /<\/FlowChart>/, + ) + expect(flowChartRenderResult).toMatchSnapshot() + }) + + it('Should not render', () => { + expect( + markdownIt.render(` +${demo} +`), + ).toMatchSnapshot() + + expect( + markdownIt.render(` +\`\`\`md +${demo} +\`\`\` +`), + ).toMatchSnapshot() + }) + + it('Should handle preset', () => { + const flowRenderResult = markdownIt.render(` +\`\`\`flow:ant +${demo} +\`\`\` +`) + + expect(flowRenderResult).toMatch( + /<\/FlowChart>/, + ) + expect(flowRenderResult).toMatchSnapshot() + + const flowChartRenderResult = markdownIt.render(` +\`\`\`flowchart:ant +${demo} +\`\`\` +`) + + expect(flowChartRenderResult).toMatch( + /<\/FlowChart>/, + ) + expect(flowChartRenderResult).toMatchSnapshot() + }) +}) diff --git a/plugins/markdown/plugin-markdown-chart/tests/node/markmap.spec.ts b/plugins/markdown/plugin-markdown-chart/tests/node/markmap.spec.ts new file mode 100644 index 0000000000..4bb4f2d49e --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/tests/node/markmap.spec.ts @@ -0,0 +1,66 @@ +import MarkdownIt from 'markdown-it' +import { describe, expect, it } from 'vitest' + +import { markmap } from '../../src/node/markdown-it-plugins/markmap.js' + +const content = `\ +--- +markmap: + colorFreezeLevel: 2 +--- + +# markmap + +## Links + +- +- [GitHub](https://github.com/markmap/markmap) + +## Features + +- links +- **strong** ~~del~~ *italic* ==highlight== +- multiline + text +- \`inline code\` +- + \`\`\`js + const a = 1; + \`\`\` +- Katex + - $x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}$ +- Now we can wrap very very very very long text based on \`maxWidth\` option +` + +describe('markmap plugin', () => { + const markdownIt = MarkdownIt({ linkify: true }).use(markmap) + + it('Should render ```markmap', () => { + const renderResult = markdownIt.render(` +\`\`\`\`markmap +${content} +\`\`\`\` +`) + + expect(renderResult).toMatch( + /<\/MarkMap>/, + ) + expect(renderResult).toMatchSnapshot() + }) + + it('Should not render', () => { + expect( + markdownIt.render(` +${content} +`), + ).toMatchSnapshot() + + expect( + markdownIt.render(` +\`\`\`md +${content} +\`\`\` +`), + ).toMatchSnapshot() + }) +}) diff --git a/plugins/markdown/plugin-markdown-chart/tests/node/mermaid.spec.ts b/plugins/markdown/plugin-markdown-chart/tests/node/mermaid.spec.ts new file mode 100644 index 0000000000..c4afd8bb20 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/tests/node/mermaid.spec.ts @@ -0,0 +1,276 @@ +import { decodeData } from '@vuepress/helper' +import MarkdownIt from 'markdown-it' +import { describe, expect, it } from 'vitest' + +import { + getMermaidContent, + mermaid, +} from '../../src/node/markdown-it-plugins/mermaid.js' + +const title = 'Sample Title' + +const flowchartDemo = `\ +flowchart TB + c1-->a2 + subgraph one + a1-->a2 + end + subgraph two + b1-->b2 + end + subgraph three + c1-->c2 + end + one --> two + three --> two + two --> c2\ +` + +const sequenceDemo = `\ +Alice ->> Bob: Hello Bob, how are you? +Bob-->>John: How about you John? +Bob--x Alice: I am good thanks! +Bob-x John: I am good thanks! +Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. + +Bob-->Alice: Checking with John... +Alice->John: Yes... John, how are you?\ +` + +describe('getMermaidContent()', () => { + it('Should work with content', () => { + expect(getMermaidContent({ content: flowchartDemo })).toMatchSnapshot() + expect( + getMermaidContent({ diagram: 'sequenceDiagram', content: sequenceDemo }), + ).toMatchSnapshot() + }) + + it('Should work with title and content', () => { + expect( + getMermaidContent({ title, content: flowchartDemo }), + ).toMatchSnapshot() + expect( + getMermaidContent({ + diagram: 'sequenceDiagram', + title, + content: sequenceDemo, + }), + ).toMatchSnapshot() + }) +}) + +describe('mermaid plugin', () => { + const markdownIt = MarkdownIt({ linkify: true }).use(mermaid) + + it('Should render ```mermaid', () => { + const renderResult = markdownIt.render(` +\`\`\`mermaid +${flowchartDemo} +\`\`\` +`) + + expect(renderResult).toMatch( + /<\/Mermaid>/, + ) + expect( + decodeData( + /<\/Mermaid>/.exec( + renderResult, + )?.[1] ?? '', + ), + ).toMatch(flowchartDemo) + expect(renderResult).toMatchSnapshot() + }) + + it('Should not render', () => { + expect( + markdownIt.render(` +${flowchartDemo} +`), + ).toMatchSnapshot() + + expect( + markdownIt.render(` +\`\`\`md +${flowchartDemo} +\`\`\` +`), + ).toMatchSnapshot() + }) + + it('Should render ```sequence', () => { + const renderResult1 = markdownIt.render(` +\`\`\`sequence +Alice ->> Bob: Hello Bob, how are you? +Bob-->>John: How about you John? +Bob--x Alice: I am good thanks! +Bob-x John: I am good thanks! +Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. + +Bob-->Alice: Checking with John... +Alice->John: Yes... John, how are you? +\`\`\` +`) + const renderResult2 = markdownIt.render(` +\`\`\`sequence Greetings +Alice ->> Bob: Hello Bob, how are you? +Bob-->>John: How about you John? +Bob--x Alice: I am good thanks! +Bob-x John: I am good thanks! +Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. + +Bob-->Alice: Checking with John... +Alice->John: Yes... John, how are you? +\`\`\` +`) + + expect(renderResult1).toMatchSnapshot() + expect(renderResult2).toMatchSnapshot() + }) + + it('Should render ```class', () => { + const renderResult = markdownIt.render(` +\`\`\`class +class Square~Shape~{ + int id + List~int~ position + setPoints(List~int~ points) + getPoints() List~int~ +} + +Square : -List~string~ messages +Square : +setMessages(List~string~ messages) +Square : +getMessages() List~string~ +\`\`\` +`) + + expect(renderResult).toMatchSnapshot() + }) + + it('Should render ```state', () => { + const renderResult = markdownIt.render(` +\`\`\`state +[*] --> Active + +state Active { + [*] --> NumLockOff + NumLockOff --> NumLockOn : EvNumLockPressed + NumLockOn --> NumLockOff : EvNumLockPressed + -- + [*] --> CapsLockOff + CapsLockOff --> CapsLockOn : EvCapsLockPressed + CapsLockOn --> CapsLockOff : EvCapsLockPressed + -- + [*] --> ScrollLockOff + ScrollLockOff --> ScrollLockOn : EvScrollLockPressed + ScrollLockOn --> ScrollLockOff : EvScrollLockPressed +} +\`\`\` +`) + + expect(renderResult).toMatchSnapshot() + }) + + it('Should render ```er', () => { + const renderResult = markdownIt.render(` +\`\`\`er +CAR ||--o{ NAMED-DRIVER : allows +CAR { + string registrationNumber + string make + string model +} +PERSON ||--o{ NAMED-DRIVER : is +PERSON { + string firstName + string lastName + int age +} +\`\`\` +`) + + expect(renderResult).toMatchSnapshot() + }) + + it('Should render ```journey', () => { + const renderResult = markdownIt.render(` +\`\`\`journey +title My working day +section Go to work + Make tea: 5: Me + Go upstairs: 3: Me + Do work: 1: Me, Cat +section Go home + Go downstairs: 5: Me + Sit down: 5: Me +\`\`\` +`) + + expect(renderResult).toMatchSnapshot() + }) + + it('Should render ```gantt', () => { + const renderResult = markdownIt.render(` +\`\`\`gantt +dateFormat YYYY-MM-DD +title Adding GANTT diagram functionality to mermaid +excludes weekends +%% (\`excludes\` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".) + +section A section +Completed task :done, des1, 2014-01-06,2014-01-08 +Active task :active, des2, 2014-01-09, 3d +Future task : des3, after des2, 5d +Future task2 : des4, after des3, 5d + +section Critical tasks +Completed task in the critical line :crit, done, 2014-01-06,24h +Implement parser :crit, done, after des1, 2d +Create tests for parser :crit, active, 3d +Future task in critical line :crit, 5d +Create tests for renderer :2d +Add to mermaid :1d + +section Documentation +Describe gantt syntax :active, a1, after des1, 3d +Add gantt diagram to demo page :after a1 , 20h +Add another diagram to demo page :doc1, after a1 , 48h + +section Last section +Describe gantt syntax :after doc1, 3d +Add gantt diagram to demo page :20h +Add another diagram to demo page :48h +\`\`\` +`) + + expect(renderResult).toMatchSnapshot() + }) + + it('Should render ```pie', () => { + const renderResult = markdownIt.render(` +\`\`\`pie +title What Voldemort doesn’t have? + "FRIENDS" : 2 + "FAMILY" : 3 + "NOSE" : 45 +\`\`\` +`) + + expect(renderResult).toMatchSnapshot() + }) + + it('Should render ```git-graph', () => { + const renderResult = markdownIt.render(` +\`\`\`git-graph +commit id: "Normal" +commit +commit id: "Reverse" type: REVERSE +commit +commit id: "Highlight" type: HIGHLIGHT +commit +\`\`\` +`) + + expect(renderResult).toMatchSnapshot() + }) +}) diff --git a/plugins/markdown/plugin-markdown-chart/tsconfig.build.json b/plugins/markdown/plugin-markdown-chart/tsconfig.build.json new file mode 100644 index 0000000000..85b37d29a2 --- /dev/null +++ b/plugins/markdown/plugin-markdown-chart/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.build.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["./src"], + "references": [{ "path": "../../../tools/helper/tsconfig.build.json" }] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aabb288722..a071e4f088 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,16 +10,16 @@ importers: devDependencies: '@commitlint/cli': specifier: ^19.5.0 - version: 19.5.0(@types/node@22.7.7)(typescript@5.6.3) + version: 19.5.0(@types/node@22.7.8)(typescript@5.6.3) '@commitlint/config-conventional': specifier: ^19.5.0 version: 19.5.0 '@lerna-lite/cli': specifier: ^3.10.0 - version: 3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3))(@lerna-lite/version@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3))(@types/node@22.7.7)(typescript@5.6.3))(@types/node@22.7.7)(typescript@5.6.3) + version: 3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3))(@lerna-lite/version@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3))(@types/node@22.7.8)(typescript@5.6.3))(@types/node@22.7.8)(typescript@5.6.3) '@lerna-lite/publish': specifier: ^3.10.0 - version: 3.10.0(@types/node@22.7.7)(typescript@5.6.3) + version: 3.10.0(@types/node@22.7.8)(typescript@5.6.3) '@rollup/plugin-commonjs': specifier: ^28.0.1 version: 28.0.1(rollup@4.24.0) @@ -27,14 +27,14 @@ importers: specifier: ^15.3.0 version: 15.3.0(rollup@4.24.0) '@types/node': - specifier: ^22.7.7 - version: 22.7.7 + specifier: ^22.7.8 + version: 22.7.8 '@types/webpack-env': specifier: ^1.18.5 version: 1.18.5 '@vitest/coverage-istanbul': specifier: ^2.1.3 - version: 2.1.3(vitest@2.1.3(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)) + version: 2.1.3(vitest@2.1.3(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)) conventional-changelog-cli: specifier: ^5.0.0 version: 5.0.0(conventional-commits-filter@5.0.0) @@ -48,8 +48,8 @@ importers: specifier: ^9.13.0 version: 9.13.0(jiti@1.21.6) eslint-config-vuepress: - specifier: ^5.2.1 - version: 5.2.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(vue-eslint-parser@9.4.3(eslint@9.13.0(jiti@1.21.6))) + specifier: ^5.2.2 + version: 5.2.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(vue-eslint-parser@9.4.3(eslint@9.13.0(jiti@1.21.6))) http-server: specifier: ^14.1.1 version: 14.1.1 @@ -109,13 +109,13 @@ importers: version: 5.6.3 vite: specifier: ~5.4.9 - version: 5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) + version: 5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) vitest: specifier: ^2.1.3 - version: 2.1.3(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) + version: 2.1.3(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) docs: dependencies: @@ -124,7 +124,7 @@ importers: version: 0.13.1(markdown-it@14.1.0) '@vuepress/bundler-vite': specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5) + version: 2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0) '@vuepress/bundler-webpack': specifier: 2.0.0-rc.18 version: 2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3) @@ -152,6 +152,9 @@ importers: '@vuepress/plugin-feed': specifier: workspace:* version: link:../plugins/blog/plugin-feed + '@vuepress/plugin-markdown-chart': + specifier: workspace:* + version: link:../plugins/markdown/plugin-markdown-chart '@vuepress/plugin-markdown-image': specifier: workspace:* version: link:../plugins/markdown/plugin-markdown-image @@ -191,14 +194,35 @@ importers: '@vuepress/theme-default': specifier: workspace:* version: link:../themes/theme-default + chart.js: + specifier: ^4.4.5 + version: 4.4.5 + echarts: + specifier: ^5.5.1 + version: 5.5.1 + flowchart.ts: + specifier: ^3.0.1 + version: 3.0.1 katex: - specifier: 0.16.11 + specifier: ^0.16.11 version: 0.16.11 + markmap-lib: + specifier: ^0.17.2 + version: 0.17.2(markmap-common@0.17.1) + markmap-toolbar: + specifier: ^0.17.2 + version: 0.17.2(markmap-common@0.17.1) + markmap-view: + specifier: ^0.17.2 + version: 0.17.2(markmap-common@0.17.1) mathjax-full: - specifier: 3.2.2 + specifier: ^3.2.2 version: 3.2.2 + mermaid: + specifier: ^11.3.0 + version: 11.3.0 sass-embedded: - specifier: 1.80.3 + specifier: ^1.80.3 version: 1.80.3 sass-loader: specifier: ^16.0.2 @@ -208,13 +232,13 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) e2e: dependencies: '@vuepress/bundler-vite': specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5) + version: 2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0) '@vuepress/bundler-webpack': specifier: 2.0.0-rc.18 version: 2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3) @@ -265,7 +289,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: '@playwright/test': specifier: ^1.48.1 @@ -281,13 +305,13 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/analytics/plugin-google-analytics: dependencies: vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/analytics/plugin-umami-analytics: dependencies: @@ -299,7 +323,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/blog/plugin-blog: dependencies: @@ -314,7 +338,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/blog/plugin-comment: dependencies: @@ -338,7 +362,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/blog/plugin-feed: dependencies: @@ -347,7 +371,7 @@ importers: version: link:../../../tools/helper vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) xml-js: specifier: ^1.6.11 version: 1.6.11 @@ -366,7 +390,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/development/plugin-git: dependencies: @@ -375,7 +399,7 @@ importers: version: 9.4.1 vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/development/plugin-palette: dependencies: @@ -387,7 +411,7 @@ importers: version: 4.0.1 vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/development/plugin-reading-time: dependencies: @@ -399,7 +423,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/development/plugin-rtl: dependencies: @@ -411,7 +435,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/development/plugin-sass-palette: dependencies: @@ -432,11 +456,11 @@ importers: version: 16.0.2(sass-embedded@1.80.3)(sass@1.80.3)(webpack@5.95.0(esbuild@0.23.1)) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: '@vuepress/bundler-vite': specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5) + version: 2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0) '@vuepress/bundler-webpack': specifier: 2.0.0-rc.18 version: 2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3) @@ -451,7 +475,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/development/plugin-toc: dependencies: @@ -463,7 +487,7 @@ importers: version: 4.4.5(vue@3.5.12(typescript@5.6.3)) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/features/plugin-back-to-top: dependencies: @@ -478,7 +502,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/features/plugin-catalog: dependencies: @@ -490,7 +514,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/features/plugin-copy-code: dependencies: @@ -505,7 +529,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/features/plugin-copyright: dependencies: @@ -520,7 +544,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/features/plugin-medium-zoom: dependencies: @@ -535,7 +559,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/features/plugin-notice: dependencies: @@ -550,7 +574,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/features/plugin-nprogress: dependencies: @@ -562,7 +586,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/features/plugin-photo-swipe: dependencies: @@ -580,7 +604,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/features/plugin-watermark: dependencies: @@ -592,7 +616,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) watermark-js-plus: specifier: ^1.5.7 version: 1.5.7 @@ -607,7 +631,7 @@ importers: version: link:../../development/plugin-git vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/markdown/plugin-links-check: dependencies: @@ -616,7 +640,59 @@ importers: version: link:../../../tools/helper vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + + plugins/markdown/plugin-markdown-chart: + dependencies: + '@mdit/plugin-container': + specifier: ^0.13.1 + version: 0.13.1(markdown-it@14.1.0) + '@mdit/plugin-plantuml': + specifier: ^0.13.1 + version: 0.13.1(markdown-it@14.1.0) + '@vuepress/helper': + specifier: workspace:* + version: link:../../../tools/helper + '@vueuse/core': + specifier: ^11.1.0 + version: 11.1.0(vue@3.5.12(typescript@5.6.3)) + chart.js: + specifier: ^4.4.5 + version: 4.4.5 + echarts: + specifier: ^5.5.1 + version: 5.5.1 + flowchart.ts: + specifier: ^3.0.1 + version: 3.0.1 + markmap-lib: + specifier: ^0.17.2 + version: 0.17.2(markmap-common@0.17.1) + markmap-toolbar: + specifier: ^0.17.2 + version: 0.17.2(markmap-common@0.17.1) + markmap-view: + specifier: ^0.17.2 + version: 0.17.2(markmap-common@0.17.1) + mermaid: + specifier: ^11.3.0 + version: 11.3.0 + vue: + specifier: ^3.5.12 + version: 3.5.12(typescript@5.6.3) + vuepress: + specifier: 2.0.0-rc.18 + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + devDependencies: + '@types/markdown-it': + specifier: ^14.1.2 + version: 14.1.2 + markdown-it: + specifier: ^14.1.0 + version: 14.1.0 + markmap-common: + specifier: ^0.17.1 + version: 0.17.1 plugins/markdown/plugin-markdown-container: dependencies: @@ -628,7 +704,7 @@ importers: version: 4.0.0 vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: markdown-it: specifier: ^14.1.0 @@ -653,7 +729,7 @@ importers: version: 11.1.0(vue@3.5.12(typescript@5.6.3)) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: markdown-it: specifier: ^14.1.0 @@ -681,7 +757,7 @@ importers: version: link:../../../tools/helper vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/markdown/plugin-markdown-math: dependencies: @@ -708,7 +784,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: markdown-it: specifier: ^14.1.0 @@ -733,7 +809,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: markdown-it: specifier: ^14.1.0 @@ -752,7 +828,7 @@ importers: version: 1.29.0 vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: '@types/markdown-it': specifier: ^14.1.2 @@ -789,7 +865,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: markdown-it: specifier: ^14.1.0 @@ -814,7 +890,7 @@ importers: version: 1.22.0 vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: '@types/markdown-it': specifier: ^14.1.2 @@ -842,7 +918,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) workbox-build: specifier: ^7.1.1 version: 7.1.1 @@ -855,7 +931,7 @@ importers: dependencies: vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/search/plugin-docsearch: dependencies: @@ -882,7 +958,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/search/plugin-search: dependencies: @@ -894,7 +970,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/seo/plugin-seo: dependencies: @@ -903,7 +979,7 @@ importers: version: link:../../../tools/helper vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: '@vuepress/plugin-git': specifier: workspace:* @@ -919,7 +995,7 @@ importers: version: 8.0.0 vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: '@vuepress/plugin-git': specifier: workspace:* @@ -935,13 +1011,13 @@ importers: version: 10.4.3 vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/tools/plugin-google-tag-manager: dependencies: vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/tools/plugin-redirect: dependencies: @@ -959,7 +1035,7 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) plugins/tools/plugin-register-components: dependencies: @@ -968,7 +1044,7 @@ importers: version: 3.6.0 vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) themes/theme-default: dependencies: @@ -1034,13 +1110,13 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) tools/create-vuepress: dependencies: '@inquirer/prompts': specifier: ^7.0.0 - version: 7.0.0(@types/node@22.7.7) + version: 7.0.0(@types/node@22.7.8) cac: specifier: ^6.7.14 version: 6.7.14 @@ -1077,14 +1153,14 @@ importers: version: 3.5.12(typescript@5.6.3) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) devDependencies: '@types/connect': specifier: 3.4.38 version: 3.4.38 '@vuepress/bundler-vite': specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5) + version: 2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0) '@vuepress/bundler-webpack': specifier: 2.0.0-rc.18 version: 2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3) @@ -1096,7 +1172,7 @@ importers: version: 5.0.3 vite: specifier: ~5.4.9 - version: 5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) + version: 5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) tools/highlighter-helper: dependencies: @@ -1105,7 +1181,7 @@ importers: version: 11.1.0(vue@3.5.12(typescript@5.6.3)) vuepress: specifier: 2.0.0-rc.18 - version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) tools/vp-update: dependencies: @@ -1191,6 +1267,12 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@antfu/install-pkg@0.4.1': + resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} + + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + '@apideck/better-ajv-errors@0.3.6': resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} @@ -1688,9 +1770,27 @@ packages: resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} engines: {node: '>=6.9.0'} + '@braintree/sanitize-url@7.1.0': + resolution: {integrity: sha512-o+UlMLt49RvtCASlOMW0AkHnabN9wR9rwCCherxO0yG4Npy34GkvrAqdXQvrhNs+jh+gkK8gB8Lf05qL/O7KWg==} + '@bufbuild/protobuf@2.2.0': resolution: {integrity: sha512-+imAQkHf7U/Rwvu0wk1XWgsP3WnpCWmK7B48f0XqSNzgk64+grljTKC7pnO/xBiEMUziF7vKRfbBnOQhg126qQ==} + '@chevrotain/cst-dts-gen@11.0.3': + resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} + + '@chevrotain/gast@11.0.3': + resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==} + + '@chevrotain/regexp-to-ast@11.0.3': + resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==} + + '@chevrotain/types@11.0.3': + resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==} + + '@chevrotain/utils@11.0.3': + resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} + '@commitlint/cli@19.5.0': resolution: {integrity: sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ==} engines: {node: '>=v18'} @@ -2137,6 +2237,9 @@ packages: resolution: {integrity: sha512-HFZ4Mp26nbWk9d/BpvP0YNL6W4UoZF0VFcTw/aPPA8RpOxeFQgK+ClABGgAUXs9Y/RGX/l1vOmrqz1MQt9MNuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@gera2ld/jsx-dom@2.2.2': + resolution: {integrity: sha512-EOqf31IATRE6zS1W1EoWmXZhGfLAoO9FIlwTtHduSrBdud4npYBxYAkv8dZ5hudDPwJeeSjn40kbCL4wAzr8dA==} + '@humanfs/core@0.19.0': resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} engines: {node: '>=18.18.0'} @@ -2157,6 +2260,15 @@ packages: resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==} engines: {node: '>=10.13.0'} + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.1.33': + resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} + + '@iktakahiro/markdown-it-katex@4.0.1': + resolution: {integrity: sha512-kGFooO7fIOgY34PSG8ZNVsUlKhhNoqhzW2kq94TNGa8COzh73PO4KsEoPOsQVG1mEAe8tg7GqG0FoVao0aMHaw==} + '@inquirer/checkbox@4.0.0': resolution: {integrity: sha512-TNd+u1fAG8vf8YMgXzK2BI0u0xsphFv//T5rpF1eZ+8AAXby5Ll1qptr4/XVS45dvWDIzuBmmWIpVJRvnaNqzQ==} engines: {node: '>=18'} @@ -2273,6 +2385,9 @@ packages: peerDependencies: tslib: '2' + '@kurkle/color@0.3.2': + resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==} + '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -2434,6 +2549,14 @@ packages: mathjax-full: optional: true + '@mdit/plugin-plantuml@0.13.1': + resolution: {integrity: sha512-qupMO/lG1mDYaGHSutB9AO1TsxHjmp4yFnvp3VBNNRdVh9lqWhXFv/htrnr0IGEWAmlik6zlkCvz/YrKRONV5A==} + peerDependencies: + markdown-it: ^14.1.0 + peerDependenciesMeta: + markdown-it: + optional: true + '@mdit/plugin-tab@0.13.2': resolution: {integrity: sha512-evpIXvo6vXRWhgNE6vu4ok1I2dVOzrBYmBUGc1gW8nT9MvkW9litu7RbJ6CafscqaiiYRIM5Oib1ahS0lwte6g==} peerDependencies: @@ -2460,8 +2583,11 @@ packages: markdown-it: optional: true - '@meteorlxy/eslint-config@4.7.0': - resolution: {integrity: sha512-qJKeYoBo/yPKoI9frBOCEyvKt6XfYE3BLiL6ItdF1X7slA5NnAGhio8FjY134QIXsO97EOQo7F2a/qdLcWhtiQ==} + '@mermaid-js/parser@0.3.0': + resolution: {integrity: sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==} + + '@meteorlxy/eslint-config@4.7.1': + resolution: {integrity: sha512-dKAbowyILgPVEDnZRE81PB7Eq9GIPz1CcM3ElLakQxdcuKRcuHVwE5NIWz02/OXVbE32DeABk8je494WxT8ZfA==} peerDependencies: eslint-plugin-react: ^7.36.1 eslint-plugin-react-hooks: 5.x @@ -2634,30 +2760,35 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-glibc@2.4.1': resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.4.1': resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.4.1': resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.4.1': resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.4.1': resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} @@ -2772,46 +2903,55 @@ packages: resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.24.0': resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.24.0': resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.24.0': resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.24.0': resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.24.0': resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.24.0': resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.24.0': resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.24.0': resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} @@ -2914,6 +3054,99 @@ packages: '@types/conventional-commits-parser@5.0.0': resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} + '@types/d3-array@3.2.1': + resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} + + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.6': + resolution: {integrity: sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.0': + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.0': + resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==} + + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.3': + resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} + + '@types/d3-scale-chromatic@3.0.3': + resolution: {integrity: sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==} + + '@types/d3-scale@4.0.8': + resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} + + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + + '@types/d3-shape@3.1.6': + resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==} + + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + + '@types/d3-time@3.0.3': + resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -2935,6 +3168,9 @@ packages: '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/geojson@7946.0.14': + resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} + '@types/hash-sum@1.0.2': resolution: {integrity: sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==} @@ -2998,8 +3234,8 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.7.7': - resolution: {integrity: sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==} + '@types/node@22.7.8': + resolution: {integrity: sha512-a922jJy31vqR5sk+kAdIENJjHblqcZ4RmERviFsER4WJcEONqxKcjNOlk0q7OUfrF5sddT+vng070cdfMlrPLg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3013,6 +3249,9 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + '@types/raphael@2.3.9': + resolution: {integrity: sha512-K1dZwoLNvEN+mvleFU/t2swG9Z4SE5Vub7dA5wDYojH0bVTQ8ZAP+lNsl91t1njdu/B+roSEL4QXC67I7Hpiag==} + '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -3064,8 +3303,8 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.10.0': - resolution: {integrity: sha512-phuB3hoP7FFKbRXxjl+DRlQDuJqhpOnm5MmtROXyWi3uS/Xg2ZXqiQfcG2BJHiN4QKyzdOJi3NEn/qTnjUlkmQ==} + '@typescript-eslint/eslint-plugin@8.11.0': + resolution: {integrity: sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -3075,8 +3314,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.10.0': - resolution: {integrity: sha512-E24l90SxuJhytWJ0pTQydFT46Nk0Z+bsLKo/L8rtQSL93rQ6byd1V/QbDpHUTdLPOMsBCcYXZweADNCfOCmOAg==} + '@typescript-eslint/parser@8.11.0': + resolution: {integrity: sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3085,12 +3324,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@8.10.0': - resolution: {integrity: sha512-AgCaEjhfql9MDKjMUxWvH7HjLeBqMCBfIaBbzzIcBbQPZE7CPh1m6FF+L75NUMJFMLYhCywJXIDEMa3//1A0dw==} + '@typescript-eslint/scope-manager@8.11.0': + resolution: {integrity: sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.10.0': - resolution: {integrity: sha512-PCpUOpyQSpxBn230yIcK+LeCQaXuxrgCm2Zk1S+PTIRJsEfU6nJ0TtwyH8pIwPK/vJoA+7TZtzyAJSGBz+s/dg==} + '@typescript-eslint/type-utils@8.11.0': + resolution: {integrity: sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -3098,12 +3337,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@8.10.0': - resolution: {integrity: sha512-k/E48uzsfJCRRbGLapdZgrX52csmWJ2rcowwPvOZ8lwPUv3xW6CcFeJAXgx4uJm+Ge4+a4tFOkdYvSpxhRhg1w==} + '@typescript-eslint/types@8.11.0': + resolution: {integrity: sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.10.0': - resolution: {integrity: sha512-3OE0nlcOHaMvQ8Xu5gAfME3/tWVDpb/HxtpUZ1WeOAksZ/h/gwrBzCklaGzwZT97/lBbbxJ16dMA98JMEngW4w==} + '@typescript-eslint/typescript-estree@8.11.0': + resolution: {integrity: sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -3111,14 +3350,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.10.0': - resolution: {integrity: sha512-Oq4uZ7JFr9d1ZunE/QKy5egcDRXT/FrS2z/nlxzPua2VHFtmMvFNDvpq1m/hq0ra+T52aUezfcjGRIB7vNJF9w==} + '@typescript-eslint/utils@8.11.0': + resolution: {integrity: sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@8.10.0': - resolution: {integrity: sha512-k8nekgqwr7FadWk548Lfph6V3r9OVqjzAIVskE7orMZR23cGJjAOVazsZSJW+ElyjfTM4wx/1g88Mi70DDtG9A==} + '@typescript-eslint/visitor-keys@8.11.0': + resolution: {integrity: sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -3541,8 +3780,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.0: - resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3630,6 +3869,10 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chart.js@4.4.5: + resolution: {integrity: sha512-CVVjg1RYTJV9OCC8WeJPMx8gsV8K6WIyIEQUE3ui4AR9Hfgls9URri6Ja3hyMVBbTF8Q2KFa19PE815gWcWhng==} + engines: {pnpm: '>=8'} + check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -3641,6 +3884,18 @@ packages: resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} engines: {node: '>=18.17'} + cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + + chevrotain-allstar@0.3.1: + resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==} + peerDependencies: + chevrotain: ^11.0.0 + + chevrotain@11.0.3: + resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -3773,6 +4028,9 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -3926,6 +4184,12 @@ packages: resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} engines: {node: '>= 0.4.0'} + cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + + cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + cosmiconfig-typescript-loader@5.1.0: resolution: {integrity: sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==} engines: {node: '>=v16'} @@ -4060,6 +4324,168 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + cytoscape-cose-bilkent@4.1.0: + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape-fcose@2.2.0: + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.30.2: + resolution: {integrity: sha512-oICxQsjW8uSaRmn4UK/jkczKOqTrVqt5/1WL0POiJUT2EKNc9STM4hYFHv917yu55aTBMFNRzymlJhVAiWPCxw==} + engines: {node: '>=0.10'} + + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-flextree@2.1.2: + resolution: {integrity: sha512-gJiHrx5uTTHq44bjyIb3xpbmmdZcWLYPKeO9EPVOq8EylMFOiH2+9sWqKAiQ4DcFuOZTAxPOQyv0Rnmji/g15A==} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@1.1.9: + resolution: {integrity: sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + + dagre-d3-es@7.0.10: + resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} + dargs@8.1.0: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} @@ -4080,6 +4506,9 @@ packages: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + debounce@2.2.0: resolution: {integrity: sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==} engines: {node: '>=18'} @@ -4159,6 +4588,9 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + delaunator@5.0.1: + resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -4226,6 +4658,9 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} + dompurify@3.1.6: + resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==} + domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} @@ -4249,6 +4684,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + echarts@5.5.1: + resolution: {integrity: sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -4257,8 +4695,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.41: - resolution: {integrity: sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==} + electron-to-chromium@1.5.42: + resolution: {integrity: sha512-gIfKavKDw1mhvic9nbzA5lZw8QSHpdMwLwXc0cWidQz9B15pDoDdDH4boIatuFfeoCatb3a/NGL6CYRVFxGZ9g==} emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -4376,8 +4814,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-config-vuepress@5.2.1: - resolution: {integrity: sha512-oThJyCq85k0SdGcE23pagmbUZ2bwMu5nveQdvbD/kk7DSmXtxIp8idy0YsSo/ks+YgFn72nQPnnHonAIgbog8w==} + eslint-config-vuepress@5.2.2: + resolution: {integrity: sha512-+M+TrDtpiLGHVhtBlfGuj+EUROsZKkW37SzLA0VJ3wahUPM0RNCu9xZ47oh3TvQtT7jKs/9Fqm5pqdBXgsk2SA==} eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -4486,6 +4924,9 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + eve-raphael@0.5.0: + resolution: {integrity: sha512-jrxnPsCGqng1UZuEp9DecX/AuSyAszATSjf4oEcRxvfxa1Oux4KkIPKBAAWWnpdwfARtr+Q0o9aPYWjsROD7ug==} + eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -4622,6 +5063,10 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + flowchart.ts@3.0.1: + resolution: {integrity: sha512-bBlP6IAe6A/Y9UXb27YhbGS39fTaGLHx1dyjNazIc0d6ntVGC2eIHP6siUQj9PMEX1M5vKXbTecpi+dn4Bhhjg==} + engines: {node: ^18.0.0 || >= 20} + follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -4850,6 +5295,9 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} @@ -4904,6 +5352,10 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + highlight.js@11.10.0: + resolution: {integrity: sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==} + engines: {node: '>=12.0.0'} + hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} @@ -5098,6 +5550,13 @@ packages: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} @@ -5441,6 +5900,10 @@ packages: just-diff@6.0.2: resolution: {integrity: sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==} + katex@0.12.0: + resolution: {integrity: sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg==} + hasBin: true + katex@0.16.11: resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} hasBin: true @@ -5448,6 +5911,9 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -5455,9 +5921,22 @@ packages: known-css-properties@0.34.0: resolution: {integrity: sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==} + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + langium@3.0.0: + resolution: {integrity: sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==} + engines: {node: '>=16.0.0'} + launch-editor@2.9.1: resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} + layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + + layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -5503,24 +5982,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.27.0: resolution: {integrity: sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.27.0: resolution: {integrity: sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.27.0: resolution: {integrity: sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.27.0: resolution: {integrity: sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==} @@ -5573,6 +6056,10 @@ packages: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} + local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -5585,6 +6072,9 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -5680,6 +6170,18 @@ packages: markdown-it-emoji@3.0.0: resolution: {integrity: sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg==} + markdown-it-ins@4.0.0: + resolution: {integrity: sha512-sWbjK2DprrkINE4oYDhHdCijGT+MIDhEupjSHLXe5UXeVr5qmVxs/nTUVtgi0Oh/qtF+QKV0tNWDhQBEPxiMew==} + + markdown-it-mark@4.0.0: + resolution: {integrity: sha512-YLhzaOsU9THO/cal0lUjfMjrqSMPjjyjChYM7oyj4DnyaXEzA8gnW6cVJeyCrCVeyesrY2PlEdUYJSPFYL4Nkg==} + + markdown-it-sub@2.0.0: + resolution: {integrity: sha512-iCBKgwCkfQBRg2vApy9vx1C1Tu6D8XYo8NvevI3OlwzBRmiMtsJ2sXupBgEA7PPxiDwNni3qIUkhZ6j5wofDUA==} + + markdown-it-sup@2.0.0: + resolution: {integrity: sha512-5VgmdKlkBd8sgXuoDoxMpiU+BiEt3I49GItBzzw7Mxq9CxvnhE/k09HFli09zgfFDRixDQDfDxi0mgBCXtaTvA==} + markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true @@ -5689,11 +6191,39 @@ packages: peerDependencies: marked: '>=4 <15' + marked@13.0.3: + resolution: {integrity: sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==} + engines: {node: '>= 18'} + hasBin: true + marked@14.1.3: resolution: {integrity: sha512-ZibJqTULGlt9g5k4VMARAktMAjXoVnnr+Y3aCqW1oDftcV4BA3UmrBifzXoZyenHRk75csiPu9iwsTj4VNBT0g==} engines: {node: '>= 18'} hasBin: true + markmap-common@0.17.1: + resolution: {integrity: sha512-U1v2+CkdE9OzNgONvBwUW26RMcu27Bqlv/JuAG+l1qRkTduD2aT4cGew6qb4VLjpqhcBwS3mcj0Xd7LVW01QFA==} + + markmap-html-parser@0.17.1: + resolution: {integrity: sha512-wdzneAsNXNIYH3R8xZVNYi/4MXhswuZ4wmZxHS3+BLp9jO6kBCoQybICB90tcAcXUjiSAYRnirq3EvkSK0AdDw==} + peerDependencies: + markmap-common: '*' + + markmap-lib@0.17.2: + resolution: {integrity: sha512-zS5nL8OBR4hRpqegxeXAd4jQq/wd+Xn21bHhW0QHgGzE3dJTG55pLDi1rmdaHLCTpN7lUtO5MBOZ1HyXGYuHwQ==} + peerDependencies: + markmap-common: '*' + + markmap-toolbar@0.17.2: + resolution: {integrity: sha512-WQ05P2xvQmZT0ybRUE0uRzrs30aXlJ6/yEUsA6A9nYEwm8T9jSwBxIM/5zYlkH/XzUcsRRxtCa4k1IWR74gkpQ==} + peerDependencies: + markmap-common: '*' + + markmap-view@0.17.2: + resolution: {integrity: sha512-kF9bbXWF/10UBFTatv0kPQSBgVb8+Xn4Bttep78i9879nzqRaIjCNzZYGtpxK0gx9B4U9NGMZrx/B4cTTwmeQA==} + peerDependencies: + markmap-common: '*' + mathjax-full@3.2.2: resolution: {integrity: sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==} @@ -5753,6 +6283,9 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + mermaid@11.3.0: + resolution: {integrity: sha512-fFmf2gRXLtlGzug4wpIGN+rQdZ30M8IZEB1D3eZkXNqC7puhqeURBcD/9tbwXsqBO+A6Nzzo3MSSepmnw5xSeg==} + methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -5885,6 +6418,9 @@ packages: engines: {node: '>=10'} hasBin: true + mlly@1.7.2: + resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -6015,6 +6551,9 @@ packages: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} + npm2url@0.2.4: + resolution: {integrity: sha512-arzGp/hQz0Ey+ZGhF64XVH7Xqwd+1Q/po5uGiBbzph8ebX6T0uvt3N7c1nBHQNsQVykQgHhqoRTX7JFcHecGuw==} + nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -6138,6 +6677,9 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@0.2.2: + resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} + pacote@18.0.6: resolution: {integrity: sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==} engines: {node: ^16.14.0 || >=18.0.0} @@ -6195,6 +6737,9 @@ packages: pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -6270,6 +6815,9 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} + pkg-types@1.2.1: + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + playwright-core@1.48.1: resolution: {integrity: sha512-Yw/t4VAFX/bBr1OzwCuOMZkY1Cnb4z/doAFSwf4huqAGWmf9eMNjmK7NiOljCdLmxeRYcGPPmcDgU0zOlzP0YA==} engines: {node: '>=18'} @@ -6280,6 +6828,12 @@ packages: engines: {node: '>=18'} hasBin: true + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -6643,6 +7197,9 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + raphael@2.3.0: + resolution: {integrity: sha512-w2yIenZAQnp257XUWGni4bLMVxpUpcIl7qgxEgDIXtmSypYtlNxfXWpOBxs7LBTps5sDwhRnrToJrMUrivqNTQ==} + raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} @@ -6788,6 +7345,9 @@ packages: engines: {node: 20 || >=22} hasBin: true + robust-predicates@3.0.2: + resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + rollup-plugin-dts@6.1.1: resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} engines: {node: '>=16'} @@ -6818,6 +7378,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -6825,6 +7388,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} @@ -7384,6 +7950,9 @@ packages: engines: {node: '>=18.12.0'} hasBin: true + stylis@4.3.4: + resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} + subarg@1.0.0: resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} @@ -7554,9 +8123,16 @@ packages: ts-debounce@4.0.0: resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==} + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + tsconfig-vuepress@5.2.1: resolution: {integrity: sha512-9JI4bozH9ISFRj0KIbSTpyk6Metl7rcICnCFcvdgWj+Hx4L8Z/VuWbAdgzNysiMafILfBLJrfsViEj6ZeW6fHQ==} + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + tslib@2.8.0: resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} @@ -7628,6 +8204,9 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} @@ -7750,6 +8329,10 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -7831,6 +8414,26 @@ packages: jsdom: optional: true + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} engines: {node: '>=12'} @@ -8133,8 +8736,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.4.5: - resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} + yaml@2.6.0: + resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} engines: {node: '>= 14'} hasBin: true @@ -8162,6 +8765,9 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} + zrender@5.6.0: + resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -8276,6 +8882,13 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 + '@antfu/install-pkg@0.4.1': + dependencies: + package-manager-detector: 0.2.2 + tinyexec: 0.3.1 + + '@antfu/utils@0.7.10': {} + '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': dependencies: ajv: 8.17.1 @@ -8332,7 +8945,7 @@ snapshots: dependencies: '@babel/compat-data': 7.25.8 '@babel/helper-validator-option': 7.25.7 - browserslist: 4.24.0 + browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -8940,13 +9553,32 @@ snapshots: '@babel/helper-validator-identifier': 7.25.7 to-fast-properties: 2.0.0 + '@braintree/sanitize-url@7.1.0': {} + '@bufbuild/protobuf@2.2.0': {} - '@commitlint/cli@19.5.0(@types/node@22.7.7)(typescript@5.6.3)': + '@chevrotain/cst-dts-gen@11.0.3': + dependencies: + '@chevrotain/gast': 11.0.3 + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/gast@11.0.3': + dependencies: + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/regexp-to-ast@11.0.3': {} + + '@chevrotain/types@11.0.3': {} + + '@chevrotain/utils@11.0.3': {} + + '@commitlint/cli@19.5.0(@types/node@22.7.8)(typescript@5.6.3)': dependencies: '@commitlint/format': 19.5.0 '@commitlint/lint': 19.5.0 - '@commitlint/load': 19.5.0(@types/node@22.7.7)(typescript@5.6.3) + '@commitlint/load': 19.5.0(@types/node@22.7.8)(typescript@5.6.3) '@commitlint/read': 19.5.0 '@commitlint/types': 19.5.0 tinyexec: 0.3.1 @@ -8993,7 +9625,7 @@ snapshots: '@commitlint/rules': 19.5.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.5.0(@types/node@22.7.7)(typescript@5.6.3)': + '@commitlint/load@19.5.0(@types/node@22.7.8)(typescript@5.6.3)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 @@ -9001,7 +9633,7 @@ snapshots: '@commitlint/types': 19.5.0 chalk: 5.3.0 cosmiconfig: 9.0.0(typescript@5.6.3) - cosmiconfig-typescript-loader: 5.1.0(@types/node@22.7.7)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) + cosmiconfig-typescript-loader: 5.1.0(@types/node@22.7.8)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -9281,6 +9913,10 @@ snapshots: dependencies: levn: 0.4.1 + '@gera2ld/jsx-dom@2.2.2': + dependencies: + '@babel/runtime': 7.25.7 + '@humanfs/core@0.19.0': {} '@humanfs/node@0.16.5': @@ -9294,27 +9930,45 @@ snapshots: '@hutson/parse-repository-url@5.0.0': {} - '@inquirer/checkbox@4.0.0(@types/node@22.7.7)': + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.1.33': + dependencies: + '@antfu/install-pkg': 0.4.1 + '@antfu/utils': 0.7.10 + '@iconify/types': 2.0.0 + debug: 4.3.7 + kolorist: 1.8.0 + local-pkg: 0.5.0 + mlly: 1.7.2 + transitivePeerDependencies: + - supports-color + + '@iktakahiro/markdown-it-katex@4.0.1': dependencies: - '@inquirer/core': 10.0.0(@types/node@22.7.7) + katex: 0.12.0 + + '@inquirer/checkbox@4.0.0(@types/node@22.7.8)': + dependencies: + '@inquirer/core': 10.0.0(@types/node@22.7.8) '@inquirer/figures': 1.0.7 - '@inquirer/type': 3.0.0(@types/node@22.7.7) + '@inquirer/type': 3.0.0(@types/node@22.7.8) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 transitivePeerDependencies: - '@types/node' - '@inquirer/confirm@5.0.0(@types/node@22.7.7)': + '@inquirer/confirm@5.0.0(@types/node@22.7.8)': dependencies: - '@inquirer/core': 10.0.0(@types/node@22.7.7) - '@inquirer/type': 3.0.0(@types/node@22.7.7) + '@inquirer/core': 10.0.0(@types/node@22.7.8) + '@inquirer/type': 3.0.0(@types/node@22.7.8) transitivePeerDependencies: - '@types/node' - '@inquirer/core@10.0.0(@types/node@22.7.7)': + '@inquirer/core@10.0.0(@types/node@22.7.8)': dependencies: '@inquirer/figures': 1.0.7 - '@inquirer/type': 3.0.0(@types/node@22.7.7) + '@inquirer/type': 3.0.0(@types/node@22.7.8) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -9325,91 +9979,91 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@inquirer/editor@4.0.0(@types/node@22.7.7)': + '@inquirer/editor@4.0.0(@types/node@22.7.8)': dependencies: - '@inquirer/core': 10.0.0(@types/node@22.7.7) - '@inquirer/type': 3.0.0(@types/node@22.7.7) + '@inquirer/core': 10.0.0(@types/node@22.7.8) + '@inquirer/type': 3.0.0(@types/node@22.7.8) external-editor: 3.1.0 transitivePeerDependencies: - '@types/node' - '@inquirer/expand@4.0.0(@types/node@22.7.7)': + '@inquirer/expand@4.0.0(@types/node@22.7.8)': dependencies: - '@inquirer/core': 10.0.0(@types/node@22.7.7) - '@inquirer/type': 3.0.0(@types/node@22.7.7) + '@inquirer/core': 10.0.0(@types/node@22.7.8) + '@inquirer/type': 3.0.0(@types/node@22.7.8) yoctocolors-cjs: 2.1.2 transitivePeerDependencies: - '@types/node' '@inquirer/figures@1.0.7': {} - '@inquirer/input@4.0.0(@types/node@22.7.7)': + '@inquirer/input@4.0.0(@types/node@22.7.8)': dependencies: - '@inquirer/core': 10.0.0(@types/node@22.7.7) - '@inquirer/type': 3.0.0(@types/node@22.7.7) + '@inquirer/core': 10.0.0(@types/node@22.7.8) + '@inquirer/type': 3.0.0(@types/node@22.7.8) transitivePeerDependencies: - '@types/node' - '@inquirer/number@3.0.0(@types/node@22.7.7)': + '@inquirer/number@3.0.0(@types/node@22.7.8)': dependencies: - '@inquirer/core': 10.0.0(@types/node@22.7.7) - '@inquirer/type': 3.0.0(@types/node@22.7.7) + '@inquirer/core': 10.0.0(@types/node@22.7.8) + '@inquirer/type': 3.0.0(@types/node@22.7.8) transitivePeerDependencies: - '@types/node' - '@inquirer/password@4.0.0(@types/node@22.7.7)': + '@inquirer/password@4.0.0(@types/node@22.7.8)': dependencies: - '@inquirer/core': 10.0.0(@types/node@22.7.7) - '@inquirer/type': 3.0.0(@types/node@22.7.7) + '@inquirer/core': 10.0.0(@types/node@22.7.8) + '@inquirer/type': 3.0.0(@types/node@22.7.8) ansi-escapes: 4.3.2 transitivePeerDependencies: - '@types/node' - '@inquirer/prompts@7.0.0(@types/node@22.7.7)': - dependencies: - '@inquirer/checkbox': 4.0.0(@types/node@22.7.7) - '@inquirer/confirm': 5.0.0(@types/node@22.7.7) - '@inquirer/editor': 4.0.0(@types/node@22.7.7) - '@inquirer/expand': 4.0.0(@types/node@22.7.7) - '@inquirer/input': 4.0.0(@types/node@22.7.7) - '@inquirer/number': 3.0.0(@types/node@22.7.7) - '@inquirer/password': 4.0.0(@types/node@22.7.7) - '@inquirer/rawlist': 4.0.0(@types/node@22.7.7) - '@inquirer/search': 3.0.0(@types/node@22.7.7) - '@inquirer/select': 4.0.0(@types/node@22.7.7) + '@inquirer/prompts@7.0.0(@types/node@22.7.8)': + dependencies: + '@inquirer/checkbox': 4.0.0(@types/node@22.7.8) + '@inquirer/confirm': 5.0.0(@types/node@22.7.8) + '@inquirer/editor': 4.0.0(@types/node@22.7.8) + '@inquirer/expand': 4.0.0(@types/node@22.7.8) + '@inquirer/input': 4.0.0(@types/node@22.7.8) + '@inquirer/number': 3.0.0(@types/node@22.7.8) + '@inquirer/password': 4.0.0(@types/node@22.7.8) + '@inquirer/rawlist': 4.0.0(@types/node@22.7.8) + '@inquirer/search': 3.0.0(@types/node@22.7.8) + '@inquirer/select': 4.0.0(@types/node@22.7.8) transitivePeerDependencies: - '@types/node' - '@inquirer/rawlist@4.0.0(@types/node@22.7.7)': + '@inquirer/rawlist@4.0.0(@types/node@22.7.8)': dependencies: - '@inquirer/core': 10.0.0(@types/node@22.7.7) - '@inquirer/type': 3.0.0(@types/node@22.7.7) + '@inquirer/core': 10.0.0(@types/node@22.7.8) + '@inquirer/type': 3.0.0(@types/node@22.7.8) yoctocolors-cjs: 2.1.2 transitivePeerDependencies: - '@types/node' - '@inquirer/search@3.0.0(@types/node@22.7.7)': + '@inquirer/search@3.0.0(@types/node@22.7.8)': dependencies: - '@inquirer/core': 10.0.0(@types/node@22.7.7) + '@inquirer/core': 10.0.0(@types/node@22.7.8) '@inquirer/figures': 1.0.7 - '@inquirer/type': 3.0.0(@types/node@22.7.7) + '@inquirer/type': 3.0.0(@types/node@22.7.8) yoctocolors-cjs: 2.1.2 transitivePeerDependencies: - '@types/node' - '@inquirer/select@4.0.0(@types/node@22.7.7)': + '@inquirer/select@4.0.0(@types/node@22.7.8)': dependencies: - '@inquirer/core': 10.0.0(@types/node@22.7.7) + '@inquirer/core': 10.0.0(@types/node@22.7.8) '@inquirer/figures': 1.0.7 - '@inquirer/type': 3.0.0(@types/node@22.7.7) + '@inquirer/type': 3.0.0(@types/node@22.7.8) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 transitivePeerDependencies: - '@types/node' - '@inquirer/type@3.0.0(@types/node@22.7.7)': + '@inquirer/type@3.0.0(@types/node@22.7.8)': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@isaacs/cliui@8.0.2': dependencies: @@ -9433,7 +10087,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -9475,12 +10129,14 @@ snapshots: dependencies: tslib: 2.8.0 + '@kurkle/color@0.3.2': {} + '@leichtgewicht/ip-codec@2.0.5': {} - '@lerna-lite/cli@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3))(@lerna-lite/version@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3))(@types/node@22.7.7)(typescript@5.6.3))(@types/node@22.7.7)(typescript@5.6.3)': + '@lerna-lite/cli@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3))(@lerna-lite/version@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3))(@types/node@22.7.8)(typescript@5.6.3))(@types/node@22.7.8)(typescript@5.6.3)': dependencies: - '@lerna-lite/core': 3.10.0(@types/node@22.7.7)(typescript@5.6.3) - '@lerna-lite/init': 3.10.0(@types/node@22.7.7)(typescript@5.6.3) + '@lerna-lite/core': 3.10.0(@types/node@22.7.8)(typescript@5.6.3) + '@lerna-lite/init': 3.10.0(@types/node@22.7.8)(typescript@5.6.3) '@lerna-lite/npmlog': 3.10.0 dedent: 1.5.3 dotenv: 16.4.5 @@ -9488,8 +10144,8 @@ snapshots: load-json-file: 7.0.1 yargs: 17.7.2 optionalDependencies: - '@lerna-lite/publish': 3.10.0(@types/node@22.7.7)(typescript@5.6.3) - '@lerna-lite/version': 3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3))(@types/node@22.7.7)(typescript@5.6.3) + '@lerna-lite/publish': 3.10.0(@types/node@22.7.8)(typescript@5.6.3) + '@lerna-lite/version': 3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3))(@types/node@22.7.8)(typescript@5.6.3) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -9497,11 +10153,11 @@ snapshots: - supports-color - typescript - '@lerna-lite/core@3.10.0(@types/node@22.7.7)(typescript@5.6.3)': + '@lerna-lite/core@3.10.0(@types/node@22.7.8)(typescript@5.6.3)': dependencies: - '@inquirer/expand': 4.0.0(@types/node@22.7.7) - '@inquirer/input': 4.0.0(@types/node@22.7.7) - '@inquirer/select': 4.0.0(@types/node@22.7.7) + '@inquirer/expand': 4.0.0(@types/node@22.7.8) + '@inquirer/input': 4.0.0(@types/node@22.7.8) + '@inquirer/select': 4.0.0(@types/node@22.7.8) '@lerna-lite/npmlog': 3.10.0 '@npmcli/run-script': 8.1.0 clone-deep: 4.0.1 @@ -9535,9 +10191,9 @@ snapshots: - supports-color - typescript - '@lerna-lite/init@3.10.0(@types/node@22.7.7)(typescript@5.6.3)': + '@lerna-lite/init@3.10.0(@types/node@22.7.8)(typescript@5.6.3)': dependencies: - '@lerna-lite/core': 3.10.0(@types/node@22.7.7)(typescript@5.6.3) + '@lerna-lite/core': 3.10.0(@types/node@22.7.8)(typescript@5.6.3) fs-extra: 11.2.0 p-map: 7.0.2 write-json-file: 6.0.0 @@ -9560,12 +10216,12 @@ snapshots: strip-ansi: 7.1.0 wide-align: 1.1.5 - '@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3)': + '@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3)': dependencies: - '@lerna-lite/cli': 3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3))(@lerna-lite/version@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3))(@types/node@22.7.7)(typescript@5.6.3))(@types/node@22.7.7)(typescript@5.6.3) - '@lerna-lite/core': 3.10.0(@types/node@22.7.7)(typescript@5.6.3) + '@lerna-lite/cli': 3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3))(@lerna-lite/version@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3))(@types/node@22.7.8)(typescript@5.6.3))(@types/node@22.7.8)(typescript@5.6.3) + '@lerna-lite/core': 3.10.0(@types/node@22.7.8)(typescript@5.6.3) '@lerna-lite/npmlog': 3.10.0 - '@lerna-lite/version': 3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3))(@types/node@22.7.7)(typescript@5.6.3) + '@lerna-lite/version': 3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3))(@types/node@22.7.8)(typescript@5.6.3) '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.1 byte-size: 9.0.0 @@ -9598,10 +10254,10 @@ snapshots: - supports-color - typescript - '@lerna-lite/version@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3))(@types/node@22.7.7)(typescript@5.6.3)': + '@lerna-lite/version@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3))(@types/node@22.7.8)(typescript@5.6.3)': dependencies: - '@lerna-lite/cli': 3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3))(@lerna-lite/version@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.7)(typescript@5.6.3))(@types/node@22.7.7)(typescript@5.6.3))(@types/node@22.7.7)(typescript@5.6.3) - '@lerna-lite/core': 3.10.0(@types/node@22.7.7)(typescript@5.6.3) + '@lerna-lite/cli': 3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3))(@lerna-lite/version@3.10.0(@lerna-lite/publish@3.10.0(@types/node@22.7.8)(typescript@5.6.3))(@types/node@22.7.8)(typescript@5.6.3))(@types/node@22.7.8)(typescript@5.6.3) + '@lerna-lite/core': 3.10.0(@types/node@22.7.8)(typescript@5.6.3) '@lerna-lite/npmlog': 3.10.0 '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 21.0.2 @@ -9757,6 +10413,13 @@ snapshots: markdown-it: 14.1.0 mathjax-full: 3.2.2 + '@mdit/plugin-plantuml@0.13.1(markdown-it@14.1.0)': + dependencies: + '@mdit/plugin-uml': 0.13.1(markdown-it@14.1.0) + '@types/markdown-it': 14.1.2 + optionalDependencies: + markdown-it: 14.1.0 + '@mdit/plugin-tab@0.13.2(markdown-it@14.1.0)': dependencies: '@types/markdown-it': 14.1.2 @@ -9775,11 +10438,15 @@ snapshots: optionalDependencies: markdown-it: 14.1.0 - '@meteorlxy/eslint-config@4.7.0(eslint-plugin-vue@9.29.1(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(vue-eslint-parser@9.4.3(eslint@9.13.0(jiti@1.21.6)))': + '@mermaid-js/parser@0.3.0': dependencies: - '@typescript-eslint/eslint-plugin': 8.10.0(@typescript-eslint/parser@8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/parser': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + langium: 3.0.0 + + '@meteorlxy/eslint-config@4.7.1(eslint-plugin-vue@9.29.1(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(vue-eslint-parser@9.4.3(eslint@9.13.0(jiti@1.21.6)))': + dependencies: + '@typescript-eslint/eslint-plugin': 8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/parser': 8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) confusing-browser-globals: 1.0.11 eslint-config-prettier: 9.1.0(eslint@9.13.0(jiti@1.21.6)) eslint-plugin-eslint-comments: 3.2.0(eslint@9.13.0(jiti@1.21.6)) @@ -10278,24 +10945,141 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.0 - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/connect@3.4.38': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 + + '@types/d3-array@3.2.1': {} + + '@types/d3-axis@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-brush@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-chord@3.0.6': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.1 + '@types/geojson': 7946.0.14 + + '@types/d3-delaunay@6.0.4': {} + + '@types/d3-dispatch@3.0.6': {} + + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-dsv@3.0.7': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-fetch@3.0.7': + dependencies: + '@types/d3-dsv': 3.0.7 + + '@types/d3-force@3.0.10': {} + + '@types/d3-format@3.0.4': {} + + '@types/d3-geo@3.1.0': + dependencies: + '@types/geojson': 7946.0.14 + + '@types/d3-hierarchy@3.1.7': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.0': {} + + '@types/d3-polygon@3.0.2': {} + + '@types/d3-quadtree@3.0.6': {} + + '@types/d3-random@3.0.3': {} + + '@types/d3-scale-chromatic@3.0.3': {} + + '@types/d3-scale@4.0.8': + dependencies: + '@types/d3-time': 3.0.3 + + '@types/d3-selection@3.0.11': {} + + '@types/d3-shape@3.1.6': + dependencies: + '@types/d3-path': 3.1.0 + + '@types/d3-time-format@4.0.3': {} + + '@types/d3-time@3.0.3': {} + + '@types/d3-timer@3.0.2': {} + + '@types/d3-transition@3.0.9': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-zoom@3.0.8': + dependencies: + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 + + '@types/d3@7.4.3': + dependencies: + '@types/d3-array': 3.2.1 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.6 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.0 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.0 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.3 + '@types/d3-scale': 4.0.8 + '@types/d3-scale-chromatic': 3.0.3 + '@types/d3-selection': 3.0.11 + '@types/d3-shape': 3.1.6 + '@types/d3-time': 3.0.3 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 '@types/debug@4.1.12': dependencies: @@ -10307,14 +11091,14 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 '@types/express-serve-static-core@5.0.0': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -10329,7 +11113,9 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.7.7 + '@types/node': 22.7.8 + + '@types/geojson@7946.0.14': {} '@types/hash-sum@1.0.2': {} @@ -10343,7 +11129,7 @@ snapshots: '@types/http-proxy@1.17.15': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/istanbul-lib-coverage@2.0.6': {} @@ -10359,7 +11145,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/katex@0.16.7': {} @@ -10390,11 +11176,11 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/node@17.0.45': {} - '@types/node@22.7.7': + '@types/node@22.7.8': dependencies: undici-types: 6.19.8 @@ -10406,6 +11192,8 @@ snapshots: '@types/range-parser@1.2.7': {} + '@types/raphael@2.3.9': {} + '@types/resolve@1.20.2': {} '@types/retry@0.12.2': {} @@ -10421,7 +11209,7 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/serve-index@1.9.4': dependencies: @@ -10430,12 +11218,12 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/send': 0.17.4 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/trusted-types@2.0.7': {} @@ -10449,7 +11237,7 @@ snapshots: '@types/ws@8.5.12': dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 '@types/yargs-parser@21.0.3': {} @@ -10457,14 +11245,14 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.10.0(@typescript-eslint/parser@8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.10.0 - '@typescript-eslint/type-utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.10.0 + '@typescript-eslint/parser': 8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.11.0 + '@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.11.0 eslint: 9.13.0(jiti@1.21.6) graphemer: 1.4.0 ignore: 5.3.2 @@ -10475,12 +11263,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': + '@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 8.10.0 - '@typescript-eslint/types': 8.10.0 - '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.10.0 + '@typescript-eslint/scope-manager': 8.11.0 + '@typescript-eslint/types': 8.11.0 + '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.11.0 debug: 4.3.7 eslint: 9.13.0(jiti@1.21.6) optionalDependencies: @@ -10488,15 +11276,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.10.0': + '@typescript-eslint/scope-manager@8.11.0': dependencies: - '@typescript-eslint/types': 8.10.0 - '@typescript-eslint/visitor-keys': 8.10.0 + '@typescript-eslint/types': 8.11.0 + '@typescript-eslint/visitor-keys': 8.11.0 - '@typescript-eslint/type-utils@8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) debug: 4.3.7 ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: @@ -10505,12 +11293,12 @@ snapshots: - eslint - supports-color - '@typescript-eslint/types@8.10.0': {} + '@typescript-eslint/types@8.11.0': {} - '@typescript-eslint/typescript-estree@8.10.0(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.11.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.10.0 - '@typescript-eslint/visitor-keys': 8.10.0 + '@typescript-eslint/types': 8.11.0 + '@typescript-eslint/visitor-keys': 8.11.0 debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 @@ -10522,30 +11310,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': + '@typescript-eslint/utils@8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.13.0(jiti@1.21.6)) - '@typescript-eslint/scope-manager': 8.10.0 - '@typescript-eslint/types': 8.10.0 - '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.11.0 + '@typescript-eslint/types': 8.11.0 + '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) eslint: 9.13.0(jiti@1.21.6) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@8.10.0': + '@typescript-eslint/visitor-keys@8.11.0': dependencies: - '@typescript-eslint/types': 8.10.0 + '@typescript-eslint/types': 8.11.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-vue@5.1.4(vite@5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))': + '@vitejs/plugin-vue@5.1.4(vite@5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))': dependencies: - vite: 5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) + vite: 5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) vue: 3.5.12(typescript@5.6.3) - '@vitest/coverage-istanbul@2.1.3(vitest@2.1.3(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0))': + '@vitest/coverage-istanbul@2.1.3(vitest@2.1.3(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.3.7 @@ -10557,7 +11345,7 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.3(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) + vitest: 2.1.3(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) transitivePeerDependencies: - supports-color @@ -10568,13 +11356,13 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0))': + '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0))': dependencies: '@vitest/spy': 2.1.3 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - vite: 5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) + vite: 5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) '@vitest/pretty-format@2.1.3': dependencies: @@ -10675,9 +11463,9 @@ snapshots: '@vue/shared@3.5.12': {} - '@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5)': + '@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0)': dependencies: - '@vitejs/plugin-vue': 5.1.4(vite@5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3)) + '@vitejs/plugin-vue': 5.1.4(vite@5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3)) '@vuepress/bundlerutils': 2.0.0-rc.18(typescript@5.6.3) '@vuepress/client': 2.0.0-rc.18(typescript@5.6.3) '@vuepress/core': 2.0.0-rc.18(typescript@5.6.3) @@ -10686,9 +11474,9 @@ snapshots: autoprefixer: 10.4.20(postcss@8.4.47) connect-history-api-fallback: 2.0.0 postcss: 8.4.47 - postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.4.5) + postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.6.0) rollup: 4.24.0 - vite: 5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) + vite: 5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) vue: 3.5.12(typescript@5.6.3) vue-router: 4.4.5(vue@3.5.12(typescript@5.6.3)) transitivePeerDependencies: @@ -11111,7 +11899,7 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 caniuse-lite: 1.0.30001669 fraction.js: 4.3.7 normalize-range: 0.1.2 @@ -11211,12 +11999,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.0: + browserslist@4.24.2: dependencies: caniuse-lite: 1.0.30001669 - electron-to-chromium: 1.5.41 + electron-to-chromium: 1.5.42 node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.0) + update-browserslist-db: 1.1.1(browserslist@4.24.2) buffer-builder@0.2.0: {} @@ -11266,7 +12054,7 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 caniuse-lite: 1.0.30001669 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 @@ -11308,6 +12096,10 @@ snapshots: chardet@0.7.0: {} + chart.js@4.4.5: + dependencies: + '@kurkle/color': 0.3.2 + check-error@2.1.1: {} cheerio-select@2.1.0: @@ -11333,6 +12125,30 @@ snapshots: undici: 6.20.1 whatwg-mimetype: 4.0.0 + cheerio@1.0.0-rc.12: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + htmlparser2: 8.0.2 + parse5: 7.2.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + + chevrotain-allstar@0.3.1(chevrotain@11.0.3): + dependencies: + chevrotain: 11.0.3 + lodash-es: 4.17.21 + + chevrotain@11.0.3: + dependencies: + '@chevrotain/cst-dts-gen': 11.0.3 + '@chevrotain/gast': 11.0.3 + '@chevrotain/regexp-to-ast': 11.0.3 + '@chevrotain/types': 11.0.3 + '@chevrotain/utils': 11.0.3 + lodash-es: 4.17.21 + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -11451,6 +12267,8 @@ snapshots: concat-map@0.0.1: {} + confbox@0.1.8: {} + config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -11620,15 +12438,23 @@ snapshots: core-js-compat@3.38.1: dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 core-util-is@1.0.3: {} corser@2.0.1: {} - cosmiconfig-typescript-loader@5.1.0(@types/node@22.7.7)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): + cose-base@1.0.3: + dependencies: + layout-base: 1.0.2 + + cose-base@2.2.0: dependencies: - '@types/node': 22.7.7 + layout-base: 2.0.1 + + cosmiconfig-typescript-loader@5.1.0(@types/node@22.7.8)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): + dependencies: + '@types/node': 22.7.8 cosmiconfig: 9.0.0(typescript@5.6.3) jiti: 1.21.6 typescript: 5.6.3 @@ -11741,7 +12567,7 @@ snapshots: cssnano-preset-default@7.0.6(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 css-declaration-sorter: 7.2.0(postcss@8.4.47) cssnano-utils: 5.0.0(postcss@8.4.47) postcss: 8.4.47 @@ -11789,6 +12615,196 @@ snapshots: csstype@3.1.3: {} + cytoscape-cose-bilkent@4.1.0(cytoscape@3.30.2): + dependencies: + cose-base: 1.0.3 + cytoscape: 3.30.2 + + cytoscape-fcose@2.2.0(cytoscape@3.30.2): + dependencies: + cose-base: 2.2.0 + cytoscape: 3.30.2 + + cytoscape@3.30.2: {} + + d3-array@2.12.1: + dependencies: + internmap: 1.0.1 + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-axis@3.0.0: {} + + d3-brush@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + + d3-color@3.1.0: {} + + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.0.1 + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-dsv@3.0.1: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + + d3-ease@3.0.1: {} + + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 + + d3-flextree@2.1.2: + dependencies: + d3-hierarchy: 1.1.9 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-format@3.1.0: {} + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@1.1.9: {} + + d3-hierarchy@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@1.0.9: {} + + d3-path@3.1.0: {} + + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-sankey@0.12.3: + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-selection@3.0.0: {} + + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3@7.9.0: + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.0 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + + dagre-d3-es@7.0.10: + dependencies: + d3: 7.9.0 + lodash-es: 4.17.21 + dargs@8.1.0: {} data-uri-to-buffer@4.0.1: {} @@ -11811,6 +12827,8 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.1 + dayjs@1.11.13: {} + debounce@2.2.0: {} debug@2.6.9: @@ -11862,6 +12880,10 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + delaunator@5.0.1: + dependencies: + robust-predicates: 3.0.2 + depd@1.1.2: {} depd@2.0.0: {} @@ -11920,6 +12942,8 @@ snapshots: dependencies: domelementtype: 2.3.0 + dompurify@3.1.6: {} + domutils@2.8.0: dependencies: dom-serializer: 1.4.1 @@ -11947,13 +12971,18 @@ snapshots: eastasianwidth@0.2.0: {} + echarts@5.5.1: + dependencies: + tslib: 2.3.0 + zrender: 5.6.0 + ee-first@1.1.1: {} ejs@3.1.10: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.41: {} + electron-to-chromium@1.5.42: {} emoji-regex@10.4.0: {} @@ -12142,10 +13171,10 @@ snapshots: dependencies: eslint: 9.13.0(jiti@1.21.6) - eslint-config-vuepress@5.2.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(vue-eslint-parser@9.4.3(eslint@9.13.0(jiti@1.21.6))): + eslint-config-vuepress@5.2.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(vue-eslint-parser@9.4.3(eslint@9.13.0(jiti@1.21.6))): dependencies: - '@meteorlxy/eslint-config': 4.7.0(eslint-plugin-vue@9.29.1(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(vue-eslint-parser@9.4.3(eslint@9.13.0(jiti@1.21.6))) - '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@meteorlxy/eslint-config': 4.7.1(eslint-plugin-vue@9.29.1(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(vue-eslint-parser@9.4.3(eslint@9.13.0(jiti@1.21.6))) + '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) eslint-plugin-vue: 9.29.1(eslint@9.13.0(jiti@1.21.6)) transitivePeerDependencies: - eslint @@ -12172,7 +13201,7 @@ snapshots: eslint-plugin-import-x@4.3.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) debug: 4.3.7 doctrine: 3.0.0 eslint: 9.13.0(jiti@1.21.6) @@ -12309,6 +13338,8 @@ snapshots: etag@1.8.1: {} + eve-raphael@0.5.0: {} + eventemitter3@4.0.7: {} eventemitter3@5.0.1: {} @@ -12498,6 +13529,12 @@ snapshots: flatted@3.3.1: {} + flowchart.ts@3.0.1: + dependencies: + '@types/raphael': 2.3.9 + raphael: 2.3.0 + tslib: 2.8.0 + follow-redirects@1.15.9: {} for-each@0.3.3: @@ -12749,6 +13786,8 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 + hachure-fill@0.5.2: {} + handle-thing@2.0.1: {} handlebars@4.7.8: @@ -12806,6 +13845,8 @@ snapshots: he@1.2.0: {} + highlight.js@11.10.0: {} + hookable@5.5.3: {} hosted-git-info@7.0.2: @@ -13017,6 +14058,10 @@ snapshots: hasown: 2.0.2 side-channel: 1.0.6 + internmap@1.0.1: {} + + internmap@2.0.3: {} + ip-address@9.0.5: dependencies: jsbn: 1.1.0 @@ -13239,7 +14284,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.7 + '@types/node': 22.7.8 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -13247,13 +14292,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -13311,6 +14356,10 @@ snapshots: just-diff@6.0.2: {} + katex@0.12.0: + dependencies: + commander: 2.20.3 + katex@0.16.11: dependencies: commander: 8.3.0 @@ -13319,15 +14368,31 @@ snapshots: dependencies: json-buffer: 3.0.1 + khroma@2.1.0: {} + kind-of@6.0.3: {} known-css-properties@0.34.0: {} + kolorist@1.8.0: {} + + langium@3.0.0: + dependencies: + chevrotain: 11.0.3 + chevrotain-allstar: 0.3.1(chevrotain@11.0.3) + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 + launch-editor@2.9.1: dependencies: picocolors: 1.1.1 shell-quote: 1.8.1 + layout-base@1.0.2: {} + + layout-base@2.0.1: {} + leven@3.1.0: {} levn@0.4.1: @@ -13436,6 +14501,11 @@ snapshots: emojis-list: 3.0.0 json5: 2.2.3 + local-pkg@0.5.0: + dependencies: + mlly: 1.7.2 + pkg-types: 1.2.1 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -13448,6 +14518,8 @@ snapshots: dependencies: p-locate: 6.0.0 + lodash-es@4.17.21: {} + lodash.camelcase@4.3.0: {} lodash.debounce@4.0.8: {} @@ -13541,6 +14613,14 @@ snapshots: markdown-it-emoji@3.0.0: {} + markdown-it-ins@4.0.0: {} + + markdown-it-mark@4.0.0: {} + + markdown-it-sub@2.0.0: {} + + markdown-it-sup@2.0.0: {} + markdown-it@14.1.0: dependencies: argparse: 2.0.1 @@ -13554,8 +14634,54 @@ snapshots: dependencies: marked: 14.1.3 + marked@13.0.3: {} + marked@14.1.3: {} + markmap-common@0.17.1: + dependencies: + '@babel/runtime': 7.25.7 + '@gera2ld/jsx-dom': 2.2.2 + npm2url: 0.2.4 + + markmap-html-parser@0.17.1(markmap-common@0.17.1): + dependencies: + '@babel/runtime': 7.25.7 + cheerio: 1.0.0-rc.12 + markmap-common: 0.17.1 + + markmap-lib@0.17.2(markmap-common@0.17.1): + dependencies: + '@babel/runtime': 7.25.7 + '@iktakahiro/markdown-it-katex': 4.0.1 + highlight.js: 11.10.0 + katex: 0.16.11 + markdown-it: 14.1.0 + markdown-it-ins: 4.0.0 + markdown-it-mark: 4.0.0 + markdown-it-sub: 2.0.0 + markdown-it-sup: 2.0.0 + markmap-common: 0.17.1 + markmap-html-parser: 0.17.1(markmap-common@0.17.1) + markmap-view: 0.17.2(markmap-common@0.17.1) + prismjs: 1.29.0 + yaml: 2.6.0 + + markmap-toolbar@0.17.2(markmap-common@0.17.1): + dependencies: + '@babel/runtime': 7.25.7 + '@gera2ld/jsx-dom': 2.2.2 + markmap-common: 0.17.1 + + markmap-view@0.17.2(markmap-common@0.17.1): + dependencies: + '@babel/runtime': 7.25.7 + '@gera2ld/jsx-dom': 2.2.2 + '@types/d3': 7.4.3 + d3: 7.9.0 + d3-flextree: 2.1.2 + markmap-common: 0.17.1 + mathjax-full@3.2.2: dependencies: esm: 3.2.25 @@ -13620,6 +14746,30 @@ snapshots: merge2@1.4.1: {} + mermaid@11.3.0: + dependencies: + '@braintree/sanitize-url': 7.1.0 + '@iconify/utils': 2.1.33 + '@mermaid-js/parser': 0.3.0 + cytoscape: 3.30.2 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.30.2) + cytoscape-fcose: 2.2.0(cytoscape@3.30.2) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.10 + dayjs: 1.11.13 + dompurify: 3.1.6 + katex: 0.16.11 + khroma: 2.1.0 + lodash-es: 4.17.21 + marked: 13.0.3 + roughjs: 4.6.6 + stylis: 4.3.4 + ts-dedent: 2.2.0 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + methods@1.1.2: {} mhchemparser@4.2.1: {} @@ -13740,6 +14890,13 @@ snapshots: mkdirp@1.0.4: {} + mlly@1.7.2: + dependencies: + acorn: 8.13.0 + pathe: 1.1.2 + pkg-types: 1.2.1 + ufo: 1.5.4 + ms@2.0.0: {} ms@2.1.3: {} @@ -13875,6 +15032,8 @@ snapshots: path-key: 4.0.0 unicorn-magic: 0.3.0 + npm2url@0.2.4: {} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 @@ -14001,6 +15160,8 @@ snapshots: package-json-from-dist@1.0.1: {} + package-manager-detector@0.2.2: {} + pacote@18.0.6: dependencies: '@npmcli/git': 5.0.8 @@ -14099,6 +15260,8 @@ snapshots: no-case: 3.0.4 tslib: 2.8.0 + path-data-parser@0.1.0: {} + path-exists@4.0.0: {} path-exists@5.0.0: {} @@ -14147,6 +15310,12 @@ snapshots: dependencies: find-up: 4.1.0 + pkg-types@1.2.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.2 + pathe: 1.1.2 + playwright-core@1.48.1: {} playwright@1.48.1: @@ -14155,6 +15324,13 @@ snapshots: optionalDependencies: fsevents: 2.3.2 + points-on-curve@0.2.0: {} + + points-on-path@0.2.1: + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + portfinder@1.0.32: dependencies: async: 2.6.4 @@ -14173,7 +15349,7 @@ snapshots: postcss-colormin@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.47 @@ -14181,7 +15357,7 @@ snapshots: postcss-convert-values@7.0.4(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -14209,14 +15385,14 @@ snapshots: postcss: 8.4.47 postcss-safe-parser: 6.0.0(postcss@8.4.47) - postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.4.5): + postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.6.0): dependencies: lilconfig: 3.1.2 optionalDependencies: jiti: 1.21.6 postcss: 8.4.47 tsx: 4.19.1 - yaml: 2.4.5 + yaml: 2.6.0 postcss-loader@8.1.1(postcss@8.4.47)(typescript@5.6.3)(webpack@5.95.0(esbuild@0.23.1)): dependencies: @@ -14239,7 +15415,7 @@ snapshots: postcss-merge-rules@7.0.4(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 cssnano-utils: 5.0.0(postcss@8.4.47) postcss: 8.4.47 @@ -14259,7 +15435,7 @@ snapshots: postcss-minify-params@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 cssnano-utils: 5.0.0(postcss@8.4.47) postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -14322,7 +15498,7 @@ snapshots: postcss-normalize-unicode@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -14344,7 +15520,7 @@ snapshots: postcss-reduce-initial@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 postcss: 8.4.47 @@ -14460,6 +15636,10 @@ snapshots: range-parser@1.2.1: {} + raphael@2.3.0: + dependencies: + eve-raphael: 0.5.0 + raw-body@2.5.2: dependencies: bytes: 3.1.2 @@ -14615,6 +15795,8 @@ snapshots: glob: 11.0.0 package-json-from-dist: 1.0.1 + robust-predicates@3.0.2: {} + rollup-plugin-dts@6.1.1(rollup@4.24.0)(typescript@5.6.3): dependencies: magic-string: 0.30.12 @@ -14665,12 +15847,21 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.24.0 fsevents: 2.3.3 + roughjs@4.6.6: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + run-applescript@7.0.0: {} run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + rw@1.3.3: {} + rxjs@7.8.1: dependencies: tslib: 2.8.0 @@ -15191,7 +16382,7 @@ snapshots: stylehacks@7.0.4(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 postcss: 8.4.47 postcss-selector-parser: 6.1.2 @@ -15296,6 +16487,8 @@ snapshots: - supports-color - typescript + stylis@4.3.4: {} + subarg@1.0.0: dependencies: minimist: 1.2.8 @@ -15450,8 +16643,12 @@ snapshots: ts-debounce@4.0.0: {} + ts-dedent@2.2.0: {} + tsconfig-vuepress@5.2.1: {} + tslib@2.3.0: {} + tslib@2.8.0: {} tsx@4.19.1: @@ -15528,6 +16725,8 @@ snapshots: uc.micro@2.1.0: {} + ufo@1.5.4: {} + uglify-js@3.19.3: optional: true @@ -15610,9 +16809,9 @@ snapshots: upath@2.0.1: {} - update-browserslist-db@1.1.1(browserslist@4.24.0): + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -15632,6 +16831,8 @@ snapshots: uuid@8.3.2: {} + uuid@9.0.1: {} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -15653,12 +16854,12 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@2.1.3(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0): + vite-node@2.1.3(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0): dependencies: cac: 6.7.14 debug: 4.3.7 pathe: 1.1.2 - vite: 5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) + vite: 5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -15670,23 +16871,23 @@ snapshots: - supports-color - terser - vite@5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0): + vite@5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.24.0 optionalDependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 fsevents: 2.3.3 lightningcss: 1.27.0 sass: 1.80.3 sass-embedded: 1.80.3 terser: 5.36.0 - vitest@2.1.3(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0): + vitest@2.1.3(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0): dependencies: '@vitest/expect': 2.1.3 - '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)) + '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)) '@vitest/pretty-format': 2.1.3 '@vitest/runner': 2.1.3 '@vitest/snapshot': 2.1.3 @@ -15701,11 +16902,11 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.9(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) - vite-node: 2.1.3(@types/node@22.7.7)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) + vite: 5.4.9(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) + vite-node: 2.1.3(@types/node@22.7.8)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.7.7 + '@types/node': 22.7.8 transitivePeerDependencies: - less - lightningcss @@ -15717,6 +16918,23 @@ snapshots: - supports-color - terser + vscode-jsonrpc@8.2.0: {} + + vscode-languageserver-protocol@3.17.5: + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-languageserver-types@3.17.5: {} + + vscode-languageserver@9.0.1: + dependencies: + vscode-languageserver-protocol: 3.17.5 + + vscode-uri@3.0.8: {} + vue-demi@0.14.10(vue@3.5.12(typescript@5.6.3)): dependencies: vue: 3.5.12(typescript@5.6.3) @@ -15758,7 +16976,7 @@ snapshots: optionalDependencies: typescript: 5.6.3 - vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)): + vuepress@2.0.0-rc.18(@vuepress/bundler-vite@2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0))(@vuepress/bundler-webpack@2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3))(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)): dependencies: '@vuepress/cli': 2.0.0-rc.18(typescript@5.6.3) '@vuepress/client': 2.0.0-rc.18(typescript@5.6.3) @@ -15768,7 +16986,7 @@ snapshots: '@vuepress/utils': 2.0.0-rc.18 vue: 3.5.12(typescript@5.6.3) optionalDependencies: - '@vuepress/bundler-vite': 2.0.0-rc.18(@types/node@22.7.7)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.4.5) + '@vuepress/bundler-vite': 2.0.0-rc.18(@types/node@22.7.8)(jiti@1.21.6)(lightningcss@1.27.0)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.0) '@vuepress/bundler-webpack': 2.0.0-rc.18(esbuild@0.23.1)(typescript@5.6.3) transitivePeerDependencies: - supports-color @@ -15870,7 +17088,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.13.0 acorn-import-attributes: 1.9.5(acorn@8.13.0) - browserslist: 4.24.0 + browserslist: 4.24.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.17.1 es-module-lexer: 1.5.4 @@ -16130,8 +17348,7 @@ snapshots: yallist@4.0.0: {} - yaml@2.4.5: - optional: true + yaml@2.6.0: {} yargs-parser@21.1.1: {} @@ -16153,4 +17370,8 @@ snapshots: yoctocolors@2.1.1: {} + zrender@5.6.0: + dependencies: + tslib: 2.3.0 + zwitch@2.0.4: {} diff --git a/tsconfig.build.json b/tsconfig.build.json index 73b6b1cfb2..a2b48f2a5b 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -41,9 +41,11 @@ // markdown { "path": "./plugins/markdown/plugin-append-date/tsconfig.build.json" }, { "path": "./plugins/markdown/plugin-links-check/tsconfig.build.json" }, + { "path": "./plugins/markdown/plugin-markdown-chart/tsconfig.build.json" }, { "path": "./plugins/markdown/plugin-markdown-container/tsconfig.build.json" }, + { "path": "./plugins/markdown/plugin-markdown-hint/tsconfig.build.json" },