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" },