diff --git a/.cspell/code-terms.txt b/.cspell/code-terms.txt new file mode 100644 index 0000000000..6d26357f8f --- /dev/null +++ b/.cspell/code-terms.txt @@ -0,0 +1,137 @@ +# This file contains coding related terms +ALPHANUM +antiscript +APPLYCLASS +ARROWHEADSTYLE +ARROWTYPE +autonumber +axisl-line +Bigdecimal +birel +BIREL +bqstring +BQUOTE +bramp +BRKT +callbackargs +callbackname +classdef +classdefid +classentity +classname +COLONSEP +COMPOSIT_STATE +concat +controlx +controly +CSSCLASS +CYLINDEREND +CYLINDERSTART +datakey +DEND +descr +distp +distq +divs +docref +DOMID +doublecircle +DOUBLECIRCLEEND +DOUBLECIRCLESTART +DQUOTE +DSTART +edgesep +EMPTYSTR +enddate +ERDIAGRAM +flatmap +forwardable +frontmatter +funs +gantt +GENERICTYPE +getBoundarys +grammr +graphtype +interp +introdcued +INVTRAPEND +INVTRAPSTART +JDBC +jison +Kaufmann +keyify +LABELPOS +LABELTYPE +lcov +LEFTOF +Lexa +linebreak +LINETYPE +LINKSTYLE +LLABEL +loglevel +LOGMSG +lookaheads +mdast +minlen +Mstartx +MULT +NODIR +NSTR +Qcontrolx +reinit +rels +reqs +rewritelinks +rgba +RIGHTOF +sankey +sequencenumber +shrc +signaltype +someclass +SPACELINE +SPACELIST +STADIUMEND +STADIUMSTART +startdate +startx +starty +STMNT +stopx +stopy +strikethrough +stringifying +struct +STYLECLASS +STYLEOPTS +subcomponent +subcomponents +SUBROUTINEEND +SUBROUTINESTART +Subschemas +substr +TAGEND +TAGSTART +techn +TESTSTR +TEXTDATA +TEXTLENGTH +titlevalue +topbar +TRAPEND +TRAPSTART +ts-nocheck +tsdoc +typeof +typestr +unshift +verifymethod +VERIFYMTHD +WARN_DOCSDIR_DOESNT_MATCH +xhost +yaxis +yfunc +yytext +zenuml diff --git a/.cspell/contributors.txt b/.cspell/contributors.txt new file mode 100644 index 0000000000..bd3ad9da24 --- /dev/null +++ b/.cspell/contributors.txt @@ -0,0 +1,8 @@ +# Contributors to mermaidjs, one per line +Ashish Jain +cpettitt +Dong Cai +Nikolay Rozhkov +Peng Xiao +subhash-halder +Vinod Sidharth diff --git a/.cspell/cspell.config.yaml b/.cspell/cspell.config.yaml new file mode 100644 index 0000000000..33d6901936 --- /dev/null +++ b/.cspell/cspell.config.yaml @@ -0,0 +1,52 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json + +$schema: https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json + +dictionaryDefinitions: + - name: code-terms + path: ./code-terms.txt + description: A list of coding related terms. + addWords: true + - name: mermaid-terms + path: ./mermaid-terms.txt + description: A list of terms related to the mermaid project. + addWords: true + - name: misc-terms + path: ./misc-terms.txt + description: A list of miscellaneous terms. + - name: 3rd-party-terms + path: ./libraries.txt + description: A list of 3rd party terms from dependencies. + addWords: true + - name: contributors + path: ./contributors.txt + description: A list of contributors to the mermaid project. + type: 'W' + addWords: true + + # cspell:disable + - name: suggestions + words: + - none + suggestWords: + - seperator:separator + - vertice:vertex + # cspell:enable + +patterns: + - name: character-set-cyrillic + pattern: '/\p{Script_Extensions=Cyrillic}+/gu' + - name: svg-block + pattern: '' + - name: json-property + pattern: '/"[\w/@-]+":/g' + +dictionaries: + - mermaid-terms + - suggestions + - contributors + +ignorePaths: + - '*.txt' # do not spell check local dictionaries + +# cspell:dictionary misc-terms diff --git a/.cspell/libraries.txt b/.cspell/libraries.txt new file mode 100644 index 0000000000..f51304da36 --- /dev/null +++ b/.cspell/libraries.txt @@ -0,0 +1,69 @@ +# Add third party library terms below +acyclicer +Antlr +Appli +applitools +Asciidoctor +Astah +automerge +bilkent +bisheng +codedoc +Codemia +codepaths +csstree +cytoscape +cytoscape-cose-bilkent +dagre +dagre-d3 +Deepdwn +Docsify +Docsy +DokuWiki +dompurify +elkjs +fontawesome +Foswiki +Gitea +graphlib +Grav +iconify +Inkdrop +jiti +jsdocs +jsfiddle +jsonschema +katex +khroma +mathml +matplotlib +mdbook +Mermerd +mkdocs +Nextra +nodenext +npmjs +pageview +pathe +phpbb +pixelmatch +Podlite +presetAttributify +pyplot +redmine +rehype +rscratch +sparkline +sphinxcontrib +ssim +stylis +Swimm +tsbuildinfo +Tuleap +Typora +unocss +unplugin +unstub +vite +vitest +Zune diff --git a/.cspell/mermaid-terms.txt b/.cspell/mermaid-terms.txt new file mode 100644 index 0000000000..3fa5eff269 --- /dev/null +++ b/.cspell/mermaid-terms.txt @@ -0,0 +1,39 @@ +Adamiecki +arrowend +bmatrix +braintree +catmull +compositTitleSize +doublecircle +elems +gantt +gitgraph +gzipped +knsv +Knut +marginx +marginy +Markdownish +mermaidjs +mindmap +mindmaps +multigraph +nodesep +NOTEGROUP +Pinterest +rankdir +ranksep +rect +rects +sandboxed +siebling +statediagram +substate +Sveidqvist +unfixable +Viewbox +viewports +visio +vitepress +xlink +xychart diff --git a/.cspell/misc-terms.txt b/.cspell/misc-terms.txt new file mode 100644 index 0000000000..467e48891e --- /dev/null +++ b/.cspell/misc-terms.txt @@ -0,0 +1 @@ +newbranch diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 9b3426ce8f..ceff724bb4 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -78,9 +78,9 @@ module.exports = { '@cspell/spellchecker': [ 'error', { - checkIdentifiers: false, - checkStrings: false, - checkStringTemplates: false, + checkIdentifiers: true, + checkStrings: true, + checkStringTemplates: true, }, ], 'no-empty': [ @@ -159,6 +159,19 @@ module.exports = { '@typescript-eslint/no-unused-vars': 'off', }, }, + { + files: ['*.spec.{ts,js}', 'tests/**', 'cypress/**/*.js'], + rules: { + '@cspell/spellchecker': [ + 'error', + { + checkIdentifiers: false, + checkStrings: false, + checkStringTemplates: false, + }, + ], + }, + }, { files: ['*.html', '*.md', '**/*.md/*'], rules: { diff --git a/.github/lychee.toml b/.github/lychee.toml index 4af304a990..9c9d0558c2 100644 --- a/.github/lychee.toml +++ b/.github/lychee.toml @@ -35,7 +35,10 @@ exclude = [ 'packages/mermaid/src/docs/config/setup/*', # Ignore Discord invite -"https://discord.gg" +"https://discord.gg", + +# BundlePhobia has frequent downtime +"https://bundlephobia.com" ] # Exclude all private IPs from checking. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index f20204a714..cfd22a2935 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -12,7 +12,7 @@ Describe the way your implementation works or what design decisions you made if Make sure you -- [ ] :book: have read the [contribution guidelines](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) +- [ ] :book: have read the [contribution guidelines](https://mermaid.js.org/community/contributing.html) - [ ] :computer: have added necessary unit/e2e tests. -- [ ] :notebook: have added documentation. Make sure [`MERMAID_RELEASE_VERSION`](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/docs/community/contributing.md#update-documentation) is used for all new features. +- [ ] :notebook: have added documentation. Make sure [`MERMAID_RELEASE_VERSION`](https://mermaid.js.org/community/contributing.html#update-documentation) is used for all new features. - [ ] :bookmark: targeted `develop` branch diff --git a/.github/workflows/link-checker.yml b/.github/workflows/link-checker.yml index 3d4956945e..59d25b7c54 100644 --- a/.github/workflows/link-checker.yml +++ b/.github/workflows/link-checker.yml @@ -36,7 +36,7 @@ jobs: restore-keys: cache-lychee- - name: Link Checker - uses: lycheeverse/lychee-action@v1.9.1 + uses: lycheeverse/lychee-action@v1.9.3 with: args: >- --config .github/lychee.toml diff --git a/.lintstagedrc.mjs b/.lintstagedrc.mjs index 231c91f8f4..86af4f5133 100644 --- a/.lintstagedrc.mjs +++ b/.lintstagedrc.mjs @@ -6,6 +6,6 @@ export default { // https://prettier.io/docs/en/cli.html#--cache 'prettier --write', ], - 'cSpell.json': ['tsx scripts/fixCSpell.ts'], + '.cspell/*.txt': ['tsx scripts/fixCSpell.ts'], '**/*.jison': ['pnpm -w run lint:jison'], }; diff --git a/.node-version b/.node-version index 7ea6a59d34..ee09fac75c 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -v20.11.0 +v20.11.1 diff --git a/.npmrc b/.npmrc index e72930ead1..91750f5578 100644 --- a/.npmrc +++ b/.npmrc @@ -1,3 +1,4 @@ registry=https://registry.npmjs.org auto-install-peers=true strict-peer-dependencies=false +package-import-method=clone-or-copy diff --git a/.prettierignore b/.prettierignore index fb9b694b75..e2fe936d26 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,7 @@ dist cypress/platform/xss3.html .cache +.pnpm-store coverage # Autogenerated by PNPM pnpm-lock.yaml @@ -12,4 +13,4 @@ stats packages/mermaid/src/config.type.ts # Ignore the files creates in /demos/dev except for example.html demos/dev/** -!/demos/dev/example.html \ No newline at end of file +!/demos/dev/example.html diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 9633bed665..4923342e4a 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,7 +2,7 @@ "recommendations": [ "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", - "zixuanchen.vitest-explorer", + "vitest.explorer", "luniclynx.bison" ] } diff --git a/README.md b/README.md index f0d9f7b096..8544e09800 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Try Live Editor previews of future releases: Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! +Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! ## Table of content @@ -53,7 +53,7 @@ Try Live Editor previews of future releases: docs - live editor] +### Flowchart [docs - live editor] ``` flowchart LR @@ -115,12 +115,13 @@ C -->|One| D[Result 1] C -->|Two| E[Result 2] ``` -### Sequence diagram [docs - live editor] +### Sequence diagram [docs - live editor] + ``` sequenceDiagram Alice->>John: Hello John, how are you? -loop Healthcheck +loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! @@ -132,7 +133,7 @@ Bob-->>John: Jolly good! ```mermaid sequenceDiagram Alice->>John: Hello John, how are you? -loop Healthcheck +loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! @@ -141,7 +142,7 @@ John->>Bob: How about you? Bob-->>John: Jolly good! ``` -### Gantt chart [docs - live editor] +### Gantt chart [docs - live editor] ``` gantt @@ -165,7 +166,7 @@ gantt Parallel 4 : des6, after des4, 1d ``` -### Class diagram [docs - live editor] +### Class diagram [docs - live editor] ``` classDiagram @@ -207,7 +208,7 @@ class Class10 { ``` -### State diagram [docs - live editor] +### State diagram [docs - live editor] ``` stateDiagram-v2 @@ -229,7 +230,7 @@ Moving --> Crash Crash --> [*] ``` -### Pie chart [docs - live editor] +### Pie chart [docs - live editor] ``` pie @@ -247,7 +248,7 @@ pie ### Git graph [experimental - live editor] -### Bar chart (using gantt chart) [docs - live editor] +### Bar chart (using gantt chart) [docs - live editor] ``` gantt @@ -285,7 +286,7 @@ gantt 5 : 0, 5 ``` -### User Journey diagram [docs - live editor] +### User Journey diagram [docs - live editor] ``` journey @@ -311,7 +312,7 @@ gantt Sit down: 3: Me ``` -### C4 diagram [docs] +### C4 diagram [docs] ``` C4Context @@ -405,7 +406,7 @@ The above command generates files into the `dist` folder and publishes them to < Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. -Detailed information about how to contribute can be found in the [contribution guide](CONTRIBUTING.md) +Detailed information about how to contribute can be found in the [contribution guide](https://mermaid.js.org/community/contributing.html) ## Security and safe diagrams diff --git a/README.zh-CN.md b/README.zh-CN.md index 667a8113a8..942f54bff9 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -43,7 +43,7 @@ Mermaid **感谢所有参与进来提交 PR,解答疑问的人们! 🙏** -Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! +Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out! ## 关于 Mermaid @@ -57,20 +57,20 @@ Mermaid 是一个基于 Javascript 的图表绘制工具,通过解析类 Markd Mermaid 通过允许用户创建便于修改的图表来解决这一难题,它也可以作为生产脚本(或其他代码)的一部分。

Mermaid 甚至能让非程序员也能通过 [Mermaid Live Editor](https://mermaid.live/) 轻松创建详细的图表。
-你可以访问 [教程](./docs/ecosystem/tutorials.md) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](./docs/ecosystem/integrations-community.md) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。 +你可以访问 [教程](https://mermaid.js.org/ecosystem/tutorials.html) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](https://mermaid.js.org/ecosystem/integrations-community.html) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。 -如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](./docs/intro/getting-started.md), [用法](./docs/config/usage.md) 和 [教程](./docs/ecosystem/tutorials.md). +如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](https://mermaid.js.org/intro/getting-started.html), [用法](https://mermaid.js.org/config/usage.html) 和 [教程](https://mermaid.js.org/ecosystem/tutorials.html). ## 示例 -**下面是一些可以使用 Mermaid 创建的图表示例。点击 [语法](https://mermaid-js.github.io/mermaid/#/n00b-syntaxReference) 查看详情。** +**下面是一些可以使用 Mermaid 创建的图表示例。点击 [语法](https://mermaid.js.org/intro/syntax-reference.html) 查看详情。** -### 流程图 [文档 - live editor] +### 流程图 [文档 - live editor] ``` flowchart LR @@ -88,12 +88,12 @@ C -->|One| D[Result 1] C -->|Two| E[Result 2] ``` -### 时序图 [文档 - live editor] +### 时序图 [文档 - live editor] ``` sequenceDiagram Alice->>John: Hello John, how are you? -loop Healthcheck +loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! @@ -105,7 +105,7 @@ Bob-->>John: Jolly good! ```mermaid sequenceDiagram Alice->>John: Hello John, how are you? -loop Healthcheck +loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! @@ -114,7 +114,7 @@ John->>Bob: How about you? Bob-->>John: Jolly good! ``` -### 甘特图 [文档 - live editor] +### 甘特图 [文档 - live editor] ``` gantt @@ -138,7 +138,7 @@ gantt Parallel 4 : des6, after des4, 1d ``` -### 类图 [文档 - live editor] +### 类图 [文档 - live editor] ``` classDiagram @@ -178,7 +178,7 @@ class Class10 { } ``` -### 状态图 [[docs - live editor] +### 状态图 [docs - live editor] ``` stateDiagram-v2 @@ -200,7 +200,7 @@ Moving --> Crash Crash --> [*] ``` -### 饼图 [文档 - live editor] +### 饼图 [文档 - live editor] ``` pie @@ -218,7 +218,7 @@ pie ### Git 图 [实验特性 - live editor] -### 用户体验旅程图 [文档 - live editor] +### 用户体验旅程图 [文档 - live editor] ``` journey @@ -244,7 +244,7 @@ pie Sit down: 3: Me ``` -### C4 图 [文档] +### C4 图 [文档] ``` C4Context @@ -338,7 +338,7 @@ npm publish Mermaid 是一个不断发展中的社区,并且还在接收新的贡献者。有很多不同的方式可以参与进来,而且我们还在寻找额外的帮助。如果你想知道如何开始贡献,请查看 [这个 issue](https://github.com/mermaid-js/mermaid/issues/866)。 -关于如何贡献的详细信息可以在 [贡献指南](CONTRIBUTING.md) 中找到。 +关于如何贡献的详细信息可以在 [贡献指南](https://mermaid.js.org/community/contributing.html) 中找到。 ## 安全 diff --git a/cSpell.json b/cSpell.json deleted file mode 100644 index fc5eb6f9dc..0000000000 --- a/cSpell.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "version": "0.2", - "language": "en", - "words": [ - "acyclicer", - "adamiecki", - "alois", - "aloisklink", - "antiscript", - "antlr", - "appli", - "applitools", - "asciidoctor", - "ashish", - "ashishjain", - "astah", - "bbox", - "bilkent", - "bisheng", - "blrs", - "braintree", - "brkt", - "brolin", - "brotli", - "catmull", - "città", - "classdef", - "codedoc", - "codemia", - "colour", - "colours", - "commitlint", - "cpettitt", - "customizability", - "cuzon", - "cytoscape", - "dagre", - "deepdwn", - "descr", - "docsify", - "docsy", - "doku", - "dompurify", - "dont", - "doublecircle", - "edgechromium", - "elems", - "elkjs", - "elle", - "faber", - "flatmap", - "foswiki", - "frontmatter", - "ftplugin", - "gantt", - "gitea", - "gitgraph", - "globby", - "graphlib", - "graphviz", - "grav", - "greywolf", - "gzipped", - "huynh", - "huynhicode", - "inkdrop", - "jaoude", - "jgreywolf", - "jison", - "jiti", - "kaufmann", - "khroma", - "klemm", - "klink", - "knsv", - "knut", - "knutsveidqvist", - "laganeckas", - "linetype", - "lintstagedrc", - "logmsg", - "lucida", - "markdownish", - "matthieu", - "matthieumorel", - "mdast", - "mdbook", - "mermaidjs", - "mermerd", - "mindaugas", - "mindmap", - "mindmaps", - "mitigations", - "mkdocs", - "mmorel", - "mult", - "neurodiverse", - "nextra", - "nikolay", - "nirname", - "npmjs", - "orlandoni", - "pathe", - "pbrolin", - "phpbb", - "pixelmatch", - "plantuml", - "playfair", - "pnpm", - "podlite", - "quence", - "radious", - "ranksep", - "rect", - "rects", - "reda", - "redmine", - "regexes", - "rehype", - "roledescription", - "rozhkov", - "sandboxed", - "sankey", - "setupgraphviewbox", - "shiki", - "sidharth", - "sidharthv", - "sphinxcontrib", - "ssim", - "startx", - "starty", - "statediagram", - "steph", - "stopx", - "stopy", - "stylis", - "subhash-halder", - "substate", - "sulais", - "sveidqvist", - "swimm", - "techn", - "teststr", - "textlength", - "treemap", - "ts-nocheck", - "tsdoc", - "tuleap", - "tylerlong", - "typora", - "ugge", - "unist", - "unocss", - "upvoting", - "valign", - "verdana", - "viewports", - "vinod", - "visio", - "vitepress", - "vueuse", - "xlink", - "xychart", - "yash", - "yokozuna", - "zenuml", - "zune" - ], - "patterns": [ - { "name": "Markdown links", "pattern": "\\((.*)\\)", "description": "" }, - { - "name": "Markdown code blocks", - "pattern": "/^(\\s*`{3,}).*[\\s\\S]*?^\\1/gmx", - "description": "Taken from the cSpell example at https://cspell.org/configuration/patterns/#verbose-regular-expressions" - }, - { - "name": "Inline code blocks", - "pattern": "\\`([^\\`\\r\\n]+?)\\`", - "description": "https://stackoverflow.com/questions/41274241/how-to-capture-inline-markdown-code-but-not-a-markdown-code-fence-with-regex" - }, - { "name": "Link contents", "pattern": "\\", "description": "" }, - { "name": "Snippet references", "pattern": "-- snippet:(.*)", "description": "" }, - { - "name": "Snippet references 2", - "pattern": "\\<\\[sample:(.*)", - "description": "another kind of snippet reference" - }, - { "name": "Multi-line code blocks", "pattern": "/^\\s*```[\\s\\S]*?^\\s*```/gm" }, - { - "name": "HTML Tags", - "pattern": "<[^>]*>", - "description": "Reference: https://stackoverflow.com/questions/11229831/regular-expression-to-remove-html-tags-from-a-string" - } - ], - "ignoreRegExpList": [ - "Markdown links", - "Markdown code blocks", - "Inline code blocks", - "Link contents", - "Snippet references", - "Snippet references 2", - "Multi-line code blocks", - "HTML Tags" - ], - "ignorePaths": [ - "packages/mermaid/src/docs/CHANGELOG.md", - "packages/mermaid/src/docs/.vitepress/redirect.ts", - "packages/mermaid/src/docs/.vitepress/contributor-names.json" - ] -} diff --git a/cspell.config.yaml b/cspell.config.yaml new file mode 100644 index 0000000000..885a41afd8 --- /dev/null +++ b/cspell.config.yaml @@ -0,0 +1,45 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json + +$schema: https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json +version: '0.2' +language: en-US,en-GB + +import: + - ./.cspell/cspell.config.yaml + +ignoreRegExpList: + - character-set-cyrillic + - svg-block +ignorePaths: + - '*lock.{yaml,json}' + - dist + - CHANGELOG.md + - packages/mermaid/src/docs/.vitepress/redirect.ts + - packages/mermaid/src/docs/.vitepress/contributor-names.json + - backup + - '**/*.spec.{js,ts}' # checked by eslint + - 'tests/webpack/src/index.js' # checked by eslint + - 'cypress/**/*.js' # checked by eslint + - '*.csv' + - '*.patch' + - 'docs/**/*.html' + - 'cypress/platform/**' +dictionaries: + - misc-terms +overrides: + - filename: + - '**/*.{jison,ts,mts,cjs,mjs,js,json,yaml,yml,md,html}' + - 'run' + - Dockerfile + ignoreRegExpList: + - js-unicode-escape + dictionaries: + - code-terms + - 3rd-party-terms + - fonts + - html + - lorem-ipsum + - filename: '**/package.json' + ignoreRegExpList: + - json-property +# cspell:dictionaries code-terms diff --git a/cypress/integration/rendering/katex.spec.js b/cypress/integration/rendering/katex.spec.js new file mode 100644 index 0000000000..fb1d13392a --- /dev/null +++ b/cypress/integration/rendering/katex.spec.js @@ -0,0 +1,36 @@ +import { imgSnapshotTest } from '../../helpers/util'; + +describe('Katex', () => { + it('1: should render a complex Katex flowchart no htmlLabels', () => { + imgSnapshotTest( + `graph LR + A["$$f(\\relax{x}) = \\int_{-\\infty}^\\infty \\hat{f}(\\xi)\\,e^{2 \\pi i \\xi x}\\,d\\xi$$"] -->|"$$\\Bigg(\\bigg(\\Big(\\big((\\frac{-b\\pm\\sqrt{b^2-4ac}}{2a})\\big)\\Big)\\bigg)\\Bigg)$$"| B("$$1+\\frac{e^{-2\\pi}} {1+\\frac{e^{-4\\pi}} {1+\\frac{e^{-6\\pi}} {1+\\frac{e^{-8\\pi}} {1+\\cdots}}}}$$") + A -->|"$$\\overbrace{a+b+c}^{\\text{note}}$$"| C("$$\\phase{-78^\\circ}$$") + B --> D("$$x = \\begin{cases} a &\\text{if } b \\\\ c &\\text{if } d \\end{cases}$$") + C --> E("$$x(t)=c_1\\begin{bmatrix}-\\cos{t}+\\sin{t}\\\\ 2\\cos{t} \\end{bmatrix}e^{2t}$$")`, + { fontFamily: 'courier' } + ); + }); + it('2: should render a Katex flowchart containing the Greek alphabet', () => { + imgSnapshotTest( + `graph LR + A["$$\\alpha\\beta\\gamma\\delta\\epsilon\\zeta\\eta\\theta\\iota\\kappa\\lambda\\mu\\nu\\xi\\omicron\\pi\\rho\\sigma\\tau\\upsilon\\phi\\chi\\psi\\omega$$"] --> B["$$\\Alpha\\Beta\\Gamma\\Delta\\Epsilon\\Zeta\\Eta\\Theta\\Iota\\Kappa\\Lambda\\Mu\\Nu\\Xi\\Omicron\\Pi\\Rho\\Sigma\\Tau\\Upsilon\\Phi\\Chi\\Psi\\Omega$$"]`, + { fontFamily: 'courier' } + ); + }); + it('3: should render a Katex flowchart containing set theory symbols', () => { + imgSnapshotTest( + `graph LR + A["$$\\forall\\complement\\therefore\\emptyset\\exists\\subset\\because\\empty\\exist\\supset\\mapsto\\varnothing\\nexists\\mid\\to\\implies\\in\\land\\gets\\impliedby\\isin\\lor\\leftrightarrow\\iff\\notin\\ni\\notni\\lnot$$"] --> B["$$\\nabla\\Im\\Reals\\jmath\\partial\\image\\wp\\aleph\\Game\\weierp\\alef\\Finv\\N\\Z\\alefsym\\cnums\\natnums\\beth\\Complex\\R\\gimel\\ell\\Re\\daleth\\hbar\\real\\eth\\hslash\\reals$$"]`, + { fontFamily: 'courier' } + ); + }); + // TODO: changes made to develop between Feb 13 - Feb 23 cause this test to no longer function + // it.skip('4: should render an error box originating from Katex', () => { + // imgSnapshotTest( + // `graph LR + // A["$$\\shouldBeError$$"]`, + // { fontFamily: 'courier' } + // ); + // }); +}); diff --git a/demos/flowchart.html b/demos/flowchart.html index d7032a663c..faf5337955 100644 --- a/demos/flowchart.html +++ b/demos/flowchart.html @@ -1102,6 +1102,57 @@

flowchart


+

Sample 20

+

graph

+
+      graph LR
+      A["$$f(\relax{x}) = \int_{-\infty}^\infty \hat{f}(\xi)\,e^{2 \pi i \xi x}\,d\xi$$"] -->|"$$\Bigg(\bigg(\Big(\big((\frac{-b\pm\sqrt{b^2-4ac}}{2a})\big)\Big)\bigg)\Bigg)$$"| B("$$1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots}}}}$$")
+      A -->|"$$\overbrace{a+b+c}^{\text{note}}$$"| C("$$\phase{-78^\circ}$$")
+      B --> D("$$x = \begin{cases} a &\text{if } b \\ c &\text{if } d \end{cases}$$")
+      C --> E("$$x(t)=c_1\begin{bmatrix}-\cos{t}+\sin{t}\\ 2\cos{t} \end{bmatrix}e^{2t}$$")
+    
+
+ +

flowchart

+
+      flowchart LR
+      A["$$f(\relax{x}) = \int_{-\infty}^\infty \hat{f}(\xi)\,e^{2 \pi i \xi x}\,d\xi$$"] -->|"$$\Bigg(\bigg(\Big(\big((\frac{-b\pm\sqrt{b^2-4ac}}{2a})\big)\Big)\bigg)\Bigg)$$"| B("$$1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots}}}}$$")
+      A -->|"$$\overbrace{a+b+c}^{\text{note}}$$"| C("$$\phase{-78^\circ}$$")
+      B --> D("$$x = \begin{cases} a &\text{if } b \\ c &\text{if } d \end{cases}$$")
+      C --> E("$$x(t)=c_1\begin{bmatrix}-\cos{t}+\sin{t}\\ 2\cos{t} \end{bmatrix}e^{2t}$$")
+    
+
+ +

Sample 21

+

graph

+
+      graph LR
+      A["$$\alpha\beta\gamma\delta\epsilon\zeta\eta\theta\iota\kappa\lambda\mu\nu\xi\omicron\pi\rho\sigma\tau\upsilon\phi\chi\psi\omega$$"] --> B["$$\Alpha\Beta\Gamma\Delta\Epsilon\Zeta\Eta\Theta\Iota\Kappa\Lambda\Mu\Nu\Xi\Omicron\Pi\Rho\Sigma\Tau\Upsilon\Phi\Chi\Psi\Omega$$"]
+    
+
+ +

flowchart

+
+      graph LR
+      A["$$\alpha\beta\gamma\delta\epsilon\zeta\eta\theta\iota\kappa\lambda\mu\nu\xi\omicron\pi\rho\sigma\tau\upsilon\phi\chi\psi\omega$$"] --> B["$$\Alpha\Beta\Gamma\Delta\Epsilon\Zeta\Eta\Theta\Iota\Kappa\Lambda\Mu\Nu\Xi\Omicron\Pi\Rho\Sigma\Tau\Upsilon\Phi\Chi\Psi\Omega$$"]
+    
+
+ +

Sample 22

+

graph

+
+      graph LR
+      A["$$\forall\complement\therefore\emptyset\exists\subset\because\empty\exist\supset\mapsto\varnothing\nexists\mid\to\implies\in\land\gets\impliedby\isin\lor\leftrightarrow\iff\notin\ni\notni\lnot$$"] --> B["$$\nabla\Im\Reals\jmath\partial\image\wp\aleph\Game\weierp\alef\Finv\N\Z\alefsym\cnums\natnums\beth\Complex\R\gimel\ell\Re\daleth\hbar\real\eth\hslash\reals$$"]
+    
+
+ +

flowchart

+
+      graph LR
+      A["$$\forall\complement\therefore\emptyset\exists\subset\because\empty\exist\supset\mapsto\varnothing\nexists\mid\to\implies\in\land\gets\impliedby\isin\lor\leftrightarrow\iff\notin\ni\notni\lnot$$"] --> B["$$\nabla\Im\Reals\jmath\partial\image\wp\aleph\Game\weierp\alef\Finv\N\Z\alefsym\cnums\natnums\beth\Complex\R\gimel\ell\Re\daleth\hbar\real\eth\hslash\reals$$"]
+    
+
+
@@ -1524,11 +1575,11 @@ 

flowchart

F{Flow 2} == Choice 2.1 ==> H[Feedback node] H[Feedback node] ==> B[Step 1] F{Flow 2} == Choice 2.2 ==> G((Finish)) - + linkStyle 0,1,4,6,7,8,9 stroke:gold, stroke-width:4px classDef active_node fill:#0CF,stroke:#09F,stroke-width:6px - classDef unactive_node fill:#e0e0e0,stroke:#bdbdbd,stroke-width:3px + classDef unactive_node fill:#e0e0e0,stroke:#bdbdbd,stroke-width:3px classDef bugged_node fill:#F88,stroke:#F22,stroke-width:3px classDef start_node,finish_node fill:#3B1,stroke:#391,stroke-width:8px diff --git a/demos/sequence.html b/demos/sequence.html index 8eecae6105..d6b4e3769d 100644 --- a/demos/sequence.html +++ b/demos/sequence.html @@ -16,9 +16,9 @@

Sequence diagram demos

-		sequenceDiagram
-			accTitle: test the accTitle
-			accDescr: Test a description
+    sequenceDiagram
+      accTitle: test the accTitle
+      accDescr: Test a description
 
 			participant Alice
 			participant Bob
@@ -31,39 +31,39 @@ 

Sequence diagram demos

rect rgb(200, 220, 100) rect rgb(200, 255, 200) - Alice ->> Bob: Hello Bob, how are you? - Bob-->>John: How about you John? - end + Alice ->> Bob: Hello Bob, how are you? + Bob-->>John: How about you John? + end - Bob--x Alice: I am good thanks! - Bob-x John: I am good thanks! - Note right of John: John thinks a long
long time, so long
that the text does
not fit on a row. + Bob--x Alice: I am good thanks! + Bob-x John: I am good thanks! + Note right of John: John thinks a long
long time, so long
that the text does
not fit on a row. - Bob-->Alice: Checking with John... - Note over John:wrap: John looks like he's still thinking, so Bob prods him a bit. - Bob-x John: Hey John - we're still waiting to know
how you're doing - Note over John:nowrap: John's trying hard not to break his train of thought. - Bob-x John:wrap: John! Are you still debating about how you're doing? How long does it take?? - Note over John: After a few more moments, John
finally snaps out of it. - end + Bob-->Alice: Checking with John... + Note over John:wrap: John looks like he's still thinking, so Bob prods him a bit. + Bob-x John: Hey John - we're still waiting to know
how you're doing + Note over John:nowrap: John's trying hard not to break his train of thought. + Bob-x John:wrap: John! Are you still debating about how you're doing? How long does it take?? + Note over John: After a few more moments, John
finally snaps out of it. + end - autonumber off - alt either this - Alice->>+John: Yes - John-->>-Alice: OK - else or this - autonumber - Alice->>John: No - else or this will happen - Alice->John: Maybe - end - autonumber 200 - par this happens in parallel - Alice -->> Bob: Parallel message 1 - and - Alice -->> John: Parallel message 2 - end -
+ autonumber off + alt either this + Alice->>+John: Yes + John-->>-Alice: OK + else or this + autonumber + Alice->>John: No + else or this will happen + Alice->John: Maybe + end + autonumber 200 + par this happens in parallel + Alice -->> Bob: Parallel message 1 + and + Alice -->> John: Parallel message 2 + end +

     ---
@@ -153,18 +153,18 @@ 

Sequence diagram demos


-      sequenceDiagram
-      box lightgreen Alice & John
-      participant A
-      participant J
-      end
-      box Another Group very very long description not wrapped
-      participant B
-      end
-      A->>J: Hello John, how are you?
-      J->>A: Great!
-      A->>B: Hello Bob, how are you ?
-      
>J: Hello John, how are you? + J->>A: Great! + A->>B: Hello Bob, how are you ? +

@@ -188,6 +188,49 @@

Sequence diagram demos

end +
+ +
+    sequenceDiagram
+    participant 1 as $$\frac{\lim_{x\rightarrow0}{\frac{1}{x}}}{\frac{-b\pm\sqrt{b^2-4ac}}{2a}}$$
+    participant 2 as $$\beta$$
+    participant 3 as $$\delta$$
+    participant 4 as $$\frac{\frac{\lim_{x\rightarrow0}{\frac{1}{x}}}{\frac{-b\pm\sqrt{b^2-4ac}}{2a}}}{\frac{\text{d}}{\text{d}x}{x^2}}$$
+    1->>2: $$\sqrt{2}$$
+    note right of 2: $$\frac{1+\frac{1+\frac{1+\frac{1}{2}}{2}}{2}}{2}+\frac{-b\pm\sqrt{b^2-4ac}}{2a}$$
+    2->>3: $$\frac{\lim_{x\rightarrow0}{\frac{1}{x}}}{\frac{-b\pm\sqrt{b^2-4ac}}{2a}}$$
+    note right of 3: $$\frac{-b\pm\sqrt{b^2-4ac}}{2a}$$
+    3->>4: $$\lim_{x\rightarrow0}{\frac{1}{x}}$$;
+    note right of 4: multiline
+    4->>1: multiline
using #lt;br /#gt; + note right of 1: multiline
$$\frac{1}{2}$$
3rd line +
+
+
+      sequenceDiagram
+      autonumber
+      participant 1 as $$\alpha$$lex
+      participant 2 as $$\beta$$ob
+      participant 3 as $$\theta$$iffany
+      1->>2: Hello John, does  $$\frac{1}{2}+1=2$$?
+      loop $$\frac{1}{2}+1=2$$
+          2->>2: $$\frac{1}{2}+1=\frac{3}{2}$$
+      end
+      Note right of 2: $$x = \begin{cases} 1 &\text{if } \frac{1}{2}+1=2 \\ 0 &\text{if } \frac{1}{2}+1\ne2 \end{cases}$$
+      2-->>1: $$\frac{1}{2}+1\ne2\implies 1$$
+      2->>3: $$\frac{\text{d}}{\text{d}x}{3x^2+2x+1}$$
+      3-->>2: $$6x+2$$
+    
+ +
+ +
+    sequenceDiagram
+      actor Alice
+      actor John
+      Alice-xJohn: Hello John, how are you?
+      John--xAlice: Great!
+    
+ + +``` diff --git a/docs/config/theming.md b/docs/config/theming.md index 63271a39b7..f8614b44b1 100644 --- a/docs/config/theming.md +++ b/docs/config/theming.md @@ -65,7 +65,7 @@ Example of `init` directive setting the `theme` to `forest`: a --> b ``` -> **Reminder**: the only theme that can be customed is the `base` theme. The following section covers how to use `themeVariables` for customizations. +> **Reminder**: the only theme that can be customized is the `base` theme. The following section covers how to use `themeVariables` for customizations. ## Customizing Themes with `themeVariables` diff --git a/docs/config/usage.md b/docs/config/usage.md index 6ef621f98f..e6ece8e020 100644 --- a/docs/config/usage.md +++ b/docs/config/usage.md @@ -436,3 +436,8 @@ mermaid_config.startOnLoad = true; > **Warning** > This way of setting the configuration is deprecated. Instead the preferred way is to use the initialize method. This functionality is only kept for backwards compatibility. + + diff --git a/docs/ecosystem/integrations-community.md b/docs/ecosystem/integrations-community.md index 5b0fbaaeb1..0d3676431b 100644 --- a/docs/ecosystem/integrations-community.md +++ b/docs/ecosystem/integrations-community.md @@ -95,6 +95,8 @@ Blogging frameworks and platforms Content Management Systems/Enterprise Content Management +- [ApostropheCMS](https://apostrophecms.com/) + - [Extension for Mermaid.js](https://github.com/BoDonkey/mermaid-extension) - [Grav CMS](https://getgrav.org/) - [Mermaid Diagrams Plugin](https://github.com/DanielFlaum/grav-plugin-mermaid-diagrams) - [GitLab Markdown Adapter](https://github.com/Goutte/grav-plugin-gitlab-markdown-adapter) diff --git a/docs/ecosystem/tutorials.md b/docs/ecosystem/tutorials.md index 36d5ad93fb..26498f0904 100644 --- a/docs/ecosystem/tutorials.md +++ b/docs/ecosystem/tutorials.md @@ -80,3 +80,5 @@ graph LR; **Output** ![Example graph of the Python integration](img/python-mermaid-integration.png) + + diff --git a/docs/intro/index.md b/docs/intro/index.md index a706f10639..d7527ac77d 100644 --- a/docs/intro/index.md +++ b/docs/intro/index.md @@ -88,7 +88,7 @@ sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? - loop Healthcheck + loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts
prevail! @@ -102,7 +102,7 @@ sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? - loop Healthcheck + loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts
prevail! diff --git a/docs/syntax/block.md b/docs/syntax/block.md index 9b7f76953a..35c88ef5c8 100644 --- a/docs/syntax/block.md +++ b/docs/syntax/block.md @@ -425,7 +425,7 @@ block-beta ida space:3 idb idc ``` -Note that you can set how many columns the spece block occupied using the number notaion `space:num` where num is a number indicating the num columns width. You can alsio use `space` which defaults to one column. +Note that you can set how many columns the space block occupied using the number notation `space:num` where num is a number indicating the num columns width. You can also use `space` which defaults to one column. The variety of shapes and special blocks in Mermaid enhances the expressive power of block diagrams, allowing for more accurate and context-specific representations. These options give users the flexibility to create diagrams that are both informative and visually appealing. In the next sections, we will explore the ways to connect these blocks and customize their appearance. @@ -640,7 +640,7 @@ A common mistake is incorrect linking syntax, which can lead to unexpected resul A - B **Correction**: -Ensure that links between blocks are correctly specified with arrows (--> or ---) to define the direction and type of connection. Also rememeber that one of the fundaments for block diagram is to give the author full control of where the boxes are positioned so in the example you need to add a space between the boxes: +Ensure that links between blocks are correctly specified with arrows (--> or ---) to define the direction and type of connection. Also remember that one of the fundaments for block diagram is to give the author full control of where the boxes are positioned so in the example you need to add a space between the boxes: ```mermaid-example block-beta diff --git a/docs/syntax/c4.md b/docs/syntax/c4.md index e6b7736c33..55f3940d71 100644 --- a/docs/syntax/c4.md +++ b/docs/syntax/c4.md @@ -191,7 +191,7 @@ The following unfinished features are not supported in the short term. - [x] Rel_L, Rel_Left - [x] Rel_R, Rel_Right - [x] Rel_Back - - [x] RelIndex \* Compatible with C4-Plantuml syntax, but ignores the index parameter. The sequence number is determined by the order in which the rel statements are written. + - [x] RelIndex \* Compatible with C4-PlantUML syntax, but ignores the index parameter. The sequence number is determined by the order in which the rel statements are written. - [ ] Custom tags/stereotypes support and skin param updates - [ ] AddElementTag(tagStereo, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new element tag. The styles of the tagged elements are updated and the tag is displayed in the calculated legend. @@ -320,7 +320,7 @@ UpdateRelStyle(customerA, bankA, $offsetY="60") Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0") Container_Boundary(c1, "Internet Banking") { - Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser") + Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to customers via their web browser") Container_Ext(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device") Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA") ContainerDb(database, "Database", "SQL Database", "Stores user registration information, hashed auth credentials, access logs, etc.") @@ -360,7 +360,7 @@ UpdateRelStyle(customerA, bankA, $offsetY="60") Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0") Container_Boundary(c1, "Internet Banking") { - Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser") + Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to customers via their web browser") Container_Ext(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device") Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA") ContainerDb(database, "Database", "SQL Database", "Stores user registration information, hashed auth credentials, access logs, etc.") @@ -621,3 +621,5 @@ UpdateRelStyle(customerA, bankA, $offsetY="60") UpdateRelStyle(db, db2, $offsetY="-10") ``` + + diff --git a/docs/syntax/classDiagram.md b/docs/syntax/classDiagram.md index 28ae37f9e9..eada227880 100644 --- a/docs/syntax/classDiagram.md +++ b/docs/syntax/classDiagram.md @@ -240,7 +240,7 @@ class BankAccount{ #### Generic Types -Generics can be representated as part of a class definition, and for class members/return types. In order to denote an item as generic, you enclose that type within `~` (**tilde**). **Nested** type declarations such as `List>` are supported, though generics that include a comma are currently not supported. (such as `List>`) +Generics can be represented as part of a class definition, and for class members/return types. In order to denote an item as generic, you enclose that type within `~` (**tilde**). **Nested** type declarations such as `List>` are supported, though generics that include a comma are currently not supported. (such as `List>`) > _note_ when a generic is used within a class definition, the generic type is NOT considered part of the class name. i.e.: for any syntax which required you to reference the class name, you need to drop the type part of the definition. This also means that mermaid does not currently support having two classes with the same name, but different generic types. diff --git a/docs/syntax/entityRelationshipDiagram.md b/docs/syntax/entityRelationshipDiagram.md index b673ac1dd8..072d900185 100644 --- a/docs/syntax/entityRelationshipDiagram.md +++ b/docs/syntax/entityRelationshipDiagram.md @@ -307,3 +307,5 @@ The following CSS class selectors are available for richer styling: | `.er.relationshipLabel` | The label for a relationship | | `.er.relationshipLabelBox` | The box surrounding a relationship label | | `.er.relationshipLine` | The line representing a relationship between entities | + + diff --git a/docs/syntax/examples.md b/docs/syntax/examples.md index ae2ba0ed38..2d99cc0252 100644 --- a/docs/syntax/examples.md +++ b/docs/syntax/examples.md @@ -175,7 +175,7 @@ sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? - loop Healthcheck + loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts
prevail... @@ -189,7 +189,7 @@ sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? - loop Healthcheck + loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts
prevail... @@ -297,3 +297,5 @@ gitGraph: branch b2 commit ``` + + diff --git a/docs/syntax/flowchart.md b/docs/syntax/flowchart.md index 2f4a9aeb9e..e1ea676bcc 100644 --- a/docs/syntax/flowchart.md +++ b/docs/syntax/flowchart.md @@ -1200,3 +1200,5 @@ mermaid.flowchartConfig = { width: 100% } ``` + + diff --git a/docs/syntax/gantt.md b/docs/syntax/gantt.md index 22ff67dece..c96de3f3f8 100644 --- a/docs/syntax/gantt.md +++ b/docs/syntax/gantt.md @@ -294,11 +294,11 @@ gantt weekday monday ``` -> **Warning** > `millisecond` and `second` support was added in vMERMAID_RELEASE_VERSION +> **Warning** > `millisecond` and `second` support was added in v10.3.0 ## Output in compact mode -The compact mode allows you to display multiple tasks in the same row. Compact mode can be enabled for a gantt chart by setting the display mode of the graph via preceeding YAML settings. +The compact mode allows you to display multiple tasks in the same row. Compact mode can be enabled for a gantt chart by setting the display mode of the graph via preceding YAML settings. ```mermaid-example --- diff --git a/docs/syntax/gitgraph.md b/docs/syntax/gitgraph.md index c6a397a982..bf2927d39f 100644 --- a/docs/syntax/gitgraph.md +++ b/docs/syntax/gitgraph.md @@ -1626,7 +1626,7 @@ See how the commit label color and background color are changed to the values sp ### Customizing Commit Label Font Size -You can customize commit using the `commitLabelFontSize` theme variables for changing in the font soze of the commit label . +You can customize commit using the `commitLabelFontSize` theme variables for changing in the font size of the commit label . Example: Now let's override the default values for the `commitLabelFontSize` variable: @@ -1677,7 +1677,7 @@ See how the commit label font size changed. ### Customizing Tag Label Font Size -You can customize commit using the `tagLabelFontSize` theme variables for changing in the font soze of the tag label . +You can customize commit using the `tagLabelFontSize` theme variables for changing in the font size of the tag label . Example: Now let's override the default values for the `tagLabelFontSize` variable: diff --git a/docs/syntax/mindmap.md b/docs/syntax/mindmap.md index 0bbd825cb4..8de1a7f9fe 100644 --- a/docs/syntax/mindmap.md +++ b/docs/syntax/mindmap.md @@ -305,3 +305,8 @@ From version 9.4.0 you can simplify this code to: ``` You can also refer the implementation in the live editor [here](https://github.com/mermaid-js/mermaid-live-editor/blob/develop/src/lib/util/mermaid.ts) to see how the async loading is done. + + diff --git a/docs/syntax/requirementDiagram.md b/docs/syntax/requirementDiagram.md index f8a0cafa95..49476f7c0e 100644 --- a/docs/syntax/requirementDiagram.md +++ b/docs/syntax/requirementDiagram.md @@ -241,3 +241,5 @@ This example uses all features of the diagram. test_entity3 - verifies -> test_req5 test_req <- copies - test_entity2 ``` + + diff --git a/docs/syntax/sankey.md b/docs/syntax/sankey.md index 43d36f0898..ccabc11c97 100644 --- a/docs/syntax/sankey.md +++ b/docs/syntax/sankey.md @@ -301,3 +301,5 @@ Graph layout can be changed by setting `nodeAlignment` to: - `center` - `left` - `right` + + diff --git a/docs/syntax/sequenceDiagram.md b/docs/syntax/sequenceDiagram.md index eb2f7ad23e..dddca33686 100644 --- a/docs/syntax/sequenceDiagram.md +++ b/docs/syntax/sequenceDiagram.md @@ -172,8 +172,8 @@ The actor(s) can be grouped in vertical boxes. You can define a color (if not, i end A->>J: Hello John, how are you? J->>A: Great! - A->>B: Hello Bob, how is Charly? - B->>C: Hello Charly, how are you? + A->>B: Hello Bob, how is Charley? + B->>C: Hello Charley, how are you? ``` ```mermaid @@ -188,8 +188,8 @@ The actor(s) can be grouped in vertical boxes. You can define a color (if not, i end A->>J: Hello John, how are you? J->>A: Great! - A->>B: Hello Bob, how is Charly? - B->>C: Hello Charly, how are you? + A->>B: Hello Bob, how is Charley? + B->>C: Hello Charley, how are you? ``` ## Messages @@ -646,7 +646,7 @@ It can also be turned on via the diagram code as in the diagram: sequenceDiagram autonumber Alice->>John: Hello John, how are you? - loop Healthcheck + loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! @@ -659,7 +659,7 @@ sequenceDiagram sequenceDiagram autonumber Alice->>John: Hello John, how are you? - loop Healthcheck + loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! diff --git a/docs/syntax/stateDiagram.md b/docs/syntax/stateDiagram.md index 4c28c82b30..48dd4378d0 100644 --- a/docs/syntax/stateDiagram.md +++ b/docs/syntax/stateDiagram.md @@ -622,7 +622,7 @@ Spaces can be added to a state by first defining the state with an id and then r In the following example there is a state with the id **yswsii** and description **Your state with spaces in it**. After it has been defined, **yswsii** is used in the diagram in the first transition (`[*] --> yswsii`) -and also in the transition to **YetAnotherState** (`yswsii --> YetAnotherState`).\ +and also in the transition to **YetAnotherState** (`yswsii --> YetAnotherState`). (**yswsii** has been styled so that it is different from the other states.) ```mermaid-example @@ -648,3 +648,5 @@ stateDiagram yswsii --> YetAnotherState YetAnotherState --> [*] ``` + + diff --git a/docs/syntax/timeline.md b/docs/syntax/timeline.md index 3e984eac61..288b8992c7 100644 --- a/docs/syntax/timeline.md +++ b/docs/syntax/timeline.md @@ -8,9 +8,9 @@ > Timeline: This is an experimental diagram for now. The syntax and properties can change in future releases. The syntax is stable except for the icon integration which is the experimental part. -"A timeline is a type of diagram used to illustrate a chronology of events, dates, or periods of time. It is usually presented graphically to indicate the passing of time, and it is usually organized chronologically. A basic timeline presents a list of events in chronological order, usually using dates as markers. A timeline can also be used to show the relationship between events, such as the relationship between the events of a person's life." Wikipedia +"A timeline is a type of diagram used to illustrate a chronology of events, dates, or periods of time. It is usually presented graphically to indicate the passing of time, and it is usually organized chronologically. A basic timeline presents a list of events in chronological order, usually using dates as markers. A timeline can also be used to show the relationship between events, such as the relationship between the events of a person's life" [(Wikipedia)](https://en.wikipedia.org/wiki/Timeline). -### An example of a timeline. +### An example of a timeline ```mermaid-example timeline @@ -58,7 +58,7 @@ or : {event} ``` -NOTE: Both time period and event are simple text, and not limited to numbers. +**NOTE**: Both time period and event are simple text, and not limited to numbers. Let us look at the syntax for the example above. @@ -104,7 +104,7 @@ timeline 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 + Industry 5.0 : Artificial intelligence, Big data, 3D printing ``` ```mermaid @@ -116,7 +116,7 @@ timeline 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 + Industry 5.0 : Artificial intelligence, Big data, 3D printing ``` As you can see, the time periods are placed in the sections, and the sections are placed in the order they are defined. @@ -191,7 +191,7 @@ As explained earlier, each section has a color scheme, and each time period and However, if there is no section defined, then we have two possibilities: -1. Style time periods individually, i.e. each time period(and its coressponding events) will have its own color scheme. This is the DEFAULT behavior. +1. Style time periods individually, i.e. each time period(and its corresponding events) will have its own color scheme. This is the DEFAULT behavior. ```mermaid-example timeline @@ -213,7 +213,7 @@ However, if there is no section defined, then we have two possibilities: ``` -Note that there are no sections defined, and each time period and its corresponding events will have its own color scheme. +**NOTE**: that there are no sections defined, and each time period and its corresponding events will have its own color scheme. 2. Disable the multiColor option using the `disableMultiColor` option. This will make all time periods and events follow the same color scheme. @@ -262,7 +262,7 @@ In case you have more than 12 sections, the color scheme will start to repeat. If you also want to change the foreground color of a section, you can do so use theme variables corresponding `cScaleLabel0` to `cScaleLabel11` variables. -NOTE: Default values for these theme variables are picked from the selected theme. If you want to override the default values, you can use the `initialize` call to add your custom theme variable values. +**NOTE**: Default values for these theme variables are picked from the selected theme. If you want to override the default values, you can use the `initialize` call to add your custom theme variable values. Example: @@ -461,7 +461,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: 2010 : Pinterest ``` -## Integrating with your library/website. +## Integrating with your library/website Timeline uses experimental lazy loading & async rendering features which could change in the future.The lazy loading is important in order to be able to add additional diagrams going forward. diff --git a/docs/syntax/xyChart.md b/docs/syntax/xyChart.md index 7e91863f9a..07e8ec6a47 100644 --- a/docs/syntax/xyChart.md +++ b/docs/syntax/xyChart.md @@ -139,11 +139,11 @@ The only two things required are the chart name (`xychart-beta`) and one data se | ---------------- | --------------------------------------------------------- | | backgroundColor | Background color of the whole chart | | titleColor | Color of the Title text | -| xAxisLableColor | Color of the x-axis labels | +| xAxisLabelColor | Color of the x-axis labels | | xAxisTitleColor | Color of the x-axis title | | xAxisTickColor | Color of the x-axis tick | | xAxisLineColor | Color of the x-axis line | -| yAxisLableColor | Color of the y-axis labels | +| yAxisLabelColor | Color of the y-axis labels | | yAxisTitleColor | Color of the y-axis title | | yAxisTickColor | Color of the y-axis tick | | yAxisLineColor | Color of the y-axis line | diff --git a/package.json b/package.json index caf4e07e04..bddfbdc87f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "10.2.4", "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "type": "module", - "packageManager": "pnpm@8.14.1", + "packageManager": "pnpm@8.15.1", "keywords": [ "diagram", "markdown", @@ -64,7 +64,7 @@ "@applitools/eyes-cypress": "^3.40.6", "@commitlint/cli": "^17.6.1", "@commitlint/config-conventional": "^17.6.1", - "@cspell/eslint-plugin": "^6.31.1", + "@cspell/eslint-plugin": "^8.3.2", "@cypress/code-coverage": "^3.12.18", "@rollup/plugin-typescript": "^11.1.1", "@types/cors": "^2.8.13", @@ -85,9 +85,10 @@ "ajv": "^8.12.0", "concurrently": "^8.0.1", "cors": "^2.8.5", + "cspell": "^8.3.2", "cypress": "^12.17.4", "cypress-image-snapshot": "^4.0.1", - "esbuild": "^0.19.0", + "esbuild": "^0.20.0", "eslint": "^8.47.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-cypress": "^2.13.2", @@ -118,7 +119,7 @@ "start-server-and-test": "^2.0.0", "tsx": "^4.6.2", "typescript": "^5.1.3", - "vite": "^4.4.12", + "vite": "^4.5.2", "vite-plugin-istanbul": "^4.1.0", "vitest": "^0.34.0" }, diff --git a/packages/mermaid-zenuml/package.json b/packages/mermaid-zenuml/package.json index b907e2cbae..cbe8dd9f8c 100644 --- a/packages/mermaid-zenuml/package.json +++ b/packages/mermaid-zenuml/package.json @@ -33,7 +33,7 @@ ], "license": "MIT", "dependencies": { - "@zenuml/core": "^3.0.6" + "@zenuml/core": "^3.17.2" }, "devDependencies": { "mermaid": "workspace:^" diff --git a/packages/mermaid-zenuml/src/zenumlRenderer.ts b/packages/mermaid-zenuml/src/zenumlRenderer.ts index e8ab69cddd..a1a807dce4 100644 --- a/packages/mermaid-zenuml/src/zenumlRenderer.ts +++ b/packages/mermaid-zenuml/src/zenumlRenderer.ts @@ -56,7 +56,7 @@ export const draw = async function (text: string, id: string) { // @ts-expect-error @zenuml/core@3.0.0 exports the wrong type for ZenUml const zenuml = new ZenUml(app); // default is a theme name. More themes to be added and will be configurable in the future - await zenuml.render(text, 'theme-mermaid'); + await zenuml.render(text, { theme: 'default', mode: 'static' }); const { width, height } = window.getComputedStyle(container); log.debug('zenuml diagram size', width, height); diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 6df479481d..3626671ca5 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -33,7 +33,7 @@ "docs:dev": "pnpm docs:pre:vitepress && concurrently \"pnpm --filter ./src/vitepress dev\" \"tsx scripts/docs.cli.mts --watch --vitepress\"", "docs:dev:docker": "pnpm docs:pre:vitepress && concurrently \"pnpm --filter ./src/vitepress dev:docker\" \"tsx scripts/docs.cli.mts --watch --vitepress\"", "docs:serve": "pnpm docs:build:vitepress && vitepress serve src/vitepress", - "docs:spellcheck": "cspell --config ../../cSpell.json \"src/docs/**/*.md\"", + "docs:spellcheck": "cspell \"src/docs/**/*.md\"", "docs:release-version": "tsx scripts/update-release-version.mts", "docs:verify-version": "tsx scripts/update-release-version.mts --verify", "types:build-config": "tsx scripts/create-types-from-json-schema.mts", @@ -70,6 +70,7 @@ "dayjs": "^1.11.7", "dompurify": "^3.0.5", "elkjs": "^0.9.0", + "katex": "^0.16.9", "khroma": "^2.0.0", "lodash-es": "^4.17.21", "mdast-util-from-markdown": "^1.3.0", @@ -89,6 +90,7 @@ "@types/d3-shape": "^3.1.1", "@types/dompurify": "^3.0.2", "@types/jsdom": "^21.1.1", + "@types/katex": "^0.16.7", "@types/lodash-es": "^4.17.7", "@types/micromatch": "^4.0.2", "@types/prettier": "^2.7.2", @@ -100,7 +102,6 @@ "chokidar": "^3.5.3", "concurrently": "^8.0.1", "cpy-cli": "^4.2.0", - "cspell": "^6.31.1", "csstree-validator": "^3.0.0", "globby": "^13.1.4", "jison": "^0.4.18", diff --git a/packages/mermaid/src/config.type.ts b/packages/mermaid/src/config.type.ts index 889e5ff254..0ba3178680 100644 --- a/packages/mermaid/src/config.type.ts +++ b/packages/mermaid/src/config.type.ts @@ -127,6 +127,14 @@ export interface MermaidConfig { * */ secure?: string[]; + /** + * This option specifies if Mermaid can expect the dependent to include KaTeX stylesheets for browsers + * without their own MathML implementation. If this option is disabled and MathML is not supported, the math + * equations are replaced with a warning. If this option is enabled and MathML is not supported, Mermaid will + * fall back to legacy rendering for KaTeX. + * + */ + legacyMathML?: boolean; /** * This option controls if the generated ids of nodes in the SVG are * generated randomly or based on a seed. diff --git a/packages/mermaid/src/dagre-wrapper/GraphObjects.md b/packages/mermaid/src/dagre-wrapper/GraphObjects.md index 840ddf8242..730b42e3f6 100644 --- a/packages/mermaid/src/dagre-wrapper/GraphObjects.md +++ b/packages/mermaid/src/dagre-wrapper/GraphObjects.md @@ -24,7 +24,7 @@ flowchart The new nodes C1 and C2 are a special type of nodes, clusterNodes. ClusterNodes have have the nodes in the cluster including the cluster attached in a graph object. -When rendering this diagram it it beeing rendered recursively. The diagram is rendered by the dagre-mermaid:render function which in turn will be used to render the node C1 and the node C2. The result of those renderings will be inserted as nodes in the "root" diagram. With this recursive approach it would be possible to have different layout direction for each cluster. +When rendering this diagram it is being rendered recursively. The diagram is rendered by the dagre-mermaid:render function which in turn will be used to render the node C1 and the node C2. The result of those renderings will be inserted as nodes in the "root" diagram. With this recursive approach it would be possible to have different layout direction for each cluster. ``` { clusterNode: true, graph } diff --git a/packages/mermaid/src/dagre-wrapper/clusters.js b/packages/mermaid/src/dagre-wrapper/clusters.js index cdc003e816..9dde401878 100644 --- a/packages/mermaid/src/dagre-wrapper/clusters.js +++ b/packages/mermaid/src/dagre-wrapper/clusters.js @@ -69,13 +69,13 @@ const rect = (parent, node) => { if (useHtmlLabels) { label.attr( 'transform', - // This puts the labal on top of the box instead of inside it + // This puts the label on top of the box instead of inside it `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` ); } else { label.attr( 'transform', - // This puts the labal on top of the box instead of inside it + // This puts the label on top of the box instead of inside it `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})` ); } diff --git a/packages/mermaid/src/dagre-wrapper/createLabel.js b/packages/mermaid/src/dagre-wrapper/createLabel.js index cd7549c23e..22496a2509 100644 --- a/packages/mermaid/src/dagre-wrapper/createLabel.js +++ b/packages/mermaid/src/dagre-wrapper/createLabel.js @@ -60,7 +60,7 @@ const createLabel = (_vertexText, style, isTitle, isNode) => { const node = { isNode, label: decodeEntities(vertexText).replace( - /fa[blrs]?:fa-[\w-]+/g, + /fa[blrs]?:fa-[\w-]+/g, // cspell: disable-line (s) => `` ), labelStyle: style.replace('fill:', 'color:'), diff --git a/packages/mermaid/src/dagre-wrapper/edges.js b/packages/mermaid/src/dagre-wrapper/edges.js index a26ec543dd..6f7e4695d4 100644 --- a/packages/mermaid/src/dagre-wrapper/edges.js +++ b/packages/mermaid/src/dagre-wrapper/edges.js @@ -269,7 +269,7 @@ export const intersection = (node, outsidePoint, insidePoint) => { res.y = outsidePoint.y; } - log.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); + log.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); // cspell: disable-line return res; } else { @@ -306,20 +306,20 @@ export const intersection = (node, outsidePoint, insidePoint) => { * and return an update path ending by the border of the node. * * @param {Array} _points - * @param {any} boundryNode + * @param {any} boundaryNode * @returns {Array} Points */ -const cutPathAtIntersect = (_points, boundryNode) => { - log.debug('abc88 cutPathAtIntersect', _points, boundryNode); +const cutPathAtIntersect = (_points, boundaryNode) => { + log.debug('abc88 cutPathAtIntersect', _points, boundaryNode); let points = []; let lastPointOutside = _points[0]; let isInside = false; _points.forEach((point) => { // check if point is inside the boundary rect - if (!outsideNode(boundryNode, point) && !isInside) { + if (!outsideNode(boundaryNode, point) && !isInside) { // First point inside the rect found // Calc the intersection coord between the point anf the last point outside the rect - const inter = intersection(boundryNode, lastPointOutside, point); + const inter = intersection(boundaryNode, lastPointOutside, point); // // Check case where the intersection is the same as the last point let pointPresent = false; diff --git a/packages/mermaid/src/dagre-wrapper/index.js b/packages/mermaid/src/dagre-wrapper/index.js index 76685dd7b9..897f8a7eb1 100644 --- a/packages/mermaid/src/dagre-wrapper/index.js +++ b/packages/mermaid/src/dagre-wrapper/index.js @@ -16,7 +16,7 @@ import { log } from '../logger.js'; import { getSubGraphTitleMargins } from '../utils/subGraphTitleMargins.js'; import { getConfig } from '../diagram-api/diagramAPI.js'; -const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster, siteConfig) => { +const recursiveRender = async (_elem, graph, diagramType, id, parentCluster, siteConfig) => { log.info('Graph in recursive render: XXX', graphlibJson.write(graph), parentCluster); const dir = graph.graph().rankdir; log.trace('Dir in recursive render - dir:', dir); @@ -57,7 +57,7 @@ const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster, sit const o = await recursiveRender( nodes, node.graph, - diagramtype, + diagramType, id, graph.node(v), siteConfig @@ -95,7 +95,7 @@ const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster, sit log.info('Edge ' + e.v + ' -> ' + e.w + ': ', e, ' ', JSON.stringify(graph.edge(e))); // Check if link is either from or to a cluster - log.info('Fix', clusterDb, 'ids:', e.v, e.w, 'Translateing: ', clusterDb[e.v], clusterDb[e.w]); + log.info('Fix', clusterDb, 'ids:', e.v, e.w, 'Translating: ', clusterDb[e.v], clusterDb[e.w]); insertEdgeLabel(edgeLabels, edge); }); @@ -147,7 +147,7 @@ const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster, sit log.info('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(edge), edge); edge.points.forEach((point) => (point.y += subGraphTitleTotalMargin / 2)); - const paths = insertEdge(edgePaths, e, edge, clusterDb, diagramtype, graph, id); + const paths = insertEdge(edgePaths, e, edge, clusterDb, diagramType, graph, id); positionEdgeLabel(edge, paths); }); @@ -161,8 +161,8 @@ const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster, sit return { elem, diff }; }; -export const render = async (elem, graph, markers, diagramtype, id) => { - insertMarkers(elem, markers, diagramtype, id); +export const render = async (elem, graph, markers, diagramType, id) => { + insertMarkers(elem, markers, diagramType, id); clearNodes(); clearEdges(); clearClusters(); @@ -173,7 +173,7 @@ export const render = async (elem, graph, markers, diagramtype, id) => { log.warn('Graph after:', JSON.stringify(graphlibJson.write(graph))); // log.warn('Graph ever after:', graphlibJson.write(graph.node('A').graph)); const siteConfig = getConfig(); - await recursiveRender(elem, graph, diagramtype, id, undefined, siteConfig); + await recursiveRender(elem, graph, diagramType, id, undefined, siteConfig); }; // const shapeDefinitions = {}; diff --git a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js index 81081e1b66..04ee9d16b2 100644 --- a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js +++ b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js @@ -13,11 +13,11 @@ export const clear = () => { clusterDb = {}; }; -const isDescendant = (id, ancenstorId) => { - // if (id === ancenstorId) return true; +const isDescendant = (id, ancestorId) => { + // if (id === ancestorId) return true; - log.trace('In isDecendant', ancenstorId, ' ', id, ' = ', descendants[ancenstorId].includes(id)); - if (descendants[ancenstorId].includes(id)) { + log.trace('In isDescendant', ancestorId, ' ', id, ' = ', descendants[ancestorId].includes(id)); + if (descendants[ancestorId].includes(id)) { return true; } @@ -25,7 +25,7 @@ const isDescendant = (id, ancenstorId) => { }; const edgeInCluster = (edge, clusterId) => { - log.info('Decendants of ', clusterId, ' is ', descendants[clusterId]); + log.info('Descendants of ', clusterId, ' is ', descendants[clusterId]); log.info('Edge is ', edge); // Edges to/from the cluster is not in the cluster, they are in the parent if (edge.v === clusterId) { @@ -36,7 +36,7 @@ const edgeInCluster = (edge, clusterId) => { } if (!descendants[clusterId]) { - log.debug('Tilt, ', clusterId, ',not in decendants'); + log.debug('Tilt, ', clusterId, ',not in descendants'); return false; } return ( @@ -244,7 +244,7 @@ export const adjustClustersAndEdges = (graph, depth) => { // d1 xor d2 - if either d1 is true and d2 is false or the other way around if (d1 ^ d2) { log.warn('Edge: ', edge, ' leaves cluster ', id); - log.warn('Decendants of XXX ', id, ': ', descendants[id]); + log.warn('Descendants of XXX ', id, ': ', descendants[id]); clusterDb[id].externalConnections = true; } } @@ -286,6 +286,7 @@ export const adjustClustersAndEdges = (graph, depth) => { clusterDb[e.w] ); if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) { + // cspell:ignore trixing log.warn('Fixing and trixing link to self - removing XXX', e.v, e.w, e.name); log.warn('Fixing and trixing - removing XXX', e.v, e.w, e.name); v = getAnchorId(e.v); @@ -337,7 +338,7 @@ export const adjustClustersAndEdges = (graph, depth) => { // Remove references to extracted cluster // graph.edges().forEach(edge => { - // if (isDecendant(edge.v, clusterId) || isDecendant(edge.w, clusterId)) { + // if (isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId)) { // graph.removeEdge(edge); // } // }); diff --git a/packages/mermaid/src/diagram-api/types.ts b/packages/mermaid/src/diagram-api/types.ts index 58d98107ea..16c5bdb7a0 100644 --- a/packages/mermaid/src/diagram-api/types.ts +++ b/packages/mermaid/src/diagram-api/types.ts @@ -32,7 +32,7 @@ export interface DiagramDB { getDiagramTitle?: () => string; setAccTitle?: (title: string) => void; getAccTitle?: () => string; - setAccDescription?: (describetion: string) => void; + setAccDescription?: (description: string) => void; getAccDescription?: () => string; setDisplayMode?: (title: string) => void; diff --git a/packages/mermaid/src/diagrams/block/blockDB.ts b/packages/mermaid/src/diagrams/block/blockDB.ts index 5e5e82a270..f4881a203b 100644 --- a/packages/mermaid/src/diagrams/block/blockDB.ts +++ b/packages/mermaid/src/diagrams/block/blockDB.ts @@ -240,8 +240,8 @@ const setHierarchy = (block: Block[]): void => { blocks = rootBlock.children; }; -const getColumns = (blockid: string): number => { - const block = blockDatabase[blockid]; +const getColumns = (blockId: string): number => { + const block = blockDatabase[blockId]; if (!block) { return -1; } diff --git a/packages/mermaid/src/diagrams/block/layout.ts b/packages/mermaid/src/diagrams/block/layout.ts index b16b9971ea..c16d4e4971 100644 --- a/packages/mermaid/src/diagrams/block/layout.ts +++ b/packages/mermaid/src/diagrams/block/layout.ts @@ -22,11 +22,11 @@ export function calculateBlockPosition(columns: number, position: number): Block } if (columns < 0) { - // Auto coulumns is set + // Auto columns is set return { px: position, py: 0 }; } if (columns === 1) { - // Auto coulumns is set + // Auto columns is set return { px: 0, py: position }; } // Calculate posX and posY @@ -148,9 +148,10 @@ function setBlockSizes(block: Block, db: BlockDB, siblingWidth = 0, siblingHeigh height = siblingHeight; const childWidth = (siblingWidth - xSize * padding - padding) / xSize; const childHeight = (siblingHeight - ySize * padding - padding) / ySize; + // cspell:ignore indata log.debug('Size indata abc88', block.id, 'childWidth', childWidth, 'maxWidth', maxWidth); log.debug('Size indata abc88', block.id, 'childHeight', childHeight, 'maxHeight', maxHeight); - log.debug('Size indata abc88 xSize', xSize, 'paddiong', padding); + log.debug('Size indata abc88 xSize', xSize, 'padding', padding); // set width of block to max width of children for (const child of block.children) { @@ -241,6 +242,7 @@ function layoutBlocks(block: Block, db: BlockDB) { const halfWidth = width / 2; child.size.x = startingPosX + padding + halfWidth; + // cspell:ignore pyid log.debug( `abc91 layout blocks (calc) px, pyid:${ child.id diff --git a/packages/mermaid/src/diagrams/block/parser/block.jison b/packages/mermaid/src/diagrams/block/parser/block.jison index a7039d2dc2..88bdf729ef 100644 --- a/packages/mermaid/src/diagrams/block/parser/block.jison +++ b/packages/mermaid/src/diagrams/block/parser/block.jison @@ -173,13 +173,13 @@ spaceLines | spaceLines NL ; -seperator +separator : NL - {yy.getLogger().debug('Rule: seperator (NL) ');} + {yy.getLogger().debug('Rule: separator (NL) ');} | SPACE - {yy.getLogger().debug('Rule: seperator (Space) ');} + {yy.getLogger().debug('Rule: separator (Space) ');} | EOF - {yy.getLogger().debug('Rule: seperator (EOF) ');} + {yy.getLogger().debug('Rule: separator (EOF) ');} ; start: BLOCK_DIAGRAM_KEY document EOF @@ -245,10 +245,10 @@ blockStatement node : NODE_ID - { yy.getLogger().debug("Rule: node (NODE_ID seperator): ", $1); $$ = { id: $1 }; } + { yy.getLogger().debug("Rule: node (NODE_ID separator): ", $1); $$ = { id: $1 }; } | NODE_ID nodeShapeNLabel { - yy.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel seperator): ", $1, $2); + yy.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ", $1, $2); $$ = { id: $1, label: $2.label, typeStr: $2.typeStr, directions: $2.directions }; } ; diff --git a/packages/mermaid/src/diagrams/c4/c4Db.js b/packages/mermaid/src/diagrams/c4/c4Db.js index 3fc7e0afca..70248fcc43 100644 --- a/packages/mermaid/src/diagrams/c4/c4Db.js +++ b/packages/mermaid/src/diagrams/c4/c4Db.js @@ -11,7 +11,7 @@ let c4ShapeArray = []; let boundaryParseStack = ['']; let currentBoundaryParse = 'global'; let parentBoundaryParse = ''; -let boundarys = [ +let boundaries = [ { alias: 'global', label: { text: 'global' }, @@ -312,12 +312,12 @@ export const addPersonOrSystemBoundary = function (alias, label, type, tags, lin } let boundary = {}; - const old = boundarys.find((boundary) => boundary.alias === alias); + const old = boundaries.find((boundary) => boundary.alias === alias); if (old && alias === old.alias) { boundary = old; } else { boundary.alias = alias; - boundarys.push(boundary); + boundaries.push(boundary); } // Don't allow null labels, either @@ -368,12 +368,12 @@ export const addContainerBoundary = function (alias, label, type, tags, link) { } let boundary = {}; - const old = boundarys.find((boundary) => boundary.alias === alias); + const old = boundaries.find((boundary) => boundary.alias === alias); if (old && alias === old.alias) { boundary = old; } else { boundary.alias = alias; - boundarys.push(boundary); + boundaries.push(boundary); } // Don't allow null labels, either @@ -433,12 +433,12 @@ export const addDeploymentNode = function ( } let boundary = {}; - const old = boundarys.find((boundary) => boundary.alias === alias); + const old = boundaries.find((boundary) => boundary.alias === alias); if (old && alias === old.alias) { boundary = old; } else { boundary.alias = alias; - boundarys.push(boundary); + boundaries.push(boundary); } // Don't allow null labels, either @@ -514,7 +514,7 @@ export const updateElStyle = function ( ) { let old = c4ShapeArray.find((element) => element.alias === elementName); if (old === undefined) { - old = boundarys.find((element) => element.alias === elementName); + old = boundaries.find((element) => element.alias === elementName); if (old === undefined) { return; } @@ -697,14 +697,19 @@ export const getC4ShapeKeys = function (parentBoundary) { return Object.keys(getC4ShapeArray(parentBoundary)); }; -export const getBoundarys = function (parentBoundary) { +export const getBoundaries = function (parentBoundary) { if (parentBoundary === undefined || parentBoundary === null) { - return boundarys; + return boundaries; } else { - return boundarys.filter((boundary) => boundary.parentBoundary === parentBoundary); + return boundaries.filter((boundary) => boundary.parentBoundary === parentBoundary); } }; +/** + * @deprecated Use {@link getBoundaries} instead + */ +export const getBoundarys = getBoundaries; + export const getRels = function () { return rels; }; @@ -723,7 +728,7 @@ export const autoWrap = function () { export const clear = function () { c4ShapeArray = []; - boundarys = [ + boundaries = [ { alias: 'global', label: { text: 'global' }, @@ -804,6 +809,7 @@ export default { getC4ShapeArray, getC4Shape, getC4ShapeKeys, + getBoundaries, getBoundarys, getCurrentBoundaryParse, getParentBoundaryParse, diff --git a/packages/mermaid/src/diagrams/c4/c4Renderer.js b/packages/mermaid/src/diagrams/c4/c4Renderer.js index 326d3060e8..959eba295f 100644 --- a/packages/mermaid/src/diagrams/c4/c4Renderer.js +++ b/packages/mermaid/src/diagrams/c4/c4Renderer.js @@ -542,15 +542,15 @@ function drawInsideBoundary( ); } parentBoundaryAlias = currentBoundary.alias; - let nextCurrentBoundarys = diagObj.db.getBoundarys(parentBoundaryAlias); + let nextCurrentBoundaries = diagObj.db.getBoundarys(parentBoundaryAlias); - if (nextCurrentBoundarys.length > 0) { + if (nextCurrentBoundaries.length > 0) { // draw boundary inside currentBoundary drawInsideBoundary( diagram, parentBoundaryAlias, currentBounds, - nextCurrentBoundarys, + nextCurrentBoundaries, diagObj ); } diff --git a/packages/mermaid/src/diagrams/c4/svgDraw.js b/packages/mermaid/src/diagrams/c4/svgDraw.js index 9ec7422613..6bff267f6f 100644 --- a/packages/mermaid/src/diagrams/c4/svgDraw.js +++ b/packages/mermaid/src/diagrams/c4/svgDraw.js @@ -687,3 +687,5 @@ export default { insertComputerIcon, insertClockIcon, }; + +// cspell:ignoreRegExp /'Mstartx.*/g diff --git a/packages/mermaid/src/diagrams/class/classRenderer.js b/packages/mermaid/src/diagrams/class/classRenderer.js index 8c2dab7fb8..be098b0274 100644 --- a/packages/mermaid/src/diagrams/class/classRenderer.js +++ b/packages/mermaid/src/diagrams/class/classRenderer.js @@ -193,6 +193,7 @@ export const draw = function (text, id, _version, diagObj) { const relations = diagObj.db.getRelations(); relations.forEach(function (relation) { log.info( + // cspell:ignore tjoho 'tjoho' + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation) ); g.setEdge( diff --git a/packages/mermaid/src/diagrams/common/common.ts b/packages/mermaid/src/diagrams/common/common.ts index 8609a175ae..04be2a5f46 100644 --- a/packages/mermaid/src/diagrams/common/common.ts +++ b/packages/mermaid/src/diagrams/common/common.ts @@ -289,6 +289,83 @@ const processSet = (input: string): string => { return chars.join(''); }; +// TODO: find a better method for detecting support. This interface was added in the MathML 4 spec. +// Firefox versions between [4,71] (0.47%) and Safari versions between [5,13.4] (0.17%) don't have this interface implemented but MathML is supported +export const isMathMLSupported = () => window.MathMLElement !== undefined; + +export const katexRegex = /\$\$(.*)\$\$/g; + +/** + * Whether or not a text has KaTeX delimiters + * + * @param text - The text to test + * @returns Whether or not the text has KaTeX delimiters + */ +export const hasKatex = (text: string): boolean => (text.match(katexRegex)?.length ?? 0) > 0; + +/** + * Computes the minimum dimensions needed to display a div containing MathML + * + * @param text - The text to test + * @param config - Configuration for Mermaid + * @returns Object containing \{width, height\} + */ +export const calculateMathMLDimensions = async (text: string, config: MermaidConfig) => { + text = await renderKatex(text, config); + const divElem = document.createElement('div'); + divElem.innerHTML = text; + divElem.id = 'katex-temp'; + divElem.style.visibility = 'hidden'; + divElem.style.position = 'absolute'; + divElem.style.top = '0'; + const body = document.querySelector('body'); + body?.insertAdjacentElement('beforeend', divElem); + const dim = { width: divElem.clientWidth, height: divElem.clientHeight }; + divElem.remove(); + return dim; +}; + +/** + * Attempts to render and return the KaTeX portion of a string with MathML + * + * @param text - The text to test + * @param config - Configuration for Mermaid + * @returns String containing MathML if KaTeX is supported, or an error message if it is not and stylesheets aren't present + */ +export const renderKatex = async (text: string, config: MermaidConfig): Promise => { + if (!hasKatex(text)) { + return text; + } + + if (!isMathMLSupported() && !config.legacyMathML) { + return text.replace(katexRegex, 'MathML is unsupported in this environment.'); + } + + const { default: katex } = await import('katex'); + return text + .split(lineBreakRegex) + .map((line) => + hasKatex(line) + ? ` +
+ ${line} +
+ ` + : `
${line}
` + ) + .join('') + .replace(katexRegex, (_, c) => + katex + .renderToString(c, { + throwOnError: true, + displayMode: true, + output: isMathMLSupported() ? 'mathml' : 'htmlAndMathml', + }) + .replace(/\n/g, ' ') + .replace(//g, '') + ); +}; + export default { getRows, sanitizeText, diff --git a/packages/mermaid/src/diagrams/error/errorRenderer.ts b/packages/mermaid/src/diagrams/error/errorRenderer.ts index 6ef00e300f..1b3622c6dc 100644 --- a/packages/mermaid/src/diagrams/error/errorRenderer.ts +++ b/packages/mermaid/src/diagrams/error/errorRenderer.ts @@ -4,7 +4,7 @@ import { selectSvgElement } from '../../rendering-util/selectSvgElement.js'; import { configureSvgSize } from '../../setupGraphViewbox.js'; /** - * Draws a an info picture in the tag with id: id based on the graph definition in text. + * Draws an info picture in the tag with id: id based on the graph definition in text. * * @param _text - Mermaid graph definition. * @param id - The text for the error @@ -12,12 +12,12 @@ import { configureSvgSize } from '../../setupGraphViewbox.js'; */ export const draw = (_text: string, id: string, version: string) => { log.debug('rendering svg for syntax error\n'); - const svg: SVG = selectSvgElement(id); + const g: Group = svg.append('g'); + svg.attr('viewBox', '0 0 2412 512'); configureSvgSize(svg, 100, 512, true); - const g: Group = svg.append('g'); g.append('path') .attr('class', 'error-icon') .attr( diff --git a/packages/mermaid/src/diagrams/flowchart/elk/flowRenderer-elk.js b/packages/mermaid/src/diagrams/flowchart/elk/flowRenderer-elk.js index fd9f81e937..e1d1175008 100644 --- a/packages/mermaid/src/diagrams/flowchart/elk/flowRenderer-elk.js +++ b/packages/mermaid/src/diagrams/flowchart/elk/flowRenderer-elk.js @@ -93,13 +93,13 @@ export const addVertices = async function (vert, svgId, root, doc, diagObj, pare }, ]; - let radious = 0; + let radius = 0; let _shape = ''; let layoutOptions = {}; // Set the shape based parameters switch (vertex.type) { case 'round': - radious = 5; + radius = 5; _shape = 'rect'; break; case 'square': @@ -163,8 +163,8 @@ export const addVertices = async function (vert, svgId, root, doc, diagObj, pare shape: _shape, labelText: vertexText, labelType: vertex.labelType, - rx: radious, - ry: radious, + rx: radius, + ry: radius, class: classStr, style: styles.style, id: vertex.id, diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.js b/packages/mermaid/src/diagrams/flowchart/flowDb.js index 899345b6ed..019eade4d3 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.js +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.js @@ -29,7 +29,7 @@ let direction; let version; // As in graph // Functions to be run after graph rendering -let funs = []; +let funs = []; // cspell:ignore funs const sanitizeText = (txt) => common.sanitizeText(txt, config); @@ -40,10 +40,10 @@ const sanitizeText = (txt) => common.sanitizeText(txt, config); * @public */ export const lookUpDomId = function (id) { - const veritceKeys = Object.keys(vertices); - for (const veritceKey of veritceKeys) { - if (vertices[veritceKey].id === id) { - return vertices[veritceKey].domId; + const vertexKeys = Object.keys(vertices); + for (const vertexKey of vertexKeys) { + if (vertices[vertexKey].id === id) { + return vertices[vertexKey].domId; } } return id; @@ -165,8 +165,8 @@ export const addSingleLink = function (_start, _end, type) { throw new Error( `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config.maxEdges}. -Initialize mermaid with maxEdges set to a higher number to allow more edges. -You cannot set this config via configuration inside the diagram as it is a secure config. +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. You have to call mermaid.initialize.` ); } @@ -426,7 +426,7 @@ const setupToolTips = function (element) { const el = select(this); const title = el.attr('title'); - // Dont try to draw a tooltip if no data is provided + // Don't try to draw a tooltip if no data is provided if (title === null) { return; } diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js index 2c505114c3..f27d8e3532 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js +++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js @@ -5,7 +5,7 @@ import utils from '../../utils.js'; import { render } from '../../dagre-wrapper/index.js'; import { addHtmlLabel } from 'dagre-d3-es/src/dagre-js/label/add-html-label.js'; import { log } from '../../logger.js'; -import common, { evaluate } from '../common/common.js'; +import common, { evaluate, renderKatex } from '../common/common.js'; import { interpolateToCurve, getStylesFromArray } from '../../utils.js'; import { setupGraphViewbox } from '../../setupGraphViewbox.js'; @@ -27,12 +27,12 @@ export const setConf = function (cnf) { * @param doc * @param diagObj */ -export const addVertices = function (vert, g, svgId, root, doc, diagObj) { +export const addVertices = async function (vert, g, svgId, root, doc, diagObj) { const svg = root.select(`[id="${svgId}"]`); const keys = Object.keys(vert); // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition - keys.forEach(function (id) { + for (const id of keys) { const vertex = vert[id]; /** @@ -59,10 +59,7 @@ export const addVertices = function (vert, g, svgId, root, doc, diagObj) { if (evaluate(getConfig().flowchart.htmlLabels)) { // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that? const node = { - label: vertexText.replace( - /fa[blrs]?:fa-[\w-]+/g, - (s) => `` - ), + label: vertexText, }; vertexNode = addHtmlLabel(svg, node).node(); vertexNode.parentNode.removeChild(vertexNode); @@ -84,12 +81,12 @@ export const addVertices = function (vert, g, svgId, root, doc, diagObj) { } } - let radious = 0; + let radius = 0; let _shape = ''; // Set the shape based parameters switch (vertex.type) { case 'round': - radious = 5; + radius = 5; _shape = 'rect'; break; case 'square': @@ -143,14 +140,16 @@ export const addVertices = function (vert, g, svgId, root, doc, diagObj) { default: _shape = 'rect'; } + const labelText = await renderKatex(vertexText, getConfig()); + // Add the node g.setNode(vertex.id, { labelStyle: styles.labelStyle, shape: _shape, - labelText: vertexText, + labelText, labelType: vertex.labelType, - rx: radious, - ry: radious, + rx: radius, + ry: radius, class: classStr, style: styles.style, id: vertex.id, @@ -170,9 +169,9 @@ export const addVertices = function (vert, g, svgId, root, doc, diagObj) { labelStyle: styles.labelStyle, labelType: vertex.labelType, shape: _shape, - labelText: vertexText, - rx: radious, - ry: radious, + labelText, + rx: radius, + ry: radius, class: classStr, style: styles.style, id: vertex.id, @@ -183,7 +182,7 @@ export const addVertices = function (vert, g, svgId, root, doc, diagObj) { props: vertex.props, padding: getConfig().flowchart.padding, }); - }); + } }; /** @@ -193,7 +192,7 @@ export const addVertices = function (vert, g, svgId, root, doc, diagObj) { * @param {object} g The graph object * @param diagObj */ -export const addEdges = function (edges, g, diagObj) { +export const addEdges = async function (edges, g, diagObj) { log.info('abc78 edges = ', edges); let cnt = 0; let linkIdCnt = {}; @@ -207,7 +206,7 @@ export const addEdges = function (edges, g, diagObj) { defaultLabelStyle = defaultStyles.labelStyle; } - edges.forEach(function (edge) { + for (const edge of edges) { cnt++; // Identify Link @@ -315,9 +314,8 @@ export const addEdges = function (edges, g, diagObj) { edgeData.arrowheadStyle = 'fill: #333'; edgeData.labelpos = 'c'; } - edgeData.labelType = edge.labelType; - edgeData.label = edge.text.replace(common.lineBreakRegex, '\n'); + edgeData.label = await renderKatex(edge.text.replace(common.lineBreakRegex, '\n'), getConfig()); if (edge.style === undefined) { edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none;'; @@ -330,7 +328,7 @@ export const addEdges = function (edges, g, diagObj) { // Add the edge to the graph g.setEdge(edge.start, edge.end, edgeData, cnt); - }); + } }; /** @@ -427,8 +425,8 @@ export const draw = async function (text, id, _version, diagObj) { g.setParent(subG.nodes[j], subG.id); } } - addVertices(vert, g, id, root, doc, diagObj); - addEdges(edges, g, diagObj); + await addVertices(vert, g, id, root, doc, diagObj); + await addEdges(edges, g, diagObj); // Add custom shapes // flowChartShapes.addToRenderV2(addShape); diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer.addEdges.spec.js b/packages/mermaid/src/diagrams/flowchart/flowRenderer.addEdges.spec.js index 4b7fe272d6..00f9ef8512 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowRenderer.addEdges.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer.addEdges.spec.js @@ -15,7 +15,7 @@ describe('when using mermaid and ', function () { flowDb.clear(); flowDb.setGen('gen-2'); }); - it('should handle edges with text', () => { + it('should handle edges with text', async () => { parser.parse('graph TD;A-->|text ex|B;'); flowDb.getVertices(); const edges = flowDb.getEdges(); @@ -29,7 +29,7 @@ describe('when using mermaid and ', function () { }, }; - flowRenderer.addEdges(edges, mockG, diag); + await flowRenderer.addEdges(edges, mockG, diag); }); it('should handle edges without text', async function () { @@ -45,10 +45,10 @@ describe('when using mermaid and ', function () { }, }; - flowRenderer.addEdges(edges, mockG, diag); + await flowRenderer.addEdges(edges, mockG, diag); }); - it('should handle open-ended edges', () => { + it('should handle open-ended edges', async () => { parser.parse('graph TD;A---B;'); flowDb.getVertices(); const edges = flowDb.getEdges(); @@ -61,10 +61,10 @@ describe('when using mermaid and ', function () { }, }; - flowRenderer.addEdges(edges, mockG, diag); + await flowRenderer.addEdges(edges, mockG, diag); }); - it('should handle edges with styles defined', () => { + it('should handle edges with styles defined', async () => { parser.parse('graph TD;A---B; linkStyle 0 stroke:val1,stroke-width:val2;'); flowDb.getVertices(); const edges = flowDb.getEdges(); @@ -78,9 +78,9 @@ describe('when using mermaid and ', function () { }, }; - flowRenderer.addEdges(edges, mockG, diag); + await flowRenderer.addEdges(edges, mockG, diag); }); - it('should handle edges with interpolation defined', () => { + it('should handle edges with interpolation defined', async () => { parser.parse('graph TD;A---B; linkStyle 0 interpolate basis'); flowDb.getVertices(); const edges = flowDb.getEdges(); @@ -94,9 +94,9 @@ describe('when using mermaid and ', function () { }, }; - flowRenderer.addEdges(edges, mockG, diag); + await flowRenderer.addEdges(edges, mockG, diag); }); - it('should handle edges with text and styles defined', () => { + it('should handle edges with text and styles defined', async () => { parser.parse('graph TD;A---|the text|B; linkStyle 0 stroke:val1,stroke-width:val2;'); flowDb.getVertices(); const edges = flowDb.getEdges(); @@ -111,10 +111,10 @@ describe('when using mermaid and ', function () { }, }; - flowRenderer.addEdges(edges, mockG, diag); + await flowRenderer.addEdges(edges, mockG, diag); }); - it('should set fill to "none" by default when handling edges', () => { + it('should set fill to "none" by default when handling edges', async () => { parser.parse('graph TD;A---B; linkStyle 0 stroke:val1,stroke-width:val2;'); flowDb.getVertices(); const edges = flowDb.getEdges(); @@ -128,10 +128,10 @@ describe('when using mermaid and ', function () { }, }; - flowRenderer.addEdges(edges, mockG, diag); + await flowRenderer.addEdges(edges, mockG, diag); }); - it('should not set fill to none if fill is set in linkStyle', () => { + it('should not set fill to none if fill is set in linkStyle', async () => { parser.parse('graph TD;A---B; linkStyle 0 stroke:val1,stroke-width:val2,fill:blue;'); flowDb.getVertices(); const edges = flowDb.getEdges(); @@ -144,7 +144,7 @@ describe('when using mermaid and ', function () { }, }; - flowRenderer.addEdges(edges, mockG, diag); + await flowRenderer.addEdges(edges, mockG, diag); }); }); }); diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer.js b/packages/mermaid/src/diagrams/flowchart/flowRenderer.js index 142e455563..c9e152012d 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowRenderer.js +++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer.js @@ -5,7 +5,7 @@ import { render as Render } from 'dagre-d3-es'; import { applyStyle } from 'dagre-d3-es/src/dagre-js/util.js'; import { addHtmlLabel } from 'dagre-d3-es/src/dagre-js/label/add-html-label.js'; import { log } from '../../logger.js'; -import common, { evaluate } from '../common/common.js'; +import common, { evaluate, renderKatex } from '../common/common.js'; import { interpolateToCurve, getStylesFromArray } from '../../utils.js'; import { setupGraphViewbox } from '../../setupGraphViewbox.js'; import flowChartShapes from './flowChartShapes.js'; @@ -28,13 +28,13 @@ export const setConf = function (cnf) { * @param _doc * @param diagObj */ -export const addVertices = function (vert, g, svgId, root, _doc, diagObj) { +export const addVertices = async function (vert, g, svgId, root, _doc, diagObj) { const svg = !root ? select(`[id="${svgId}"]`) : root.select(`[id="${svgId}"]`); const doc = !_doc ? document : _doc; const keys = Object.keys(vert); // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition - keys.forEach(function (id) { + for (const id of keys) { const vertex = vert[id]; /** @@ -57,9 +57,12 @@ export const addVertices = function (vert, g, svgId, root, _doc, diagObj) { if (evaluate(getConfig().flowchart.htmlLabels)) { // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that? const node = { - label: vertexText.replace( - /fa[blrs]?:fa-[\w-]+/g, - (s) => `` + label: await renderKatex( + vertexText.replace( + /fa[blrs]?:fa-[\w-]+/g, // cspell:disable-line + (s) => `` + ), + getConfig() ), }; vertexNode = addHtmlLabel(svg, node).node(); @@ -81,12 +84,12 @@ export const addVertices = function (vert, g, svgId, root, _doc, diagObj) { vertexNode = svgLabel; } - let radious = 0; + let radius = 0; let _shape = ''; // Set the shape based parameters switch (vertex.type) { case 'round': - radious = 5; + radius = 5; _shape = 'rect'; break; case 'square': @@ -144,13 +147,13 @@ export const addVertices = function (vert, g, svgId, root, _doc, diagObj) { labelStyle: styles.labelStyle, shape: _shape, label: vertexNode, - rx: radious, - ry: radious, + rx: radius, + ry: radius, class: classStr, style: styles.style, id: diagObj.db.lookUpDomId(vertex.id), }); - }); + } }; /** @@ -160,7 +163,7 @@ export const addVertices = function (vert, g, svgId, root, _doc, diagObj) { * @param {object} g The graph object * @param diagObj */ -export const addEdges = function (edges, g, diagObj) { +export const addEdges = async function (edges, g, diagObj) { let cnt = 0; let defaultStyle; @@ -172,7 +175,7 @@ export const addEdges = function (edges, g, diagObj) { defaultLabelStyle = defaultStyles.labelStyle; } - edges.forEach(function (edge) { + for (const edge of edges) { cnt++; // Identify Link @@ -239,9 +242,12 @@ export const addEdges = function (edges, g, diagObj) { edgeData.labelType = 'html'; edgeData.label = `${edge.text.replace( - /fa[blrs]?:fa-[\w-]+/g, - (s) => `` + }">${await renderKatex( + edge.text.replace( + /fa[blrs]?:fa-[\w-]+/g, // cspell:disable-line + (s) => `` + ), + getConfig() )}`; } else { edgeData.labelType = 'text'; @@ -261,7 +267,7 @@ export const addEdges = function (edges, g, diagObj) { // Add the edge to the graph g.setEdge(diagObj.db.lookUpDomId(edge.start), diagObj.db.lookUpDomId(edge.end), edgeData, cnt); - }); + } }; /** @@ -284,7 +290,7 @@ export const getClasses = function (text, diagObj) { * @param _version * @param diagObj */ -export const draw = function (text, id, _version, diagObj) { +export const draw = async function (text, id, _version, diagObj) { log.info('Drawing flowchart'); const { securityLevel, flowchart: conf } = getConfig(); let sandboxElement; @@ -350,8 +356,8 @@ export const draw = function (text, id, _version, diagObj) { g.setParent(diagObj.db.lookUpDomId(subG.nodes[j]), diagObj.db.lookUpDomId(subG.id)); } } - addVertices(vert, g, id, root, doc, diagObj); - addEdges(edges, g, diagObj); + await addVertices(vert, g, id, root, doc, diagObj); + await addEdges(edges, g, diagObj); // Create the renderer const render = new Render(); diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer.spec.js b/packages/mermaid/src/diagrams/flowchart/flowRenderer.spec.js index 5fb2307e53..68e13a305b 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowRenderer.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer.spec.js @@ -27,7 +27,7 @@ describe('the flowchart renderer', function () { ['cylinder', 'cylinder'], ['group', 'rect'], ].forEach(function ([type, expectedShape, expectedRadios = 0]) { - it(`should add the correct shaped node to the graph for vertex type ${type}`, function () { + it(`should add the correct shaped node to the graph for vertex type ${type}`, async function () { const fakeDiag = { db: { lookUpDomId: () => { @@ -41,7 +41,7 @@ describe('the flowchart renderer', function () { addedNodes.push([id, object]); }, }; - addVertices( + await addVertices( { v1: { type, @@ -70,7 +70,7 @@ describe('the flowchart renderer', function () { ['Multi
Line', 'Multi
Line', 'Multi
Line', 'MultiLine'].forEach(function ( labelText ) { - it('should handle multiline texts with different line breaks', function () { + it('should handle multiline texts with different line breaks', async function () { const addedNodes = []; const fakeDiag = { db: { @@ -84,7 +84,7 @@ describe('the flowchart renderer', function () { addedNodes.push([id, object]); }, }; - addVertices( + await addVertices( { v1: { type: 'rect', @@ -121,7 +121,7 @@ describe('the flowchart renderer', function () { 'color:#ccc;text-align:center;', ], ].forEach(function ([style, expectedStyle, expectedLabelStyle]) { - it(`should add the styles to style and/or labelStyle for style ${style}`, function () { + it(`should add the styles to style and/or labelStyle for style ${style}`, async function () { const addedNodes = []; const fakeDiag = { db: { @@ -135,7 +135,7 @@ describe('the flowchart renderer', function () { addedNodes.push([id, object]); }, }; - addVertices( + await addVertices( { v1: { type: 'rect', @@ -160,7 +160,7 @@ describe('the flowchart renderer', function () { }); }); - it(`should add default class to all nodes which do not have another class assigned`, function () { + it(`should add default class to all nodes which do not have another class assigned`, async function () { const addedNodes = []; const mockG = { setNode: function (id, object) { @@ -174,7 +174,7 @@ describe('the flowchart renderer', function () { }, }, }; - addVertices( + await addVertices( { v1: { type: 'rect', @@ -206,7 +206,7 @@ describe('the flowchart renderer', function () { }); describe('when adding edges to a graph', function () { - it('should handle multiline texts and set centered label position', function () { + it('should handle multiline texts and set centered label position', async function () { const addedEdges = []; const fakeDiag = { db: { @@ -220,7 +220,7 @@ describe('the flowchart renderer', function () { addedEdges.push(data); }, }; - addEdges( + await addEdges( [ { text: 'Multi
Line' }, { text: 'Multi
Line' }, @@ -251,7 +251,7 @@ describe('the flowchart renderer', function () { 'fill:red;', ], ].forEach(function ([style, expectedStyle, expectedLabelStyle]) { - it(`should add the styles to style and/or labelStyle for style ${style}`, function () { + it(`should add the styles to style and/or labelStyle for style ${style}`, async function () { const addedEdges = []; const fakeDiag = { db: { @@ -265,7 +265,7 @@ describe('the flowchart renderer', function () { addedEdges.push(data); }, }; - addEdges([{ style: style, text: 'styling' }], mockG, fakeDiag); + await addEdges([{ style: style, text: 'styling' }], mockG, fakeDiag); expect(addedEdges).toHaveLength(1); expect(addedEdges[0]).toHaveProperty('style', expectedStyle); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow.jison b/packages/mermaid/src/diagrams/flowchart/parser/flow.jison index de23d93cb9..54949bfae8 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow.jison +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow.jison @@ -292,15 +292,15 @@ graphConfig | NEWLINE graphConfig | GRAPH NODIR { yy.setDirection('TB');$$ = 'TB';} - | GRAPH DIR FirstStmtSeperator + | GRAPH DIR FirstStmtSeparator { yy.setDirection($DIR);$$ = $DIR;} - // | GRAPH SPACE TAGEND FirstStmtSeperator + // | GRAPH SPACE TAGEND FirstStmtSeparator // { yy.setDirection("LR");$$ = $TAGEND;} - // | GRAPH SPACE TAGSTART FirstStmtSeperator + // | GRAPH SPACE TAGSTART FirstStmtSeparator // { yy.setDirection("RL");$$ = $TAGSTART;} - // | GRAPH SPACE UP FirstStmtSeperator + // | GRAPH SPACE UP FirstStmtSeparator // { yy.setDirection("BT");$$ = $UP;} - // | GRAPH SPACE DOWN FirstStmtSeperator + // | GRAPH SPACE DOWN FirstStmtSeparator // { yy.setDirection("TB");$$ = $DOWN;} ; @@ -310,7 +310,7 @@ ending: endToken ending endToken: NEWLINE | SPACE | EOF; -FirstStmtSeperator +FirstStmtSeparator : SEMI | NEWLINE | spaceList NEWLINE ; @@ -328,8 +328,8 @@ spaceList ; statement - : verticeStatement separator - { /* console.warn('finat vs', $verticeStatement.nodes); */ $$=$verticeStatement.nodes} + : vertexStatement separator + { /* console.warn('finat vs', $vertexStatement.nodes); */ $$=$vertexStatement.nodes} | styleStatement separator {$$=[];} | linkStyleStatement separator @@ -357,10 +357,10 @@ statement separator: NEWLINE | SEMI | EOF ; -verticeStatement: verticeStatement link node - { /* console.warn('vs',$verticeStatement.stmt,$node); */ yy.addLink($verticeStatement.stmt,$node,$link); $$ = { stmt: $node, nodes: $node.concat($verticeStatement.nodes) } } - | verticeStatement link node spaceList - { /* console.warn('vs',$verticeStatement.stmt,$node); */ yy.addLink($verticeStatement.stmt,$node,$link); $$ = { stmt: $node, nodes: $node.concat($verticeStatement.nodes) } } +vertexStatement: vertexStatement link node + { /* console.warn('vs',$vertexStatement.stmt,$node); */ yy.addLink($vertexStatement.stmt,$node,$link); $$ = { stmt: $node, nodes: $node.concat($vertexStatement.nodes) } } + | vertexStatement link node spaceList + { /* console.warn('vs',$vertexStatement.stmt,$node); */ yy.addLink($vertexStatement.stmt,$node,$link); $$ = { stmt: $node, nodes: $node.concat($vertexStatement.nodes) } } |node spaceList {/*console.warn('noda', $node);*/ $$ = {stmt: $node, nodes:$node }} |node { /*console.warn('noda', $node);*/ $$ = {stmt: $node, nodes:$node }} ; diff --git a/packages/mermaid/src/diagrams/flowchart/styles.ts b/packages/mermaid/src/diagrams/flowchart/styles.ts index d0c3c77c6c..b30c0b9bc7 100644 --- a/packages/mermaid/src/diagrams/flowchart/styles.ts +++ b/packages/mermaid/src/diagrams/flowchart/styles.ts @@ -66,6 +66,12 @@ const getStyles = (options: FlowChartStyleOptions) => // text-anchor: start; // } + .node .katex path { + fill: #000; + stroke: #000; + stroke-width: 1px; + } + .node .label { text-align: center; } diff --git a/packages/mermaid/src/diagrams/gantt/ganttDb.js b/packages/mermaid/src/diagrams/gantt/ganttDb.js index 1c73a13ea9..86a2452e69 100644 --- a/packages/mermaid/src/diagrams/gantt/ganttDb.js +++ b/packages/mermaid/src/diagrams/gantt/ganttDb.js @@ -332,6 +332,7 @@ const getStartDate = function (prevTime, dateFormat, str) { * @returns {[value: number, unit: dayjs.ManipulateType]} Arguments to pass to `dayjs.add()` */ const parseDuration = function (str) { + // cspell:disable-next-line const statement = /^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(str.trim()); if (statement !== null) { return [Number.parseFloat(statement[1]), statement[2]]; diff --git a/packages/mermaid/src/diagrams/gantt/ganttRenderer.js b/packages/mermaid/src/diagrams/gantt/ganttRenderer.js index 33dbaf9efd..5559ac20d9 100644 --- a/packages/mermaid/src/diagrams/gantt/ganttRenderer.js +++ b/packages/mermaid/src/diagrams/gantt/ganttRenderer.js @@ -178,7 +178,7 @@ export const draw = function (text, id, version, diagObj) { // tasks are created based on their order of startTime taskArray.sort(taskCompare); - makeGant(taskArray, w, h); + makeGantt(taskArray, w, h); configureSvgSize(svg, h, w, conf.useMaxWidth); @@ -194,7 +194,7 @@ export const draw = function (text, id, version, diagObj) { * @param pageWidth * @param pageHeight */ - function makeGant(tasks, pageWidth, pageHeight) { + function makeGantt(tasks, pageWidth, pageHeight) { const barHeight = conf.barHeight; const gap = barHeight + conf.barGap; const topPadding = conf.topPadding; @@ -695,12 +695,12 @@ export const draw = function (text, id, version, diagObj) { function vertLabels(theGap, theTopPad) { let prevGap = 0; - const numOccurances = Object.keys(categoryHeights).map((d) => [d, categoryHeights[d]]); + const numOccurrences = Object.keys(categoryHeights).map((d) => [d, categoryHeights[d]]); svg .append('g') // without doing this, impossible to put grid lines behind text .selectAll('text') - .data(numOccurances) + .data(numOccurrences) .enter() .append(function (d) { const rows = d[0].split(common.lineBreakRegex); @@ -725,7 +725,7 @@ export const draw = function (text, id, version, diagObj) { .attr('y', function (d, i) { if (i > 0) { for (let j = 0; j < i; j++) { - prevGap += numOccurances[i - 1][1]; + prevGap += numOccurrences[i - 1][1]; return (d[1] * theGap) / 2 + prevGap * theGap + theTopPad; } } else { diff --git a/packages/mermaid/src/diagrams/git/gitGraphAst.js b/packages/mermaid/src/diagrams/git/gitGraphAst.js index bd90c87173..0997f65b1b 100644 --- a/packages/mermaid/src/diagrams/git/gitGraphAst.js +++ b/packages/mermaid/src/diagrams/git/gitGraphAst.js @@ -36,8 +36,8 @@ function getId() { // * @param otherCommit // */ // eslint-disable-next-line @cspell/spellchecker -// function isfastforwardable(currentCommit, otherCommit) { -// log.debug('Entering isfastforwardable:', currentCommit.id, otherCommit.id); +// function isFastForwardable(currentCommit, otherCommit) { +// log.debug('Entering isFastForwardable:', currentCommit.id, otherCommit.id); // let cnt = 0; // while (currentCommit.seq <= otherCommit.seq && currentCommit !== otherCommit && cnt < 1000) { // cnt++; @@ -46,8 +46,8 @@ function getId() { // if (Array.isArray(otherCommit.parent)) { // log.debug('In merge commit:', otherCommit.parent); // return ( -// isfastforwardable(currentCommit, commits[otherCommit.parent[0]]) || -// isfastforwardable(currentCommit, commits[otherCommit.parent[1]]) +// isFastForwardable(currentCommit, commits[otherCommit.parent[0]]) || +// isFastForwardable(currentCommit, commits[otherCommit.parent[1]]) // ); // } else { // otherCommit = commits[otherCommit.parent]; @@ -64,7 +64,7 @@ function getId() { // function isReachableFrom(currentCommit, otherCommit) { // const currentSeq = currentCommit.seq; // const otherSeq = otherCommit.seq; -// if (currentSeq > otherSeq) return isfastforwardable(otherCommit, currentCommit); +// if (currentSeq > otherSeq) return isFastForwardable(otherCommit, currentCommit); // return false; // } @@ -231,7 +231,7 @@ export const merge = function (otherBranch, custom_id, override_type, custom_tag // log.debug('Already merged'); // return; // } - // if (isfastforwardable(currentCommit, otherCommit)) { + // if (isFastForwardable(currentCommit, otherCommit)) { // branches[curBranch] = branches[otherBranch]; // head = commits[branches[curBranch]]; // } else { diff --git a/packages/mermaid/src/diagrams/git/gitGraphRenderer-old.js b/packages/mermaid/src/diagrams/git/gitGraphRenderer-old.js index a3b05ad79f..d8b34ac854 100644 --- a/packages/mermaid/src/diagrams/git/gitGraphRenderer-old.js +++ b/packages/mermaid/src/diagrams/git/gitGraphRenderer-old.js @@ -295,7 +295,7 @@ function renderCommitHistory(svg, commitId, branches, direction) { } if (Array.isArray(commitId)) { - logger.debug('found merge commmit', commitId); + logger.debug('found merge commit', commitId); renderCommitHistory(svg, commitId[0], branches, direction); branchNum++; renderCommitHistory(svg, commitId[1], branches, direction); diff --git a/packages/mermaid/src/diagrams/git/parser/gitGraph.jison b/packages/mermaid/src/diagrams/git/parser/gitGraph.jison index 40fab8b590..d74d6072aa 100644 --- a/packages/mermaid/src/diagrams/git/parser/gitGraph.jison +++ b/packages/mermaid/src/diagrams/git/parser/gitGraph.jison @@ -84,7 +84,7 @@ options | NL ; body - : /*emmpty*/ {$$ = []} + : /*empty*/ {$$ = []} | body line {$1.push($2); $$=$1;} ; line diff --git a/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts b/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts index 1bb2e63375..e335855a56 100644 --- a/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts +++ b/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts @@ -133,7 +133,7 @@ const type2Str = (type: number) => { case nodeType.BANG: return 'bang'; case nodeType.HEXAGON: - return 'hexgon'; + return 'hexgon'; // cspell: disable-line default: return 'no-border'; } diff --git a/packages/mermaid/src/diagrams/pie/pieTypes.ts b/packages/mermaid/src/diagrams/pie/pieTypes.ts index 6ba3ab92e5..d297c80f93 100644 --- a/packages/mermaid/src/diagrams/pie/pieTypes.ts +++ b/packages/mermaid/src/diagrams/pie/pieTypes.ts @@ -51,7 +51,7 @@ export interface PieDB extends DiagramDB { getDiagramTitle: () => string; setAccTitle: (title: string) => void; getAccTitle: () => string; - setAccDescription: (describetion: string) => void; + setAccDescription: (description: string) => void; getAccDescription: () => string; // diagram db diff --git a/packages/mermaid/src/diagrams/requirement/requirementRenderer.js b/packages/mermaid/src/diagrams/requirement/requirementRenderer.js index 2af2067ad8..b06b1d7b5b 100644 --- a/packages/mermaid/src/diagrams/requirement/requirementRenderer.js +++ b/packages/mermaid/src/diagrams/requirement/requirementRenderer.js @@ -362,6 +362,8 @@ export const draw = (text, id, _version, diagObj) => { svg.attr('viewBox', `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`); }; +// cspell:ignore txts + export default { draw, }; diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison index b11f8a87b0..9d66b69a43 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison @@ -11,14 +11,13 @@ %lex %options case-insensitive -%options easy_keword_rules %x escaped_text %x csv // as per section 6.1 of RFC 2234 [2] COMMA \u002C -CR \u000D +CR \u000D LF \u000A CRLF \u000D\u000A ESCAPED_QUOTE \u0022 @@ -32,7 +31,7 @@ TEXTDATA [\u0020-\u0021\u0023-\u002B\u002D-\u007E] ({CRLF}|{LF}) { return 'NEWLINE' } {COMMA} { return 'COMMA' } {DQUOTE} { this.pushState('escaped_text'); return 'DQUOTE'; } -{TEXTDATA}* { return 'NON_ESCAPED_TEXT' } +{TEXTDATA}* { return 'NON_ESCAPED_TEXT' } {DQUOTE}(?!{DQUOTE}) {this.popState('escaped_text'); return 'DQUOTE'; } // unescaped DQUOTE closes string ({TEXTDATA}|{COMMA}|{CR}|{LF}|{DQUOTE}{DQUOTE})* { return 'ESCAPED_TEXT'; } @@ -65,5 +64,3 @@ field escaped: DQUOTE ESCAPED_TEXT DQUOTE { $$=$ESCAPED_TEXT; }; non_escaped: NON_ESCAPED_TEXT { $$=$NON_ESCAPED_TEXT; }; - - diff --git a/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js b/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js index 8a7e2281cb..c8dab58682 100644 --- a/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js +++ b/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js @@ -209,7 +209,7 @@ Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); // needs to be rendered for the correct value of visibility auto numbers + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); // needs to be rendered for the correct value of visibility auto numbers expect(diagram.db.showSequenceNumbers()).toBe(false); }); it('should show sequence numbers when autonumber is enabled', async () => { @@ -221,7 +221,7 @@ Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); // needs to be rendered for the correct value of visibility auto numbers + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); // needs to be rendered for the correct value of visibility auto numbers expect(diagram.db.showSequenceNumbers()).toBe(true); }); @@ -1648,7 +1648,7 @@ participant Alice`; // mermaidAPI.reinitialize({ sequence: { textPlacement: textPlacement } }); await mermaidAPI.parse(str); // diagram.renderer.setConf(mermaidAPI.getConfig().sequence); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); @@ -1679,7 +1679,7 @@ Note over Alice: Alice thinks expect(mermaidAPI.getConfig().sequence.mirrorActors).toBeFalsy(); await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); @@ -1695,7 +1695,7 @@ participant Alice Note left of Alice: Alice thinks`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); @@ -1711,7 +1711,7 @@ participant Alice Note right of Alice: Alice thinks`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); @@ -1726,7 +1726,7 @@ sequenceDiagram Alice->Bob: Hello Bob, how are you?`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); @@ -1744,7 +1744,7 @@ end Alice->Bob: Hello Bob, how are you?`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); @@ -1759,7 +1759,7 @@ sequenceDiagram Alice->Bob: Hello Bob, how are you?`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const mermaid = mermaidAPI.getConfig(); @@ -1779,7 +1779,7 @@ wrap Alice->Bob: Hello Bob, how are you?`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const msgs = diagram.db.getMessages(); const { bounds, models } = diagram.renderer.bounds.getBounds(); @@ -1800,7 +1800,7 @@ Note over Bob,Alice: Looks back `; // mermaidAPI.initialize({logLevel:0}) await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); @@ -1815,7 +1815,7 @@ Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine!`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); @@ -1831,7 +1831,7 @@ Note right of Bob: Bob thinks Bob->Alice: Fine!`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); @@ -1850,7 +1850,7 @@ Note left of Alice: Bob thinks Bob->Alice: Fine!`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); @@ -1867,7 +1867,7 @@ Note left of Alice: Bob thinks Bob->>Alice: Fine!`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const msgs = diagram.db.getMessages(); @@ -1888,7 +1888,7 @@ Note left of Alice: Bob thinks Bob->>Alice: Fine!`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const msgs = diagram.db.getMessages(); @@ -1911,7 +1911,7 @@ Note left of Alice: Bob thinks Bob->>Alice: Fine!`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const msgs = diagram.db.getMessages(); @@ -1933,7 +1933,7 @@ Note left of Alice: Bob thinks Bob->>Alice: Fine!`; // mermaidAPI.initialize({ logLevel: 0 }); await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); const msgs = diagram.db.getMessages(); @@ -1957,7 +1957,7 @@ loop Cheers Bob->Alice: Fine! end`; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); @@ -1975,7 +1975,7 @@ end`; end `; await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); @@ -2022,7 +2022,7 @@ sequenceDiagram participant Alice`; diagram.renderer.bounds.init(); await mermaidAPI.parse(str); - diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); const { bounds, models } = diagram.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); diff --git a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts index b8962395ee..98a14aac74 100644 --- a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts +++ b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts @@ -1,8 +1,8 @@ // @ts-nocheck TODO: fix file import { select } from 'd3'; -import svgDraw, { ACTOR_TYPE_WIDTH, drawText, fixLifeLineHeights } from './svgDraw.js'; +import svgDraw, { drawKatex, ACTOR_TYPE_WIDTH, drawText, fixLifeLineHeights } from './svgDraw.js'; import { log } from '../../logger.js'; -import common from '../common/common.js'; +import common, { calculateMathMLDimensions, hasKatex } from '../common/common.js'; import * as svgDrawCommon from '../common/svgDrawCommon.js'; import { getConfig } from '../../diagram-api/diagramAPI.js'; import assignWithDepth from '../../assignWithDepth.js'; @@ -237,7 +237,7 @@ interface NoteModel { * @param elem - The diagram to draw to. * @param noteModel - Note model options. */ -const drawNote = function (elem: any, noteModel: NoteModel) { +const drawNote = async function (elem: any, noteModel: NoteModel) { bounds.bumpVerticalPos(conf.boxMargin); noteModel.height = conf.boxMargin; noteModel.starty = bounds.getVerticalPos(); @@ -263,7 +263,7 @@ const drawNote = function (elem: any, noteModel: NoteModel) { textObj.textMargin = conf.noteMargin; textObj.valign = 'center'; - const textElem = drawText(g, textObj); + const textElem = hasKatex(textObj.text) ? await drawKatex(g, textObj) : drawText(g, textObj); const textHeight = Math.round( textElem @@ -311,15 +311,20 @@ const actorFont = (cnf) => { * @param msgModel - The model containing fields describing a message * @returns `lineStartY` - The Y coordinate at which the message line starts */ -function boundMessage(_diagram, msgModel): number { +async function boundMessage(_diagram, msgModel): Promise { bounds.bumpVerticalPos(10); const { startx, stopx, message } = msgModel; const lines = common.splitBreaks(message).length; - const textDims = utils.calculateTextDimensions(message, messageFont(conf)); - const lineHeight = textDims.height / lines; - msgModel.height += lineHeight; - - bounds.bumpVerticalPos(lineHeight); + const isKatexMsg = hasKatex(message); + const textDims = isKatexMsg + ? await calculateMathMLDimensions(message, getConfig()) + : utils.calculateTextDimensions(message, messageFont(conf)); + + if (!isKatexMsg) { + const lineHeight = textDims.height / lines; + msgModel.height += lineHeight; + bounds.bumpVerticalPos(lineHeight); + } let lineStartY; let totalOffset = textDims.height - 10; @@ -360,7 +365,7 @@ function boundMessage(_diagram, msgModel): number { * @param lineStartY - The Y coordinate at which the message line starts * @param diagObj - The diagram object. */ -const drawMessage = function (diagram, msgModel, lineStartY: number, diagObj: Diagram) { +const drawMessage = async function (diagram, msgModel, lineStartY: number, diagObj: Diagram) { const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel; const textDims = utils.calculateTextDimensions(message, messageFont(conf)); const textObj = svgDrawCommon.getTextObj(); @@ -378,7 +383,9 @@ const drawMessage = function (diagram, msgModel, lineStartY: number, diagObj: Di textObj.textMargin = conf.wrapPadding; textObj.tspan = false; - drawText(diagram, textObj); + hasKatex(textObj.text) + ? await drawKatex(diagram, textObj, { startx, stopx, starty: lineStartY }) + : drawText(diagram, textObj); const textWidth = textDims.width; @@ -478,7 +485,7 @@ const drawMessage = function (diagram, msgModel, lineStartY: number, diagObj: Di } }; -const addActorRenderingData = function ( +const addActorRenderingData = async function ( diagram, actors, createdActors, @@ -548,12 +555,12 @@ const addActorRenderingData = function ( bounds.bumpVerticalPos(maxHeight); }; -export const drawActors = function (diagram, actors, actorKeys, isFooter) { +export const drawActors = async function (diagram, actors, actorKeys, isFooter) { if (!isFooter) { for (const actorKey of actorKeys) { const actor = actors[actorKey]; // Draw the box with the attached line - svgDraw.drawActor(diagram, actor, conf, false); + await svgDraw.drawActor(diagram, actor, conf, false); } } else { let maxHeight = 0; @@ -563,7 +570,7 @@ export const drawActors = function (diagram, actors, actorKeys, isFooter) { if (!actor.stopy) { actor.stopy = bounds.getVerticalPos(); } - const height = svgDraw.drawActor(diagram, actor, conf, true); + const height = await svgDraw.drawActor(diagram, actor, conf, true); maxHeight = common.getMax(maxHeight, height); } bounds.bumpVerticalPos(maxHeight + conf.boxMargin); @@ -746,7 +753,7 @@ function adjustCreatedDestroyedData( * @param _version - Mermaid version from package.json * @param diagObj - A standard diagram containing the db and the text and type etc of the diagram */ -export const draw = function (_text: string, id: string, _version: string, diagObj: Diagram) { +export const draw = async function (_text: string, id: string, _version: string, diagObj: Diagram) { const { securityLevel, sequence } = getConfig(); conf = sequence; // Handle root and Document for when rendering in sandbox mode @@ -776,8 +783,8 @@ export const draw = function (_text: string, id: string, _version: string, diagO const title = diagObj.db.getDiagramTitle(); const hasBoxes = diagObj.db.hasAtLeastOneBox(); const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle(); - const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors, messages, diagObj); - conf.height = calculateActorMargins(actors, maxMessageWidthPerActor, boxes); + const maxMessageWidthPerActor = await getMaxMessageWidthPerActor(actors, messages, diagObj); + conf.height = await calculateActorMargins(actors, maxMessageWidthPerActor, boxes); svgDraw.insertComputerIcon(diagram); svgDraw.insertDatabaseIcon(diagram); @@ -799,8 +806,8 @@ export const draw = function (_text: string, id: string, _version: string, diagO actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey)); } - addActorRenderingData(diagram, actors, createdActors, actorKeys, 0, messages, false); - const loopWidths = calculateLoopBounds(messages, actors, maxMessageWidthPerActor, diagObj); + await addActorRenderingData(diagram, actors, createdActors, actorKeys, 0, messages, false); + const loopWidths = await calculateLoopBounds(messages, actors, maxMessageWidthPerActor, diagObj); // The arrow head definition is attached to the svg once svgDraw.insertArrowHead(diagram); @@ -834,14 +841,15 @@ export const draw = function (_text: string, id: string, _version: string, diagO let sequenceIndexStep = 1; const messagesToDraw = []; const backgrounds = []; - messages.forEach(function (msg, index) { + let index = 0; + for (const msg of messages) { let loopModel, noteModel, msgModel; switch (msg.type) { case diagObj.db.LINETYPE.NOTE: bounds.resetVerticalPos(); noteModel = msg.noteModel; - drawNote(diagram, noteModel); + await drawNote(diagram, noteModel); break; case diagObj.db.LINETYPE.ACTIVE_START: bounds.newActivation(msg, diagram, actors); @@ -860,7 +868,7 @@ export const draw = function (_text: string, id: string, _version: string, diagO break; case diagObj.db.LINETYPE.LOOP_END: loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'loop', conf); + await svgDraw.drawLoop(diagram, loopModel, 'loop', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -886,7 +894,7 @@ export const draw = function (_text: string, id: string, _version: string, diagO break; case diagObj.db.LINETYPE.OPT_END: loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'opt', conf); + await svgDraw.drawLoop(diagram, loopModel, 'opt', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -910,7 +918,7 @@ export const draw = function (_text: string, id: string, _version: string, diagO break; case diagObj.db.LINETYPE.ALT_END: loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'alt', conf); + await svgDraw.drawLoop(diagram, loopModel, 'alt', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -936,7 +944,7 @@ export const draw = function (_text: string, id: string, _version: string, diagO break; case diagObj.db.LINETYPE.PAR_END: loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'par', conf); + await svgDraw.drawLoop(diagram, loopModel, 'par', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -969,7 +977,7 @@ export const draw = function (_text: string, id: string, _version: string, diagO break; case diagObj.db.LINETYPE.CRITICAL_END: loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'critical', conf); + await svgDraw.drawLoop(diagram, loopModel, 'critical', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -984,7 +992,7 @@ export const draw = function (_text: string, id: string, _version: string, diagO break; case diagObj.db.LINETYPE.BREAK_END: loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'break', conf); + await svgDraw.drawLoop(diagram, loopModel, 'break', conf); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; @@ -994,7 +1002,7 @@ export const draw = function (_text: string, id: string, _version: string, diagO msgModel.starty = bounds.getVerticalPos(); msgModel.sequenceIndex = sequenceIndex; msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); - const lineStartY = boundMessage(diagram, msgModel); + const lineStartY = await boundMessage(diagram, msgModel); adjustCreatedDestroyedData( msg, msgModel, @@ -1026,20 +1034,23 @@ export const draw = function (_text: string, id: string, _version: string, diagO ) { sequenceIndex = sequenceIndex + sequenceIndexStep; } - }); + index++; + } log.debug('createdActors', createdActors); log.debug('destroyedActors', destroyedActors); + await drawActors(diagram, actors, actorKeys, false); - drawActors(diagram, actors, actorKeys, false); - messagesToDraw.forEach((e) => drawMessage(diagram, e.messageModel, e.lineStartY, diagObj)); + for (const e of messagesToDraw) { + await drawMessage(diagram, e.messageModel, e.lineStartY, diagObj); + } if (conf.mirrorActors) { - drawActors(diagram, actors, actorKeys, true); + await drawActors(diagram, actors, actorKeys, true); } backgrounds.forEach((e) => svgDraw.drawBackgroundRect(diagram, e)); fixLifeLineHeights(diagram, actors, actorKeys, conf); - bounds.models.boxes.forEach(function (box) { + for (const box of bounds.models.boxes) { box.height = bounds.getVerticalPos() - box.y; bounds.insert(box.x, box.y, box.x + box.width, box.height); box.startx = box.x; @@ -1047,8 +1058,8 @@ export const draw = function (_text: string, id: string, _version: string, diagO box.stopx = box.startx + box.width; box.stopy = box.starty + box.height; box.stroke = 'rgb(0,0,0, 0.5)'; - svgDraw.drawBox(diagram, box, conf); - }); + await svgDraw.drawBox(diagram, box, conf); + } if (hasBoxes) { bounds.bumpVerticalPos(conf.boxMargin); @@ -1114,25 +1125,25 @@ export const draw = function (_text: string, id: string, _version: string, diagO * @param diagObj - The diagram object. * @returns The max message width of each actor. */ -function getMaxMessageWidthPerActor( +async function getMaxMessageWidthPerActor( actors: { [id: string]: any }, messages: any[], diagObj: Diagram -): { [id: string]: number } { +): Promise<{ [id: string]: number }> { const maxMessageWidthPerActor = {}; - messages.forEach(function (msg) { + for (const msg of messages) { if (actors[msg.to] && actors[msg.from]) { const actor = actors[msg.to]; // If this is the first actor, and the message is left of it, no need to calculate the margin if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) { - return; + continue; } // If this is the last actor, and the message is right of it, no need to calculate the margin if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) { - return; + continue; } const isNote = msg.placement !== undefined; @@ -1142,7 +1153,9 @@ function getMaxMessageWidthPerActor( const wrappedMessage = msg.wrap ? utils.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont) : msg.message; - const messageDimensions = utils.calculateTextDimensions(wrappedMessage, textFont); + const messageDimensions = hasKatex(wrappedMessage) + ? await calculateMathMLDimensions(msg.message, getConfig()) + : utils.calculateTextDimensions(wrappedMessage, textFont); const messageWidth = messageDimensions.width + 2 * conf.wrapPadding; /* @@ -1207,7 +1220,7 @@ function getMaxMessageWidthPerActor( } } } - }); + } log.debug('maxMessageWidthPerActor:', maxMessageWidthPerActor); return maxMessageWidthPerActor; @@ -1238,13 +1251,13 @@ const getRequiredPopupWidth = function (actor) { * @param actorToMessageWidth - A map of actor key → max message width it holds * @param boxes - The boxes around the actors if any */ -function calculateActorMargins( +async function calculateActorMargins( actors: { [id: string]: any }, - actorToMessageWidth: ReturnType, + actorToMessageWidth: Awaited>, boxes ) { let maxHeight = 0; - Object.keys(actors).forEach((prop) => { + for (const prop of Object.keys(actors)) { const actor = actors[prop]; if (actor.wrap) { actor.description = utils.wrapLabel( @@ -1253,14 +1266,17 @@ function calculateActorMargins( actorFont(conf) ); } - const actDims = utils.calculateTextDimensions(actor.description, actorFont(conf)); + const actDims = hasKatex(actor.description) + ? await calculateMathMLDimensions(actor.description, getConfig()) + : utils.calculateTextDimensions(actor.description, actorFont(conf)); + actor.width = actor.wrap ? conf.width : common.getMax(conf.width, actDims.width + 2 * conf.wrapPadding); actor.height = actor.wrap ? common.getMax(actDims.height, conf.height) : conf.height; maxHeight = common.getMax(maxHeight, actor.height); - }); + } for (const actorKey in actorToMessageWidth) { const actor = actors[actorKey]; @@ -1311,15 +1327,17 @@ function calculateActorMargins( return common.getMax(maxHeight, conf.height); } -const buildNoteModel = function (msg, actors, diagObj) { +const buildNoteModel = async function (msg, actors, diagObj) { const startx = actors[msg.from].x; const stopx = actors[msg.to].x; const shouldWrap = msg.wrap && msg.message; - let textDimensions = utils.calculateTextDimensions( - shouldWrap ? utils.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message, - noteFont(conf) - ); + let textDimensions: { width: number; height: number; lineHeight?: number } = hasKatex(msg.message) + ? await calculateMathMLDimensions(msg.message, getConfig()) + : utils.calculateTextDimensions( + shouldWrap ? utils.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message, + noteFont(conf) + ); const noteModel = { width: shouldWrap ? conf.width @@ -1477,12 +1495,12 @@ const buildMessageModel = function (msg, actors, diagObj) { }; }; -const calculateLoopBounds = function (messages, actors, _maxWidthPerActor, diagObj) { +const calculateLoopBounds = async function (messages, actors, _maxWidthPerActor, diagObj) { const loops = {}; const stack = []; let current, noteModel, msgModel; - messages.forEach(function (msg) { + for (const msg of messages) { msg.id = utils.random({ length: 10 }); switch (msg.type) { case diagObj.db.LINETYPE.LOOP_START: @@ -1545,7 +1563,7 @@ const calculateLoopBounds = function (messages, actors, _maxWidthPerActor, diagO } const isNote = msg.placement !== undefined; if (isNote) { - noteModel = buildNoteModel(msg, actors, diagObj); + noteModel = await buildNoteModel(msg, actors, diagObj); msg.noteModel = noteModel; stack.forEach((stk) => { current = stk; @@ -1584,7 +1602,7 @@ const calculateLoopBounds = function (messages, actors, _maxWidthPerActor, diagO }); } } - }); + } bounds.activations = []; log.debug('Loop type widths:', loops); return loops; diff --git a/packages/mermaid/src/diagrams/sequence/svgDraw.js b/packages/mermaid/src/diagrams/sequence/svgDraw.js index e2f1ffa6a6..1ca1c1ca8d 100644 --- a/packages/mermaid/src/diagrams/sequence/svgDraw.js +++ b/packages/mermaid/src/diagrams/sequence/svgDraw.js @@ -1,8 +1,9 @@ -import common from '../common/common.js'; +import common, { calculateMathMLDimensions, hasKatex, renderKatex } from '../common/common.js'; import * as svgDrawCommon from '../common/svgDrawCommon.js'; import { addFunction } from '../../interactionDb.js'; import { ZERO_WIDTH_SPACE, parseFontSize } from '../../utils.js'; import { sanitizeUrl } from '@braintree/sanitize-url'; +import * as configApi from '../../config.js'; export const ACTOR_TYPE_WIDTH = 18 * 2; const TOP_ACTOR_CLASS = 'actor-top'; @@ -75,14 +76,55 @@ export const drawPopup = function (elem, actor, minMenuWidth, textAttrs, forceMe return { height: rectData.height + linkY, width: menuWidth }; }; -const popupMenuToggle = function (popid) { +const popupMenuToggle = function (popId) { return ( "var pu = document.getElementById('" + - popid + + popId + "'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }" ); }; +export const drawKatex = async function (elem, textData, msgModel = null) { + let textElem = elem.append('foreignObject'); + const lines = await renderKatex(textData.text, configApi.getConfig()); + + const divElem = textElem + .append('xhtml:div') + .attr('style', 'width: fit-content;') + .attr('xmlns', 'http://www.w3.org/1999/xhtml') + .html(lines); + const dim = divElem.node().getBoundingClientRect(); + + textElem.attr('height', Math.round(dim.height)).attr('width', Math.round(dim.width)); + + if (textData.class === 'noteText') { + const rectElem = elem.node().firstChild; + + rectElem.setAttribute('height', dim.height + 2 * textData.textMargin); + const rectDim = rectElem.getBBox(); + + textElem + .attr('x', Math.round(rectDim.x + rectDim.width / 2 - dim.width / 2)) + .attr('y', Math.round(rectDim.y + rectDim.height / 2 - dim.height / 2)); + } else if (msgModel) { + let { startx, stopx, starty } = msgModel; + if (startx > stopx) { + const temp = startx; + startx = stopx; + stopx = temp; + } + + textElem.attr('x', Math.round(startx + Math.abs(startx - stopx) / 2 - dim.width / 2)); + if (textData.class === 'loopText') { + textElem.attr('y', Math.round(starty)); + } else { + textElem.attr('y', Math.round(starty - dim.height)); + } + } + + return [textElem]; +}; + export const drawText = function (elem, textData) { let prevTextHeight = 0; let textHeight = 0; @@ -282,13 +324,13 @@ export const fixLifeLineHeights = (diagram, actors, actorKeys, conf) => { * @param {any} conf - DrawText implementation discriminator object * @param {boolean} isFooter - If the actor is the footer one */ -const drawActorTypeParticipant = function (elem, actor, conf, isFooter) { +const drawActorTypeParticipant = async function (elem, actor, conf, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center = actor.x + actor.width / 2; const centerY = actorY + 5; - const boxpluslineGroup = elem.append('g').lower(); - var g = boxpluslineGroup; + const boxplusLineGroup = elem.append('g').lower(); + var g = boxplusLineGroup; if (!isFooter) { actorCnt++; @@ -306,7 +348,7 @@ const drawActorTypeParticipant = function (elem, actor, conf, isFooter) { .attr('stroke-width', '0.5px') .attr('stroke', '#999'); - g = boxpluslineGroup.append('g'); + g = boxplusLineGroup.append('g'); actor.actorCnt = actorCnt; if (actor.links != null) { @@ -345,7 +387,7 @@ const drawActorTypeParticipant = function (elem, actor, conf, isFooter) { } } - _drawTextCandidateFunc(conf)( + await _drawTextCandidateFunc(conf, hasKatex(actor.description))( actor.description, g, rect.x, @@ -366,7 +408,7 @@ const drawActorTypeParticipant = function (elem, actor, conf, isFooter) { return height; }; -const drawActorTypeActor = function (elem, actor, conf, isFooter) { +const drawActorTypeActor = async function (elem, actor, conf, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center = actor.x + actor.width / 2; const centerY = actorY + 80; @@ -446,7 +488,7 @@ const drawActorTypeActor = function (elem, actor, conf, isFooter) { const bounds = actElem.node().getBBox(); actor.height = bounds.height; - _drawTextCandidateFunc(conf)( + await _drawTextCandidateFunc(conf, hasKatex(actor.description))( actor.description, actElem, rect.x, @@ -460,21 +502,21 @@ const drawActorTypeActor = function (elem, actor, conf, isFooter) { return actor.height; }; -export const drawActor = function (elem, actor, conf, isFooter) { +export const drawActor = async function (elem, actor, conf, isFooter) { switch (actor.type) { case 'actor': - return drawActorTypeActor(elem, actor, conf, isFooter); + return await drawActorTypeActor(elem, actor, conf, isFooter); case 'participant': - return drawActorTypeParticipant(elem, actor, conf, isFooter); + return await drawActorTypeParticipant(elem, actor, conf, isFooter); } }; -export const drawBox = function (elem, box, conf) { - const boxplustextGroup = elem.append('g'); - const g = boxplustextGroup; +export const drawBox = async function (elem, box, conf) { + const boxplusTextGroup = elem.append('g'); + const g = boxplusTextGroup; drawBackgroundRect(g, box); if (box.name) { - _drawTextCandidateFunc(conf)( + await _drawTextCandidateFunc(conf)( box.name, g, box.x, @@ -521,7 +563,7 @@ export const drawActivation = function (elem, bounds, verticalPos, conf, actorAc * @param {any} conf - Diagram configuration * @returns {any} */ -export const drawLoop = function (elem, loopModel, labelText, conf) { +export const drawLoop = async function (elem, loopModel, labelText, conf) { const { boxMargin, boxTextMargin, @@ -583,10 +625,10 @@ export const drawLoop = function (elem, loopModel, labelText, conf) { txt.fontWeight = fontWeight; txt.wrap = true; - let textElem = drawText(g, txt); + let textElem = hasKatex(txt.text) ? await drawKatex(g, txt, loopModel) : drawText(g, txt); if (loopModel.sectionTitles !== undefined) { - loopModel.sectionTitles.forEach(function (item, idx) { + for (const [idx, item] of Object.entries(loopModel.sectionTitles)) { if (item.message) { txt.text = item.message; txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2; @@ -599,7 +641,13 @@ export const drawLoop = function (elem, loopModel, labelText, conf) { txt.fontSize = fontSize; txt.fontWeight = fontWeight; txt.wrap = loopModel.wrap; - textElem = drawText(g, txt); + + if (hasKatex(txt.text)) { + loopModel.starty = loopModel.sections[idx].y; + await drawKatex(g, txt, loopModel); + } else { + drawText(g, txt); + } let sectionHeight = Math.round( textElem .map((te) => (te._groups || te)[0][0].getBBox().height) @@ -607,7 +655,7 @@ export const drawLoop = function (elem, loopModel, labelText, conf) { ); loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin); } - }); + } } loopModel.height = Math.round(loopModel.stopy - loopModel.starty); @@ -884,6 +932,41 @@ const _drawTextCandidateFunc = (function () { _setTextAttrs(text, textAttrs); } + /** + * + * @param content + * @param g + * @param x + * @param y + * @param width + * @param height + * @param textAttrs + * @param conf + */ + async function byKatex(content, g, x, y, width, height, textAttrs, conf) { + // TODO duplicate render calls, optimize + + const dim = await calculateMathMLDimensions(content, configApi.getConfig()); + const s = g.append('switch'); + const f = s + .append('foreignObject') + .attr('x', x + width / 2 - dim.width / 2) + .attr('y', y + height / 2 - dim.height / 2) + .attr('width', dim.width) + .attr('height', dim.height); + + const text = f.append('xhtml:div').style('height', '100%').style('width', '100%'); + + text + .append('div') + .style('text-align', 'center') + .style('vertical-align', 'middle') + .html(await renderKatex(content, configApi.getConfig())); + + byTspan(content, s, x, y, width, height, textAttrs, conf); + _setTextAttrs(text, textAttrs); + } + /** * @param {any} toText * @param {any} fromTextAttrsDict @@ -896,7 +979,10 @@ const _drawTextCandidateFunc = (function () { } } - return function (conf) { + return function (conf, hasKatex = false) { + if (hasKatex) { + return byKatex; + } return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan; }; })(); diff --git a/packages/mermaid/src/diagrams/state/shapes.js b/packages/mermaid/src/diagrams/state/shapes.js index b8cfe5bda1..f0ab4136bb 100644 --- a/packages/mermaid/src/diagrams/state/shapes.js +++ b/packages/mermaid/src/diagrams/state/shapes.js @@ -206,7 +206,7 @@ export const addTitleAndBox = (g, stateDef, altBkg) => { g.insert('rect', ':first-child') .attr('x', startX) .attr('y', lineY) - .attr('class', altBkg ? 'alt-composit' : 'composit') + .attr('class', altBkg ? 'alt-composit' : 'composit') // cspell:disable-line .attr('width', width) .attr( 'height', @@ -482,11 +482,11 @@ export const drawEdge = function (elem, path, relation) { .attr('x', x) .attr('y', y + titleHeight); - const boundstmp = title.node().getBBox(); - maxWidth = Math.max(maxWidth, boundstmp.width); - minX = Math.min(minX, boundstmp.x); + const boundsTmp = title.node().getBBox(); + maxWidth = Math.max(maxWidth, boundsTmp.width); + minX = Math.min(minX, boundsTmp.x); - log.info(boundstmp.x, x, y + titleHeight); + log.info(boundsTmp.x, x, y + titleHeight); if (titleHeight === 0) { const titleBox = title.node().getBBox(); diff --git a/packages/mermaid/src/diagrams/state/stateDb.js b/packages/mermaid/src/diagrams/state/stateDb.js index 7e5e72fe09..0ff32cbb33 100644 --- a/packages/mermaid/src/diagrams/state/stateDb.js +++ b/packages/mermaid/src/diagrams/state/stateDb.js @@ -260,7 +260,7 @@ export const addState = function ( if (classes) { log.info('Setting state classes', trimmedId, classes); const classesList = typeof classes === 'string' ? [classes] : classes; - classesList.forEach((klass) => setCssClass(trimmedId, klass.trim())); + classesList.forEach((cssClass) => setCssClass(trimmedId, cssClass.trim())); } if (styles) { diff --git a/packages/mermaid/src/diagrams/state/styles.js b/packages/mermaid/src/diagrams/state/styles.js index f4783b477b..fe3d7078b1 100644 --- a/packages/mermaid/src/diagrams/state/styles.js +++ b/packages/mermaid/src/diagrams/state/styles.js @@ -202,4 +202,7 @@ g.stateGroup line { } `; +// todo: change composit to composite +// cspell:ignore composit + export default getStyles; diff --git a/packages/mermaid/src/diagrams/timeline/timelineDb.js b/packages/mermaid/src/diagrams/timeline/timelineDb.js index 485cbb3a58..5269f67aea 100644 --- a/packages/mermaid/src/diagrams/timeline/timelineDb.js +++ b/packages/mermaid/src/diagrams/timeline/timelineDb.js @@ -53,7 +53,7 @@ export const addTask = function (period, length, event) { }; export const addEvent = function (event) { - // fetch current task with currnetTaskId + // fetch current task with currentTaskId const currentTask = rawTasks.find((task) => task.id === currentTaskId - 1); //add event to the events array currentTask.events.push(event); diff --git a/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/index.ts b/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/index.ts index 3f1eca5476..cde0d6a93c 100644 --- a/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/index.ts +++ b/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/index.ts @@ -27,14 +27,14 @@ export function getAxis( axisThemeConfig: XYChartAxisThemeConfig, tmpSVGGroup: Group ): Axis { - const textDimansionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup); + const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup); if (isBandAxisData(data)) { return new BandAxis( axisConfig, axisThemeConfig, data.categories, data.title, - textDimansionCalculator + textDimensionCalculator ); } return new LinearAxis( @@ -42,6 +42,6 @@ export function getAxis( axisThemeConfig, [data.min, data.max], data.title, - textDimansionCalculator + textDimensionCalculator ); } diff --git a/packages/mermaid/src/diagrams/xychart/chartBuilder/orchestrator.ts b/packages/mermaid/src/diagrams/xychart/chartBuilder/orchestrator.ts index 8338d4f411..8160d15007 100644 --- a/packages/mermaid/src/diagrams/xychart/chartBuilder/orchestrator.ts +++ b/packages/mermaid/src/diagrams/xychart/chartBuilder/orchestrator.ts @@ -112,7 +112,7 @@ export class Orchestrator { } } - private calculateHorizonatalSpace() { + private calculateHorizontalSpace() { let availableWidth = this.chartConfig.width; let availableHeight = this.chartConfig.height; let titleYEnd = 0; @@ -174,7 +174,7 @@ export class Orchestrator { private calculateSpace() { if (this.chartConfig.chartOrientation === 'horizontal') { - this.calculateHorizonatalSpace(); + this.calculateHorizontalSpace(); } else { this.calculateVerticalSpace(); } diff --git a/packages/mermaid/src/docs/.vitepress/config.ts b/packages/mermaid/src/docs/.vitepress/config.ts index 7c79cc18fc..401130518b 100644 --- a/packages/mermaid/src/docs/.vitepress/config.ts +++ b/packages/mermaid/src/docs/.vitepress/config.ts @@ -172,6 +172,7 @@ function sidebarConfig() { { text: 'Mermaid Configuration Options', link: '/config/schema-docs/config' }, { text: 'Directives', link: '/config/directives' }, { text: 'Theming', link: '/config/theming' }, + { text: 'Math', link: '/config/math' }, { text: 'Accessibility', link: '/config/accessibility' }, { text: 'Mermaid CLI', link: '/config/mermaidCLI' }, { text: 'FAQ', link: '/config/faq' }, diff --git a/packages/mermaid/src/docs/community/contributing.md b/packages/mermaid/src/docs/community/contributing.md index 7d8aafa4ce..195146a612 100644 --- a/packages/mermaid/src/docs/community/contributing.md +++ b/packages/mermaid/src/docs/community/contributing.md @@ -130,7 +130,7 @@ You might see _lint_ or _formatting_ warnings. Those are ok during this step. ## Workflow -Contributing process is very simple and strightforward: +Contributing process is very simple and straightforward: ```mermaid-nocode flowchart LR @@ -377,7 +377,7 @@ eg: `# Feature Name (v10.8.0+)` We know it can sometimes be hard to code _and_ write user documentation. -Create another issue specifically for the documentation. +Create another issue specifically for the documentation. You will need to help with the PR, but definitely ask for help if you feel stuck. When it feels hard to write stuff out, explaining it to someone and having that person ask you clarifying questions can often be 80% of the work! @@ -403,7 +403,7 @@ The contents of [mermaid.js.org](https://mermaid.js.org/) are based on the docs flowchart LR classDef default fill:#fff,color:black,stroke:black - source["Edit /packages/mermaid/src/docs"] -- automatic processing--> published["View /docs which will be publised on Official Website"] + source["Edit /packages/mermaid/src/docs"] -- automatic processing--> published["View /docs which will be published on Official Website"] ``` ### Running the Documentation Website Locally @@ -521,3 +521,5 @@ You have successfully submitted your improvements! What is next? - When a release is ready, the `release/x.x.x` branch will be created, extensively tested and knsv will be in charge of the release process. Thanks for you help! + + diff --git a/packages/mermaid/src/docs/config/accessibility.md b/packages/mermaid/src/docs/config/accessibility.md index 559c739874..b53567f730 100644 --- a/packages/mermaid/src/docs/config/accessibility.md +++ b/packages/mermaid/src/docs/config/accessibility.md @@ -13,7 +13,7 @@ Mermaid will automatically insert the [aria-roledescription](#aria-roledescripti The [aria-roledescription](https://www.w3.org/TR/wai-aria-1.1/#aria-roledescription) for the SVG HTML element is set to the diagram type key. (Note this may be slightly different than the keyword used for the diagram in the diagram text.) -For example: The diagram type key for a state diagram is "stateDiagram". Here (a part of) the HTML of the SVG tag that shows the automatically inserted aria-roledscription set to "stateDiagram". _(Note that some of the SVG attributes and the SVG contents are omitted for clarity.):_ +For example: The diagram type key for a state diagram is "stateDiagram". Here (a part of) the HTML of the SVG tag that shows the automatically inserted aria-roledescription set to "stateDiagram". _(Note that some of the SVG attributes and the SVG contents are omitted for clarity.):_ ```html +) + +Mermaid supports rendering mathematical expressions through the [KaTeX](https://katex.org/) typesetter. + +## Usage + +To render math within a diagram, surround the mathematical expression with the `$$` delimiter. + +Note that at the moment, the only supported diagrams are below: + +### Flowcharts + +```mermaid + graph LR + A["$$x^2$$"] -->|"$$\sqrt{x+3}$$"| B("$$\frac{1}{2}$$") + A -->|"$$\overbrace{a+b+c}^{\text{note}}$$"| C("$$\pi r^2$$") + B --> D("$$x = \begin{cases} a &\text{if } b \\ c &\text{if } d \end{cases}$$") + C --> E("$$x(t)=c_1\begin{bmatrix}-\cos{t}+\sin{t}\\ 2\cos{t} \end{bmatrix}e^{2t}$$") +``` + +### Sequence + +```mermaid +sequenceDiagram + autonumber + participant 1 as $$\alpha$$ + participant 2 as $$\beta$$ + 1->>2: Solve: $$\sqrt{2+2}$$ + 2-->>1: Answer: $$2$$ + Note right of 2: $$\sqrt{2+2}=\sqrt{4}=2$$ +``` + +## Legacy Support + +By default, MathML is used for rendering mathematical expressions. If you have users on [unsupported browsers](https://caniuse.com/?search=mathml), `legacyMathML` can be set in the config to fall back to CSS rendering. Note that **you must provide KaTeX's stylesheets on your own** as they do not come bundled with Mermaid. + +Example with legacy mode enabled (the latest version of KaTeX's stylesheet can be found on their [docs](https://katex.org/docs/browser.html)): + +```html + + + + + + + + + + + + +``` diff --git a/packages/mermaid/src/docs/config/theming.md b/packages/mermaid/src/docs/config/theming.md index 0e08532837..590301d70d 100644 --- a/packages/mermaid/src/docs/config/theming.md +++ b/packages/mermaid/src/docs/config/theming.md @@ -47,7 +47,7 @@ Example of `init` directive setting the `theme` to `forest`: a --> b ``` -> **Reminder**: the only theme that can be customed is the `base` theme. The following section covers how to use `themeVariables` for customizations. +> **Reminder**: the only theme that can be customized is the `base` theme. The following section covers how to use `themeVariables` for customizations. ## Customizing Themes with `themeVariables` diff --git a/packages/mermaid/src/docs/config/usage.md b/packages/mermaid/src/docs/config/usage.md index 5019611a73..ed7dc56dd6 100644 --- a/packages/mermaid/src/docs/config/usage.md +++ b/packages/mermaid/src/docs/config/usage.md @@ -437,3 +437,8 @@ mermaid_config.startOnLoad = true; ```warning This way of setting the configuration is deprecated. Instead the preferred way is to use the initialize method. This functionality is only kept for backwards compatibility. ``` + + diff --git a/packages/mermaid/src/docs/ecosystem/integrations-community.md b/packages/mermaid/src/docs/ecosystem/integrations-community.md index 20adafa115..93a3a9df49 100644 --- a/packages/mermaid/src/docs/ecosystem/integrations-community.md +++ b/packages/mermaid/src/docs/ecosystem/integrations-community.md @@ -90,6 +90,8 @@ Blogging frameworks and platforms Content Management Systems/Enterprise Content Management +- [ApostropheCMS](https://apostrophecms.com/) + - [Extension for Mermaid.js](https://github.com/BoDonkey/mermaid-extension) - [Grav CMS](https://getgrav.org/) - [Mermaid Diagrams Plugin](https://github.com/DanielFlaum/grav-plugin-mermaid-diagrams) - [GitLab Markdown Adapter](https://github.com/Goutte/grav-plugin-gitlab-markdown-adapter) diff --git a/packages/mermaid/src/docs/ecosystem/tutorials.md b/packages/mermaid/src/docs/ecosystem/tutorials.md index ed0143f05e..d5bf9330db 100644 --- a/packages/mermaid/src/docs/ecosystem/tutorials.md +++ b/packages/mermaid/src/docs/ecosystem/tutorials.md @@ -74,3 +74,5 @@ graph LR; **Output** ![Example graph of the Python integration](img/python-mermaid-integration.png) + + diff --git a/packages/mermaid/src/docs/intro/examples.md b/packages/mermaid/src/docs/intro/examples.md index 978edb2b7a..570dc3861a 100644 --- a/packages/mermaid/src/docs/intro/examples.md +++ b/packages/mermaid/src/docs/intro/examples.md @@ -17,7 +17,7 @@ sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? - loop Healthcheck + loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts
prevail! diff --git a/packages/mermaid/src/docs/package.json b/packages/mermaid/src/docs/package.json index 618e52ec4f..4719f53c29 100644 --- a/packages/mermaid/src/docs/package.json +++ b/packages/mermaid/src/docs/package.json @@ -30,9 +30,9 @@ "pathe": "^1.1.0", "unocss": "^0.58.0", "unplugin-vue-components": "^0.26.0", - "vite": "^4.4.12", - "vite-plugin-pwa": "^0.17.5", - "vitepress": "1.0.0-rc.40", + "vite": "^4.5.2", + "vite-plugin-pwa": "^0.18.0", + "vitepress": "1.0.0-rc.42", "workbox-window": "^7.0.0" } } diff --git a/packages/mermaid/src/docs/syntax/block.md b/packages/mermaid/src/docs/syntax/block.md index 777f32a3fb..7c5907dc7e 100644 --- a/packages/mermaid/src/docs/syntax/block.md +++ b/packages/mermaid/src/docs/syntax/block.md @@ -291,7 +291,7 @@ block-beta ida space:3 idb idc ``` -Note that you can set how many columns the spece block occupied using the number notaion `space:num` where num is a number indicating the num columns width. You can alsio use `space` which defaults to one column. +Note that you can set how many columns the space block occupied using the number notation `space:num` where num is a number indicating the num columns width. You can also use `space` which defaults to one column. The variety of shapes and special blocks in Mermaid enhances the expressive power of block diagrams, allowing for more accurate and context-specific representations. These options give users the flexibility to create diagrams that are both informative and visually appealing. In the next sections, we will explore the ways to connect these blocks and customize their appearance. @@ -445,7 +445,7 @@ block-beta ``` **Correction**: -Ensure that links between blocks are correctly specified with arrows (--> or ---) to define the direction and type of connection. Also rememeber that one of the fundaments for block diagram is to give the author full control of where the boxes are positioned so in the example you need to add a space between the boxes: +Ensure that links between blocks are correctly specified with arrows (--> or ---) to define the direction and type of connection. Also remember that one of the fundaments for block diagram is to give the author full control of where the boxes are positioned so in the example you need to add a space between the boxes: ```mermaid-example block-beta diff --git a/packages/mermaid/src/docs/syntax/c4.md b/packages/mermaid/src/docs/syntax/c4.md index b6ee5fb795..81120d3c06 100644 --- a/packages/mermaid/src/docs/syntax/c4.md +++ b/packages/mermaid/src/docs/syntax/c4.md @@ -135,7 +135,7 @@ The following unfinished features are not supported in the short term. - [x] Rel_L, Rel_Left - [x] Rel_R, Rel_Right - [x] Rel_Back - - [x] RelIndex \* Compatible with C4-Plantuml syntax, but ignores the index parameter. The sequence number is determined by the order in which the rel statements are written. + - [x] RelIndex \* Compatible with C4-PlantUML syntax, but ignores the index parameter. The sequence number is determined by the order in which the rel statements are written. - [ ] Custom tags/stereotypes support and skin param updates - [ ] AddElementTag(tagStereo, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new element tag. The styles of the tagged elements are updated and the tag is displayed in the calculated legend. @@ -218,7 +218,7 @@ UpdateRelStyle(customerA, bankA, $offsetY="60") Person(customer, Customer, "A customer of the bank, with personal bank accounts", $tags="v1.0") Container_Boundary(c1, "Internet Banking") { - Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to cutomers via their web browser") + Container(spa, "Single-Page App", "JavaScript, Angular", "Provides all the Internet banking functionality to customers via their web browser") Container_Ext(mobile_app, "Mobile App", "C#, Xamarin", "Provides a limited subset of the Internet banking functionality to customers via their mobile device") Container(web_app, "Web Application", "Java, Spring MVC", "Delivers the static content and the Internet banking SPA") ContainerDb(database, "Database", "SQL Database", "Stores user registration information, hashed auth credentials, access logs, etc.") @@ -367,3 +367,5 @@ UpdateRelStyle(customerA, bankA, $offsetY="60") UpdateRelStyle(db, db2, $offsetY="-10") ``` + + diff --git a/packages/mermaid/src/docs/syntax/classDiagram.md b/packages/mermaid/src/docs/syntax/classDiagram.md index bb7b31678d..029d11b540 100644 --- a/packages/mermaid/src/docs/syntax/classDiagram.md +++ b/packages/mermaid/src/docs/syntax/classDiagram.md @@ -143,7 +143,7 @@ class BankAccount{ #### Generic Types -Generics can be representated as part of a class definition, and for class members/return types. In order to denote an item as generic, you enclose that type within `~` (**tilde**). **Nested** type declarations such as `List>` are supported, though generics that include a comma are currently not supported. (such as `List>`) +Generics can be represented as part of a class definition, and for class members/return types. In order to denote an item as generic, you enclose that type within `~` (**tilde**). **Nested** type declarations such as `List>` are supported, though generics that include a comma are currently not supported. (such as `List>`) > _note_ when a generic is used within a class definition, the generic type is NOT considered part of the class name. i.e.: for any syntax which required you to reference the class name, you need to drop the type part of the definition. This also means that mermaid does not currently support having two classes with the same name, but different generic types. diff --git a/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md b/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md index 1767e92d7c..763b1aef31 100644 --- a/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md +++ b/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md @@ -217,3 +217,5 @@ The following CSS class selectors are available for richer styling: | `.er.relationshipLabel` | The label for a relationship | | `.er.relationshipLabelBox` | The box surrounding a relationship label | | `.er.relationshipLine` | The line representing a relationship between entities | + + diff --git a/packages/mermaid/src/docs/syntax/examples.md b/packages/mermaid/src/docs/syntax/examples.md index d5f98093b7..64e85815f3 100644 --- a/packages/mermaid/src/docs/syntax/examples.md +++ b/packages/mermaid/src/docs/syntax/examples.md @@ -96,7 +96,7 @@ sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? - loop Healthcheck + loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts
prevail... @@ -156,3 +156,5 @@ gitGraph: branch b2 commit ``` + + diff --git a/packages/mermaid/src/docs/syntax/flowchart.md b/packages/mermaid/src/docs/syntax/flowchart.md index 540f820f77..a097e9739a 100644 --- a/packages/mermaid/src/docs/syntax/flowchart.md +++ b/packages/mermaid/src/docs/syntax/flowchart.md @@ -836,3 +836,5 @@ mermaid.flowchartConfig = { width: 100% } ``` + + diff --git a/packages/mermaid/src/docs/syntax/gantt.md b/packages/mermaid/src/docs/syntax/gantt.md index fb0546240b..15cdc6a09c 100644 --- a/packages/mermaid/src/docs/syntax/gantt.md +++ b/packages/mermaid/src/docs/syntax/gantt.md @@ -221,12 +221,12 @@ gantt ``` ```warning -`millisecond` and `second` support was added in vMERMAID_RELEASE_VERSION +`millisecond` and `second` support was added in v10.3.0 ``` ## Output in compact mode -The compact mode allows you to display multiple tasks in the same row. Compact mode can be enabled for a gantt chart by setting the display mode of the graph via preceeding YAML settings. +The compact mode allows you to display multiple tasks in the same row. Compact mode can be enabled for a gantt chart by setting the display mode of the graph via preceding YAML settings. ```mermaid --- diff --git a/packages/mermaid/src/docs/syntax/gitgraph.md b/packages/mermaid/src/docs/syntax/gitgraph.md index 3f7e42d436..b09e1f1ab2 100644 --- a/packages/mermaid/src/docs/syntax/gitgraph.md +++ b/packages/mermaid/src/docs/syntax/gitgraph.md @@ -959,7 +959,7 @@ See how the commit label color and background color are changed to the values sp ### Customizing Commit Label Font Size -You can customize commit using the `commitLabelFontSize` theme variables for changing in the font soze of the commit label . +You can customize commit using the `commitLabelFontSize` theme variables for changing in the font size of the commit label . Example: Now let's override the default values for the `commitLabelFontSize` variable: @@ -989,7 +989,7 @@ See how the commit label font size changed. ### Customizing Tag Label Font Size -You can customize commit using the `tagLabelFontSize` theme variables for changing in the font soze of the tag label . +You can customize commit using the `tagLabelFontSize` theme variables for changing in the font size of the tag label . Example: Now let's override the default values for the `tagLabelFontSize` variable: diff --git a/packages/mermaid/src/docs/syntax/mindmap.md b/packages/mermaid/src/docs/syntax/mindmap.md index 18a3f17cc2..07face7f3e 100644 --- a/packages/mermaid/src/docs/syntax/mindmap.md +++ b/packages/mermaid/src/docs/syntax/mindmap.md @@ -204,3 +204,8 @@ From version 9.4.0 you can simplify this code to: ``` You can also refer the implementation in the live editor [here](https://github.com/mermaid-js/mermaid-live-editor/blob/develop/src/lib/util/mermaid.ts) to see how the async loading is done. + + diff --git a/packages/mermaid/src/docs/syntax/requirementDiagram.md b/packages/mermaid/src/docs/syntax/requirementDiagram.md index 7c221312b7..be46b73cc4 100644 --- a/packages/mermaid/src/docs/syntax/requirementDiagram.md +++ b/packages/mermaid/src/docs/syntax/requirementDiagram.md @@ -156,3 +156,5 @@ This example uses all features of the diagram. test_entity3 - verifies -> test_req5 test_req <- copies - test_entity2 ``` + + diff --git a/packages/mermaid/src/docs/syntax/sankey.md b/packages/mermaid/src/docs/syntax/sankey.md index c942944d71..6b7c359e35 100644 --- a/packages/mermaid/src/docs/syntax/sankey.md +++ b/packages/mermaid/src/docs/syntax/sankey.md @@ -185,3 +185,5 @@ Graph layout can be changed by setting `nodeAlignment` to: - `center` - `left` - `right` + + diff --git a/packages/mermaid/src/docs/syntax/sequenceDiagram.md b/packages/mermaid/src/docs/syntax/sequenceDiagram.md index 091e8b7830..fbe27ac802 100644 --- a/packages/mermaid/src/docs/syntax/sequenceDiagram.md +++ b/packages/mermaid/src/docs/syntax/sequenceDiagram.md @@ -129,8 +129,8 @@ end end A->>J: Hello John, how are you? J->>A: Great! - A->>B: Hello Bob, how is Charly? - B->>C: Hello Charly, how are you? + A->>B: Hello Bob, how is Charley? + B->>C: Hello Charley, how are you? ``` ## Messages @@ -457,7 +457,7 @@ It can also be turned on via the diagram code as in the diagram: sequenceDiagram autonumber Alice->>John: Hello John, how are you? - loop Healthcheck + loop HealthCheck John->>John: Fight against hypochondria end Note right of John: Rational thoughts! diff --git a/packages/mermaid/src/docs/syntax/stateDiagram.md b/packages/mermaid/src/docs/syntax/stateDiagram.md index f35796b132..d2b7282e4a 100644 --- a/packages/mermaid/src/docs/syntax/stateDiagram.md +++ b/packages/mermaid/src/docs/syntax/stateDiagram.md @@ -396,7 +396,7 @@ Spaces can be added to a state by first defining the state with an id and then r In the following example there is a state with the id **yswsii** and description **Your state with spaces in it**. After it has been defined, **yswsii** is used in the diagram in the first transition (`[*] --> yswsii`) -and also in the transition to **YetAnotherState** (`yswsii --> YetAnotherState`). +and also in the transition to **YetAnotherState** (`yswsii --> YetAnotherState`). (**yswsii** has been styled so that it is different from the other states.) ```mermaid-example @@ -410,3 +410,5 @@ stateDiagram yswsii --> YetAnotherState YetAnotherState --> [*] ``` + + diff --git a/packages/mermaid/src/docs/syntax/timeline.md b/packages/mermaid/src/docs/syntax/timeline.md index 0d8f2ed912..165fd62607 100644 --- a/packages/mermaid/src/docs/syntax/timeline.md +++ b/packages/mermaid/src/docs/syntax/timeline.md @@ -2,9 +2,9 @@ > Timeline: This is an experimental diagram for now. The syntax and properties can change in future releases. The syntax is stable except for the icon integration which is the experimental part. -"A timeline is a type of diagram used to illustrate a chronology of events, dates, or periods of time. It is usually presented graphically to indicate the passing of time, and it is usually organized chronologically. A basic timeline presents a list of events in chronological order, usually using dates as markers. A timeline can also be used to show the relationship between events, such as the relationship between the events of a person's life." Wikipedia +"A timeline is a type of diagram used to illustrate a chronology of events, dates, or periods of time. It is usually presented graphically to indicate the passing of time, and it is usually organized chronologically. A basic timeline presents a list of events in chronological order, usually using dates as markers. A timeline can also be used to show the relationship between events, such as the relationship between the events of a person's life" [(Wikipedia)](https://en.wikipedia.org/wiki/Timeline). -### An example of a timeline. +### An example of a timeline ```mermaid timeline @@ -42,7 +42,7 @@ or : {event} ``` -NOTE: Both time period and event are simple text, and not limited to numbers. +**NOTE**: Both time period and event are simple text, and not limited to numbers. Let us look at the syntax for the example above. @@ -79,7 +79,7 @@ timeline 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 + Industry 5.0 : Artificial intelligence, Big data, 3D printing ``` As you can see, the time periods are placed in the sections, and the sections are placed in the order they are defined. @@ -127,7 +127,7 @@ As explained earlier, each section has a color scheme, and each time period and However, if there is no section defined, then we have two possibilities: -1. Style time periods individually, i.e. each time period(and its coressponding events) will have its own color scheme. This is the DEFAULT behavior. +1. Style time periods individually, i.e. each time period(and its corresponding events) will have its own color scheme. This is the DEFAULT behavior. ```mermaid-example timeline @@ -139,7 +139,7 @@ However, if there is no section defined, then we have two possibilities: ``` -Note that there are no sections defined, and each time period and its corresponding events will have its own color scheme. +**NOTE**: that there are no sections defined, and each time period and its corresponding events will have its own color scheme. 2. Disable the multiColor option using the `disableMultiColor` option. This will make all time periods and events follow the same color scheme. @@ -177,7 +177,7 @@ In case you have more than 12 sections, the color scheme will start to repeat. If you also want to change the foreground color of a section, you can do so use theme variables corresponding `cScaleLabel0` to `cScaleLabel11` variables. -NOTE: Default values for these theme variables are picked from the selected theme. If you want to override the default values, you can use the `initialize` call to add your custom theme variable values. +**NOTE**: Default values for these theme variables are picked from the selected theme. If you want to override the default values, you can use the `initialize` call to add your custom theme variable values. Example: @@ -293,7 +293,7 @@ Let's put them to use, and see how our sample diagram looks in different themes: 2010 : Pinterest ``` -## Integrating with your library/website. +## Integrating with your library/website Timeline uses experimental lazy loading & async rendering features which could change in the future.The lazy loading is important in order to be able to add additional diagrams going forward. diff --git a/packages/mermaid/src/docs/syntax/xyChart.md b/packages/mermaid/src/docs/syntax/xyChart.md index 8edfecbea3..e6e969462e 100644 --- a/packages/mermaid/src/docs/syntax/xyChart.md +++ b/packages/mermaid/src/docs/syntax/xyChart.md @@ -134,11 +134,11 @@ Themes for xychart resides inside xychart attribute so to set the variables use | ---------------- | --------------------------------------------------------- | | backgroundColor | Background color of the whole chart | | titleColor | Color of the Title text | -| xAxisLableColor | Color of the x-axis labels | +| xAxisLabelColor | Color of the x-axis labels | | xAxisTitleColor | Color of the x-axis title | | xAxisTickColor | Color of the x-axis tick | | xAxisLineColor | Color of the x-axis line | -| yAxisLableColor | Color of the y-axis labels | +| yAxisLabelColor | Color of the y-axis labels | | yAxisTitleColor | Color of the y-axis title | | yAxisTickColor | Color of the y-axis tick | | yAxisLineColor | Color of the y-axis line | diff --git a/packages/mermaid/src/mermaidAPI.spec.ts b/packages/mermaid/src/mermaidAPI.spec.ts index b7ff578fbe..574c1d226f 100644 --- a/packages/mermaid/src/mermaidAPI.spec.ts +++ b/packages/mermaid/src/mermaidAPI.spec.ts @@ -163,6 +163,7 @@ describe('mermaidAPI', () => { }); it('decodesEntities', () => { + // cspell:ignore brrrr const result = cleanUpSvgCode('¶ß brrrr', true, true); expect(result).toEqual('; brrrr'); }); @@ -232,6 +233,8 @@ describe('mermaidAPI', () => { // @ts-ignore @todo TODO why is this getting a type error? const svg_attr_spy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); + // cspell:ignore dthe + it('appends a div node', () => { appendDivSvgG(fauxParentNode, 'theId', 'dtheId'); expect(parent_append_spy).toHaveBeenCalledWith('div'); @@ -731,7 +734,7 @@ describe('mermaidAPI', () => { const diagramText = `${diagramType}\n accTitle: ${a11yTitle}\n accDescr: ${a11yDescr}\n`; const expectedDiagramType = testedDiagram.expectedType; - it('should set aria-roledscription to the diagram type AND should call addSVGa11yTitleDescription', async () => { + it('should set aria-roledescription to the diagram type AND should call addSVGa11yTitleDescription', async () => { const a11yDiagramInfo_spy = vi.spyOn(accessibility, 'setA11yDiagramInfo'); const a11yTitleDesc_spy = vi.spyOn(accessibility, 'addSVGa11yTitleDescription'); await mermaidAPI.render(id, diagramText); diff --git a/packages/mermaid/src/rendering-util/createText.ts b/packages/mermaid/src/rendering-util/createText.ts index 2b48cf5f3a..20efc2f744 100644 --- a/packages/mermaid/src/rendering-util/createText.ts +++ b/packages/mermaid/src/rendering-util/createText.ts @@ -188,11 +188,11 @@ export const createText = ( // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that? // text = text.replace(/\\n|\n/g, '
'); const htmlText = markdownToHTML(text); - // log.info('markdo wnToHTML' + text, markdownToHTML(text)); + // log.info('markdownToHTML' + text, markdownToHTML(text)); const node = { isNode, label: decodeEntities(htmlText).replace( - /fa[blrs]?:fa-[\w-]+/g, + /fa[blrs]?:fa-[\w-]+/g, // cspell: disable-line (s) => `` ), labelStyle: style.replace('fill:', 'color:'), diff --git a/packages/mermaid/src/rendering-util/splitText.spec.ts b/packages/mermaid/src/rendering-util/splitText.spec.ts index bc7df08dd1..16e7525eef 100644 --- a/packages/mermaid/src/rendering-util/splitText.spec.ts +++ b/packages/mermaid/src/rendering-util/splitText.spec.ts @@ -145,3 +145,5 @@ const createCheckFn = (width: number): CheckFitFunction => { return characters.length <= width; }; }; + +// cspell:ignore worl diff --git a/packages/mermaid/src/schemas/config.schema.yaml b/packages/mermaid/src/schemas/config.schema.yaml index 415af63f69..3e7fd58ec5 100644 --- a/packages/mermaid/src/schemas/config.schema.yaml +++ b/packages/mermaid/src/schemas/config.schema.yaml @@ -168,6 +168,14 @@ properties: items: type: string uniqueItems: false # Should be enabled, but it may be a breaking change from the old config + legacyMathML: + description: | + This option specifies if Mermaid can expect the dependent to include KaTeX stylesheets for browsers + without their own MathML implementation. If this option is disabled and MathML is not supported, the math + equations are replaced with a warning. If this option is enabled and MathML is not supported, Mermaid will + fall back to legacy rendering for KaTeX. + type: boolean + default: false deterministicIds: description: | This option controls if the generated ids of nodes in the SVG are diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c48a18b4c5..65935c2bb3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,8 +23,8 @@ importers: specifier: ^17.6.1 version: 17.7.0 '@cspell/eslint-plugin': - specifier: ^6.31.1 - version: 6.31.3 + specifier: ^8.3.2 + version: 8.3.2 '@cypress/code-coverage': specifier: ^3.12.18 version: 3.12.18(@babel/core@7.23.5)(@babel/preset-env@7.22.10)(babel-loader@9.1.3)(cypress@12.17.4)(webpack@5.88.2) @@ -85,6 +85,9 @@ importers: cors: specifier: ^2.8.5 version: 2.8.5 + cspell: + specifier: ^8.3.2 + version: 8.3.2 cypress: specifier: ^12.17.4 version: 12.17.4 @@ -92,8 +95,8 @@ importers: specifier: ^4.0.1 version: 4.0.1(cypress@12.17.4)(jest@29.6.2) esbuild: - specifier: ^0.19.0 - version: 0.19.0 + specifier: ^0.20.0 + version: 0.20.0 eslint: specifier: ^8.47.0 version: 8.47.0 @@ -185,11 +188,11 @@ importers: specifier: ^5.1.3 version: 5.1.6 vite: - specifier: ^4.4.12 - version: 4.4.12(@types/node@20.11.10) + specifier: ^4.5.2 + version: 4.5.2(@types/node@20.11.10) vite-plugin-istanbul: specifier: ^4.1.0 - version: 4.1.0(vite@4.4.12) + version: 4.1.0(vite@4.5.2) vitest: specifier: ^0.34.0 version: 0.34.0(@vitest/ui@0.34.0)(jsdom@22.0.0) @@ -229,6 +232,9 @@ importers: elkjs: specifier: ^0.9.0 version: 0.9.1 + katex: + specifier: ^0.16.9 + version: 0.16.9 khroma: specifier: ^2.0.0 version: 2.0.0 @@ -252,7 +258,7 @@ importers: version: 9.0.0 web-worker: specifier: ^1.2.0 - version: 1.2.0 + version: 1.3.0 devDependencies: '@adobe/jsonschema2md': specifier: ^7.1.4 @@ -278,6 +284,9 @@ importers: '@types/jsdom': specifier: ^21.1.1 version: 21.1.1 + '@types/katex': + specifier: ^0.16.7 + version: 0.16.7 '@types/lodash-es': specifier: ^4.17.7 version: 4.17.7 @@ -311,9 +320,6 @@ importers: cpy-cli: specifier: ^4.2.0 version: 4.2.0 - cspell: - specifier: ^6.31.1 - version: 6.31.1 csstree-validator: specifier: ^3.0.0 version: 3.0.0 @@ -406,8 +412,8 @@ importers: packages/mermaid-zenuml: dependencies: '@zenuml/core': - specifier: ^3.0.6 - version: 3.0.6(ts-node@10.9.1) + specifier: ^3.17.2 + version: 3.17.2(ts-node@10.9.1)(typescript@5.1.6) devDependencies: mermaid: specifier: workspace:^ @@ -436,10 +442,10 @@ importers: version: 0.58.0 '@vite-pwa/vitepress': specifier: ^0.3.0 - version: 0.3.0(vite-plugin-pwa@0.17.5) + version: 0.3.0(vite-plugin-pwa@0.18.1) '@vitejs/plugin-vue': specifier: ^4.2.1 - version: 4.2.1(vite@4.5.0)(vue@3.3.4) + version: 4.2.1(vite@4.5.2)(vue@3.3.4) fast-glob: specifier: ^3.2.12 version: 3.2.12 @@ -451,19 +457,19 @@ importers: version: 1.1.0 unocss: specifier: ^0.58.0 - version: 0.58.0(postcss@8.4.33)(rollup@2.79.1)(vite@4.5.0) + version: 0.58.0(postcss@8.4.33)(rollup@2.79.1)(vite@4.5.2) unplugin-vue-components: specifier: ^0.26.0 version: 0.26.0(rollup@2.79.1)(vue@3.3.4) vite: - specifier: ^4.4.12 - version: 4.5.0(@types/node@20.11.10) + specifier: ^4.5.2 + version: 4.5.2(@types/node@20.11.10) vite-plugin-pwa: - specifier: ^0.17.5 - version: 0.17.5(vite@4.5.0)(workbox-build@7.0.0)(workbox-window@7.0.0) + specifier: ^0.18.0 + version: 0.18.1(vite@4.5.2)(workbox-build@7.0.0)(workbox-window@7.0.0) vitepress: - specifier: 1.0.0-rc.40 - version: 1.0.0-rc.40(@algolia/client-search@4.19.1)(@types/node@20.11.10)(postcss@8.4.33)(search-insights@2.7.0)(typescript@5.1.6) + specifier: 1.0.0-rc.42 + version: 1.0.0-rc.42(@algolia/client-search@4.19.1)(@types/node@20.11.10)(postcss@8.4.33)(search-insights@2.7.0)(typescript@5.1.6) workbox-window: specifier: ^7.0.0 version: 7.0.0 @@ -491,10 +497,10 @@ importers: version: 0.58.0 '@vite-pwa/vitepress': specifier: ^0.3.0 - version: 0.3.0(vite-plugin-pwa@0.17.0) + version: 0.3.0(vite-plugin-pwa@0.17.5) '@vitejs/plugin-vue': specifier: ^4.2.1 - version: 4.2.3(vite@4.5.0)(vue@3.4.15) + version: 4.2.1(vite@4.5.2)(vue@3.4.15) fast-glob: specifier: ^3.2.12 version: 3.3.2 @@ -506,19 +512,19 @@ importers: version: 1.1.1 unocss: specifier: ^0.58.0 - version: 0.58.0(postcss@8.4.33)(rollup@2.79.1)(vite@4.5.0) + version: 0.58.0(postcss@8.4.33)(rollup@2.79.1)(vite@4.5.2) unplugin-vue-components: specifier: ^0.26.0 version: 0.26.0(rollup@2.79.1)(vue@3.4.15) vite: - specifier: ^4.4.12 - version: 4.5.0(@types/node@20.11.10) + specifier: ^4.3.9 + version: 4.5.2(@types/node@20.11.10) vite-plugin-pwa: specifier: ^0.17.0 - version: 0.17.0(vite@4.5.0)(workbox-build@7.0.0)(workbox-window@7.0.0) + version: 0.17.5(vite@4.5.2)(workbox-build@7.0.0)(workbox-window@7.0.0) vitepress: - specifier: 1.0.0-rc.39 - version: 1.0.0-rc.39(@algolia/client-search@4.19.1)(@types/node@20.11.10)(postcss@8.4.33)(search-insights@2.7.0)(typescript@5.1.6) + specifier: 1.0.0-rc.31 + version: 1.0.0-rc.31(@algolia/client-search@4.19.1)(@types/node@20.11.10)(postcss@8.4.33)(search-insights@2.7.0)(typescript@5.1.6) workbox-window: specifier: ^7.0.0 version: 7.0.0 @@ -534,7 +540,7 @@ importers: devDependencies: webpack: specifier: ^5.88.2 - version: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + version: 5.88.2(esbuild@0.20.0)(webpack-cli@4.10.0) webpack-cli: specifier: ^4.10.0 version: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.88.2) @@ -1124,7 +1130,7 @@ packages: '@babel/helper-compilation-targets': 7.22.10 '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.10) '@babel/helpers': 7.22.10 - '@babel/parser': 7.23.5 + '@babel/parser': 7.23.6 '@babel/template': 7.22.5 '@babel/traverse': 7.23.2 '@babel/types': 7.23.5 @@ -1397,10 +1403,6 @@ packages: '@babel/types': 7.23.5 dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} @@ -1477,15 +1479,9 @@ packages: resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.23.0 - - /@babel/parser@7.23.5: - resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} - engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.23.5 + dev: true /@babel/parser@7.23.6: resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} @@ -2459,14 +2455,6 @@ packages: - supports-color dev: true - /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - /@babel/types@7.23.5: resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} engines: {node: '>=6.9.0'} @@ -2667,178 +2655,127 @@ packages: chalk: 4.1.2 dev: true - /@cspell/cspell-bundled-dicts@6.31.1: - resolution: {integrity: sha512-rsIev+dk1Vd8H1OKZhNhXycIVsMfeWJaeW3QUi1l4oIoGwQfJVbs1ZPZPHE5cglzyHOW1jQNStXf34UKaC6siA==} - engines: {node: '>=14'} + /@cspell/cspell-bundled-dicts@8.3.2: + resolution: {integrity: sha512-3ubOgz1/MDixJbq//0rQ2omB3cSdhVJDviERZeiREGz4HOq84aaK1Fqbw5SjNZHvhpoq+AYXm6kJbIAH8YhKgg==} + engines: {node: '>=18'} dependencies: '@cspell/dict-ada': 4.0.2 - '@cspell/dict-aws': 3.0.0 - '@cspell/dict-bash': 4.1.1 - '@cspell/dict-companies': 3.0.19 - '@cspell/dict-cpp': 5.0.4 - '@cspell/dict-cryptocurrencies': 3.0.1 + '@cspell/dict-aws': 4.0.1 + '@cspell/dict-bash': 4.1.3 + '@cspell/dict-companies': 3.0.31 + '@cspell/dict-cpp': 5.1.3 + '@cspell/dict-cryptocurrencies': 5.0.0 '@cspell/dict-csharp': 4.0.2 - '@cspell/dict-css': 4.0.6 + '@cspell/dict-css': 4.0.12 '@cspell/dict-dart': 2.0.3 '@cspell/dict-django': 4.1.0 '@cspell/dict-docker': 1.1.7 '@cspell/dict-dotnet': 5.0.0 '@cspell/dict-elixir': 4.0.3 - '@cspell/dict-en-common-misspellings': 1.0.2 + '@cspell/dict-en-common-misspellings': 2.0.0 '@cspell/dict-en-gb': 1.1.33 - '@cspell/dict-en_us': 4.3.6 - '@cspell/dict-filetypes': 3.0.1 - '@cspell/dict-fonts': 3.0.2 + '@cspell/dict-en_us': 4.3.16 + '@cspell/dict-filetypes': 3.0.3 + '@cspell/dict-fonts': 4.0.0 + '@cspell/dict-fsharp': 1.0.1 '@cspell/dict-fullstack': 3.1.5 '@cspell/dict-gaming-terms': 1.0.4 - '@cspell/dict-git': 2.0.0 - '@cspell/dict-golang': 6.0.2 + '@cspell/dict-git': 3.0.0 + '@cspell/dict-golang': 6.0.5 '@cspell/dict-haskell': 4.0.1 - '@cspell/dict-html': 4.0.3 + '@cspell/dict-html': 4.0.5 '@cspell/dict-html-symbol-entities': 4.0.0 - '@cspell/dict-java': 5.0.5 - '@cspell/dict-k8s': 1.0.1 + '@cspell/dict-java': 5.0.6 + '@cspell/dict-k8s': 1.0.2 '@cspell/dict-latex': 4.0.0 - '@cspell/dict-lorem-ipsum': 3.0.0 - '@cspell/dict-lua': 4.0.1 - '@cspell/dict-node': 4.0.2 - '@cspell/dict-npm': 5.0.8 - '@cspell/dict-php': 4.0.1 - '@cspell/dict-powershell': 5.0.2 - '@cspell/dict-public-licenses': 2.0.3 - '@cspell/dict-python': 4.1.5 + '@cspell/dict-lorem-ipsum': 4.0.0 + '@cspell/dict-lua': 4.0.3 + '@cspell/dict-makefile': 1.0.0 + '@cspell/dict-node': 4.0.3 + '@cspell/dict-npm': 5.0.15 + '@cspell/dict-php': 4.0.6 + '@cspell/dict-powershell': 5.0.3 + '@cspell/dict-public-licenses': 2.0.5 + '@cspell/dict-python': 4.1.11 '@cspell/dict-r': 2.0.1 - '@cspell/dict-ruby': 5.0.0 + '@cspell/dict-ruby': 5.0.2 '@cspell/dict-rust': 4.0.1 '@cspell/dict-scala': 5.0.0 - '@cspell/dict-software-terms': 3.2.1 - '@cspell/dict-sql': 2.1.1 + '@cspell/dict-software-terms': 3.3.18 + '@cspell/dict-sql': 2.1.3 '@cspell/dict-svelte': 1.0.2 '@cspell/dict-swift': 2.0.1 - '@cspell/dict-typescript': 3.1.1 + '@cspell/dict-typescript': 3.1.2 '@cspell/dict-vue': 3.0.0 dev: true - /@cspell/cspell-bundled-dicts@6.31.3: - resolution: {integrity: sha512-KXy3qKWYzXOGYwqOGMCXHem3fV39iEmoKLiNhoWWry/SFdvAafmeY+LIDcQTXAcOQLkMDCwP2/rY/NadcWnrjg==} - engines: {node: '>=14'} + /@cspell/cspell-json-reporter@8.3.2: + resolution: {integrity: sha512-gHSz4jXMJPcxx+lOGfXhHuoyenAWQ8PVA/atHFrWYKo1LzKTbpkEkrsDnlX8QNJubc3EMH63Uy+lOIaFDVyHiQ==} + engines: {node: '>=18'} dependencies: - '@cspell/dict-ada': 4.0.2 - '@cspell/dict-aws': 3.0.0 - '@cspell/dict-bash': 4.1.1 - '@cspell/dict-companies': 3.0.19 - '@cspell/dict-cpp': 5.0.4 - '@cspell/dict-cryptocurrencies': 3.0.1 - '@cspell/dict-csharp': 4.0.2 - '@cspell/dict-css': 4.0.6 - '@cspell/dict-dart': 2.0.3 - '@cspell/dict-django': 4.1.0 - '@cspell/dict-docker': 1.1.7 - '@cspell/dict-dotnet': 5.0.0 - '@cspell/dict-elixir': 4.0.3 - '@cspell/dict-en-common-misspellings': 1.0.2 - '@cspell/dict-en-gb': 1.1.33 - '@cspell/dict-en_us': 4.3.6 - '@cspell/dict-filetypes': 3.0.1 - '@cspell/dict-fonts': 3.0.2 - '@cspell/dict-fullstack': 3.1.5 - '@cspell/dict-gaming-terms': 1.0.4 - '@cspell/dict-git': 2.0.0 - '@cspell/dict-golang': 6.0.2 - '@cspell/dict-haskell': 4.0.1 - '@cspell/dict-html': 4.0.3 - '@cspell/dict-html-symbol-entities': 4.0.0 - '@cspell/dict-java': 5.0.5 - '@cspell/dict-k8s': 1.0.1 - '@cspell/dict-latex': 4.0.0 - '@cspell/dict-lorem-ipsum': 3.0.0 - '@cspell/dict-lua': 4.0.1 - '@cspell/dict-node': 4.0.2 - '@cspell/dict-npm': 5.0.8 - '@cspell/dict-php': 4.0.1 - '@cspell/dict-powershell': 5.0.2 - '@cspell/dict-public-licenses': 2.0.3 - '@cspell/dict-python': 4.1.5 - '@cspell/dict-r': 2.0.1 - '@cspell/dict-ruby': 5.0.0 - '@cspell/dict-rust': 4.0.1 - '@cspell/dict-scala': 5.0.0 - '@cspell/dict-software-terms': 3.2.1 - '@cspell/dict-sql': 2.1.1 - '@cspell/dict-svelte': 1.0.2 - '@cspell/dict-swift': 2.0.1 - '@cspell/dict-typescript': 3.1.1 - '@cspell/dict-vue': 3.0.0 + '@cspell/cspell-types': 8.3.2 dev: true - /@cspell/cspell-pipe@6.31.1: - resolution: {integrity: sha512-zk1olZi4dr6GLm5PAjvsiZ01HURNSruUYFl1qSicGnTwYN8GaN4RhAwannAytcJ7zJPIcyXlid0YsB58nJf3wQ==} - engines: {node: '>=14'} + /@cspell/cspell-pipe@8.3.2: + resolution: {integrity: sha512-GZmDwvQGOjQi3IjD4k9xXeVTDANczksOsgVKb3v2QZk9mR4Qj8c6Uarjd4AgSiIhu/wBliJfzr5rWFJu4X2VfQ==} + engines: {node: '>=18'} dev: true - /@cspell/cspell-pipe@6.31.3: - resolution: {integrity: sha512-Lv/y4Ya/TJyU1pf66yl1te7LneFZd3lZg1bN5oe1cPrKSmfWdiX48v7plTRecWd/OWyLGd0yN807v79A+/0W7A==} - engines: {node: '>=14'} + /@cspell/cspell-resolver@8.3.2: + resolution: {integrity: sha512-w2Tmb95bzdEz9L4W5qvsP5raZbyEzKL7N2ksU/+yh8NEJcTuExmAl/nMnb3aIk7m2b+kPHnMOcJuwfUMLmyv4A==} + engines: {node: '>=18'} + dependencies: + global-directory: 4.0.1 dev: true - /@cspell/cspell-service-bus@6.31.1: - resolution: {integrity: sha512-YyBicmJyZ1uwKVxujXw7sgs9x+Eps43OkWmCtDZmZlnq489HdTSuhF1kTbVi2yeFSeaXIS87+uHo12z97KkQpg==} - engines: {node: '>=14'} + /@cspell/cspell-service-bus@8.3.2: + resolution: {integrity: sha512-skTHNyVi74//W/O+f4IauDhm6twA9S2whkylonsIzPxEl4Pn3y2ZEMXNki/MWUwZfDIzKKSxlcREH61g7zCvhg==} + engines: {node: '>=18'} dev: true - /@cspell/cspell-service-bus@6.31.3: - resolution: {integrity: sha512-x5j8j3n39KN8EXOAlv75CpircdpF5WEMCC5pcO916o6GBmJBy8SrdzdsBGJhVcYGGilqy6pf8R9RCZ3yAmG8gQ==} - engines: {node: '>=14'} - dev: true - - /@cspell/cspell-types@6.31.1: - resolution: {integrity: sha512-1KeTQFiHMssW1eRoF2NZIEg4gPVIfXLsL2+VSD/AV6YN7lBcuf6gRRgV5KWYarhxtEfjxhDdDTmu26l/iJEUtw==} - engines: {node: '>=14'} - dev: true - - /@cspell/cspell-types@6.31.3: - resolution: {integrity: sha512-wZ+t+lUsQJB65M31btZM4fH3K1CkRgE8pSeTiCwxYcnCL19pi4TMcEEMKdO8yFZMdocW4B7VRwzxNoQMw2ewBg==} - engines: {node: '>=14'} + /@cspell/cspell-types@8.3.2: + resolution: {integrity: sha512-qS/gWd9ItOrN6ZX5pwC9lJjnBoyiAyhxYq0GUXuV892LQvwrBmECGk6KhsA1lPW7JJS7o57YTAS1jmXnmXMEpg==} + engines: {node: '>=18'} dev: true /@cspell/dict-ada@4.0.2: resolution: {integrity: sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA==} dev: true - /@cspell/dict-aws@3.0.0: - resolution: {integrity: sha512-O1W6nd5y3Z00AMXQMzfiYrIJ1sTd9fB1oLr+xf/UD7b3xeHeMeYE2OtcWbt9uyeHim4tk+vkSTcmYEBKJgS5bQ==} + /@cspell/dict-aws@4.0.1: + resolution: {integrity: sha512-NXO+kTPQGqaaJKa4kO92NAXoqS+i99dQzf3/L1BxxWVSBS3/k1f3uhmqIh7Crb/n22W793lOm0D9x952BFga3Q==} dev: true - /@cspell/dict-bash@4.1.1: - resolution: {integrity: sha512-8czAa/Mh96wu2xr0RXQEGMTBUGkTvYn/Pb0o+gqOO1YW+poXGQc3gx0YPqILDryP/KCERrNvkWUJz3iGbvwC2A==} + /@cspell/dict-bash@4.1.3: + resolution: {integrity: sha512-tOdI3QVJDbQSwPjUkOiQFhYcu2eedmX/PtEpVWg0aFps/r6AyjUQINtTgpqMYnYuq8O1QUIQqnpx21aovcgZCw==} dev: true - /@cspell/dict-companies@3.0.19: - resolution: {integrity: sha512-hO7rS4DhFA333qyvf89wIVoclCtXe/2sftY6aS0oMIH1bMZLjLx2B2sQJj6dCiu6gG/By1S9YZ0fXabiPk2Tkg==} + /@cspell/dict-companies@3.0.31: + resolution: {integrity: sha512-hKVpV/lcGKP4/DpEPS8P4osPvFH/YVLJaDn9cBIOH6/HSmL5LbFgJNKpMGaYRbhm2FEX56MKE3yn/MNeNYuesQ==} dev: true - /@cspell/dict-cpp@5.0.4: - resolution: {integrity: sha512-Vmz/CCb2d91ES5juaO8+CFWeTa2AFsbpR8bkCPJq+P8cRP16+37tY0zNXEBSK/1ur4MakaRf76jeQBijpZxw0Q==} + /@cspell/dict-cpp@5.1.3: + resolution: {integrity: sha512-sqnriXRAInZH9W75C+APBh6dtben9filPqVbIsiRMUXGg+s02ekz0z6LbS7kXeJ5mD2qXoMLBrv13qH2eIwutQ==} dev: true - /@cspell/dict-cryptocurrencies@3.0.1: - resolution: {integrity: sha512-Tdlr0Ahpp5yxtwM0ukC13V6+uYCI0p9fCRGMGZt36rWv8JQZHIuHfehNl7FB/Qc09NCF7p5ep0GXbL+sVTd/+w==} + /@cspell/dict-cryptocurrencies@5.0.0: + resolution: {integrity: sha512-Z4ARIw5+bvmShL+4ZrhDzGhnc9znaAGHOEMaB/GURdS/jdoreEDY34wdN0NtdLHDO5KO7GduZnZyqGdRoiSmYA==} dev: true /@cspell/dict-csharp@4.0.2: resolution: {integrity: sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g==} dev: true - /@cspell/dict-css@4.0.6: - resolution: {integrity: sha512-2Lo8W2ezHmGgY8cWFr4RUwnjbndna5mokpCK/DuxGILQnuajR0J31ANQOXj/8iZM2phFB93ZzMNk/0c04TDfSQ==} + /@cspell/dict-css@4.0.12: + resolution: {integrity: sha512-vGBgPM92MkHQF5/2jsWcnaahOZ+C6OE/fPvd5ScBP72oFY9tn5GLuomcyO0z8vWCr2e0nUSX1OGimPtcQAlvSw==} dev: true /@cspell/dict-dart@2.0.3: resolution: {integrity: sha512-cLkwo1KT5CJY5N5RJVHks2genFkNCl/WLfj+0fFjqNR+tk3tBI1LY7ldr9piCtSFSm4x9pO1x6IV3kRUY1lLiw==} dev: true - /@cspell/dict-data-science@1.0.10: - resolution: {integrity: sha512-7ZsRCnW0f4Bdo6Cqq8V4gHr8K58h+MP8majcDeMNhpMFUPiiSnvKsDuG9V5jciI/0t+lptPrZwGGIVEDF4Kqtg==} + /@cspell/dict-data-science@1.0.11: + resolution: {integrity: sha512-TaHAZRVe0Zlcc3C23StZqqbzC0NrodRwoSAc8dis+5qLeLLnOCtagYQeROQvDlcDg3X/VVEO9Whh4W/z4PAmYQ==} dev: true /@cspell/dict-django@4.1.0: @@ -2857,24 +2794,28 @@ packages: resolution: {integrity: sha512-g+uKLWvOp9IEZvrIvBPTr/oaO6619uH/wyqypqvwpmnmpjcfi8+/hqZH8YNKt15oviK8k4CkINIqNhyndG9d9Q==} dev: true - /@cspell/dict-en-common-misspellings@1.0.2: - resolution: {integrity: sha512-jg7ZQZpZH7+aAxNBlcAG4tGhYF6Ksy+QS5Df73Oo+XyckBjC9QS+PrRwLTeYoFIgXy5j3ICParK5r3MSSoL4gw==} + /@cspell/dict-en-common-misspellings@2.0.0: + resolution: {integrity: sha512-NOg8dlv37/YqLkCfBs5OXeJm/Wcfb/CzeOmOZJ2ZXRuxwsNuolb4TREUce0yAXRqMhawahY5TSDRJJBgKjBOdw==} dev: true /@cspell/dict-en-gb@1.1.33: resolution: {integrity: sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==} dev: true - /@cspell/dict-en_us@4.3.6: - resolution: {integrity: sha512-odhgsjNZI9BtEOJdvqfAuv/3yz5aB1ngfBNaph7WSnYVt//9e3fhrElZ6/pIIkoyuGgeQPwz1fXt+tMgcnLSEQ==} + /@cspell/dict-en_us@4.3.16: + resolution: {integrity: sha512-fyNuAvYpkllmsMpfAJaMip250LRAnEDp2EZbkjYwAJXXjtgQ4/1yh6sLityxPMDtJZN65Eko+8rJzGJHez4zbA==} + dev: true + + /@cspell/dict-filetypes@3.0.3: + resolution: {integrity: sha512-J9UP+qwwBLfOQ8Qg9tAsKtSY/WWmjj21uj6zXTI9hRLD1eG1uUOLcfVovAmtmVqUWziPSKMr87F6SXI3xmJXgw==} dev: true - /@cspell/dict-filetypes@3.0.1: - resolution: {integrity: sha512-8z8mY1IbrTyTRumx2vvD9yzRhNMk9SajM/GtI5hdMM2pPpNSp25bnuauzjRf300eqlqPY2MNb5MmhBFO014DJw==} + /@cspell/dict-fonts@4.0.0: + resolution: {integrity: sha512-t9V4GeN/m517UZn63kZPUYP3OQg5f0OBLSd3Md5CU3eH1IFogSvTzHHnz4Wqqbv8NNRiBZ3HfdY/pqREZ6br3Q==} dev: true - /@cspell/dict-fonts@3.0.2: - resolution: {integrity: sha512-Z5QdbgEI7DV+KPXrAeDA6dDm/vTzyaW53SGlKqz6PI5VhkOjgkBXv3YtZjnxMZ4dY2ZIqq+RUK6qa9Pi8rQdGQ==} + /@cspell/dict-fsharp@1.0.1: + resolution: {integrity: sha512-23xyPcD+j+NnqOjRHgW3IU7Li912SX9wmeefcY0QxukbAxJ/vAN4rBpjSwwYZeQPAn3fxdfdNZs03fg+UM+4yQ==} dev: true /@cspell/dict-fullstack@3.1.5: @@ -2885,12 +2826,12 @@ packages: resolution: {integrity: sha512-hbDduNXlk4AOY0wFxcDMWBPpm34rpqJBeqaySeoUH70eKxpxm+dvjpoRLJgyu0TmymEICCQSl6lAHTHSDiWKZg==} dev: true - /@cspell/dict-git@2.0.0: - resolution: {integrity: sha512-n1AxyX5Kgxij/sZFkxFJlzn3K9y/sCcgVPg/vz4WNJ4K9YeTsUmyGLA2OQI7d10GJeiuAo2AP1iZf2A8j9aj2w==} + /@cspell/dict-git@3.0.0: + resolution: {integrity: sha512-simGS/lIiXbEaqJu9E2VPoYW1OTC2xrwPPXNXFMa2uo/50av56qOuaxDrZ5eH1LidFXwoc8HROCHYeKoNrDLSw==} dev: true - /@cspell/dict-golang@6.0.2: - resolution: {integrity: sha512-5pyZn4AAiYukAW+gVMIMVmUSkIERFrDX2vtPDjg8PLQUhAHWiVeQSDjuOhq9/C5GCCEZU/zWSONkGiwLBBvV9A==} + /@cspell/dict-golang@6.0.5: + resolution: {integrity: sha512-w4mEqGz4/wV+BBljLxduFNkMrd3rstBNDXmoX5kD4UTzIb4Sy0QybWCtg2iVT+R0KWiRRA56QKOvBsgXiddksA==} dev: true /@cspell/dict-haskell@4.0.1: @@ -2901,62 +2842,66 @@ packages: resolution: {integrity: sha512-HGRu+48ErJjoweR5IbcixxETRewrBb0uxQBd6xFGcxbEYCX8CnQFTAmKI5xNaIt2PKaZiJH3ijodGSqbKdsxhw==} dev: true - /@cspell/dict-html@4.0.3: - resolution: {integrity: sha512-Gae8i8rrArT0UyG1I6DHDK62b7Be6QEcBSIeWOm4VIIW1CASkN9B0qFgSVnkmfvnu1Y3H7SSaaEynKjdj3cs8w==} + /@cspell/dict-html@4.0.5: + resolution: {integrity: sha512-p0brEnRybzSSWi8sGbuVEf7jSTDmXPx7XhQUb5bgG6b54uj+Z0Qf0V2n8b/LWwIPJNd1GygaO9l8k3HTCy1h4w==} dev: true - /@cspell/dict-java@5.0.5: - resolution: {integrity: sha512-X19AoJgWIBwJBSWGFqSgHaBR/FEykBHTMjL6EqOnhIGEyE9nvuo32tsSHjXNJ230fQxQptEvRZoaldNLtKxsRg==} + /@cspell/dict-java@5.0.6: + resolution: {integrity: sha512-kdE4AHHHrixyZ5p6zyms1SLoYpaJarPxrz8Tveo6gddszBVVwIUZ+JkQE1bWNLK740GWzIXdkznpUfw1hP9nXw==} dev: true - /@cspell/dict-k8s@1.0.1: - resolution: {integrity: sha512-gc5y4Nm3hVdMZNBZfU2M1AsAmObZsRWjCUk01NFPfGhFBXyVne41T7E62rpnzu5330FV/6b/TnFcPgRmak9lLw==} + /@cspell/dict-k8s@1.0.2: + resolution: {integrity: sha512-tLT7gZpNPnGa+IIFvK9SP1LrSpPpJ94a/DulzAPOb1Q2UBFwdpFd82UWhio0RNShduvKG/WiMZf/wGl98pn+VQ==} dev: true /@cspell/dict-latex@4.0.0: resolution: {integrity: sha512-LPY4y6D5oI7D3d+5JMJHK/wxYTQa2lJMSNxps2JtuF8hbAnBQb3igoWEjEbIbRRH1XBM0X8dQqemnjQNCiAtxQ==} dev: true - /@cspell/dict-lorem-ipsum@3.0.0: - resolution: {integrity: sha512-msEV24qEpzWZs2kcEicqYlhyBpR0amfDkJOs+iffC07si9ftqtQ+yP3lf1VFLpgqw3SQh1M1vtU7RD4sPrNlcQ==} + /@cspell/dict-lorem-ipsum@4.0.0: + resolution: {integrity: sha512-1l3yjfNvMzZPibW8A7mQU4kTozwVZVw0AvFEdy+NcqtbxH+TvbSkNMqROOFWrkD2PjnKG0+Ea0tHI2Pi6Gchnw==} + dev: true + + /@cspell/dict-lua@4.0.3: + resolution: {integrity: sha512-lDHKjsrrbqPaea13+G9s0rtXjMO06gPXPYRjRYawbNmo4E/e3XFfVzeci3OQDQNDmf2cPOwt9Ef5lu2lDmwfJg==} dev: true - /@cspell/dict-lua@4.0.1: - resolution: {integrity: sha512-j0MFmeCouSoC6EdZTbvGe1sJ9V+ruwKSeF+zRkNNNload7R72Co5kX1haW2xLHGdlq0kqSy1ODRZKdVl0e+7hg==} + /@cspell/dict-makefile@1.0.0: + resolution: {integrity: sha512-3W9tHPcSbJa6s0bcqWo6VisEDTSN5zOtDbnPabF7rbyjRpNo0uHXHRJQF8gAbFzoTzBBhgkTmrfSiuyQm7vBUQ==} dev: true - /@cspell/dict-node@4.0.2: - resolution: {integrity: sha512-FEQJ4TnMcXEFslqBQkXa5HposMoCGsiBv2ux4IZuIXgadXeHKHUHk60iarWpjhzNzQLyN2GD7NoRMd12bK3Llw==} + /@cspell/dict-node@4.0.3: + resolution: {integrity: sha512-sFlUNI5kOogy49KtPg8SMQYirDGIAoKBO3+cDLIwD4MLdsWy1q0upc7pzGht3mrjuyMiPRUV14Bb0rkVLrxOhg==} dev: true - /@cspell/dict-npm@5.0.8: - resolution: {integrity: sha512-KuqH8tEsFD6DPKqKwIfWr9E+admE3yghaC0AKXG8jPaf77N0lkctKaS3dm0oxWUXkYKA/eXj6LCtz3VcTyxFPg==} + /@cspell/dict-npm@5.0.15: + resolution: {integrity: sha512-sX0X5YWNW54F4baW7b5JJB6705OCBIZtUqjOghlJNORS5No7QY1IX1zc5FxNNu4gsaCZITAmfMi4ityXEsEThA==} dev: true - /@cspell/dict-php@4.0.1: - resolution: {integrity: sha512-XaQ/JkSyq2c07MfRG54DjLi2CV+HHwS99DDCAao9Fq2JfkWroTQsUeek7wYZXJATrJVOULoV3HKih12x905AtQ==} + /@cspell/dict-php@4.0.6: + resolution: {integrity: sha512-ySAXisf7twoVFZqBV2o/DKiCLIDTHNqfnj0EfH9OoOUR7HL3rb6zJkm0viLUFDO2G/8SyIi6YrN/6KX+Scjjjg==} dev: true - /@cspell/dict-powershell@5.0.2: - resolution: {integrity: sha512-IHfWLme3FXE7vnOmMncSBxOsMTdNWd1Vcyhag03WS8oANSgX8IZ+4lMI00mF0ptlgchf16/OU8WsV4pZfikEFw==} + /@cspell/dict-powershell@5.0.3: + resolution: {integrity: sha512-lEdzrcyau6mgzu1ie98GjOEegwVHvoaWtzQnm1ie4DyZgMr+N6D0Iyj1lzvtmt0snvsDFa5F2bsYzf3IMKcpcA==} dev: true - /@cspell/dict-public-licenses@2.0.3: - resolution: {integrity: sha512-JSLEdpEYufQ1H+93UHi+axlqQm1fhgK6kpdLHp6uPHu//CsvETcqNVawjB+qOdI/g38JTMw5fBqSd0aGNxa6Dw==} + /@cspell/dict-public-licenses@2.0.5: + resolution: {integrity: sha512-91HK4dSRri/HqzAypHgduRMarJAleOX5NugoI8SjDLPzWYkwZ1ftuCXSk+fy8DLc3wK7iOaFcZAvbjmnLhVs4A==} dev: true - /@cspell/dict-python@4.1.5: - resolution: {integrity: sha512-wWUWyHdyJtx5iG6Fz9rBQ17BtdpEsB17vmutao+gixQD28Jzb6XoLgDQ6606M0RnFjBSFhs5iT4CJBzlD2Kq6g==} + /@cspell/dict-python@4.1.11: + resolution: {integrity: sha512-XG+v3PumfzUW38huSbfT15Vqt3ihNb462ulfXifpQllPok5OWynhszCLCRQjQReV+dgz784ST4ggRxW452/kVg==} dependencies: - '@cspell/dict-data-science': 1.0.10 + '@cspell/dict-data-science': 1.0.11 dev: true /@cspell/dict-r@2.0.1: resolution: {integrity: sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==} dev: true - /@cspell/dict-ruby@5.0.0: - resolution: {integrity: sha512-ssb96QxLZ76yPqFrikWxItnCbUKhYXJ2owkoIYzUGNFl2CHSoHCb5a6Zetum9mQ/oUA3gNeUhd28ZUlXs0la2A==} + /@cspell/dict-ruby@5.0.2: + resolution: {integrity: sha512-cIh8KTjpldzFzKGgrqUX4bFyav5lC52hXDKo4LbRuMVncs3zg4hcSf4HtURY+f2AfEZzN6ZKzXafQpThq3dl2g==} dev: true /@cspell/dict-rust@4.0.1: @@ -2967,12 +2912,12 @@ packages: resolution: {integrity: sha512-ph0twaRoV+ylui022clEO1dZ35QbeEQaKTaV2sPOsdwIokABPIiK09oWwGK9qg7jRGQwVaRPEq0Vp+IG1GpqSQ==} dev: true - /@cspell/dict-software-terms@3.2.1: - resolution: {integrity: sha512-+QXmyoONVc/3aNgKW+0F0u3XUCRTfNRkWKLZQA78i+9fOfde8ZT4JmROmZgRveH/MxD4n6pNFceIRcYI6C8WuQ==} + /@cspell/dict-software-terms@3.3.18: + resolution: {integrity: sha512-LJZGGMGqS8KzgXJrSMs3T+6GoqHG9z8Bc+rqLzLzbtoR3FbsMasE9U8oP2PmS3q7jJLFjQkzmg508DrcuZuo2g==} dev: true - /@cspell/dict-sql@2.1.1: - resolution: {integrity: sha512-v1mswi9NF40+UDUMuI148YQPEQvWjac72P6ZsjlRdLjEiQEEMEsTQ+zlkIdnzC9QCNyJaqD5Liq9Mn78/8Zxtw==} + /@cspell/dict-sql@2.1.3: + resolution: {integrity: sha512-SEyTNKJrjqD6PAzZ9WpdSu6P7wgdNtGV2RV8Kpuw1x6bV+YsSptuClYG+JSdRExBTE6LwIe1bTklejUp3ZP8TQ==} dev: true /@cspell/dict-svelte@1.0.2: @@ -2983,40 +2928,34 @@ packages: resolution: {integrity: sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==} dev: true - /@cspell/dict-typescript@3.1.1: - resolution: {integrity: sha512-N9vNJZoOXmmrFPR4ir3rGvnqqwmQGgOYoL1+y6D4oIhyr7FhaYiyF/d7QT61RmjZQcATMa6PSL+ZisCeRLx9+A==} + /@cspell/dict-typescript@3.1.2: + resolution: {integrity: sha512-lcNOYWjLUvDZdLa0UMNd/LwfVdxhE9rKA+agZBGjL3lTA3uNvH7IUqSJM/IXhJoBpLLMVEOk8v1N9xi+vDuCdA==} dev: true /@cspell/dict-vue@3.0.0: resolution: {integrity: sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==} dev: true - /@cspell/dynamic-import@6.31.1: - resolution: {integrity: sha512-uliIUv9uZlnyYmjUlcw/Dm3p0xJOEnWJNczHAfqAl4Ytg6QZktw0GtUA9b1umbRXLv0KRTPtSC6nMq3cR7rRmQ==} - engines: {node: '>=14'} + /@cspell/dynamic-import@8.3.2: + resolution: {integrity: sha512-4t0xM5luA3yQhar2xWvYK4wQSDB2r0u8XkpzzJqd57MnJXd7uIAxI0awGUrDXukadRaCo0tDIlMUBemH48SNVg==} + engines: {node: '>=18.0'} dependencies: - import-meta-resolve: 2.2.2 + import-meta-resolve: 4.0.0 dev: true - /@cspell/eslint-plugin@6.31.3: - resolution: {integrity: sha512-WrgJsc4IZA/u/v1DrNOQlZt6KW+1aZlFKR7cM3a36NimedtP6Cd3gMm2hg/NtUfDjmEHBXiSkjiw4HZFJT7p0Q==} - engines: {node: '>=14'} + /@cspell/eslint-plugin@8.3.2: + resolution: {integrity: sha512-FUUIUMW43KGTddj+SFf3TEgDC5Uv+QvRJqeT8RXdxQL7PLPU7ZQyEGmQZf1DhJCxLzscrVt5YCmA6ZYUjwh/zQ==} + engines: {node: '>=18'} dependencies: - cspell-lib: 6.31.3 + '@cspell/cspell-types': 8.3.2 + cspell-lib: 8.3.2 estree-walker: 3.0.3 - synckit: 0.8.5 - transitivePeerDependencies: - - encoding + synckit: 0.8.8 dev: true - /@cspell/strong-weak-map@6.31.1: - resolution: {integrity: sha512-z8AuWvUuSnugFKJOA9Ke0aiFuehcqLFqia9bk8XaQNEWr44ahPVn3sEWnAncTxPbpWuUw5UajoJa0egRAE1CCg==} - engines: {node: '>=14.6'} - dev: true - - /@cspell/strong-weak-map@6.31.3: - resolution: {integrity: sha512-znwc9IlgGUPioHGshP/zyM8HsuYg1OY5S7HSiVXARh5H8RqcyBsnyn8abc0PPhqPrfDy9Fh5xHsAEPZ55dl1vQ==} - engines: {node: '>=14.6'} + /@cspell/strong-weak-map@8.3.2: + resolution: {integrity: sha512-Mte/2000ap278kRYOUhiGWI7MNr1+A7WSWJmlcdP4CAH5SO20sZI3/cyZLjJJEyapdhK5vaP1L5J9sUcVDHd3A==} + engines: {node: '>=18'} dev: true /@cspotcode/source-map-support@0.8.1: @@ -3047,7 +2986,7 @@ packages: istanbul-lib-coverage: 3.2.0 js-yaml: 4.1.0 nyc: 15.1.0 - webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack: 5.88.2(esbuild@0.20.0)(webpack-cli@4.10.0) transitivePeerDependencies: - supports-color dev: true @@ -3090,7 +3029,7 @@ packages: bluebird: 3.7.1 debug: 4.3.4(supports-color@8.1.1) lodash: 4.17.21 - webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack: 5.88.2(esbuild@0.20.0)(webpack-cli@4.10.0) transitivePeerDependencies: - supports-color dev: true @@ -3161,6 +3100,15 @@ packages: jsdoc-type-pratt-parser: 4.0.0 dev: true + /@esbuild/aix-ppc64@0.20.0: + resolution: {integrity: sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -3170,8 +3118,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.0: - resolution: {integrity: sha512-AzsozJnB+RNaDncBCs3Ys5g3kqhPFUueItfEaCpp89JH2naFNX2mYDIvUgPYMqqjm8hiFoo+jklb3QHZyR3ubw==} + /@esbuild/android-arm64@0.19.6: + resolution: {integrity: sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -3179,8 +3127,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.6: - resolution: {integrity: sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==} + /@esbuild/android-arm64@0.20.0: + resolution: {integrity: sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -3197,8 +3145,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.0: - resolution: {integrity: sha512-GAkjUyHgWTYuex3evPd5V7uV/XS4LMKr1PWHRPW1xNyy/Jx08x3uTrDFRefBYLKT/KpaWM8/YMQcwbp5a3yIDA==} + /@esbuild/android-arm@0.19.6: + resolution: {integrity: sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -3206,8 +3154,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.6: - resolution: {integrity: sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==} + /@esbuild/android-arm@0.20.0: + resolution: {integrity: sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -3224,8 +3172,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.0: - resolution: {integrity: sha512-SUG8/qiVhljBDpdkHQ9DvOWbp7hFFIP0OzxOTptbmVsgBgzY6JWowmMd6yJuOhapfxmj/DrvwKmjRLvVSIAKZg==} + /@esbuild/android-x64@0.19.6: + resolution: {integrity: sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -3233,8 +3181,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.6: - resolution: {integrity: sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==} + /@esbuild/android-x64@0.20.0: + resolution: {integrity: sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -3251,8 +3199,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.0: - resolution: {integrity: sha512-HkxZ8k3Jvcw0FORPNTavA8BMgQjLOB6AajT+iXmil7BwY3gU1hWvJJAyWyEogCmA4LdbGvKF8vEykdmJ4xNJJQ==} + /@esbuild/darwin-arm64@0.19.6: + resolution: {integrity: sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -3260,8 +3208,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.6: - resolution: {integrity: sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==} + /@esbuild/darwin-arm64@0.20.0: + resolution: {integrity: sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -3278,8 +3226,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.0: - resolution: {integrity: sha512-9IRWJjqpWFHM9a5Qs3r3bK834NCFuDY5ZaLrmTjqE+10B6w65UMQzeZjh794JcxpHolsAHqwsN/33crUXNCM2Q==} + /@esbuild/darwin-x64@0.19.6: + resolution: {integrity: sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -3287,8 +3235,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.6: - resolution: {integrity: sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==} + /@esbuild/darwin-x64@0.20.0: + resolution: {integrity: sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -3305,8 +3253,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.0: - resolution: {integrity: sha512-s7i2WcXcK0V1PJHVBe7NsGddsL62a9Vhpz2U7zapPrwKoFuxPP9jybwX8SXnropR/AOj3ppt2ern4ItblU6UQQ==} + /@esbuild/freebsd-arm64@0.19.6: + resolution: {integrity: sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -3314,8 +3262,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.6: - resolution: {integrity: sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==} + /@esbuild/freebsd-arm64@0.20.0: + resolution: {integrity: sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -3332,8 +3280,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.0: - resolution: {integrity: sha512-NMdBSSdgwHCqCsucU5k1xflIIRU0qi1QZnM6+vdGy5fvxm1c8rKh50VzsWsIVTFUG3l91AtRxVwoz3Lcvy3I5w==} + /@esbuild/freebsd-x64@0.19.6: + resolution: {integrity: sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -3341,8 +3289,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.6: - resolution: {integrity: sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==} + /@esbuild/freebsd-x64@0.20.0: + resolution: {integrity: sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -3359,8 +3307,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.0: - resolution: {integrity: sha512-I4zvE2srSZxRPapFnNqj+NL3sDJ1wkvEZqt903OZUlBBgigrQMvzUowvP/TTTu2OGYe1oweg5MFilfyrElIFag==} + /@esbuild/linux-arm64@0.19.6: + resolution: {integrity: sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -3368,8 +3316,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.6: - resolution: {integrity: sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==} + /@esbuild/linux-arm64@0.20.0: + resolution: {integrity: sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -3386,8 +3334,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.0: - resolution: {integrity: sha512-2F1+lH7ZBcCcgxiSs8EXQV0PPJJdTNiNcXxDb61vzxTRJJkXX1I/ye9mAhfHyScXzHaEibEXg1Jq9SW586zz7w==} + /@esbuild/linux-arm@0.19.6: + resolution: {integrity: sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -3395,8 +3343,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.6: - resolution: {integrity: sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==} + /@esbuild/linux-arm@0.20.0: + resolution: {integrity: sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -3413,8 +3361,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.0: - resolution: {integrity: sha512-dz2Q7+P92r1Evc8kEN+cQnB3qqPjmCrOZ+EdBTn8lEc1yN8WDgaDORQQiX+mxaijbH8npXBT9GxUqE52Gt6Y+g==} + /@esbuild/linux-ia32@0.19.6: + resolution: {integrity: sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -3422,8 +3370,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.6: - resolution: {integrity: sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==} + /@esbuild/linux-ia32@0.20.0: + resolution: {integrity: sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -3440,8 +3388,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.0: - resolution: {integrity: sha512-IcVJovJVflih4oFahhUw+N7YgNbuMSVFNr38awb0LNzfaiIfdqIh518nOfYaNQU3aVfiJnOIRVJDSAP4k35WxA==} + /@esbuild/linux-loong64@0.19.6: + resolution: {integrity: sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -3449,8 +3397,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.6: - resolution: {integrity: sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==} + /@esbuild/linux-loong64@0.20.0: + resolution: {integrity: sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -3467,8 +3415,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.0: - resolution: {integrity: sha512-bZGRAGySMquWsKw0gIdsClwfvgbsSq/7oq5KVu1H1r9Il+WzOcfkV1hguntIuBjRVL8agI95i4AukjdAV2YpUw==} + /@esbuild/linux-mips64el@0.19.6: + resolution: {integrity: sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -3476,8 +3424,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.6: - resolution: {integrity: sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==} + /@esbuild/linux-mips64el@0.20.0: + resolution: {integrity: sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -3494,8 +3442,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.0: - resolution: {integrity: sha512-3LC6H5/gCDorxoRBUdpLV/m7UthYSdar0XcCu+ypycQxMS08MabZ06y1D1yZlDzL/BvOYliRNRWVG/YJJvQdbg==} + /@esbuild/linux-ppc64@0.19.6: + resolution: {integrity: sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -3503,8 +3451,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.6: - resolution: {integrity: sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==} + /@esbuild/linux-ppc64@0.20.0: + resolution: {integrity: sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -3521,8 +3469,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.0: - resolution: {integrity: sha512-jfvdKjWk+Cp2sgLtEEdSHXO7qckrw2B2eFBaoRdmfhThqZs29GMMg7q/LsQpybA7BxCLLEs4di5ucsWzZC5XPA==} + /@esbuild/linux-riscv64@0.19.6: + resolution: {integrity: sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -3530,8 +3478,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.6: - resolution: {integrity: sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==} + /@esbuild/linux-riscv64@0.20.0: + resolution: {integrity: sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -3548,8 +3496,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.0: - resolution: {integrity: sha512-ofcucfNLkoXmcnJaw9ugdEOf40AWKGt09WBFCkpor+vFJVvmk/8OPjl/qRtks2Z7BuZbG3ztJuK1zS9z5Cgx9A==} + /@esbuild/linux-s390x@0.19.6: + resolution: {integrity: sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -3557,8 +3505,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.6: - resolution: {integrity: sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==} + /@esbuild/linux-s390x@0.20.0: + resolution: {integrity: sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -3575,8 +3523,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.0: - resolution: {integrity: sha512-Fpf7zNDBti3xrQKQKLdXT0hTyOxgFdRJIMtNy8x1az9ATR9/GJ1brYbB/GLWoXhKiHsoWs+2DLkFVNNMTCLEwA==} + /@esbuild/linux-x64@0.19.6: + resolution: {integrity: sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -3584,8 +3532,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.6: - resolution: {integrity: sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==} + /@esbuild/linux-x64@0.20.0: + resolution: {integrity: sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -3602,8 +3550,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.0: - resolution: {integrity: sha512-AMQAp/5oENgDOvVhvOlbhVe1pWii7oFAMRHlmTjSEMcpjTpIHtFXhv9uAFgUERHm3eYtNvS9Vf+gT55cwuI6Aw==} + /@esbuild/netbsd-x64@0.19.6: + resolution: {integrity: sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -3611,8 +3559,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.6: - resolution: {integrity: sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==} + /@esbuild/netbsd-x64@0.20.0: + resolution: {integrity: sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -3629,8 +3577,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.0: - resolution: {integrity: sha512-fDztEve1QUs3h/Dw2AUmBlWGkNQbhDoD05ppm5jKvzQv+HVuV13so7m5RYeiSMIC2XQy7PAjZh+afkxAnCRZxA==} + /@esbuild/openbsd-x64@0.19.6: + resolution: {integrity: sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -3638,8 +3586,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.6: - resolution: {integrity: sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==} + /@esbuild/openbsd-x64@0.20.0: + resolution: {integrity: sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -3656,8 +3604,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.0: - resolution: {integrity: sha512-bKZzJ2/rvUjDzA5Ddyva2tMk89WzNJEibZEaq+wY6SiqPlwgFbqyQLimouxLHiHh1itb5P3SNCIF1bc2bw5H9w==} + /@esbuild/sunos-x64@0.19.6: + resolution: {integrity: sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -3665,8 +3613,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.6: - resolution: {integrity: sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==} + /@esbuild/sunos-x64@0.20.0: + resolution: {integrity: sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -3683,8 +3631,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.0: - resolution: {integrity: sha512-NQJ+4jmnA79saI+sE+QzcEls19uZkoEmdxo7r//PDOjIpX8pmoWtTnWg6XcbnO7o4fieyAwb5U2LvgWynF4diA==} + /@esbuild/win32-arm64@0.19.6: + resolution: {integrity: sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -3692,8 +3640,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.6: - resolution: {integrity: sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==} + /@esbuild/win32-arm64@0.20.0: + resolution: {integrity: sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -3710,8 +3658,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.0: - resolution: {integrity: sha512-uyxiZAnsfu9diHm9/rIH2soecF/HWLXYUhJKW4q1+/LLmNQ+55lRjvSUDhUmsgJtSUscRJB/3S4RNiTb9o9mCg==} + /@esbuild/win32-ia32@0.19.6: + resolution: {integrity: sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -3719,8 +3667,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.6: - resolution: {integrity: sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==} + /@esbuild/win32-ia32@0.20.0: + resolution: {integrity: sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -3737,8 +3685,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.0: - resolution: {integrity: sha512-jl+NXUjK2StMgqnZnqgNjZuerFG8zQqWXMBZdMMv4W/aO1ZKQaYWZBxTrtWKphkCBVEMh0wMVfGgOd2BjOZqUQ==} + /@esbuild/win32-x64@0.19.6: + resolution: {integrity: sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -3746,8 +3694,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.6: - resolution: {integrity: sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==} + /@esbuild/win32-x64@0.20.0: + resolution: {integrity: sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -3802,6 +3750,37 @@ packages: resolution: {integrity: sha512-wI3fpfDT0t7p8E6dA2eTECzzOd+bZsZCJ2Hcv+Onn2b7ZwK3RwD27uW2QDaMtQhAfWQQP+WNK7nKf0twLsBf9w==} dev: true + /@floating-ui/core@1.6.0: + resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} + dependencies: + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/dom@1.6.1: + resolution: {integrity: sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==} + dependencies: + '@floating-ui/core': 1.6.0 + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/utils@0.2.1: + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + dev: false + + /@floating-ui/vue@0.2.1(vue@3.4.15): + resolution: {integrity: sha512-HE+EIeakID7wI6vUwF0yMpaW48bNaPj8QtnQaRMkaQFhQReVBA4bY6fmJ3J7X+dqVgDbMhyfCG0fBJfdQMdWxQ==} + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^2.0.0 || >=3.0.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + '@floating-ui/dom': 1.6.1 + vue: 3.4.15(typescript@5.1.6) + vue-demi: 0.13.11(vue@3.4.15) + dev: false + /@hapi/hoek@9.3.0: resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} dev: true @@ -3812,6 +3791,38 @@ packages: '@hapi/hoek': 9.3.0 dev: true + /@headlessui-float/vue@0.11.4(vue@3.4.15): + resolution: {integrity: sha512-hNGQTT3trknSB78ZI3usvnJACLyEUmacvk5Q8JQizJ8k+8GYLvhKklGIhJVO1E3litEzW6yyjPgfg6aEJ+1p6g==} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@floating-ui/core': 1.6.0 + '@floating-ui/dom': 1.6.1 + '@floating-ui/vue': 0.2.1(vue@3.4.15) + vue: 3.4.15(typescript@5.1.6) + transitivePeerDependencies: + - '@vue/composition-api' + dev: false + + /@headlessui/tailwindcss@0.2.0(tailwindcss@3.3.3): + resolution: {integrity: sha512-fpL830Fln1SykOCboExsWr3JIVeQKieLJ3XytLe/tt1A0XzqUthOftDmjcCYLW62w7mQI7wXcoPXr3tZ9QfGxw==} + engines: {node: '>=10'} + peerDependencies: + tailwindcss: ^3.0 + dependencies: + tailwindcss: 3.3.3(ts-node@10.9.1) + dev: false + + /@headlessui/vue@1.7.17(vue@3.4.15): + resolution: {integrity: sha512-hmJChv8HzKorxd9F70RGnECAwZfkvmmwOqreuKLWY/19d5qbWnSdw+DNbuA/Uo6X5rb4U5B3NrT+qBKPmjhRqw==} + engines: {node: '>=10'} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@tanstack/vue-virtual': 3.0.2(vue@3.4.15) + vue: 3.4.15(typescript@5.1.6) + dev: false + /@humanwhocodes/config-array@0.11.10: resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} @@ -4181,16 +4192,9 @@ packages: dev: true optional: true - /@pkgr/utils@2.4.2: - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.2 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.1 dev: true /@polka/url@0.5.0: @@ -4398,6 +4402,16 @@ packages: dev: true optional: true + /@shikijs/core@1.1.1: + resolution: {integrity: sha512-WSHuW0i4W04+UZgim378oxHBAp4S5X3hVI2zXh+t5v2fx2u/7QXz9VNisoOD/CA4O9Lc6Zs97TrKiDbWyZua6Q==} + dev: true + + /@shikijs/transformers@1.1.1: + resolution: {integrity: sha512-kOGqxMWtgPxivmDB6WH/lq3oUv0FrGPleovfBCqNVYsyGwRDa01OBOqQxO6oz8a7QbdEq0fbt7CaK1yjv4epXw==} + dependencies: + shiki: 1.1.1 + dev: true + /@sideway/address@4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: @@ -4449,6 +4463,19 @@ packages: defer-to-connect: 2.0.1 dev: true + /@tanstack/virtual-core@3.0.0: + resolution: {integrity: sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg==} + dev: false + + /@tanstack/vue-virtual@3.0.2(vue@3.4.15): + resolution: {integrity: sha512-1iFpX+yZswHuf4wrA6GU9yJ/YzQ/8SacABwqghwCkcwrkZbOPLlRSdOAqZ1WQ50SftmfhZpaiZl2KmpV7cgfMQ==} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + dependencies: + '@tanstack/virtual-core': 3.0.0 + vue: 3.4.15(typescript@5.1.6) + dev: false + /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -4829,6 +4856,12 @@ packages: '@types/node': 20.11.10 dev: true + /@types/hast@3.0.4: + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + dependencies: + '@types/unist': 3.0.2 + dev: true + /@types/http-cache-semantics@4.0.1: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} dev: true @@ -4875,6 +4908,10 @@ packages: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true + /@types/katex@0.16.7: + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} + dev: true + /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: @@ -4914,6 +4951,12 @@ packages: dependencies: '@types/unist': 2.0.7 + /@types/mdast@4.0.3: + resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + dependencies: + '@types/unist': 3.0.2 + dev: true + /@types/mdurl@1.0.2: resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} dev: true @@ -5063,6 +5106,10 @@ packages: /@types/unist@2.0.7: resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==} + /@types/unist@3.0.2: + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + dev: true + /@types/uuid@9.0.1: resolution: {integrity: sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==} dev: true @@ -5421,7 +5468,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@unocss/astro@0.58.0(rollup@2.79.1)(vite@4.5.0): + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /@unocss/astro@0.58.0(rollup@2.79.1)(vite@4.5.2): resolution: {integrity: sha512-df+tEFO5eKXjQOwSWQhS9IdjD0sfLHLtn8U09sEKR2Nmh5CvpwyBxmvLQgOCilPou7ehmyKfsyGRLZg7IMp+Ew==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 @@ -5431,8 +5482,8 @@ packages: dependencies: '@unocss/core': 0.58.0 '@unocss/reset': 0.58.0 - '@unocss/vite': 0.58.0(rollup@2.79.1)(vite@4.5.0) - vite: 4.5.0(@types/node@20.11.10) + '@unocss/vite': 0.58.0(rollup@2.79.1)(vite@4.5.2) + vite: 4.5.2(@types/node@20.11.10) transitivePeerDependencies: - rollup dev: true @@ -5615,7 +5666,7 @@ packages: '@unocss/core': 0.58.0 dev: true - /@unocss/vite@0.58.0(rollup@2.79.1)(vite@4.5.0): + /@unocss/vite@0.58.0(rollup@2.79.1)(vite@4.5.2): resolution: {integrity: sha512-OCUOLMSOBEtXOEyBbAvMI3/xdR175BWRzmvV9Wc34ANZclEvCdVH8+WU725ibjY4VT0gVIuX68b13fhXdHV41A==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 @@ -5630,46 +5681,57 @@ packages: chokidar: 3.5.3 fast-glob: 3.3.2 magic-string: 0.30.5 - vite: 4.5.0(@types/node@20.11.10) + vite: 4.5.2(@types/node@20.11.10) transitivePeerDependencies: - rollup dev: true - /@vite-pwa/vitepress@0.3.0(vite-plugin-pwa@0.17.0): + /@vite-pwa/vitepress@0.3.0(vite-plugin-pwa@0.17.5): resolution: {integrity: sha512-7akiTt0laHJRSJ7lxPttGHYBoC2J+FgWJr0TGYQd2jPe/8nou+YSDwBGpOV+/qeobX2uzff8kew02n/07JRe9Q==} peerDependencies: vite-plugin-pwa: '>=0.17.0 <1' dependencies: - vite-plugin-pwa: 0.17.0(vite@4.5.0)(workbox-build@7.0.0)(workbox-window@7.0.0) + vite-plugin-pwa: 0.17.5(vite@4.5.2)(workbox-build@7.0.0)(workbox-window@7.0.0) dev: true - /@vite-pwa/vitepress@0.3.0(vite-plugin-pwa@0.17.5): + /@vite-pwa/vitepress@0.3.0(vite-plugin-pwa@0.18.1): resolution: {integrity: sha512-7akiTt0laHJRSJ7lxPttGHYBoC2J+FgWJr0TGYQd2jPe/8nou+YSDwBGpOV+/qeobX2uzff8kew02n/07JRe9Q==} peerDependencies: vite-plugin-pwa: '>=0.17.0 <1' dependencies: - vite-plugin-pwa: 0.17.5(vite@4.5.0)(workbox-build@7.0.0)(workbox-window@7.0.0) + vite-plugin-pwa: 0.18.1(vite@4.5.2)(workbox-build@7.0.0)(workbox-window@7.0.0) dev: true - /@vitejs/plugin-vue@4.2.1(vite@4.5.0)(vue@3.3.4): + /@vitejs/plugin-vue@4.2.1(vite@4.5.2)(vue@3.3.4): resolution: {integrity: sha512-ZTZjzo7bmxTRTkb8GSTwkPOYDIP7pwuyV+RV53c9PYUouwcbkIZIvWvNWlX2b1dYZqtOv7D6iUAnJLVNGcLrSw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.5.0(@types/node@20.11.10) + vite: 4.5.2(@types/node@20.11.10) vue: 3.3.4 dev: true - /@vitejs/plugin-vue@4.2.3(vite@4.5.0)(vue@3.4.15): - resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} + /@vitejs/plugin-vue@4.2.1(vite@4.5.2)(vue@3.4.15): + resolution: {integrity: sha512-ZTZjzo7bmxTRTkb8GSTwkPOYDIP7pwuyV+RV53c9PYUouwcbkIZIvWvNWlX2b1dYZqtOv7D6iUAnJLVNGcLrSw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.5.0(@types/node@20.11.10) + vite: 4.5.2(@types/node@20.11.10) + vue: 3.4.15(typescript@5.1.6) + dev: true + + /@vitejs/plugin-vue@4.6.2(vite@5.0.12)(vue@3.4.15): + resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 || ^5.0.0 + vue: ^3.2.25 + dependencies: + vite: 5.0.12(@types/node@20.11.10) vue: 3.4.15(typescript@5.1.6) dev: true @@ -5758,21 +5820,21 @@ packages: pretty-format: 29.6.2 dev: true - /@vue/compat@3.3.4(vue@3.3.4): + /@vue/compat@3.3.4(vue@3.4.15): resolution: {integrity: sha512-VwAsPqUqRJVxeLQPUC03Sa5d+T8UG2Qv4VItq74KmNvtQlRXICpa/sqq12BcyBB4Tz1U5paOEZxWCUoXkrZ9QQ==} peerDependencies: vue: 3.3.4 dependencies: - '@babel/parser': 7.23.0 + '@babel/parser': 7.23.6 estree-walker: 2.0.2 source-map-js: 1.0.2 - vue: 3.3.4 + vue: 3.4.15(typescript@5.1.6) dev: false /@vue/compiler-core@3.3.4: resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} dependencies: - '@babel/parser': 7.23.0 + '@babel/parser': 7.23.6 '@vue/shared': 3.3.4 estree-walker: 2.0.2 source-map-js: 1.0.2 @@ -5801,7 +5863,7 @@ packages: /@vue/compiler-sfc@3.3.4: resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} dependencies: - '@babel/parser': 7.23.0 + '@babel/parser': 7.23.6 '@vue/compiler-core': 3.3.4 '@vue/compiler-dom': 3.3.4 '@vue/compiler-ssr': 3.3.4 @@ -5809,7 +5871,7 @@ packages: '@vue/shared': 3.3.4 estree-walker: 2.0.2 magic-string: 0.30.5 - postcss: 8.4.31 + postcss: 8.4.33 source-map-js: 1.0.2 /@vue/compiler-sfc@3.4.15: @@ -5840,10 +5902,37 @@ packages: /@vue/devtools-api@6.5.1: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} + /@vue/devtools-api@7.0.14: + resolution: {integrity: sha512-TluWR9qZ6aO11bwtYK8+fzXxBqLfsE0mWZz1q/EQBmO9k82Cm6deieLwNNXjNFJz7xutazoia5Qa+zTYkPPOfw==} + dependencies: + '@vue/devtools-kit': 7.0.14 + dev: true + + /@vue/devtools-kit@7.0.14: + resolution: {integrity: sha512-wAAJazr4hI0aVRpgWOCVPw+NzMQdthhnprHHIg4njp1MkKrpCNGQ7MtQbZF1AltAA7xpMCGyyt+0kYH0FqTiPg==} + dependencies: + '@vue/devtools-schema': 7.0.14 + '@vue/devtools-shared': 7.0.14 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + dev: true + + /@vue/devtools-schema@7.0.14: + resolution: {integrity: sha512-tpUeCLVrdHX+KzWMLTAwx/vAPFbo6jAUi7sr6Q+0mBIqIVSSIxNr5wEhegiFvYva+OtDeM2OrT+f7/X/5bvZNg==} + dev: true + + /@vue/devtools-shared@7.0.14: + resolution: {integrity: sha512-79RP1NDakBVWou9rDpVnT1WMjTbL1lJKm6YEOodjQ0dq5ehf0wsRbeYDhgAlnjehWRzTq5GAYFBFUPYBs0/QpA==} + dependencies: + rfdc: 1.3.1 + dev: true + /@vue/reactivity-transform@3.3.4: resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} dependencies: - '@babel/parser': 7.23.5 + '@babel/parser': 7.23.6 '@vue/compiler-core': 3.3.4 '@vue/shared': 3.3.4 estree-walker: 2.0.2 @@ -5876,7 +5965,7 @@ packages: dependencies: '@vue/runtime-core': 3.3.4 '@vue/shared': 3.3.4 - csstype: 3.1.2 + csstype: 3.1.3 /@vue/runtime-dom@3.4.15: resolution: {integrity: sha512-EVW8D6vfFVq3V/yDKNPBFkZKGMFSvZrUQmx196o/v2tHKdwWdiZjYUBS+0Ez3+ohRyF8Njwy/6FH5gYJ75liUw==} @@ -5992,7 +6081,7 @@ packages: /@vueuse/shared@10.1.0(vue@3.3.4): resolution: {integrity: sha512-2X52ogu12i9DkKOQ01yeb/BKg9UO87RNnpm5sXkQvyORlbq8ONS5l39MYkjkeVWWjdT0teJru7a2S41dmHmqjQ==} dependencies: - vue-demi: 0.14.6(vue@3.3.4) + vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -6172,7 +6261,7 @@ packages: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x dependencies: - webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack: 5.88.2(esbuild@0.20.0)(webpack-cli@4.10.0) webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.88.2) dev: true @@ -6211,13 +6300,16 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /@zenuml/core@3.0.6(ts-node@10.9.1): - resolution: {integrity: sha512-azEBVrl+ClCPhII92TbzBUFcWhIjlOPdEHVzF6eZXs5Oy4JlrfldS5pAZBHCFL4riOBsjZ5sHHmQLQg9V07T4Q==} + /@zenuml/core@3.17.2(ts-node@10.9.1)(typescript@5.1.6): + resolution: {integrity: sha512-U81yq4tBLJS8wiGOe+6t0XWKlCel3EcANerzaxYLvE5P7j5Vu3Qj+chLbpKz8Ggn9+R8ol5nU1utM3+uRZrw1g==} engines: {node: '>=12.0.0'} dependencies: + '@headlessui-float/vue': 0.11.4(vue@3.4.15) + '@headlessui/tailwindcss': 0.2.0(tailwindcss@3.3.3) + '@headlessui/vue': 1.7.17(vue@3.4.15) '@types/assert': 1.5.6 '@types/ramda': 0.28.25 - '@vue/compat': 3.3.4(vue@3.3.4) + '@vue/compat': 3.3.4(vue@3.4.15) antlr4: 4.11.0 color-string: 1.9.1 dom-to-image-more: 2.16.0 @@ -6227,13 +6319,15 @@ packages: lodash: 4.17.21 marked: 4.3.0 pino: 8.15.0 - postcss: 8.4.27 + postcss: 8.4.33 ramda: 0.28.0 tailwindcss: 3.3.3(ts-node@10.9.1) - vue: 3.3.4 - vuex: 4.1.0(vue@3.3.4) + vue: 3.4.15(typescript@5.1.6) + vuex: 4.1.0(vue@3.4.15) transitivePeerDependencies: + - '@vue/composition-api' - ts-node + - typescript dev: false /JSONSelect@0.4.0: @@ -6688,7 +6782,7 @@ packages: '@babel/core': 7.23.5 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack: 5.88.2(esbuild@0.20.0)(webpack-cli@4.10.0) dev: true /babel-plugin-istanbul@6.1.1: @@ -6801,11 +6895,6 @@ packages: tweetnacl: 0.14.5 dev: true - /big-integer@1.6.51: - resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} - engines: {node: '>=0.6'} - dev: true - /big.js@6.2.1: resolution: {integrity: sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==} dev: true @@ -6884,13 +6973,6 @@ packages: wrap-ansi: 7.0.0 dev: true - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.51 - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -6958,13 +7040,6 @@ packages: engines: {node: '>=6'} dev: true - /bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - dependencies: - run-applescript: 5.0.0 - dev: true - /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -7098,6 +7173,13 @@ packages: traverse: 0.3.9 dev: true + /chalk-template@1.1.0: + resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==} + engines: {node: '>=14.16'} + dependencies: + chalk: 5.3.0 + dev: true + /chalk@1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -7139,15 +7221,28 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} dev: true + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: true + /character-entities-legacy@1.1.4: resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} dev: true + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: true + /character-entities@1.2.4: resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} dev: true @@ -7369,11 +7464,20 @@ packages: delayed-stream: 1.0.0 dev: true + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: true + /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} dev: true + /commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + dev: true + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true @@ -7397,6 +7501,11 @@ packages: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: false + /comment-json@4.2.3: resolution: {integrity: sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==} engines: {node: '>= 6'} @@ -7490,16 +7599,15 @@ packages: yargs: 17.7.2 dev: true - /configstore@5.0.1: - resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} - engines: {node: '>=8'} + /configstore@6.0.0: + resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} + engines: {node: '>=12'} dependencies: - dot-prop: 5.3.0 + dot-prop: 6.0.1 graceful-fs: 4.2.11 - make-dir: 3.1.0 - unique-string: 2.0.0 + unique-string: 3.0.0 write-file-atomic: 3.0.3 - xdg-basedir: 4.0.0 + xdg-basedir: 5.1.0 dev: true /connect-history-api-fallback@2.0.0: @@ -7609,16 +7717,6 @@ packages: typescript: 5.1.6 dev: true - /cosmiconfig@8.0.0: - resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==} - engines: {node: '>=14'} - dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - path-type: 4.0.0 - dev: true - /cosmiconfig@8.2.0: resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} engines: {node: '>=14'} @@ -7690,188 +7788,124 @@ packages: engines: {node: '>=8'} dev: true - /cspell-dictionary@6.31.1: - resolution: {integrity: sha512-7+K7aQGarqbpucky26wled7QSCJeg6VkLUWS+hLjyf0Cqc9Zew5xsLa4QjReExWUJx+a97jbiflITZNuWxgMrg==} - engines: {node: '>=14'} + /crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} dependencies: - '@cspell/cspell-pipe': 6.31.1 - '@cspell/cspell-types': 6.31.1 - cspell-trie-lib: 6.31.1 - fast-equals: 4.0.3 - gensequence: 5.0.2 + type-fest: 1.4.0 dev: true - /cspell-dictionary@6.31.3: - resolution: {integrity: sha512-3w5P3Md/tbHLVGPKVL0ePl1ObmNwhdDiEuZ2TXfm2oAIwg4aqeIrw42A2qmhaKLcuAIywpqGZsrGg8TviNNhig==} - engines: {node: '>=14'} + /cspell-config-lib@8.3.2: + resolution: {integrity: sha512-Wc98XhBNLwDxnxCzMtgRJALI9a69cu3C5Gf1rGjNTKSFo9JYiQmju0Ur3z25Pkx9Sa86f+2IjvNCf33rUDSoBQ==} + engines: {node: '>=18'} dependencies: - '@cspell/cspell-pipe': 6.31.3 - '@cspell/cspell-types': 6.31.3 - cspell-trie-lib: 6.31.3 - fast-equals: 4.0.3 - gensequence: 5.0.2 + '@cspell/cspell-types': 8.3.2 + comment-json: 4.2.3 + yaml: 2.3.4 dev: true - /cspell-gitignore@6.31.1: - resolution: {integrity: sha512-PAcmjN6X89Z8qgjem6HYb+VmvVtKuc+fWs4sk21+jv2MiLk23Bkp+8slSaIDVR//58fxJkMx17PHyo2cDO/69A==} - engines: {node: '>=14'} - hasBin: true + /cspell-dictionary@8.3.2: + resolution: {integrity: sha512-xyK95hO2BMPFxIo8zBwGml8035qOxSBdga1BMhwW/p2wDrQP8S4Cdm/54//tCDmKn6uRkFQvyOfWGaX2l8WMEg==} + engines: {node: '>=18'} dependencies: - cspell-glob: 6.31.1 - find-up: 5.0.0 + '@cspell/cspell-pipe': 8.3.2 + '@cspell/cspell-types': 8.3.2 + cspell-trie-lib: 8.3.2 + fast-equals: 5.0.1 + gensequence: 6.0.0 dev: true - /cspell-glob@6.31.1: - resolution: {integrity: sha512-ygEmr5hgE4QtO5+L3/ihfMKBhPipbapfS22ilksFSChKMc15Regds0z+z/1ZBoe+OFAPneQfIuBxMwQ/fB00GQ==} - engines: {node: '>=14'} + /cspell-gitignore@8.3.2: + resolution: {integrity: sha512-3Qc9P5BVvl/cg//s2s+zIMGKcoH5v7oOtRgwn4UQry8yiyo19h0tiTKkSR574FMhF5NtcShTnwIwPSIXVBPFHA==} + engines: {node: '>=18'} + hasBin: true dependencies: - micromatch: 4.0.5 + cspell-glob: 8.3.2 + find-up-simple: 1.0.0 dev: true - /cspell-glob@6.31.3: - resolution: {integrity: sha512-+koUJPSCOittQwhR0T1mj4xXT3N+ZnY2qQ53W6Gz9HY3hVfEEy0NpbwE/Uy7sIvFMbc426fK0tGXjXyIj72uhQ==} - engines: {node: '>=14'} + /cspell-glob@8.3.2: + resolution: {integrity: sha512-KtIFxE+3l5dGEofND4/CdZffXP8XN1+XGQKxJ96lIzWsc01mkotfhxTkla6mgvfH039t7BsY/SWv0460KyGslQ==} + engines: {node: '>=18'} dependencies: micromatch: 4.0.5 dev: true - /cspell-grammar@6.31.1: - resolution: {integrity: sha512-AsRVP0idcNFVSb9+p9XjMumFj3BUV67WIPWApaAzJl/dYyiIygQObRE+si0/QtFWGNw873b7hNhWZiKjqIdoaQ==} - engines: {node: '>=14'} + /cspell-grammar@8.3.2: + resolution: {integrity: sha512-tYCkOmRzJe1a6/R+8QGSwG7TwTgznLPqsHtepKzLmnS4YX54VXjKRI9zMARxXDzUVfyCSVdW5MyiY/0WTNoy+A==} + engines: {node: '>=18'} hasBin: true dependencies: - '@cspell/cspell-pipe': 6.31.1 - '@cspell/cspell-types': 6.31.1 + '@cspell/cspell-pipe': 8.3.2 + '@cspell/cspell-types': 8.3.2 dev: true - /cspell-grammar@6.31.3: - resolution: {integrity: sha512-TZYaOLIGAumyHlm4w7HYKKKcR1ZgEMKt7WNjCFqq7yGVW7U+qyjQqR8jqnLiUTZl7c2Tque4mca7n0CFsjVv5A==} - engines: {node: '>=14'} - hasBin: true + /cspell-io@8.3.2: + resolution: {integrity: sha512-WYpKsyBCQP0SY4gXnhW5fPuxcYchKYKG1PIXVV3ezFU4muSgW6GuLNbGuSfwv/8YNXRgFSN0e3hYH0rdBK2Aow==} + engines: {node: '>=18'} dependencies: - '@cspell/cspell-pipe': 6.31.3 - '@cspell/cspell-types': 6.31.3 + '@cspell/cspell-service-bus': 8.3.2 dev: true - /cspell-io@6.31.1: - resolution: {integrity: sha512-deZcpvTYY/NmLfOdOtzcm+nDvJZozKmj4TY3pPpX0HquPX0A/w42bFRT/zZNmRslFl8vvrCZZUog7SOc6ha3uA==} - engines: {node: '>=14'} + /cspell-lib@8.3.2: + resolution: {integrity: sha512-wTvdaev/TyGB/ln6CVD1QbVs2D7/+QiajQ67S7yj1suLHM6YcNQQb/5sPAM8VPtj0E7PgwgPXf3bq18OtPvnFg==} + engines: {node: '>=18'} dependencies: - '@cspell/cspell-service-bus': 6.31.1 - node-fetch: 2.6.12(encoding@0.1.13) - transitivePeerDependencies: - - encoding - dev: true - - /cspell-io@6.31.3: - resolution: {integrity: sha512-yCnnQ5bTbngUuIAaT5yNSdI1P0Kc38uvC8aynNi7tfrCYOQbDu1F9/DcTpbdhrsCv+xUn2TB1YjuCmm0STfJlA==} - engines: {node: '>=14'} - dependencies: - '@cspell/cspell-service-bus': 6.31.3 - node-fetch: 2.6.12(encoding@0.1.13) - transitivePeerDependencies: - - encoding - dev: true - - /cspell-lib@6.31.1: - resolution: {integrity: sha512-KgSiulbLExY+z2jGwkO77+aAkyugsPAw7y07j3hTQLpd+0esPCZqrmbo2ItnkvkDNd/c34PqQCr7/044/rz8gw==} - engines: {node: '>=14.6'} - dependencies: - '@cspell/cspell-bundled-dicts': 6.31.1 - '@cspell/cspell-pipe': 6.31.1 - '@cspell/cspell-types': 6.31.1 - '@cspell/strong-weak-map': 6.31.1 + '@cspell/cspell-bundled-dicts': 8.3.2 + '@cspell/cspell-pipe': 8.3.2 + '@cspell/cspell-resolver': 8.3.2 + '@cspell/cspell-types': 8.3.2 + '@cspell/dynamic-import': 8.3.2 + '@cspell/strong-weak-map': 8.3.2 clear-module: 4.1.2 comment-json: 4.2.3 - configstore: 5.0.1 - cosmiconfig: 8.0.0 - cspell-dictionary: 6.31.1 - cspell-glob: 6.31.1 - cspell-grammar: 6.31.1 - cspell-io: 6.31.1 - cspell-trie-lib: 6.31.1 - fast-equals: 4.0.3 - find-up: 5.0.0 - gensequence: 5.0.2 + configstore: 6.0.0 + cspell-config-lib: 8.3.2 + cspell-dictionary: 8.3.2 + cspell-glob: 8.3.2 + cspell-grammar: 8.3.2 + cspell-io: 8.3.2 + cspell-trie-lib: 8.3.2 + fast-equals: 5.0.1 + gensequence: 6.0.0 import-fresh: 3.3.0 resolve-from: 5.0.0 - resolve-global: 1.0.0 - vscode-languageserver-textdocument: 1.0.8 - vscode-uri: 3.0.7 - transitivePeerDependencies: - - encoding - dev: true - - /cspell-lib@6.31.3: - resolution: {integrity: sha512-Dv55aecaMvT/5VbNryKo0Zos8dtHon7e1K0z8DR4/kGZdQVT0bOFWeotSLhuaIqoNFdEt8ypfKbrIHIdbgt1Hg==} - engines: {node: '>=14.6'} - dependencies: - '@cspell/cspell-bundled-dicts': 6.31.3 - '@cspell/cspell-pipe': 6.31.3 - '@cspell/cspell-types': 6.31.3 - '@cspell/strong-weak-map': 6.31.3 - clear-module: 4.1.2 - comment-json: 4.2.3 - configstore: 5.0.1 - cosmiconfig: 8.0.0 - cspell-dictionary: 6.31.3 - cspell-glob: 6.31.3 - cspell-grammar: 6.31.3 - cspell-io: 6.31.3 - cspell-trie-lib: 6.31.3 - fast-equals: 4.0.3 - find-up: 5.0.0 - gensequence: 5.0.2 - import-fresh: 3.3.0 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - vscode-languageserver-textdocument: 1.0.8 - vscode-uri: 3.0.7 - transitivePeerDependencies: - - encoding + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 dev: true - /cspell-trie-lib@6.31.1: - resolution: {integrity: sha512-MtYh7s4Sbr1rKT31P2BK6KY+YfOy3dWsuusq9HnqCXmq6aZ1HyFgjH/9p9uvqGi/TboMqn1KOV8nifhXK3l3jg==} - engines: {node: '>=14'} + /cspell-trie-lib@8.3.2: + resolution: {integrity: sha512-8qh2FqzkLMwzlTlvO/5Z+89fhi30rrfekocpight/BmqKbE2XFJQD7wS2ml24e7q/rdHJLXVpJbY/V5mByucCA==} + engines: {node: '>=18'} dependencies: - '@cspell/cspell-pipe': 6.31.1 - '@cspell/cspell-types': 6.31.1 - gensequence: 5.0.2 + '@cspell/cspell-pipe': 8.3.2 + '@cspell/cspell-types': 8.3.2 + gensequence: 6.0.0 dev: true - /cspell-trie-lib@6.31.3: - resolution: {integrity: sha512-HNUcLWOZAvtM3E34U+7/mSSpO0F6nLd/kFlRIcvSvPb9taqKe8bnSa0Yyb3dsdMq9rMxUmuDQtF+J6arZK343g==} - engines: {node: '>=14'} - dependencies: - '@cspell/cspell-pipe': 6.31.3 - '@cspell/cspell-types': 6.31.3 - gensequence: 5.0.2 - dev: true - - /cspell@6.31.1: - resolution: {integrity: sha512-gyCtpkOpwI/TGibbtIgMBFnAUUp2hnYdvW/9Ky4RcneHtLH0+V/jUEbZD8HbRKz0GVZ6mhKWbNRSEyP9p3Cejw==} - engines: {node: '>=14'} + /cspell@8.3.2: + resolution: {integrity: sha512-V8Ub3RO/a5lwSsltW/ib3Z3G/sczKtSpBBN1JChzbSCfEgaY2mJY8JW0BpkSV+Ug6uJitpXNOOaxa3Xr489i7g==} + engines: {node: '>=18'} hasBin: true dependencies: - '@cspell/cspell-pipe': 6.31.1 - '@cspell/dynamic-import': 6.31.1 - chalk: 4.1.2 - commander: 10.0.1 - cspell-gitignore: 6.31.1 - cspell-glob: 6.31.1 - cspell-io: 6.31.1 - cspell-lib: 6.31.1 - fast-glob: 3.3.1 + '@cspell/cspell-json-reporter': 8.3.2 + '@cspell/cspell-pipe': 8.3.2 + '@cspell/cspell-types': 8.3.2 + '@cspell/dynamic-import': 8.3.2 + chalk: 5.3.0 + chalk-template: 1.1.0 + commander: 11.1.0 + cspell-gitignore: 8.3.2 + cspell-glob: 8.3.2 + cspell-io: 8.3.2 + cspell-lib: 8.3.2 + fast-glob: 3.3.2 fast-json-stable-stringify: 2.1.0 - file-entry-cache: 6.0.1 - get-stdin: 8.0.0 - imurmurhash: 0.1.4 + file-entry-cache: 8.0.0 + get-stdin: 9.0.0 semver: 7.5.4 - strip-ansi: 6.0.1 - vscode-uri: 3.0.7 - transitivePeerDependencies: - - encoding + strip-ansi: 7.1.0 + vscode-uri: 3.0.8 dev: true /css-tree@2.3.1: @@ -7905,9 +7939,6 @@ packages: resolve: 1.22.4 dev: true - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -8516,24 +8547,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - - /default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 - dev: true - /default-gateway@6.0.3: resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} engines: {node: '>= 10'} @@ -8558,11 +8571,6 @@ packages: engines: {node: '>=8'} dev: true - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true - /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -8618,6 +8626,12 @@ packages: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: true + /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dev: false @@ -8713,6 +8727,13 @@ packages: is-obj: 2.0.0 dev: true + /dot-prop@6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + dependencies: + is-obj: 2.0.0 + dev: true + /dotenv@16.3.1: resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} @@ -8964,36 +8985,6 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true - /esbuild@0.19.0: - resolution: {integrity: sha512-i7i8TP4vuG55bKeLyqqk5sTPu1ZjPH3wkcLvAj/0X/222iWFo3AJUYRKjbOoY6BWFMH3teizxHEdV9Su5ESl0w==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.19.0 - '@esbuild/android-arm64': 0.19.0 - '@esbuild/android-x64': 0.19.0 - '@esbuild/darwin-arm64': 0.19.0 - '@esbuild/darwin-x64': 0.19.0 - '@esbuild/freebsd-arm64': 0.19.0 - '@esbuild/freebsd-x64': 0.19.0 - '@esbuild/linux-arm': 0.19.0 - '@esbuild/linux-arm64': 0.19.0 - '@esbuild/linux-ia32': 0.19.0 - '@esbuild/linux-loong64': 0.19.0 - '@esbuild/linux-mips64el': 0.19.0 - '@esbuild/linux-ppc64': 0.19.0 - '@esbuild/linux-riscv64': 0.19.0 - '@esbuild/linux-s390x': 0.19.0 - '@esbuild/linux-x64': 0.19.0 - '@esbuild/netbsd-x64': 0.19.0 - '@esbuild/openbsd-x64': 0.19.0 - '@esbuild/sunos-x64': 0.19.0 - '@esbuild/win32-arm64': 0.19.0 - '@esbuild/win32-ia32': 0.19.0 - '@esbuild/win32-x64': 0.19.0 - dev: true - /esbuild@0.19.6: resolution: {integrity: sha512-Xl7dntjA2OEIvpr9j0DVxxnog2fyTGnyVoQXAMQI6eR3mf9zCQds7VIKUDCotDgE/p4ncTgeRqgX8t5d6oP4Gw==} engines: {node: '>=12'} @@ -9024,6 +9015,37 @@ packages: '@esbuild/win32-x64': 0.19.6 dev: true + /esbuild@0.20.0: + resolution: {integrity: sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.0 + '@esbuild/android-arm': 0.20.0 + '@esbuild/android-arm64': 0.20.0 + '@esbuild/android-x64': 0.20.0 + '@esbuild/darwin-arm64': 0.20.0 + '@esbuild/darwin-x64': 0.20.0 + '@esbuild/freebsd-arm64': 0.20.0 + '@esbuild/freebsd-x64': 0.20.0 + '@esbuild/linux-arm': 0.20.0 + '@esbuild/linux-arm64': 0.20.0 + '@esbuild/linux-ia32': 0.20.0 + '@esbuild/linux-loong64': 0.20.0 + '@esbuild/linux-mips64el': 0.20.0 + '@esbuild/linux-ppc64': 0.20.0 + '@esbuild/linux-riscv64': 0.20.0 + '@esbuild/linux-s390x': 0.20.0 + '@esbuild/linux-x64': 0.20.0 + '@esbuild/netbsd-x64': 0.20.0 + '@esbuild/openbsd-x64': 0.20.0 + '@esbuild/sunos-x64': 0.20.0 + '@esbuild/win32-arm64': 0.20.0 + '@esbuild/win32-ia32': 0.20.0 + '@esbuild/win32-x64': 0.20.0 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -9540,8 +9562,9 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-equals@4.0.3: - resolution: {integrity: sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==} + /fast-equals@5.0.1: + resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} + engines: {node: '>=6.0.0'} dev: true /fast-glob@3.2.12: @@ -9586,7 +9609,7 @@ packages: dependencies: ajv: 6.12.6 deepmerge: 4.3.1 - rfdc: 1.3.0 + rfdc: 1.3.1 string-similarity: 4.0.4 dev: true @@ -9630,7 +9653,7 @@ packages: pino: 6.14.0 process-warning: 1.0.0 proxy-addr: 2.0.7 - rfdc: 1.3.0 + rfdc: 1.3.1 secure-json-parse: 2.7.0 semver: 7.5.4 tiny-lru: 8.0.2 @@ -9702,6 +9725,13 @@ packages: flat-cache: 3.0.4 dev: true + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + dependencies: + flat-cache: 4.0.0 + dev: true + /file-saver@2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} dev: false @@ -9771,6 +9801,11 @@ packages: - supports-color dev: true + /find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + dev: true + /find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} @@ -9810,6 +9845,15 @@ packages: rimraf: 3.0.2 dev: true + /flat-cache@4.0.0: + resolution: {integrity: sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==} + engines: {node: '>=16'} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 5.0.5 + dev: true + /flatstr@1.0.12: resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==} dev: true @@ -9818,6 +9862,10 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + /flexsearch@0.7.31: resolution: {integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==} dev: true @@ -9992,9 +10040,9 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gensequence@5.0.2: - resolution: {integrity: sha512-JlKEZnFc6neaeSVlkzBGGgkIoIaSxMgvdamRoPN8r3ozm2r9dusqxeKqYQ7lhzmj2UhFQP8nkyfCaiLQxiLrDA==} - engines: {node: '>=14'} + /gensequence@6.0.0: + resolution: {integrity: sha512-8WwuywE9pokJRAcg2QFR/plk3cVPebSUqRPzpGQh3WQ0wIiHAw+HyOQj5IuHyUTQBHpBKFoB2JUMu9zT3vJ16Q==} + engines: {node: '>=16'} dev: true /gensync@1.0.0-beta.2: @@ -10039,6 +10087,11 @@ packages: engines: {node: '>=10'} dev: true + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + /get-stream@4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} @@ -10126,6 +10179,18 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.3 + path-scurry: 1.10.1 + dev: true + /glob@10.3.3: resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==} engines: {node: '>=16 || 14 >=14.17'} @@ -10171,6 +10236,13 @@ packages: once: 1.4.0 dev: true + /global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + dependencies: + ini: 4.1.1 + dev: true + /global-dirs@0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} engines: {node: '>=4'} @@ -10368,6 +10440,88 @@ packages: type-fest: 0.8.1 dev: true + /hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + devlop: 1.1.0 + hastscript: 8.0.0 + property-information: 6.4.1 + vfile: 6.0.1 + vfile-location: 5.0.2 + web-namespaces: 2.0.1 + dev: true + + /hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + dependencies: + '@types/hast': 3.0.4 + dev: true + + /hast-util-raw@9.0.2: + resolution: {integrity: sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + '@ungap/structured-clone': 1.2.0 + hast-util-from-parse5: 8.0.1 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.1.0 + parse5: 7.1.2 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: true + + /hast-util-to-html@9.0.0: + resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-raw: 9.0.2 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.1.0 + property-information: 6.4.1 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.3 + zwitch: 2.0.4 + dev: true + + /hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.4.1 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: true + + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + dependencies: + '@types/hast': 3.0.4 + dev: true + + /hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 6.4.1 + space-separated-tokens: 2.0.2 + dev: true + /heap@0.2.7: resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} dev: false @@ -10376,6 +10530,10 @@ packages: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} dev: false + /hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + dev: true + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -10415,6 +10573,10 @@ packages: resolution: {integrity: sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA==} dev: false + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + dev: true + /htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} dependencies: @@ -10602,8 +10764,8 @@ packages: resolve-cwd: 3.0.0 dev: true - /import-meta-resolve@2.2.2: - resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} + /import-meta-resolve@4.0.0: + resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} dev: true /imurmurhash@0.1.4: @@ -10648,6 +10810,11 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dev: true + /ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} @@ -10774,12 +10941,6 @@ packages: hasBin: true dev: true - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - dev: true - /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -10809,14 +10970,6 @@ packages: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} dev: true - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - dependencies: - is-docker: 3.0.0 - dev: true - /is-installed-globally@0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} @@ -11099,6 +11252,15 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + /jake@10.8.7: resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} @@ -11802,12 +11964,25 @@ packages: engines: {node: '>=12.20'} dev: true + /katex@0.16.9: + resolution: {integrity: sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==} + hasBin: true + dependencies: + commander: 8.3.0 + dev: false + /keyv@4.5.3: resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} dependencies: json-buffer: 3.0.1 dev: true + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + /khroma@2.0.0: resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==} dev: false @@ -11920,7 +12095,7 @@ packages: enquirer: 2.4.1 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.3.0 + rfdc: 1.3.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 @@ -11939,7 +12114,7 @@ packages: colorette: 2.0.20 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.3.0 + rfdc: 1.3.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 @@ -12339,6 +12514,20 @@ packages: unist-util-is: 5.2.1 dev: true + /mdast-util-to-hast@13.1.0: + resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + dev: true + /mdast-util-to-markdown@1.5.0: resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} dependencies: @@ -12594,6 +12783,13 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + /micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: true + /micromark-util-chunked@1.1.0: resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: @@ -12628,6 +12824,10 @@ packages: /micromark-util-encode@1.1.0: resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: true + /micromark-util-html-tag-name@1.2.0: resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} @@ -12648,6 +12848,14 @@ packages: micromark-util-encode: 1.1.0 micromark-util-symbol: 1.1.0 + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + dev: true + /micromark-util-subtokenize@1.1.0: resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} dependencies: @@ -12659,9 +12867,17 @@ packages: /micromark-util-symbol@1.1.0: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + dev: true + /micromark-util-types@1.1.0: resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + dev: true + /micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} dependencies: @@ -12789,6 +13005,10 @@ packages: resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} dev: true + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: true + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -12846,12 +13066,6 @@ packages: object-assign: 4.1.1 thenify-all: 1.6.0 - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: false - /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -13142,16 +13356,6 @@ packages: is-wsl: 2.2.0 dev: true - /open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} - dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 - dev: true - /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -13585,29 +13789,29 @@ packages: trouter: 2.0.1 dev: true - /postcss-import@15.1.0(postcss@8.4.31): + /postcss-import@15.1.0(postcss@8.4.33): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.31 + postcss: 8.4.33 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.4 dev: false - /postcss-js@4.0.1(postcss@8.4.31): + /postcss-js@4.0.1(postcss@8.4.33): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.31 + postcss: 8.4.33 dev: false - /postcss-load-config@4.0.1(postcss@8.4.31)(ts-node@10.9.1): + /postcss-load-config@4.0.1(postcss@8.4.33)(ts-node@10.9.1): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -13620,18 +13824,18 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.31 + postcss: 8.4.33 ts-node: 10.9.1(@types/node@20.11.10)(typescript@5.1.6) yaml: 2.3.1 dev: false - /postcss-nested@6.0.1(postcss@8.4.31): + /postcss-nested@6.0.1(postcss@8.4.33): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.31 + postcss: 8.4.33 postcss-selector-parser: 6.0.13 dev: false @@ -13647,23 +13851,6 @@ packages: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: false - /postcss@8.4.27: - resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: false - - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - /postcss@8.4.33: resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} engines: {node: ^10 || ^12 || >=14} @@ -13751,6 +13938,10 @@ packages: sisteransi: 1.0.5 dev: true + /property-information@6.4.1: + resolution: {integrity: sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==} + dev: true + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -14208,8 +14399,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + /rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} dev: true /rimraf@2.7.1: @@ -14234,6 +14425,14 @@ packages: glob: 10.3.3 dev: true + /rimraf@5.0.5: + resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} + engines: {node: '>=14'} + hasBin: true + dependencies: + glob: 10.3.10 + dev: true + /robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} dev: false @@ -14307,13 +14506,6 @@ packages: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: true - /run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} - engines: {node: '>=12'} - dependencies: - execa: 5.1.1 - dev: true - /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -14568,12 +14760,14 @@ packages: vscode-textmate: 8.0.0 dev: true - /shikiji-core@0.10.2: - resolution: {integrity: sha512-9Of8HMlF96usXJHmCL3Gd0Fcf0EcyJUF9m8EoAKKd98mHXi0La2AZl1h6PegSFGtiYcBDK/fLuKbDa1l16r1fA==} + /shiki@1.1.1: + resolution: {integrity: sha512-7ksyiu01NltBvEcLq9GcguF+7RGa5lDwozjgdbiXnlkro1FtMCcrVtHUWbKuYBSOZW74gC4KlnBcgRCwK2ERAw==} + dependencies: + '@shikijs/core': 1.1.1 dev: true - /shikiji-core@0.9.19: - resolution: {integrity: sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw==} + /shikiji-core@0.10.2: + resolution: {integrity: sha512-9Of8HMlF96usXJHmCL3Gd0Fcf0EcyJUF9m8EoAKKd98mHXi0La2AZl1h6PegSFGtiYcBDK/fLuKbDa1l16r1fA==} dev: true /shikiji-transformers@0.10.2: @@ -14582,10 +14776,10 @@ packages: shikiji: 0.10.2 dev: true - /shikiji-transformers@0.9.19: - resolution: {integrity: sha512-lGLI7Z8frQrIBbhZ74/eiJtxMoCQRbpaHEB+gcfvdIy+ZFaAtXncJGnc52932/UET+Y4GyKtwwC/vjWUCp+c/Q==} + /shikiji-transformers@0.7.6: + resolution: {integrity: sha512-yTp+7JMD/aXbV9ndn14eo9IK/UNt8iDsLNyqlOmCtcldlkqWE9T2YKAlOHOTVaeDfYWUWZa2EgSXb/CBfepBrw==} dependencies: - shikiji: 0.9.19 + shikiji: 0.7.6 dev: true /shikiji@0.10.2: @@ -14594,10 +14788,10 @@ packages: shikiji-core: 0.10.2 dev: true - /shikiji@0.9.19: - resolution: {integrity: sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==} + /shikiji@0.7.6: + resolution: {integrity: sha512-KzEtvSGQtBvfwVIB70kOmIfl/5rz1LC8j+tvlHXsJKAIdONNQvG1at7ivUUq3xUctqgO6fsO3AGomUSh0F+wsQ==} dependencies: - shikiji-core: 0.9.19 + hast-util-to-html: 9.0.0 dev: true /side-channel@1.0.4: @@ -14746,6 +14940,10 @@ packages: deprecated: Please use @jridgewell/sourcemap-codec instead dev: true + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: true + /spawn-command@0.0.2-1: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} dev: true @@ -14810,6 +15008,11 @@ packages: - supports-color dev: true + /speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + dev: true + /split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: @@ -14984,6 +15187,13 @@ packages: dependencies: safe-buffer: 5.2.1 + /stringify-entities@4.0.3: + resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + dev: true + /stringify-object@3.3.0: resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} engines: {node: '>=4'} @@ -15115,12 +15325,12 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + /synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/utils': 2.4.2 - tslib: 2.6.1 + '@pkgr/core': 0.1.1 + tslib: 2.6.2 dev: true /tabbable@6.2.0: @@ -15146,11 +15356,11 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.1(postcss@8.4.31)(ts-node@10.9.1) - postcss-nested: 6.0.1(postcss@8.4.31) + postcss: 8.4.33 + postcss-import: 15.1.0(postcss@8.4.33) + postcss-js: 4.0.1(postcss@8.4.33) + postcss-load-config: 4.0.1(postcss@8.4.33)(ts-node@10.9.1) + postcss-nested: 6.0.1(postcss@8.4.33) postcss-selector-parser: 6.0.13 resolve: 1.22.4 sucrase: 3.34.0 @@ -15198,7 +15408,7 @@ packages: iterm2-version: 4.2.0 dev: true - /terser-webpack-plugin@5.3.9(esbuild@0.19.0)(webpack@5.88.2): + /terser-webpack-plugin@5.3.9(esbuild@0.20.0)(webpack@5.88.2): resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -15215,12 +15425,12 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.19 - esbuild: 0.19.0 + esbuild: 0.20.0 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 terser: 5.19.2 - webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack: 5.88.2(esbuild@0.20.0)(webpack-cli@4.10.0) dev: true /terser@5.19.2: @@ -15317,11 +15527,6 @@ packages: engines: {node: '>=14.0.0'} dev: true - /titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} - engines: {node: '>=12'} - dev: true - /tmp@0.2.1: resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} engines: {node: '>=8.17.0'} @@ -15389,6 +15594,10 @@ packages: hasBin: true dev: true + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: true + /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} @@ -15470,6 +15679,10 @@ packages: resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} dev: true + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + /tsutils@3.21.0(typescript@5.0.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -15746,6 +15959,13 @@ packages: crypto-random-string: 2.0.0 dev: true + /unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + dependencies: + crypto-random-string: 4.0.0 + dev: true + /unist-util-flatmap@1.0.0: resolution: {integrity: sha512-IG32jcKJlhARCYT2LsYPJWdoXYkzz3ESAdl1aa2hn9Auh+cgUmU6wgkII4yCc/1GgeWibRdELdCZh/p3QKQ1dQ==} dev: true @@ -15762,6 +15982,18 @@ packages: '@types/unist': 2.0.7 dev: true + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + dependencies: + '@types/unist': 3.0.2 + dev: true + + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + dependencies: + '@types/unist': 3.0.2 + dev: true + /unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} dependencies: @@ -15773,6 +16005,12 @@ packages: dependencies: '@types/unist': 2.0.7 + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + dependencies: + '@types/unist': 3.0.2 + dev: true + /unist-util-visit-parents@5.1.3: resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} dependencies: @@ -15780,6 +16018,13 @@ packages: unist-util-is: 5.2.1 dev: true + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + dev: true + /unist-util-visit@4.1.2: resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} dependencies: @@ -15788,6 +16033,14 @@ packages: unist-util-visit-parents: 5.1.3 dev: true + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: true + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -15803,7 +16056,7 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /unocss@0.58.0(postcss@8.4.33)(rollup@2.79.1)(vite@4.5.0): + /unocss@0.58.0(postcss@8.4.33)(rollup@2.79.1)(vite@4.5.2): resolution: {integrity: sha512-MSPRHxBqWN+1AHGV+J5uUy4//e6ZBK6O+ISzD0qrXcCD/GNtxk1+lYjOK2ltkUiKX539+/KF91vNxzhhwEf+xA==} engines: {node: '>=14'} peerDependencies: @@ -15815,7 +16068,7 @@ packages: vite: optional: true dependencies: - '@unocss/astro': 0.58.0(rollup@2.79.1)(vite@4.5.0) + '@unocss/astro': 0.58.0(rollup@2.79.1)(vite@4.5.2) '@unocss/cli': 0.58.0(rollup@2.79.1) '@unocss/core': 0.58.0 '@unocss/extractor-arbitrary-variants': 0.58.0 @@ -15834,8 +16087,8 @@ packages: '@unocss/transformer-compile-class': 0.58.0 '@unocss/transformer-directives': 0.58.0 '@unocss/transformer-variant-group': 0.58.0 - '@unocss/vite': 0.58.0(rollup@2.79.1)(vite@4.5.0) - vite: 4.5.0(@types/node@20.11.10) + '@unocss/vite': 0.58.0(rollup@2.79.1)(vite@4.5.2) + vite: 4.5.2(@types/node@20.11.10) transitivePeerDependencies: - postcss - rollup @@ -16009,6 +16262,13 @@ packages: extsprintf: 1.3.0 dev: true + /vfile-location@5.0.2: + resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} + dependencies: + '@types/unist': 3.0.2 + vfile: 6.0.1 + dev: true + /vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: @@ -16016,6 +16276,13 @@ packages: unist-util-stringify-position: 3.0.3 dev: true + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 + dev: true + /vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} dependencies: @@ -16025,6 +16292,14 @@ packages: vfile-message: 3.1.4 dev: true + /vfile@6.0.1: + resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + dev: true + /vite-node@0.34.0(@types/node@20.11.10): resolution: {integrity: sha512-rGZMvpb052rjUwJA/a17xMfOibzNF7byMdRSTcN2Lw8uxX08s5EfjWW5mBkm3MSFTPctMSVtT2yC+8ShrZbT5g==} engines: {node: '>=v14.18.0'} @@ -16035,7 +16310,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.5.0(@types/node@20.11.10) + vite: 4.5.2(@types/node@20.11.10) transitivePeerDependencies: - '@types/node' - less @@ -16047,7 +16322,7 @@ packages: - terser dev: true - /vite-plugin-istanbul@4.1.0(vite@4.4.12): + /vite-plugin-istanbul@4.1.0(vite@4.5.2): resolution: {integrity: sha512-d8FRxaswOUYlGqCCNv2BTbt9pyqt7J4RPgab3WmMf+T2TflLlCmC7S26zDRfL9Ve4JSHrcf5bdzt+E0n9CrPvA==} peerDependencies: vite: '>=2.9.1 <= 5' @@ -16056,13 +16331,13 @@ packages: istanbul-lib-instrument: 5.2.1 picocolors: 1.0.0 test-exclude: 6.0.0 - vite: 4.4.12(@types/node@20.11.10) + vite: 4.5.2(@types/node@20.11.10) transitivePeerDependencies: - supports-color dev: true - /vite-plugin-pwa@0.17.0(vite@4.5.0)(workbox-build@7.0.0)(workbox-window@7.0.0): - resolution: {integrity: sha512-cOyEG8EEc7JHmyMapTnjK2j0g2BIC3ErlmOHyGzVu8hqjyF9Jt6yWMmVNFtpA6v/NNyzP28ARf3vwzIAzR1kaw==} + /vite-plugin-pwa@0.17.5(vite@4.5.2)(workbox-build@7.0.0)(workbox-window@7.0.0): + resolution: {integrity: sha512-UxRNPiJBzh4tqU/vc8G2TxmrUTzT6BqvSzhszLk62uKsf+npXdvLxGDz9C675f4BJi6MbD2tPnJhi5txlMzxbQ==} engines: {node: '>=16.0.0'} peerDependencies: vite: ^3.1.0 || ^4.0.0 || ^5.0.0 @@ -16072,15 +16347,15 @@ packages: debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 4.5.0(@types/node@20.11.10) + vite: 4.5.2(@types/node@20.11.10) workbox-build: 7.0.0 workbox-window: 7.0.0 transitivePeerDependencies: - supports-color dev: true - /vite-plugin-pwa@0.17.5(vite@4.5.0)(workbox-build@7.0.0)(workbox-window@7.0.0): - resolution: {integrity: sha512-UxRNPiJBzh4tqU/vc8G2TxmrUTzT6BqvSzhszLk62uKsf+npXdvLxGDz9C675f4BJi6MbD2tPnJhi5txlMzxbQ==} + /vite-plugin-pwa@0.18.1(vite@4.5.2)(workbox-build@7.0.0)(workbox-window@7.0.0): + resolution: {integrity: sha512-2A3BF52l9F8hCkdPy/VP2C+hA+fmBvzJGynCZc9XS6mHTcMvo9046FKc2NqlnkKwTOGtQEwXLEIduML/+eYtdw==} engines: {node: '>=16.0.0'} peerDependencies: vite: ^3.1.0 || ^4.0.0 || ^5.0.0 @@ -16090,51 +16365,15 @@ packages: debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 4.5.0(@types/node@20.11.10) + vite: 4.5.2(@types/node@20.11.10) workbox-build: 7.0.0 workbox-window: 7.0.0 transitivePeerDependencies: - supports-color dev: true - /vite@4.4.12(@types/node@20.11.10): - resolution: {integrity: sha512-KtPlUbWfxzGVul8Nut8Gw2Qe8sBzWY+8QVc5SL8iRFnpnrcoCaNlzO40c1R6hPmcdTwIPEDkq0Y9+27a5tVbdQ==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 20.11.10 - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.28.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vite@4.5.0(@types/node@20.11.10): - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + /vite@4.5.2(@types/node@20.11.10): + resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -16163,7 +16402,7 @@ packages: dependencies: '@types/node': 20.11.10 esbuild: 0.18.20 - postcss: 8.4.31 + postcss: 8.4.33 rollup: 3.28.0 optionalDependencies: fsevents: 2.3.3 @@ -16222,12 +16461,12 @@ packages: vue: 3.4.15(typescript@5.0.4) dev: true - /vitepress@1.0.0-rc.39(@algolia/client-search@4.19.1)(@types/node@20.11.10)(postcss@8.4.33)(search-insights@2.7.0)(typescript@5.1.6): - resolution: {integrity: sha512-EcgoRlAAp37WOxUOYv45oxyhLrcy3Upey+mKpqW3ldsg6Ol4trPndRBk2GO0QiSvEKlb9BMerk49D/bFICN6kg==} + /vitepress@1.0.0-rc.31(@algolia/client-search@4.19.1)(@types/node@20.11.10)(postcss@8.4.33)(search-insights@2.7.0)(typescript@5.1.6): + resolution: {integrity: sha512-ikH9pIjOOAbyoYAGBVfTz8TzuXp+UoWaIRMU4bw/oiTg8R65SbAaGKY84xx6TuL+f4VqUJ8lhzW82YyxSLvstA==} hasBin: true peerDependencies: markdown-it-mathjax3: ^4.3.2 - postcss: ^8.4.33 + postcss: ^8.4.31 peerDependenciesMeta: markdown-it-mathjax3: optional: true @@ -16237,17 +16476,17 @@ packages: '@docsearch/css': 3.5.2 '@docsearch/js': 3.5.2(@algolia/client-search@4.19.1)(search-insights@2.7.0) '@types/markdown-it': 13.0.7 - '@vitejs/plugin-vue': 5.0.3(vite@5.0.12)(vue@3.4.15) + '@vitejs/plugin-vue': 4.6.2(vite@5.0.12)(vue@3.4.15) '@vue/devtools-api': 6.5.1 '@vueuse/core': 10.7.2(vue@3.4.15) '@vueuse/integrations': 10.7.2(focus-trap@7.5.4)(vue@3.4.15) focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 6.3.0 + mrmime: 1.0.1 postcss: 8.4.33 - shikiji: 0.9.19 - shikiji-core: 0.9.19 - shikiji-transformers: 0.9.19 + shikiji: 0.7.6 + shikiji-transformers: 0.7.6 vite: 5.0.12(@types/node@20.11.10) vue: 3.4.15(typescript@5.1.6) transitivePeerDependencies: @@ -16278,7 +16517,7 @@ packages: - universal-cookie dev: true - /vitepress@1.0.0-rc.40(@algolia/client-search@4.19.1)(@types/node@20.11.10)(postcss@8.4.33)(search-insights@2.7.0)(typescript@5.1.6): + /vitepress@1.0.0-rc.40(@algolia/client-search@4.19.1)(@types/node@20.11.10)(search-insights@2.7.0)(typescript@5.0.4): resolution: {integrity: sha512-1x9PCrcsJwqhpccyTR93uD6jpiPDeRC98CBCAQLLBb44a3VSXYBPzhCahi+2kwAYylu49p0XhseMPVM4IVcWcw==} hasBin: true peerDependencies: @@ -16300,12 +16539,11 @@ packages: focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 6.3.0 - postcss: 8.4.33 shikiji: 0.10.2 shikiji-core: 0.10.2 shikiji-transformers: 0.10.2 vite: 5.0.12(@types/node@20.11.10) - vue: 3.4.15(typescript@5.1.6) + vue: 3.4.15(typescript@5.0.4) transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -16334,12 +16572,12 @@ packages: - universal-cookie dev: true - /vitepress@1.0.0-rc.40(@algolia/client-search@4.19.1)(@types/node@20.11.10)(search-insights@2.7.0)(typescript@5.0.4): - resolution: {integrity: sha512-1x9PCrcsJwqhpccyTR93uD6jpiPDeRC98CBCAQLLBb44a3VSXYBPzhCahi+2kwAYylu49p0XhseMPVM4IVcWcw==} + /vitepress@1.0.0-rc.42(@algolia/client-search@4.19.1)(@types/node@20.11.10)(postcss@8.4.33)(search-insights@2.7.0)(typescript@5.1.6): + resolution: {integrity: sha512-VeiVVXFblt/sjruFSJBNChMWwlztMrRMe8UXdNpf4e05mKtTYEY38MF5qoP90KxPTCfMQiKqwEGwXAGuOTK8HQ==} hasBin: true peerDependencies: markdown-it-mathjax3: ^4.3.2 - postcss: ^8.4.33 + postcss: ^8.4.34 peerDependenciesMeta: markdown-it-mathjax3: optional: true @@ -16348,19 +16586,20 @@ packages: dependencies: '@docsearch/css': 3.5.2 '@docsearch/js': 3.5.2(@algolia/client-search@4.19.1)(search-insights@2.7.0) + '@shikijs/core': 1.1.1 + '@shikijs/transformers': 1.1.1 '@types/markdown-it': 13.0.7 '@vitejs/plugin-vue': 5.0.3(vite@5.0.12)(vue@3.4.15) - '@vue/devtools-api': 6.5.1 + '@vue/devtools-api': 7.0.14 '@vueuse/core': 10.7.2(vue@3.4.15) '@vueuse/integrations': 10.7.2(focus-trap@7.5.4)(vue@3.4.15) focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 6.3.0 - shikiji: 0.10.2 - shikiji-core: 0.10.2 - shikiji-transformers: 0.10.2 + postcss: 8.4.33 + shiki: 1.1.1 vite: 5.0.12(@types/node@20.11.10) - vue: 3.4.15(typescript@5.0.4) + vue: 3.4.15(typescript@5.1.6) transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -16443,7 +16682,7 @@ packages: strip-literal: 1.3.0 tinybench: 2.5.0 tinypool: 0.7.0 - vite: 4.5.0(@types/node@20.11.10) + vite: 4.5.2(@types/node@20.11.10) vite-node: 0.34.0(@types/node@20.11.10) why-is-node-running: 2.2.2 transitivePeerDependencies: @@ -16466,6 +16705,10 @@ packages: vscode-uri: 3.0.7 dev: true + /vscode-languageserver-textdocument@1.0.11: + resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} + dev: true + /vscode-languageserver-textdocument@1.0.8: resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==} dev: true @@ -16490,6 +16733,40 @@ packages: resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} dev: true + /vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + dev: true + + /vue-demi@0.13.11(vue@3.4.15): + resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.4.15(typescript@5.1.6) + dev: false + + /vue-demi@0.14.5(vue@3.3.4): + resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.3.4 + dev: false + /vue-demi@0.14.6(vue@3.3.4): resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} engines: {node: '>=12'} @@ -16558,13 +16835,13 @@ packages: '@vue/shared': 3.4.15 typescript: 5.1.6 - /vuex@4.1.0(vue@3.3.4): + /vuex@4.1.0(vue@3.4.15): resolution: {integrity: sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==} peerDependencies: vue: ^3.2.0 dependencies: '@vue/devtools-api': 6.5.1 - vue: 3.3.4 + vue: 3.4.15(typescript@5.1.6) dev: false /w3c-xmlserializer@4.0.0: @@ -16608,13 +16885,17 @@ packages: minimalistic-assert: 1.0.1 dev: true + /web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + dev: true + /web-streams-polyfill@3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} dev: true - /web-worker@1.2.0: - resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} + /web-worker@1.3.0: + resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==} dev: false /webdriver@7.31.1(typescript@5.1.6): @@ -16678,7 +16959,7 @@ packages: import-local: 3.1.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack: 5.88.2(esbuild@0.20.0)(webpack-cli@4.10.0) webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.88.2) webpack-merge: 5.9.0 dev: true @@ -16694,7 +16975,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack: 5.88.2(esbuild@0.20.0)(webpack-cli@4.10.0) dev: true /webpack-dev-server@4.11.1(webpack-cli@4.10.0)(webpack@5.88.2): @@ -16735,7 +17016,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack: 5.88.2(esbuild@0.20.0)(webpack-cli@4.10.0) webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.88.2) webpack-dev-middleware: 5.3.3(webpack@5.88.2) ws: 8.13.0 @@ -16763,7 +17044,7 @@ packages: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} dev: true - /webpack@5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0): + /webpack@5.88.2(esbuild@0.20.0)(webpack-cli@4.10.0): resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -16794,7 +17075,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(esbuild@0.19.0)(webpack@5.88.2) + terser-webpack-plugin: 5.3.9(esbuild@0.20.0)(webpack@5.88.2) watchpack: 2.4.0 webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.88.2) webpack-sources: 3.2.3 @@ -17136,9 +17417,9 @@ packages: optional: true dev: true - /xdg-basedir@4.0.0: - resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} - engines: {node: '>=8'} + /xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} dev: true /xml-name-validator@4.0.0: @@ -17182,6 +17463,11 @@ packages: resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} engines: {node: '>= 14'} + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true + /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} diff --git a/run b/run index 3ea990e122..c25d5b56b4 100755 --- a/run +++ b/run @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash RUN="docker compose run --rm" ansi() { echo -e "\e[${1}m${*:2}\e[0m"; } @@ -6,7 +6,7 @@ bold() { ansi 1 "$@"; } # italic() { ansi 3 "$@"; } underline() { ansi 4 "$@"; } # strikethrough() { ansi 9 "$@"; } -# red() { ansi 31 "$@"; } +red() { ansi 31 "$@"; } name=$(basename $0) command=$1 @@ -38,7 +38,7 @@ cypress) $RUN cypress $args ;; -help) +help|"") # Alignment of help message must be as it is, it will be nice looking when printed usage=$( @@ -72,7 +72,7 @@ $(bold ./$name pnpm) # Run any 'pnpm' command $(bold ./$name sh) # Open 'sh' inside docker container for development __________________________________________________________________________________________ -Examples of frequiently used commands: +Examples of frequently used commands: $(bold ./$name pnpm add --filter mermaid) $(underline package) Add package to mermaid @@ -99,7 +99,10 @@ echo -n -e "$usage" ;; *) -$name help +message="$(red Unknown command: $command). See $(bold ./$name help) for available commands." +echo -n -e "$message\n" >&2 +$0 help +exit 1 ;; esac diff --git a/scripts/editor.bash b/scripts/editor.bash index 8c1d4e2c6e..7f2f01562c 100755 --- a/scripts/editor.bash +++ b/scripts/editor.bash @@ -1,11 +1,13 @@ #!/usr/bin/env bash set -euxo pipefail +export COREPACK_ENABLE_STRICT='0' pushd packages/mermaid # Append commit hash to version jq ".version = .version + \"+${COMMIT_REF:0:7}\"" package.json > package.tmp.json mv package.tmp.json package.json +yarn link popd pnpm run -r clean @@ -20,11 +22,11 @@ cd mermaid-live-editor # We have to use npm instead of yarn because it causes trouble in netlify # Install dependencies -npm install +yarn install # Link local mermaid to live editor -npm link ../packages/mermaid +yarn link mermaid # Force Build the site -npm run build -- --force +yarn run build -- --force diff --git a/scripts/fixCSpell.ts b/scripts/fixCSpell.ts index 1d15e21940..f35a615c29 100644 --- a/scripts/fixCSpell.ts +++ b/scripts/fixCSpell.ts @@ -5,20 +5,31 @@ * (i.e. the root of the Mermaid project). */ -import { readFileSync, writeFileSync } from 'node:fs'; -import prettier from 'prettier'; +import { readFileSync, writeFileSync, readdirSync } from 'node:fs'; +import { join } from 'node:path'; -const filepath = './cSpell.json'; -const cSpell: { words: string[] } = JSON.parse(readFileSync(filepath, 'utf8')); +const cSpellDictionaryDir = './.cspell'; -cSpell.words = [...new Set(cSpell.words.map((word) => word.toLowerCase()))]; -cSpell.words.sort((a, b) => a.localeCompare(b)); +function sortWordsInFile(filepath: string) { + const words = readFileSync(filepath, 'utf8') + .split('\n') + .map((word) => word.trim()) + .filter((word) => word); + words.sort((a, b) => a.localeCompare(b)); -const prettierConfig = prettier.resolveConfig.sync(filepath) ?? {}; -writeFileSync( - filepath, - prettier.format(JSON.stringify(cSpell), { - ...prettierConfig, - filepath, - }) -); + writeFileSync(filepath, words.join('\n') + '\n', 'utf8'); +} + +function findDictionaries() { + const files = readdirSync(cSpellDictionaryDir, { withFileTypes: true }) + .filter((dir) => dir.isFile()) + .filter((dir) => dir.name.endsWith('.txt')); + return files.map((file) => join(cSpellDictionaryDir, file.name)); +} + +function main() { + const files = findDictionaries(); + files.forEach(sortWordsInFile); +} + +main();